88
99### 1.2 算法简要逻辑
1010
11- 1. 数据输入阶段
11+ 1 . 数据输入阶段
1212 - 前端提交排课约束条件(课程、教师、教室、时间等)
1313 - 后端接收并预处理数据,生成排课问题域
14- 2. 种群初始化
14+ 2 . 种群初始化
1515 - 随机生成初始种群(多个候选课表)
1616 - 每个个体表示一种排课方案(教室、教师、时间槽的合法组合)
17- 3. 适应度评估
17+ 3 . 适应度评估
1818 - 对每个个体进行约束检测和评分
1919 - 计算冲突数(如教师时间冲突、教室占用冲突等)
2020 - 根据冲突情况计算适应度值(冲突越少,适应度越高)
21- 4. 迭代优化阶段
22- - 选择(Selection)
21+ 4 . 迭代优化阶段
22+ - 选择(Selection)
2323 - 采用轮盘赌选择法,优先保留高适应度个体
2424 - 适应度越高的个体被选中的概率越大
25- - 交叉(Crossover)
25+ - 交叉(Crossover)
2626 - 从父代中选择两个个体,交换部分课程安排
2727 - 生成新的子代个体,保留优质基因
28- - 变异(Mutation)
28+ - 变异(Mutation)
2929 - 随机调整部分课程的时间或教室分配
3030 - 引入多样性,避免早熟收敛
31- 5. 结果输出阶段
31+ 5 . 结果输出阶段
3232 - 记录迭代过程中的最优解
3333 - 最终输出冲突最少的排课方案(适应度最高的)
3434 - 保存无法避免的冲突
@@ -109,31 +109,31 @@ flowchart TD
109109
110110``` mermaid
111111flowchart TD
112- A[初始化种群] --> B[适应度评估]
113- B --> C{满足终止条件?}
114- C -->|否| D[选择操作]
115- D --> E[交叉操作]
116- E --> F[变异操作]
117- F --> B
118- C -->|是| G[获取最优解]
119- G --> H[冲突检测]
120- H --> I[保存排课数据]
121- H --> J[保存冲突数据]
122-
123- %% 样式定义
124- style A fill:#2196F3,stroke:#1976D2,color:white
125- style B fill:#2196F3,stroke:#1976D2,color:white
126- style D fill:#4CAF50,stroke:#388E3C,color:white
127- style E fill:#FF9800,stroke:#F57C00,color:white
128- style F fill:#9C27B0,stroke:#7B1FA2,color:white
129- style G fill:#607D8B,stroke:#455A64,color:white
130- style H fill:#607D8B,stroke:#455A64,color:white
131- style I fill:#4CAF50,stroke:#388E3C,color:white
132- style J fill:#FF9800,stroke:#F57C00,color:white
133- %% 决策节点样式
134- style C fill:#FFF8E1,stroke:#FFC107,color:#333,font-weight:bold
135- %% 全局设置
136- classDef default font-size:12px
112+ A[初始化种群] --> B[适应度评估]
113+ B --> C{满足终止条件?}
114+ C -->|否| D[选择操作]
115+ D --> E[交叉操作]
116+ E --> F[变异操作]
117+ F --> B
118+ C -->|是| G[获取最优解]
119+ G --> H[冲突检测]
120+ H --> I[保存排课数据]
121+ H --> J[保存冲突数据]
122+
123+ %% 样式定义
124+ style A fill:#2196F3,stroke:#1976D2,color:white
125+ style B fill:#2196F3,stroke:#1976D2,color:white
126+ style D fill:#4CAF50,stroke:#388E3C,color:white
127+ style E fill:#FF9800,stroke:#F57C00,color:white
128+ style F fill:#9C27B0,stroke:#7B1FA2,color:white
129+ style G fill:#607D8B,stroke:#455A64,color:white
130+ style H fill:#607D8B,stroke:#455A64,color:white
131+ style I fill:#4CAF50,stroke:#388E3C,color:white
132+ style J fill:#FF9800,stroke:#F57C00,color:white
133+ %% 决策节点样式
134+ style C fill:#FFF8E1,stroke:#FFC107,color:#333,font-weight:bold
135+ %% 全局设置
136+ classDef default font-size:12px
137137```
138138
139139## 4. 关键算法实现
@@ -154,9 +154,9 @@ flowchart TD
154154
155155#### 4.2.1 冲突检测:
156156
157- 1 . 教师冲突检测:检查同一教师在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
158- 2. 教室冲突检测:检查同一教室在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
159- 3. 班级冲突检测:检查同一班级在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
157+ 1 . 教师冲突检测:检查同一教师在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
158+ 2 . 教室冲突检测:检查同一教室在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
159+ 3 . 班级冲突检测:检查同一班级在同一时间是否被分配多个课程,每发现一处冲突给予100分惩罚
160160
161161#### 4.2.2 时间偏好评估
162162
@@ -167,8 +167,8 @@ flowchart TD
167167
168168#### 4.2.3 连续课程优化
169169
170- 1 . 连续课程奖励:对同一班级连续安排2节以上相同课程时,每组连续课程给予(课程数-1)5分的奖励
171- 2 . 合理间隔检查:理论课与实践课之间至少间隔1天,不符合要求每处 -5 分
170+ 1 . 连续课程奖励:对同一班级连续安排2节以上相同课程时,每组连续课程给予(课程数-1)5分的奖励
171+ 2 . 合理间隔检查:理论课与实践课之间至少间隔1天,不符合要求每处 -5 分
1721723 .
173173#### 4.2.4 教室资源优化
174174
0 commit comments