基于遗传算法和模拟退火算法的旅行商问题研究

 

一、前言

1.1实验背景

       本学期信息学院开设了智能优化算法及其应用课程,智能优化算法是一个非常活跃的研究领域。这类算法中的每一个算法都以人类、生物的行为方式或物质的运动形态为背景,经过数学抽象建立算法模型,通过计算机的计算来求解组合优化问题。课程从算法的产生、算法的基本思想和理论、算法的基本构成、计算步骤,这些方面进行详细介绍。

1.2 本文结构安排

一、前言

二、问题介绍

三、遗传算法

四、模拟退火算法

五、结果分析

六、代码

二、问题介绍

2.1 旅行商问题

       旅行商问题(Traveling Salesman Problem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是一个NP完全问题。由于其在交通运输、电路板线路设计以及物流配送等领域内有着广泛的应用,国内外学者对其进行了大量的研究。早期的研究者使用精确算法求解该问题,常用的方法包括:分枝定界法、线性规划法、动态规划法等。但是,随着问题规模的增大,精确算法将变得无能为力,因此,在后来的研究中,国内外学者重点使用近似算法或启发式算法,主要有遗传算法、模拟退火法、蚁群算法、禁忌搜索算法、贪婪算法和神经网络等。

 

三、遗传算法

3.1.遗传算法介绍

       遗传算法(GeneticAlgorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

3.2 算法设计

3.2.1编码方式:

对n维旅行商问题(城市数目为n),设置一个大小为n的数组,数组元素的顺序即路径。例如,对一个5维问题,path[5]={2,3,4,5,1},则代表路径为2->3->4->5->1->2.

3.2.2选择算子:

采用锦标赛选择法,首先在父代种群中随机选择三个个体,再充这三个个体中选出适应度最大的个体放入子代种群中,重复这些操作,直到子代种群个体数等于种群规模。

3.2.3交叉算子:

采用order-crossover思想

       过程:

      第一步,随机选择一对染色体(父代)中几个基因的起止位置(两染色体被选位置相同)。

第二步,生成一个子代,并保证子代中被选中的基因的位置与父代相同。

第三步(可再分两小步),先找出第一步选中的基因在另一个父代中的位置,再将其余基因按顺序放入上一步生成的子代中。

需要注意的是,这种算法同样会生成两个子代,另一个子代生成过程完全相同,只需要将两个父代染色体交换位置。

 3.2.4变异算子:

采用2-opt思想,即随机选择两个位置,逆置这两个点之间的城市序列

3.2.5 适应度函数:

       对于旅行商问题,路径越短越好,所以考虑将路径长度的倒数作为适应值。考虑到路径长度可能比较大,取倒数后数字过小不好比较,所以将10000/路径长度 作为适应度。

3.3算法流程

  • 确定编码方式,设置遗传算法参数
  • 生成初始种群
  • 选择:对种群进行选择操作
  • 交叉:对种群中的每个个体进行交叉操作
  • 变异:对种群中的每个个体进行变异操作
  • 判断是否满足结束条件,是则进行下一步;否则跳到③
  • 解码,输出最优值,算法结束

3.4 算法流程图

四、模拟退火算法

4.1模拟退火算法介绍

       模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解。

4.2算法设计

4.2.1编码方式:

对n维旅行商问题(城市数目为n),设置一个大小为n的数组,数组元素的顺序即路径。例如,对一个5维问题,path[5]={2,3,4,5,1},则代表路径为2->3->4->5->1->2.

4.2.2 适应度函数:

       对于旅行商问题,路径越短越好,所以考虑将路径长度的倒数作为适应值。考虑到路径长度可能比较大,取倒数后数字过小不好比较,所以将10000/路径长度 作为适应度。

4.2.3扰动算子

       采用2-opt思想,即随机选择两个位置,逆置这两个点之间的城市序列

4.3算法流程

    • 编码,设置参数
    • 生成初始个体
    • 随机扰动变异
    • 决定接受新解
    • 降温
    • 判断是否满足终止条件,是则进入下一步,否则跳回③
    • 解码,输出结果,算法结束

说明:

①.生成初始个体仍采用贪心算法

②.随机扰动有两种方式,一是2-opt交换,二是随机交换两个位置的城市号,这两种方式随机选择。

③无条件接受优解,根据Metropolis准则决定是否接受劣解

④结束条件设为N次迭代个体适应值不变

4.4算法流程图

五、结果分析

5.1实验结果

5.1.1优化结果

 

198

318

442

783

1002

1577

2392

3038

4461

已知最优

15780

42029

50778

8806

259045

22249

378032

137694

182566

模拟退火

16448

47360.5

56182.4

12373.7

388576

60847

678878.1

379703.3

583845.1

遗传算法

16654.7

46953.3

57488.8

10435.8

316538

27214.3

467671

169139

223743

 

5.1.2时间

 

198

318

442

783

1002

1577

2392

3038

4461

遗传算法

12.063

15.794

21.153

33.233

42.309

66.855

109.491

147.933

249.964

模拟退火

1.4203

2.2744

3.2296

5.6181

5.8772

20.981

8.21

72.778

126.5174

 

5.2 结果分析

       在优化结果上,在规模较小时,模拟退火算法结果较好,但在规模较大时模拟退火算法陷入局部最优;在时间上,模拟退火算法一直比遗传算法耗时短。所以,模拟退火算法适用于小规模问题,遗传算法适用于大规模问题。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值