11# 核心算法文档
22
33## 1. 算法概述
4+
45### 1.1 算法介绍
6+
57本系统使用遗传算法(Genetic Algorithm, GA)实现智能排课功能。遗传算法是一种模拟自然选择和遗传机制的优化算法,通过不断迭代、进化,寻找最优解或较优解。在排课系统中,遗传算法能够有效处理多约束条件下的复杂排课问题,生成满足各类约束的课程表。
8+
69### 1.2 算法简要逻辑
10+
7111.数据输入阶段
8- 前端提交排课约束条件(课程、教师、教室、时间等)
9- 后端接收并预处理数据,生成排课问题域
12+ - 前端提交排课约束条件(课程、教师、教室、时间等)
13+ - 后端接收并预处理数据,生成排课问题域
10142.种群初始化
11- 随机生成初始种群(多个候选课表)
12- 每个个体表示一种排课方案(教室、教师、时间槽的合法组合)
15+ - 随机生成初始种群(多个候选课表)
16+ - 每个个体表示一种排课方案(教室、教师、时间槽的合法组合)
13173.适应度评估
14- 对每个个体进行约束检测和评分
15- 计算冲突数(如教师时间冲突、教室占用冲突等)
16- 根据冲突情况计算适应度值(冲突越少,适应度越高)
18+ - 对每个个体进行约束检测和评分
19+ - 计算冲突数(如教师时间冲突、教室占用冲突等)
20+ - 根据冲突情况计算适应度值(冲突越少,适应度越高)
17214.迭代优化阶段
18- 选择(Selection)
19- 采用轮盘赌选择法,优先保留高适应度个体
20- 适应度越高的个体被选中的概率越大
21- 交叉(Crossover)
22- 从父代中选择两个个体,交换部分课程安排
23- 生成新的子代个体,保留优质基因
24- 变异(Mutation)
25- 随机调整部分课程的时间或教室分配
26- 引入多样性,避免早熟收敛
22+ - 选择(Selection)
23+ - 采用轮盘赌选择法,优先保留高适应度个体
24+ - 适应度越高的个体被选中的概率越大
25+ - 交叉(Crossover)
26+ - 从父代中选择两个个体,交换部分课程安排
27+ - 生成新的子代个体,保留优质基因
28+ - 变异(Mutation)
29+ - 随机调整部分课程的时间或教室分配
30+ - 引入多样性,避免早熟收敛
27315.结果输出阶段
28- 记录迭代过程中的最优解
29- 最终输出冲突最少的排课方案(适应度最高的)
30- 保存无法避免的冲突
32+ - 记录迭代过程中的最优解
33+ - 最终输出冲突最少的排课方案(适应度最高的)
34+ - 保存无法避免的冲突
3135
3236## 2. 核心组件与数据结构
3337
3438### 2.1 主要数据模型
3539
36- | 数据模型名称 | 数据模型简介 |
37- | ------------------------------- | ----------------------------- |
38- | AutomaticClassSchedulingBaseDTO | 表示后端准备数据结束后生成的算法所需所有数据 |
40+ | 数据模型名称 | 数据模型简介 |
41+ | ------------------------------- | ---------------------------------------------------------- |
42+ | AutomaticClassSchedulingBaseDTO | 表示后端准备数据结束后生成的算法所需所有数据 |
3943| ScheduleDTO | 表示一个完整课程表的解决方案,包含课程安排列表和适应度值。 |
40- | CourseScheduleDTO | 单个课程的排课方案,包含时间槽与课程安排项的映射。 |
41- | CourseScheduleItemDTO | 具体的课程安排项,包含课程、教师、教室、班级等信息。 |
42- | TimeSlotDTO | 时间槽,表示第几周、星期几、第几节课。 |
44+ | CourseScheduleDTO | 单个课程的排课方案,包含时间槽与课程安排项的映射。 |
45+ | CourseScheduleItemDTO | 具体的课程安排项,包含课程、教师、教室、班级等信息。 |
46+ | TimeSlotDTO | 时间槽,表示第几周、星期几、第几节课。 |
4347
4448### 2.2 关键工具类
45- | 工具类名称 | 工具类简介 |
46- | ------------------------- | ----------------------------- |
49+ | 工具类名称 | 工具类简介 |
50+ | ------------------------- | ---------------------------------------------------------- |
4751| ClassroomSelectionUtil | 教室选择工具类,负责根据课程要求和学生人数选择合适的教室。 |
48- | ScheduleFitnessCalculator | 适应度计算工具类,评估课程表的质量。 |
49- | TimeSlotGeneratorUtil | 时间槽生成工具类,生成符合要求的时间安排。 |
50- | CheckConflicts | 冲突检测工具类,检查各种资源冲突。 |
52+ | ScheduleFitnessCalculator | 适应度计算工具类,评估课程表的质量。 |
53+ | TimeSlotGeneratorUtil | 时间槽生成工具类,生成符合要求的时间安排。 |
54+ | CheckConflicts | 冲突检测工具类,检查各种资源冲突。 |
5155### 2.3 算法接口
5256
53- | 接口名称 | 接口简介 |
54- | -------------------------------- | ---------------------------- |
55- | GenerateInitialPopulationService | 初始化种群,根据要求初始化符合要求的种群 |
56- | EvaluatePopulationService | 评估种群,根据要求计算种群的适应度 |
57- | IterateService | 进化迭代,根据要求对各个种群进行选择,交叉与变异 |
57+ | 接口名称 | 接口简介 |
58+ | -------------------------------- | -------------------------------------------------------- |
59+ | GenerateInitialPopulationService | 初始化种群,根据要求初始化符合要求的种群 |
60+ | EvaluatePopulationService | 评估种群,根据要求计算种群的适应度 |
61+ | IterateService | 进化迭代,根据要求对各个种群进行选择,交叉与变异 |
5862| BaseGeneticSchedulingLogic | 基础算法,包括冲突检测,根据排课结果创建返回值保存到数据 |
5963## 3. 算法流程
6064
6165### 3.1 数据准备阶段 (ScheduleLessonsDataPreparationThread)
66+
6267``` mermaid
6368flowchart TD
6469 A[开始] --> B[获取基础数据]
@@ -101,118 +106,115 @@ flowchart TD
101106```
102107
103108### 3.2 遗传算法执行 (AutomaticClassSchedulingThread)
104- ``` mermaid
105109
110+ ``` mermaid
106111flowchart TD
107-
108112 A[初始化种群] --> B[适应度评估]
109-
110113 B --> C{满足终止条件?}
111-
112114 C -->|否| D[选择操作]
113-
114115 D --> E[交叉操作]
115-
116116 E --> F[变异操作]
117-
118117 F --> B
119-
120118 C -->|是| G[获取最优解]
121-
122119 G --> H[冲突检测]
123-
124120 H --> I[保存排课数据]
125-
126121 H --> J[保存冲突数据]
127122
128-
129-
130123 %% 样式定义
131-
132124 style A fill:#2196F3,stroke:#1976D2,color:white
133-
134125 style B fill:#2196F3,stroke:#1976D2,color:white
135-
136126 style D fill:#4CAF50,stroke:#388E3C,color:white
137-
138127 style E fill:#FF9800,stroke:#F57C00,color:white
139-
140128 style F fill:#9C27B0,stroke:#7B1FA2,color:white
141-
142129 style G fill:#607D8B,stroke:#455A64,color:white
143-
144130 style H fill:#607D8B,stroke:#455A64,color:white
145-
146131 style I fill:#4CAF50,stroke:#388E3C,color:white
147-
148132 style J fill:#FF9800,stroke:#F57C00,color:white
149-
150133 %% 决策节点样式
151-
152134 style C fill:#FFF8E1,stroke:#FFC107,color:#333,font-weight:bold
153-
154135 %% 全局设置
155-
156136 classDef default font-size:12px
157-
158137```
159138
160139## 4. 关键算法实现
140+
161141### 4.1 种群初始化(GenerateInitialPopulationService)
142+
162143通过基础数据,对需要排课的每一门课进行初次随机分配:
144+
163145- 优先对每一门课进行分班处理,由于可能存在一门课的人数过多,若未限定行政班,算法将会根据人数进行分配,最小为30人一个教学班,最大为120人分配教学班,如果超过120人则进行随机分配班级,始终保持教学班人数为30-120人之间;若限定行政班级,算法将会优先按照专业一样的班级进行分班,专业一样的班级优先为一个教学班,若人数少于或超过则进行二次分班,始终保持由行政把你组成教学班人数为30-120人之间。
164146- (ClassroomSelectionUtil) 为每一个教学班级随机分配一个符合要求的教室,符合人数大小(教室容量大于教学班人数)的,符合课程安排的教室,若基础数据为没有符合的教室,则会优先分配一个人数尽可能符合的教室,若还不存在,则随机分配一个人数尽可能符合的教室,保证每一个教学班都有教室上课。
165147- 为每一个教学班级随机分配一个老师,根据基础数据获取符合有教学资格的老师(必定存在),通过随机数的分配,随机选择一个老师为这一个教学班级进行上课。
166148- 以上数据会被存到CourseScheduleItemDTO中作为这门课的基础信息。
167149- (TimeSlotGeneratorUtil)为每一教学班级分配上课时间槽,根据基础数据中周学时来为课程分配时间槽,根据周学时来自动分配每周上课时间槽,在周学时为奇数的情况下,系统会自动生成单双周补课时间槽(由用户定义单双周),在此基础上生成时间槽列表,存放到CourseScheduleDTO组成一门课程安排。
168150
169151### 4.2 种群评估 (EvaluatePopulationService)
152+
170153评估每个课程表解决方案的适应度,主要考虑因素包括:
154+
171155#### 4.2.1 冲突检测:
172- 教师冲突检测:检查同一教师在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
173- 教室冲突检测:检查同一教室在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
174- 班级冲突检测:检查同一班级在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
156+
157+ 1 . 教师冲突检测:检查同一教师在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
158+ 2. 教室冲突检测:检查同一教室在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
159+ 3. 班级冲突检测:检查同一班级在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
160+
175161#### 4.2.2 时间偏好评估
176- 偏好时间段匹配:课程被安排在教师/班级的偏好时间段时,每节课+10分
177- 非偏好时间段惩罚:课程被安排在教师/班级的非偏好时间段时:
178- 晚上但不期望晚课:每节课-5分
179- 早上但不期望早课:每节课-3分
162+
163+ 1 . 偏好时间段匹配:课程被安排在教师/班级的偏好时间段时,每节课+10分
164+ 2 . 非偏好时间段惩罚:课程被安排在教师/班级的非偏好时间段时:
165+ 1 . 晚上但不期望晚课:每节课-5分
166+ 2 . 早上但不期望早课:每节课-3分
167+
180168#### 4.2.3 连续课程优化
181- 连续课程奖励:对同一班级连续安排2节以上相同课程时,每组连续课程给予(课程数-1)5分的奖励
182- 合理间隔检查:理论课与实践课之间至少间隔1天,不符合要求每处-5分
169+
170+ 1 . 连续课程奖励:对同一班级连续安排2节以上相同课程时,每组连续课程给予(课程数-1)5分的奖励
171+ 2 . 合理间隔检查:理论课与实践课之间至少间隔1天,不符合要求每处 -5 分
172+ 3 .
183173#### 4.2.4 教室资源优化
184- 容量匹配度:计算教室容量利用率:
185- 70%-90%:+5分
186- 90%:+10分
187- 低于70%:-5分
188- 教室类型匹配:
189- 匹配课程需求(如实验室对应实验课):+10分
190- 不匹配:-5分
174+
175+ 1 . 容量匹配度:计算教室容量利用率:
176+ - 70%-90%:+5分
177+ - 90%:+10分
178+ - 低于70%:-5分
179+ 2 . 教室类型匹配:
180+ - 匹配课程需求(如实验室对应实验课):+10分
181+ - 不匹配:-5分
182+
191183#### 4.2.5 教师偏好满足
192- 根据教师对时间槽的偏好级别进行评分:
193- 非常期望的时间段:+10分/节课
194- 较期望的时间段:+5分/节课
195- 可接受的时间段:+0分
196- 尽量避免的时间段:-5分/节课
197- 最不期望的时间段:-10分/节课
184+
185+ 根据教师对时间槽的偏好级别进行评分:
186+
187+ - 非常期望的时间段:+10分/节课
188+ - 较期望的时间段:+5分/节课
189+ - 可接受的时间段:+0分
190+ - 尽量避免的时间段:-5分/节课
191+ - 最不期望的时间段:-10分/节课
192+
198193### 4.2.6 适应度公式
199- 适应度 = 基准分(1000)
200- - (教师冲突数 × 100)
201- - (教室冲突数 × 100)
202- - (班级冲突数 × 100)
203- + (偏好时间段匹配数 × 10)
204- - (非偏好晚课数 × 5)
205- - (非偏好早课数 × 3)
206- + (连续课程组数 × (课程数-1) × 5)
207- - (不合理间隔数 × 5)
208- + Σ教室容量加分(按利用率区间)
209- + Σ教室类型匹配分(+10或-5)
210- + Σ教师偏好分(按偏好级别)
194+
195+ ```
196+ 适应度 = 基准分(1000)
197+ - (教师冲突数 × 100)
198+ - (教室冲突数 × 100)
199+ - (班级冲突数 × 100)
200+ + (偏好时间段匹配数 × 10)
201+ - (非偏好晚课数 × 5)
202+ - (非偏好早课数 × 3)
203+ + (连续课程组数 × (课程数-1) × 5)
204+ - (不合理间隔数 × 5)
205+ + Σ教室容量加分(按利用率区间)
206+ + Σ教室类型匹配分(+10或-5)
207+ + Σ教师偏好分(按偏好级别)
208+ ```
209+
211210### 4.3 选择、交叉与变异 (IterateService)
211+
212212- ** 选择操作** :使用轮盘赌选择法,适应度高的个体有更大概率被选中。
213213- ** 交叉操作** :将两个父代解决方案的部分课程安排进行交换,生成新的解决方案。
214214- ** 变异操作** :随机改变部分课程的时间槽或教室分配,以增加种群多样性。
215+
215216### 4.4 冲突检测 (BaseGeneticSchedulingLogic)
217+
216218- ** 时间冲突检测** :检查相同时间槽是否有资源冲突。
217219- ** 教师冲突** :同一教师不能同时出现在不同地点授课。
218220- ** 教室冲突** :同一教室不能同时安排多门课程。
@@ -221,16 +223,20 @@ flowchart TD
221223## 5. 算法优化策略
222224
223225### 5.1 三种排课策略
226+
224227系统提供三种排课策略,通过调整算法参数实现不同的优化目标:
228+
225229- ** 优化策略** :种群大小200,最大迭代次数1000,交叉率0.8,变异率0.1。
226- 注重排课质量,生成最优解,但耗时较长。
230+ - 注重排课质量,生成最优解,但耗时较长。
227231- ** 平衡策略** :种群大小100,最大迭代次数500,交叉率0.7,变异率0.2。
228- 在时间和质量之间取得平衡。
232+ - 在时间和质量之间取得平衡。
229233- ** 快速策略** :种群大小50,最大迭代次数200,交叉率0.6,变异率0.3。
230- 快速生成可接受的解决方案,适合临时排课。
234+ - 快速生成可接受的解决方案,适合临时排课。
231235
232236### 5.2 多约束条件优化
237+
233238系统支持多种约束条件的组合优化:
239+
234240- ** 教师偏好考虑** :尊重教师的时间偏好设置。
235241- ** 教室优化** :合理分配教室资源,提高利用率。
236242- ** 学生冲突避免** :避免同一班级在同一时间段有多门课程。
@@ -239,22 +245,31 @@ flowchart TD
239245- ** 时间槽单双周分配** : 根据奇数周学时自动分配单双周补课
240246
241247## 6 算法输出与结果处理
248+
242249### 6.1 排课结果
250+
243251系统生成的排课结果包含:
252+
244253- ** 课程安排列表** :详细的课程安排信息,包括课程、教师、教室、时间等。
245254- ** 冲突信息** :如果存在无法避免的冲突,会记录冲突详情。
246255- ** 资源利用率** :包括教室利用率、教师工作量分布、时间槽使用率等。
256+
247257### 6.2 数据持久化
258+
248259- 将排课结果保存到数据库中的课程安排表和教学班表。
249260- 记录排课过程中的冲突情况,便于管理员后续处理。
250261- 临时保存排课结果到Redis缓存,支持查看,便于用户查看结果
262+
251263## 7. 算法优势与特点
264+
2522651 . ** 多约束条件支持** :同时处理教师、教室、班级等多种资源约束。
2532662 . ** 灵活的策略选择** :提供多种排课策略,满足不同场景需求。
2542673 . ** 教室资源优化** :根据课程类型和学生人数智能分配教室。
2552684 . ** 冲突处理机制** :识别并记录无法避免的冲突,辅助人工决策。
2562695 . ** 时间偏好支持** :考虑教师和管理员的时间偏好设置。
2572706 . ** 连续课程优化** :优先安排连续课程,提高教学效果和资源利用率。
2582717 . ** 单双周排课** :支持单周、双周排课的特殊情况处理。
272+
259273## 8. 结论
260- 遗传算法在智能排课系统中的应用,有效解决了高校排课中的复杂约束问题。通过模拟自然选择和遗传机制,系统能够在合理时间内生成满足多种约束条件的课程表,大幅提高排课效率和质量。系统的多策略支持和灵活配置,使其能够适应不同院校、不同场景的排课需求。
274+
275+ 遗传算法在智能排课系统中的应用,有效解决了高校排课中的复杂约束问题。通过模拟自然选择和遗传机制,系统能够在合理时间内生成满足多种约束条件的课程表,大幅提高排课效率和质量。系统的多策略支持和灵活配置,使其能够适应不同院校、不同场景的排课需求。
0 commit comments