基于遗传学算法的排课探索实验
首先模拟了每个班级为: 张三语文(12)、李四数学(12)、王五英语(12)、赵六物理(10)、孙琪化学(9)、李八生物(9)、郑久体育(2) 对2个班级的排课,一周6天,上午4 下午4 晚上3 的一个课程安排
适应度暂时设置了下面4点
1、设置了适应度条件2节课连续上,且不能4节连上(张三语文、李四数学、王五英语、赵六物理、孙琪化学、李八生物)
2、老师每天的一个工作量
3、老师时间冲突
4、班级时间冲突
首选初始化了100个种群,种群迭代100代,交叉算子(0.9)变异算子(0.8)并通过退火算法选择种群适应度交换逻辑(这里只处理了个体优异差异非全局,怕影响性能)
通过代码基础逻辑用控制台输出迭代种群适配都可以看到适配的 190 上升 到 610 的上升趋势(部分细微降低还是局部个体最优造成),当计算到52代时候基本就固定了
通过上面的迭代遗传计算,最后得到的还是比较适宜的结果,输出班级课表如下:
第二次执行:为了验证结果,重新执行了代码看了下种群的适应度保持在了 606 ,与第一次差异不大
接下来在执行第三次查看种群的最佳适应度达到 638
通过上述设定,为了防止不必要的执行和重新执行,设置一个终止条件(比如多少代种群没有进化度)重新择优开始继续迭代,已便达到最接近的最大种群适应度的解
其实结果还是有问题的,比如体育排到了晚上(可以设置禁忌条件(硬性条件) 适配度(软性条件)),如果通过设置禁忌条件来筛选次优解,但是这样的出来的最优解差距偏离比较大,最好还是通过设置种群适配来处理
下面通过增加种群是适应度调整 可以看到下面的结果,这里变异算子被去掉了,课程全部都是填满的,变异和交叉区别没有意义,这里设置了禁忌处理,最终适应度也达到630,禁忌取到的最有适配度也是630,
体育课不存在晚上了,适应度高
接下来我用红色颜色来表示下 老师时间冲突的情况,监控下整个种群的变化情况
初始化种群的输出,可以看到 标记还是比较多的
第一代:
第三代:
第14代:
第19代以后基本不出现老师冲突了,这里显示大概罗列下图
通过上面 随着适应度增加,各种预植的条件都得到了满足,当然现在的条件还不够,比如可以更大的教师条件,以及设置更多的课程来增加种群的数量,计算性能可能没这么快了
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
本文版权归作者和博客园共有,来源网址:http://www.cnblogs.com/liyouming欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接。