遗传算法解决旅行商问题

遗传算法解决旅行商问题

在这里插入图片描述

算法简介

模拟自然界的生命进化机制

实现方法

(1) 根据具体问题确定可行解域,确定一种编码方法,能用数值串或字符串表示可行解域的每一解

(2) 对每一解应有一个度量好坏的依据,用适应度函数表示,一般由目标函数构成。

(3) 确定进化参数、交叉概率、变异概率、进化终止条件。

生物遗传概念在遗传算法中的对应关系

适者生存:算法停止时,最优目标值的可行解有最大的可能被留住

个体:可行解

染色体:可行解的编码

基因:可行解中每一分量的特征

适应性:适应度函数值

种群:根据适应度函数值选取的一组可行解

交配:通过交配原则产生一组新可行解的过程

变异:编码的某一分量发生变化的过程

算法实现

假设有一个100个城市的旅行商问题,编号为2~101,出发地点的编号为1和102(方便编程)。

求解的遗传算法的参数设定如下:
种群大小 M = 50 ; M=50; M=50;最大代数 G = 1000 ; G=1000; G=1000;
交叉率 p c = 1 p_{\mathrm{c}}=1 pc=1,交叉概率为 1 能保证种群的充分进化; 变异率 p m = 0.1 p_{\mathrm{m}}=0.1 pm=0.1,一般而言,变异发生的可能性较小

1.编码策略

