1.1什么是遗传算法
模拟自然界中的遗传,种群优胜劣汰,一代更比一代强。
种群中的个体差异就是基因差异。
遗传算法就是模拟基因这个概念,将待解决问题的答案进行编码;答案最开始五花八门,一个编码就对应一个答案。答案有好的答案和差的答案,就代表种群中优秀个体和差的个体。
遗传算法就是对这些答案进行评价,保留好的,剔除差的。就像自然界中的自然选择的过程。繁衍又是怎么体现的呢?模拟物种基因交叉变异的过程,尝试出更好的答案。
一代不行就多代,代代相传优胜劣汰。
1.2 遗传算法中重要概念
1.3 遗传算法流程图
1.4 适用场景
遗传算法是一个不断尝试的算法,不知道哪两个基因结合会诞生好的后代,有不确定性。因此常用于无法得出精确解的NP难问题。
1.5 旅行商问题
旅行商从1出发,要经过2,3,4,5各1次并最终回到1,目标是怎么样使路劲最短。
1.6 编码和解码
一趟旅行的城市编号对应一个答案,解码就是将旅行编号转换成实际的城市,然后根据坐标转换成实际的路程。
1.7代码实现
代码主要设计了三个.py文件,分别是config.py:里面有一些配置文件,main.py:定于了城市坐标和城市距离,也是程序的入口,项目的=运行也需要再次进行,ga.py:里面有适应度函数,基因的交叉,编译,选择的实现,以及迭代的算法。
下面具体来讲解一下这三段代码的具体过程:
config.py
首先先定义城市数量city_num为15目的是随机生成15个城市用于之后的城市的距离运算和编译,坐标维度pos_dimension为2也可以是三维用来表示城市的坐标二维坐标A(x,y),三维坐标B(x,y,z)表示,个体数individual_num为60:每条路线代表一条基因,而基因便是表示个体下的基因,而个体在之后求适应度和基因交叉都需要用到它,迭代轮数gen_num为1400次:因为在指定的城市数量和坐标维度之下需要设定一定的迭代次数才能让适应度函数