今天乐乐来给大家分享一些关于遗传算法程序代码方面的知识吧,希望大家会喜欢哦
python遗传算法库实现排序 遗传算法程序代码
python遗传算法库实现排序 遗传算法程序代码
python遗传算法库实现排序 遗传算法程序代码
python遗传算法库实现排序 遗传算法程序代码
1、排课问题的本质是将课程、教师和学生在合适的时间段内分配到合适的教室中,涉及到的因素较多,是一个多目标的调度问题,在运筹学中被称为时间表问题(Timetable Problem,TTP)。
2、设一个星期有n个时段可排课,有m位教师需要参与排课,平均每位教师一个星期上k节课,在不考虑其他限制的情况下,能够推出的可能组合就有 种,如此高的复杂度是目前计算机所无法承受的。
3、因此众多研究者提出了多种其他排课算法,如模拟退火,列表寻优搜索和约束满意等。
4、Github : 遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索解的方法。
5、遗传算法的流程如下所示:遗传算法首先针对待解决问题随机生成一组解,我们称之为种群(Population)。
6、种群中的每个个体都是问题的解,在优化的过程中,算计算整个种群的成本函数,从而得到一个与种群相关的适应度的序列。
7、如下图所示:为了得到新的下一代种群,首先根据适应度对种群进行排序,从中挑选出的几个个体加入下一代种群,这一个过程也被称为精英选拔。
8、新种群余下的部分通过对选的精英个体进行修改得到。
9、对种群进行修改的方法参考了生物DAN进化的方法,一般使用两种方法: 变异 和 交叉 。
10、 变异 的做法是对种群做一个微小的、随机的改变。
11、如果解的编码方式是二进制,那么就随机选取一个位置进行0和1的互相突变;如果解的编码方式是十进制,那么就随机选取一个位置进行随机加减。
12、 交叉 的做法是随机从种群中选取两个个体,以某个位置为交叉点合成一个新的个体。
13、经过突变和交叉后我们得到新的种群(大小与上一代种群一致),对新种群重复重复上述过程,直到达到迭代次数(失败)或者解的适应性达到我们的要求(成功),GA算法就结束了。
14、算法实现首先定义一个课程类,这个类包含了课程、班级、教师、教室、星期、时间几个属性,其中前三个是我们自定义的,后面三个是需要算法来优化的。
15、接下来定义cost函数,这个函数用来计算课表种群的冲突。
16、当被测试课表冲突为0的时候,这个课表就是个符合规定的课表。
本文到这结束,希望上面文章对大家有所帮助。
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。