|
7 | 7 |
|
8 | 8 | ### 1.2 算法简要逻辑 |
9 | 9 |
|
10 | | -<<<<<<< HEAD |
11 | 10 | 1. **数据输入阶段** |
12 | 11 |
|
13 | 12 | - 前端提交排课约束条件(课程、教师、教室、时间等) |
|
41 | 40 | - 记录迭代过程中的最优解 |
42 | 41 | - 最终输出冲突最少的排课方案(适应度最高的) |
43 | 42 | - 保存无法避免的冲突 |
44 | | -======= |
45 | | -1. 数据输入阶段 |
46 | | - - 前端提交排课约束条件(课程、教师、教室、时间等) |
47 | | - - 后端接收并预处理数据,生成排课问题域 |
48 | | -2. 种群初始化 |
49 | | - - 随机生成初始种群(多个候选课表) |
50 | | - - 每个个体表示一种排课方案(教室、教师、时间槽的合法组合) |
51 | | -3. 适应度评估 |
52 | | - - 对每个个体进行约束检测和评分 |
53 | | - - 计算冲突数(如教师时间冲突、教室占用冲突等) |
54 | | - - 根据冲突情况计算适应度值(冲突越少,适应度越高) |
55 | | -4. 迭代优化阶段 |
56 | | - - 选择(Selection) |
57 | | - - 采用轮盘赌选择法,优先保留高适应度个体 |
58 | | - - 适应度越高的个体被选中的概率越大 |
59 | | - - 交叉(Crossover) |
60 | | - - 从父代中选择两个个体,交换部分课程安排 |
61 | | - - 生成新的子代个体,保留优质基因 |
62 | | - - 变异(Mutation) |
63 | | - - 随机调整部分课程的时间或教室分配 |
64 | | - - 引入多样性,避免早熟收敛 |
65 | | -5. 结果输出阶段 |
66 | | - - 记录迭代过程中的最优解 |
67 | | - - 最终输出冲突最少的排课方案(适应度最高的) |
68 | | - - 保存无法避免的冲突 |
69 | | ->>>>>>> a0ac576bfc02bffdc7c763491dc44dae866af0b6 |
70 | 43 |
|
71 | 44 | ## 2. 核心组件与数据结构 |
72 | 45 |
|
|
81 | 54 | | TimeSlotDTO | 时间槽,表示第几周、星期几、第几节课。 | |
82 | 55 |
|
83 | 56 | ### 2.2 关键工具类 |
84 | | -<<<<<<< HEAD |
85 | 57 |
|
86 | 58 | | 工具类名称 | 工具类简介 | |
87 | 59 | | ------------------------- | ----------------------------- | |
|
90 | 62 | | TimeSlotGeneratorUtil | 时间槽生成工具类,生成符合要求的时间安排。 | |
91 | 63 | | CheckConflicts | 冲突检测工具类,检查各种资源冲突。 | |
92 | 64 |
|
93 | | -======= |
94 | | -| 工具类名称 | 工具类简介 | |
95 | | -| ------------------------- | ---------------------------------------------------------- | |
96 | | -| ClassroomSelectionUtil | 教室选择工具类,负责根据课程要求和学生人数选择合适的教室。 | |
97 | | -| ScheduleFitnessCalculator | 适应度计算工具类,评估课程表的质量。 | |
98 | | -| TimeSlotGeneratorUtil | 时间槽生成工具类,生成符合要求的时间安排。 | |
99 | | -| CheckConflicts | 冲突检测工具类,检查各种资源冲突。 | |
100 | | ->>>>>>> a0ac576bfc02bffdc7c763491dc44dae866af0b6 |
101 | 65 | ### 2.3 算法接口 |
102 | 66 |
|
103 | 67 | | 接口名称 | 接口简介 | |
@@ -259,66 +223,6 @@ flowchart TD |
259 | 223 | + Σ教室容量加分(按利用率区间) |
260 | 224 | + Σ教室类型匹配分(+10或-5) |
261 | 225 | + Σ教师偏好分(按偏好级别) |
262 | | -======= |
263 | | -### 4.2 种群评估 (EvaluatePopulationService) |
264 | | - |
265 | | -评估每个课程表解决方案的适应度,主要考虑因素包括: |
266 | | - |
267 | | -#### 4.2.1 冲突检测: |
268 | | - |
269 | | -1. 教师冲突检测:检查同一教师在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚 |
270 | | -2. 教室冲突检测:检查同一教室在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚 |
271 | | -3. 班级冲突检测:检查同一班级在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚 |
272 | | - |
273 | | -#### 4.2.2 时间偏好评估 |
274 | | - |
275 | | -1. 偏好时间段匹配:课程被安排在教师/班级的偏好时间段时,每节课+10分 |
276 | | -2. 非偏好时间段惩罚:课程被安排在教师/班级的非偏好时间段时: |
277 | | - 1. 晚上但不期望晚课:每节课-5分 |
278 | | - 2. 早上但不期望早课:每节课-3分 |
279 | | - |
280 | | -#### 4.2.3 连续课程优化 |
281 | | - |
282 | | -1. 连续课程奖励:对同一班级连续安排2节以上相同课程时,每组连续课程给予(课程数-1)5分的奖励 |
283 | | -2. 合理间隔检查:理论课与实践课之间至少间隔1天,不符合要求每处 -5 分 |
284 | | -3. |
285 | | -#### 4.2.4 教室资源优化 |
286 | | - |
287 | | -1. 容量匹配度:计算教室容量利用率: |
288 | | - - 70%-90%:+5分 |
289 | | - - 90%:+10分 |
290 | | - - 低于70%:-5分 |
291 | | -2. 教室类型匹配: |
292 | | - - 匹配课程需求(如实验室对应实验课):+10分 |
293 | | - - 不匹配:-5分 |
294 | | - |
295 | | -#### 4.2.5 教师偏好满足 |
296 | | - |
297 | | -根据教师对时间槽的偏好级别进行评分: |
298 | | - |
299 | | -- 非常期望的时间段:+10分/节课 |
300 | | -- 较期望的时间段:+5分/节课 |
301 | | -- 可接受的时间段:+0分 |
302 | | -- 尽量避免的时间段:-5分/节课 |
303 | | -- 最不期望的时间段:-10分/节课 |
304 | | - |
305 | | -### 4.2.6 适应度公式 |
306 | | - |
307 | | -``` |
308 | | -适应度 = 基准分(1000) |
309 | | - - (教师冲突数 × 100) |
310 | | - - (教室冲突数 × 100) |
311 | | - - (班级冲突数 × 100) |
312 | | - + (偏好时间段匹配数 × 10) |
313 | | - - (非偏好晚课数 × 5) |
314 | | - - (非偏好早课数 × 3) |
315 | | - + (连续课程组数 × (课程数-1) × 5) |
316 | | - - (不合理间隔数 × 5) |
317 | | - + Σ教室容量加分(按利用率区间) |
318 | | - + Σ教室类型匹配分(+10或-5) |
319 | | - + Σ教师偏好分(按偏好级别) |
320 | | -``` |
321 | | ->>>>>>> a0ac576bfc02bffdc7c763491dc44dae866af0b6 |
322 | 226 |
|
323 | 227 | ### 4.3 选择、交叉与变异 (IterateService) |
324 | 228 |
|
|
482 | 386 |
|
483 | 387 | ## 7.算法输出结果 |
484 | 388 |
|
485 | | -### 7.1 排课结果 |
486 | | - |
487 | | -<<<<<<< HEAD |
488 | | -======= |
489 | | -## 6 算法输出与结果处理 |
490 | | - |
491 | | -### 6.1 排课结果 |
492 | | - |
493 | | ->>>>>>> a0ac576bfc02bffdc7c763491dc44dae866af0b6 |
494 | | -系统生成的排课结果包含: |
| 389 | +### 7.1 排课结果 |
495 | 390 |
|
496 | 391 | - **课程安排列表**:详细的课程安排信息,包括课程、教师、教室、时间等。 |
497 | 392 | - **冲突信息**:如果存在无法避免的冲突,会记录冲突详情。 |
498 | 393 | - **资源利用率**:包括教室利用率、教师工作量分布、时间槽使用率等。 |
499 | 394 |
|
500 | | -<<<<<<< HEAD |
501 | 395 | ### 7.2 数据持久化 |
502 | | -======= |
503 | | -### 6.2 数据持久化 |
504 | | ->>>>>>> a0ac576bfc02bffdc7c763491dc44dae866af0b6 |
505 | 396 |
|
506 | 397 | - 将排课结果保存到数据库中的课程安排表和教学班表。 |
507 | 398 | - 记录排课过程中的冲突情况,便于管理员后续处理。 |
508 | 399 | - 临时保存排课结果到Redis缓存,支持查看,便于用户查看结果 |
509 | | -<<<<<<< HEAD |
510 | | -## 8. 算法优势与特点 |
511 | | -======= |
512 | 400 |
|
513 | | -## 7. 算法优势与特点 |
514 | | ->>>>>>> a0ac576bfc02bffdc7c763491dc44dae866af0b6 |
| 401 | +## 8. 算法优势与特点 |
515 | 402 |
|
516 | 403 | 1. **多约束条件支持**:同时处理教师、教室、班级等多种资源约束。 |
517 | 404 | 2. **灵活的策略选择**:提供多种排课策略,满足不同场景需求。 |
|
0 commit comments