遗传算法(附matlab 代码链接-TSP\VRP\FJSP)

遗传算法

一.基本介绍

遗传算法(Genetic Algorithm,GA),由美国的 John holland于20世纪70年代提出,通过模拟生物进化过程得到一种求解模型的元启发式算法

二.得到新解的方式

共有2种得到新解的方式。

1.交叉操作
(1)顺序类型

给出两个解:X1= 1 3 4 5 6 2 ;X2= 2 3 1 4 5 6。
通过两点交叉进行操作:若选中1和3则互换位置1到3之间的基因。
Xnew1= 【3 1 4】 5 6 2 ;Xnew2= 【1 3 2】 4 5 6 。因为是顺序所以互换的也是顺序,避免不完整。

(2)数值类型

给出两个解:X1= 1 1 2 5 3 2 ;X2= 2 5 3 3 1 4。
通过两点交叉进行操作:若选中1和3则互换位置1到3之间的基因。
Xnew1= 【2 5 3】 5 3 2 ;Xnew2= 【1 1 2】 3 1 4 。因为是顺序可以直接互换对应基因段。

2.变异操作
(1)顺序类型

给出一个解:X1= 1 3 4 5 6 2 。
通过两点互换进行操作:若选中1和3则互换位置1和3的基因。
Xnew1= 【4】3【1】5 3 2 。

(2)数值类型

给出一个解:X1= 1 1 2 5 3 2 。
通过单点交叉进行操作:若选中1则变异位置1的基因,并需要产生移动方向和步长。若方向为+,步长为0.5。
Xnew1= 【1.5】1 2 5 3 2 。

三.接受新解的方式

直接接受

四.算法停止的方式

迭代次数达到设置次数,也可以自行加入其他停止方式,如时间。

五.便于理解-名词解释

(1)染色体

一个染色体代表一个解

(2)基因

代表一个解中的一个维度

(3)种群

n个染色体组成一个种群

(4)选择操作

区别与交叉操作、变异操作产生了新的解,选择操作不产生新的解,会从原有种群中按照一定原则选择等同数量的个体(会重复)。

(5)适应度

适应度只是一个概念,适应度是越大越好,而目标函数根据实际问题来定,需要用目标函数转换成适应度,通常需要用倒数或者乘以-1。

六.整体理解

1.伪代码

设置种群大小psize,迭代次数itermax,交叉概率pco,变异概率pmt
生成初始种群pop(i),i=1,2…psize
计算每个个体的适应度F(i),i=1,2…psize
记录最佳解bestsofar
for iter=1:itermax
通过选择操作 得到新的种群pop(i),i=1,2…psize
for i=1:2:psize
对pop(i),pop(i+1) 进行操作
if rand<pco
通过交叉操作 更新pop(i),pop(i+1)
end
if rand<pmt
通过变异操作 更新pop(i),pop(i+1)
end
end
计算每个个体的适应度F(i),i=1,2…psize
更新最佳解bestsofar
End
输出最佳解

2.流程图

在这里插入图片描述

代码链接

链接:https://pan.baidu.com/s/1eBFDPsda1dPxNWJ7kvM1Xg

提取码:ore5

公众号

在这里插入图片描述

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
实验内容与步骤 TSP 问题是一个经典的 NP 问题,很难得到最优解,利用遗传算法,可以比较快的找到近似最优。本实验采用 TSPLIB 的数据,利用遗传算法进行求解。 染色体设计 染色体设计是遗传算法的关键之一,在本实验中,采用基于路径的方法进行设计,即一条完整合法的路径为一个染色体。如 12345678 或 51834762 (以 8 个城市为例)。 交叉编码方式设计 在本实验中采用部分交叉编码方式,编码过程如下: 根据两个父代染色体建立基因对应规则 确定父代中交叉的起始位置、结束位置 互换需要交叉的编码得到子代,对于每一个子代,如果交叉的部分已经在存在,则根据基因对应规则对寻找替换基因 示例:父代 1 : 12345678; 父代 2: 51834762 步骤 1、确定基因对应规则。 父代 1 视角: 1->5、 2->1、 3->8、 4->3、 5->4、 6->7、 7->6、8->2 父代 2 视角: 5->1、 1->2、 8->3、 3->4、 4->5、 7->6、 6->7、2->8 步骤 2、确定交叉起始位置为 4,结束位置为 6。 父代 1 中需要交换的基因为 456 父代 2 中需要交换的基因为 347 步骤 3、通过互换基因得到子代。 子代 1 生成过程:父代 1 中前 3 个基因和后 2 个基因无需互换,遗传给子代 1,得到 123***78 第四个基因 4 需要交换,对应的基因为 3,得到 1233##78。由于基因 3 已经存在于子代 1(位置 3)中,因此将该基因根据对应规则修改为 8,得到1283##78,但基因 8 也已经存在,根据规则修改为 2,得到 1223##78; 2 同样存在,修改为 1,得到 1213##78; 1 也存在,修改为 5,得到 1253##78; 第五个基因 5 需要交换,对应的基因为 4,得到 12534*78; 第六个基因 6 需要交换,对应的基因为 7,得到 12534778,基因 7 已经存在,根据规则修改为 6,得到 12534768,子代 1 编码完成; 用同样的方式编码子代 2(用父代 2 视角的对应规则)。 编码原则 如果交换得到的基因已经存在,保留交换得到的基因、修改由父代遗传下来的基因。基因修改可能会有多次(由于多次冲突),但都只在同一位置进行。 变异编码规则设计 本实验采用交换变异,即在自身染色体中随机挑选两个基因,然后互换位置。 程序实现 1.设定种群数量 2.随机初始化种群染色体并计算适应度 3.根据适应度选择父代进行遗传(根据交叉概率决定是否交叉染色体) 4.根据变异率进行变异操作 5.计算适应度,如达到要求或达到迭代次数则终止算法,否则跳转到第3步
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值