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的排列,及对应一周五天的排课情况。

Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?_第1张图片

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次。

Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?_第2张图片

2、每天统计相邻的同种类型课程情况统计和特殊课程之间相邻的情况,若都等于0,则选排课课成功,

     否则将统计次数乘以1000进行约束。

Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?_第3张图片

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

Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?_第4张图片

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

Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?_第5张图片

温馨提示:源码是本人亲自编写完成,经过测试结果正确无误,其他约束也可以加入考虑。源码感兴趣的朋友欢迎加qq 2545724522 互相学习交流进步,谢谢!

你可能感兴趣的:(Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学),求可行方案?)