采用十进制编码,用随机数列 ω 1 ω 2 ⋯ ω 102 \omega_1\omega_2\cdots\omega_{102} ω1ω2ω102作为染色体,其中 0 ⩽ ω i ⩽ 1 ( i = 2 , 3 , ⋯   , 0\leqslant\omega_i\leqslant1\left(i=2,3,\cdots,\right. 0ωi1(i=2,3,, 101 ) , ω l = 0 , \omega _{\mathrm{l} }= 0 ,ωl=0 , ω 102 = 1 , \omega _{102}= 1 ,ω102=1 ;每一个随机序列都和种群中的一个个体相对应,例如,9 目标问题的一个染色体为
[0.23,0.82,0.45,0.74,0.87,0.11,0.56,0.69,0.78],
式中:编码位置 i i i为目标 i i i,位置 i i i的随机数表示目标 i i i在巡回中的顺序。
将这些随机数按升序排列得到如下巡回:
6 − 1 − 3 − 7 − 8 − 4 − 9 − 2 − 5 。 6-1-3-7-8-4-9-2-5。 613784925

2.初始种群

先利用经典的近似算法——改良圈算法求得一个较好的初始种群。

对于随机产生的初始圈

C C C = π 1 \pi _{1} π1 ⋯ \cdots π u − 1 \pi _{u- 1} πu1 π u \pi _{u} πu π u + 1 \pi _{u+ 1} πu+1 ⋯ \cdots π v − 1 \pi _{v- 1} πv1 π v \pi _{v} πv π v + 1 \pi _{v+ 1} πv+1 ⋯ \cdots π 102 \pi _{102} π102 ,2 ⩽ \leqslant u u u < v v v ⩽ \leqslant 101 ,2 ⩽ \leqslant π u \pi _{u} πu < π v \pi _{v} πv ⩽ \leqslant 101 ,
交换 u u u v v v之间的顺序,此时的新路径为
π 1 ⋯ π u − 1 π v π v − 1 ⋯ π u + 1 π u π v + 1 ⋯ π 102 ∘ \pi_1\cdots\pi_{u-1}\pi_v\pi_{v-1}\cdots\pi_{u+1}\pi_u\pi_{v+1}\cdots\pi_{102}\circ π1πu1πvπv1πu+1πuπv+1π102
Δ f = ( d π u − 1 π v + d π u π v + 1 ) − ( d π u − 1 π u + d π v π v + 1 ) \Delta f=(d_{\pi_{u-1}\pi_{v}}+d_{\pi_{u}\pi_{v+1}})-(d_{\pi_{u-1}\pi_{u}}+d_{\pi_{v}\pi_{v+1}}) Δf=(dπu1πv+dπuπv+1)(dπu1πu+dπvπv+1),若 Δ f < 0 \Delta f<0 Δf<0,则以新路经修改旧路径,直到不能修改为止,就得到一个比较好的可行解。

直到产生M个可行解,并把这M个可行解转换成染色体编码。

3.目标函数

目标函数为侦察所有目标的路径长度,适应度函数就取为目标函数。

要求 min ⁡ f (   π 1   , π 2   , ⋯   , π 102   )   =   ∑ i   =   1 101   d π i π i + 1   \min f(\:\pi_1\:,\pi_2\:,\cdots,\pi_{102}\:)\:=\:\sum_{i\:=\:1}^{101}\:d_{\pi_i\pi_{i+1}\:} minf(π1,π2,,π102)=i=1101dπiπi+1

4.交叉操作

交叉操作采用单点交叉。对于选定的两个父代个体 f 1 = ω 1 ω 2 ⋯ ω 102 , f 2 = ω 1 ′ ω 2 ′ ⋯ f_1=\omega_1\omega_2\cdots\omega_{102},f_2=\omega_1^{\prime}\omega_2^{\prime}\cdots f1=ω1ω2ω102,f2=ω1ω2 ω 102 ′ \omega_{102}^{\prime} ω102,随机地选取第 ι \iota ι个基因处为交叉点,则经过交叉运算后得到的子代个体为 s 1 s_1 s1 s 2 , s 1 s_2,s_1 s2,s1 的基因由 f 1 f_1 f1的前 t t t个基因和 f 2 f_2 f2的后 102 - t t t个基因构成 , s 2 ,s_2 ,s2的基因由 f 2 f_2 f2的前 ι \iota ι个基因和 f 1 f_1 f1 的后 102 − t -t t个基因构成,例如:
f 1   =   [   0   , 0.   14   , 0.   25   , 0.   27   ,   1   0.   29   , 0.   54   , ⋯   , 0.   19   , 1   ] , f 2   =   [   0   , 0.   23   , 0.   44   , 0.   56   ,   ∣   0.   74   , 0.   21   , ⋯   , 0.   24   , 1   ] , f_{1}\:=\:\left[\:0\:,0.\:14\:,0.\:25\:,0.\:27\:,\:1\:0.\:29\:,0.\:54\:,\cdots,0.\:19\:,1\:\right],\\f_{2}\:=\:\left[\:0\:,0.\:23\:,0.\:44\:,0.\:56\:,\:|\:0.\:74\:,0.\:21\:,\cdots,0.\:24\:,1\:\right], f1=[0,0.14,0.25,0.27,10.29,0.54,,0.19,1],f2=[0,0.23,0.44,0.56,0.74,0.21,,0.24,1],
设交叉点为第四个基因处,则
s 1   =   [   0   , 0.   14   , 0.   25   , 0.   27   ,   ∣   0.   74   , 0.   21   , ⋯   , 0.   24   , 1   ] , s 2   =   [   0   , 0.   23   , 0.   44   , 0.   56   ,   ∣   0.   29   , 0.   54   , ⋯   , 0.   19   , 1   ] 。 s_{1}\:=\:\left[\:0\:,0.\:14\:,0.\:25\:,0.\:27\:,\:|\:0.\:74\:,0.\:21\:,\cdots,0.\:24\:,1\:\right],\\s_{2}\:=\:\left[\:0\:,0.\:23\:,0.\:44\:,0.\:56\:,\:|\:0.\:29\:,0.\:54\:,\cdots,0.\:19\:,1\:\right]。 s1=[0,0.14,0.25,0.27,0.74,0.21,,0.24,1],s2=[0,0.23,0.44,0.56,0.29,0.54,,0.19,1]

5.变异操作

变异也是实现群体多样性的一种手段,同时也是全局寻优的保证。按照给定的变异率,对选定变异的个体,随机地取三个整数,满足 1 < u < v < w < 102 1<u<v<w<102 1<u<v<w<102,把 u , v u,v u,v之间(包括 u u u v v v )的基因段插到 w w w后面。

6.选择

在父代种群和子代种群中选择目标函数最小的M个个体进化到下一代,保证父代的优良特性被保存下来。

Matlab参考代码

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值