分类 技术方案 下的文章

CSP+启发式*算法:(约束满足问题) 用于生成满足硬约束的初始解

1. 数据初始化

  1. 科学需求收集:收集每个班级需要上的课程和对应课时数
  2. 教师任务分配:将每个教师需要教授的课程、班级和课时数整理成任务列表
  3. 初始化空课表

    1. 初始化一个三维数组,第一维:周次,第二维:节次,第三维:班级
    2. 数组中每个元素初始值设置为0
    3. 在后续的算法中,这些位置会被填充为对应的课程 ID
  4. 教师工作量优先级:对教师授课课时数进行排序,工作量大的教师优先安排

    1. 这是CSP(约束满足问题)算法中常用的启发式策略之一
    2. 这样可以减少后期冲突
    3. 解释了为什么体育课排在第一节的频率比较高
  5. 设置课程优先时间槽:课程可以安排在哪些节次上

    1. 主课程语数英优先安排在上午
    2. 体育课不安排在中午
    3. 没有设置优先级的课程可分配在任何时间
    4. 如果课程根据优先级未能完全安排,尝试其他时间槽
  6. 避免冲突核心实现:每次安排课程时都会检查:

    1. 该班级在这个时间段是否已有课程
    2. 该教师在这个时间段是否已在其他班级上课
  7. 排课

    1. 把课程id赋值给以周次、节次、班级为三维数组的课表
    2. 保证课程数量

GA遗传算法: 用于优化CSP初始解,使其更好地满足软约束

  1. 初始化种群:

    1. 使用CSP算法生成一个满足硬约束的初始解,然后通过对该解进行多次随机变异来生成初始种群中的其他个体,确保种群多样性
  2. 适应度:适应度函数评估每个课表方案的质量,考虑了多种约束条件:

    1. 硬约束(教师冲突、课程数量)有较大惩罚权重
    2. 软约束(不合理时间槽、课程分布不均、连续相同课程)有较小惩罚权重
  3. 选择:

    1. 精英选择:保留适应度最高的 elite_size 个个体直接进入下一代,确保最优解不会丢失
    2. 父代选择:使用轮盘赌方法选择父代,适应度越高的个体被选中的概率越大,但低适应度个体仍有机会被选中,保持种群多样性
  4. 交叉:

    1. 交叉操作按班级进行,对每个班级有50%的概率交换两个父代的课表,生成两个新的子代
    2. 通过组合父代个体的优良基因,生成兼具双方优势的新解,从而在解空间中高效探索更优区域
  5. 变异:

    1. 变异操作以 mutation_rate 的概率随机选择一个班级,然后随机交换该班级的两个课程时间槽,增加种群多样性
    2. 变异是遗传算法中增加种群多样性的重要机制,防止算法陷入局部最优解

交叉 vs. 变异的协同作用

操作目的优点缺点
交叉重组优质基因高效、方向性强依赖种群多样性
变异引入随机性避免早熟收敛改进速度慢