Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?
1、要排课的课程有9门,分别给与编码1,2,3,4,5,6,7,8,9。对应的一周上课次数如下所示:
| 课程名 | 编码 | 一周上几次 |
| Chinese | 1 | 3 |
| English | 2 | 3 |
| Math | 3 | 3 |
| Science | 4 | 3 |
| Social | 5 | 2 |
| Steam | 6 | 2 |
| PE | 7 | 2 |
| 选修1 | 8 | 1 |
| 选修2 | 9 | 1 |
2、一周五天上课,每天上午上2节,下午上2节,一共上20节课。将9门课按照顺序给与上课的编码1~20,结果如下所示:
| 上课编码 | 课程名 |
| 1 | Chinese |
| 2 | Chinese |
| 3 | Chinese |
| 4 | English |
| 5 | English |
| 6 | English |
| 7 | Math |
| 8 | Math |
| 9 | Math |
| 10 | Science |
| 11 | Science |
| 12 | Science |
| 13 | Social |
| 14 | Social |
| 15 | Steam |
| 16 | Steam |
| 17 | PE |
| 18 | PE |
| 19 | 选修1 |
| 20 | 选修2 |
3、染色体编码:随机生成1~20的排列,及对应一周五天的排课情况。

4 3 19 10 9 8 11 15 20 2 1 7 17 14 13 16 5 6 18 12
3 11 19 17 8 18 9 2 10 16 20 5 13 7 12 4 15 1 14 6
4 1 17 20 3 11 7 5 6 19 12 8 10 15 18 9 16 2 13 14
3 18 12 8 15 7 4 2 16 6 14 1 20 17 5 19 11 10 13 9
20 14 10 6 3 19 16 9 4 11 18 15 12 1 5 2 17 8 7 13
2、计算总代价,适应度值取总代价的倒数。
考虑以下两种约束:
1、一天中同一门课上课次数不超过2次。

2、每天统计相邻的同种类型课程情况统计和特殊课程之间相邻的情况,若都等于0,则选排课课成功,
否则将统计次数乘以1000进行约束。

3、一旦排课成功后就记录对应的染色体序列到Result中,将Result 变成全局变量,全局不断更新其内容。
![]()

4、将Result中结果复制到excel中,解码成对应的课程名,并编制不同方案的课程表,结果如下所示。

温馨提示:源码是本人亲自编写完成,经过测试结果正确无误,其他约束也可以加入考虑。源码感兴趣的朋友欢迎加qq 2545724522 互相学习交流进步,谢谢!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)