文章目录

  • 一、理论基础
    • 1、传统模拟退火算法
      • (1)模拟退火算法基本原理
      • (2)模拟退火算法模型流程
        • <1> 编码方式
        • <2> 目标函数
        • <3> 冷却进度表
        • <4> 模型流程
    • 2、改进模拟退火算法
      • (1)内循环改进
      • (2)扰动机制改进
      • (3)记忆功能改进
      • (4)改进后的模型流程
  • 二、仿真实验与结果分析
    • 1、att48
    • 2、eil51
    • 3、eil76
  • 三、参考文献

一、理论基础

1、传统模拟退火算法

(1)模拟退火算法基本原理

请参考这里。

(2)模拟退火算法模型流程

模拟退火算法模型包括编码方式、目标函数、 冷却进度表、扰动机制、内循环机制、外循环机制等,其中最基础的是编码方式、目标函数和冷却进度表。

<1> 编码方式

求解TSP问题的各种编码中,多数以遍历城市的次序排列进行编码,即整数编码。这种方法简单、自然、容易理解。如城市编号为[3,2,5,4,7,1,6,9,8][3,2,5,4,7,1,6,9,8][3,2,5,4,7,1,6,9,8]表示从3号城市出发,经过 2、5、4、7、1、6、9、 8后,最终又回到了城市3。

<2> 目标函数

TSP问题的一个个体为C={C(1),C(2),⋯,C(N)}C=\{C(1),C(2),\cdots,C(N)\}C={C(1),C(2),⋯,C(N)},其目标函数定义为个体所代表路径确切距离的长度,即O:f(C)=∑i=1N−1d[C(i),C(i+1)]+d[C(N),C(1)](1)O:f(C)=\sum_{i=1}^{N-1}d[C(i),C(i+1)]+d[C(N),C(1)]\tag{1}O:f(C)=i=1∑N−1​d[C(i),C(i+1)]+d[C(N),C(1)](1)其中,C(i)C(i)C(i)为路径CCC的第iii个城市,d[C(i),C(j)]d[C(i),C(j)]d[C(i),C(j)]为两城市间的距离,且d[C(i),C(j)]=d[C(j),C(i)]d[C(i),C(j)]=d[C(j),C(i)]d[C(i),C(j)]=d[C(j),C(i)]。在后面的运行过程中,算法试图使适应度函数f(C)f(C)f(C)最小化并认为使得该函数取得较小值的解为较优解。

<3> 冷却进度表

传统冷却进度表包括初始温度T0T_0T0​、衰减函数g(T0)g(T_0)g(T0​),以及当前温度TTT下内循环迭代次数LLL。
初始温度T0T_0T0​针对不同的问题可以有不同的取值方法,一般TSP常用的方法为:随机产生NNN个个体,分别计算其目标函数值f(Ck),k=1,2,⋯,Nf(C^k),k=1,2,\cdots,Nf(Ck),k=1,2,⋯,N,T0T_0T0​有如下两种取值方式:W1:T0=max⁡[f(Ck)]−min⁡[f(Ck)]W2:T0=max[f(Ck)].\begin{aligned}&W1:T_0=\max[f(C^k)]-\min[f(C^k)] \\ &W2:T_0=max[f(C^k)].\end{aligned}​W1:T0​=max[f(Ck)]−min[f(Ck)]W2:T0​=max[f(Ck)].​温度衰减函数g(T0)g(T_0)g(T0​)根据不同问题的需要,可以设置不同的衰减速度,常见的有三种:G1:g(T0)=T0/(1+i);G2:g(T0)=T0/lg⁡(1+i);G3:g(T0)=[lg(i/T0+1)]−1\begin{aligned}&G1:g(T_0)=T_0/(1+i);\\&G2:g(T_0)=T_0/\lg(1+i);\\&G3:g(T_0)=[lg(i/T_0+1)]^{-1}\end{aligned}​G1:g(T0​)=T0​/(1+i);G2:g(T0​)=T0​/lg(1+i);G3:g(T0​)=[lg(i/T0​+1)]−1​当前温度TTT下内循环迭代次数LLL通常取常数定值。

<4> 模型流程

模拟退火算法可以分解为解空间、目标函数和初始解三部分。其模型的具体流程如下:
(1)初始化:初始温度T0T_0T0​(充分大),初始解CCC(CCC表示城市序列,是算法迭代的起点),每个ttt值的迭代次数LLL。
(2)对k=1,2,⋯,Lk=1,2,\cdots,Lk=1,2,⋯,L执行第(3)至第(5)步。
(3)随机产生扰动,得到新解C′C'C′。
(4)计算增量Δf=f(C′)−f(C)\Delta f=f(C')-f(C)Δf=f(C′)−f(C),其中f(C)f(C)f(C)为目标函数。
(5)若Δf<0\Delta f<0Δf<0,则接受新解,否则以概率p(Δf)=exp⁡(−Δf/T)p(\Delta f)=\exp(-\Delta f/T)p(Δf)=exp(−Δf/T)接受新解,以概率1−p(Δf)1-p(\Delta f)1−p(Δf)接受原解,并以接受的解作为下一次模拟的初始解。
(6)温度TTT按一定的规律逐渐减少。
(7)如果满足终止条件则输出当前解作为最优解,结束程序;如果不满足则转第(2)步。

2、改进模拟退火算法

分析SA算法可以发现,虽然SA算法存在有限度地接受劣解、可以跳出局部最优解原理简单、使用灵活、适合求解出优化问题的全局最优或近似全局最优解等优点;但它存在以下三点主要问 题:①退火速度问题。同一温度下的充分搜索是相当必要的,在变量多、目标函数复杂时,为了得到一个好的近似解,温度TTT需要从一个较大的值开始,并在每一个温度值 TTT执行多次Metropolis算法,迭代运算速度慢。②扰动机制种类繁多,灵活性大,每一种的收敛速度和寻优能力不易估计,选择时难以抉择。③搜索过程中由于执行概率接受环节而遗失当前遇到的最优解。针对以上三个问题,提出以下三点改进。

(1)内循环改进

虽然传统的SA方法设置了内循环,在同一温度值TTT执行多次Metropolis算法,保证全局搜索能力。但是实践表明,将温度TTT下执行Metropolis算法的次数设置为定值往往不够灵活,次数过多造成时间的浪费,次数过少则损失解的质量。改进之处即设置采样稳定条件,使得采样次数可以根据当前所得解的情况灵活处理,在保证解质量的前提下,尽量避免时间的浪费。
采样稳定条件定义为:同一温度TTT下局部解未被提高的次数LLL。具体操作是在每个温度TTT开始时设置一个局部解未被提高次数计数器num=0num = 0num=0,然后每执行一次Metropolis算法之后进行判断,如果局部解被提高了就将numnumnum重新置于0,否则就将numnumnum加1;这样直到numnumnum达到上限LLL时跳出当前温度TTT的内循环。

(2)扰动机制改进

传统的SA算法选用单一的扰动机制,而且没有证明这种单一的扰动机制就是最优的,因此造成解被改进的可能性不大。改进之处在于提供了6种 扰动机制,给它们以同等机会被采用,这样就增大了解被改进的可能性。扰动机制如图1所示。

图1 扰动机制示意图

其中M5还有一个变种,即城市子排列双向反序,如图2 所示:

图2 城市子排序双向反序

(3)记忆功能改进

传统SA算法“依概率接受”思想,使得当前状态可能要比搜索过程中某些中间状态差,在仿真实验中已经发现最终得到的近似最优解有时候比中间经历的最好解差,这样就浪费了搜索时间,影响了搜索效果。为了不损失搜索过程中遇到的当前最优解,并提高搜索效果,加快搜索速度,文章的改进之处在于增加了记忆功能。
记忆功能是指在搜索过程中记住当前最优解,并及时更新使之能记住搜索过程中遇到的最好解,避免了由于执行概率接受环节而遗失当前遇到的 最优解,增加了这种记忆能力的模拟退火算法已成为一种智能化的算法。

(4)改进后的模型流程

在传统SA算法的基础上,加入以上三种改进,实现后的模型流程为如下:
(1)运用公式W1W1W1或W2W2W2产生初始温度T0T_0T0​,随机产生初始解CCC,定义记忆器best=Cbest = Cbest=C,定义局部最大无更优解产生次数LLL、全局最大无更优解产生次数MMM、局部最优解未更新次数num=0num = 0num=0、全局最优解未更新次数aim=0aim = 0aim=0、退火代数k=0k = 0k=0。
(2)k=k+1k=k+1k=k+1,运用公式G1、G2G1、G2G1、G2或G3G3G3更新温度TkT_kTk​。
(3)对个体CCC以同等概率执行6种扰动机制的一种,产生新解C′C'C′。
(4)按公式(1)计算增量Δf=f(C′)−f(C)\Delta f=f(C')-f(C)Δf=f(C′)−f(C),如果Δf<0\Delta f<0Δf<0,则C=C′,num=0C=C',num=0C=C′,num=0,转第(7)步。
(5)计算概率值p(Δf)=exp⁡(−Δf/Tk)p(\Delta f)=\exp(-\Delta f / T_k)p(Δf)=exp(−Δf/Tk​),产生伪随机数rrr,如果r<p(Δf)r<p(\Delta f)r<p(Δf),则C=C′C = C'C=C′,num=num+1num = num + 1num=num+1,转第(7)步。
(6)num=num+1num=num+1num=num+1,转第(7)步。
(7)如果num≤Lnum≤Lnum≤L,则转第(3)步,否则转第(8)步。
(8)如果f(C)<f(best)f(C)<f(best)f(C)<f(best),则best=C,aim=0best=C,aim=0best=C,aim=0,否则aim=aim+1aim=aim+1aim=aim+1。
(9)如果aim≤Maim ≤ Maim≤M,则转第(2)步,否则以bestbestbest为最终解输出,算法结束。

二、仿真实验与结果分析

改进SA算法(ISA)设置:采用记忆功能;以公式W2W2W2确定初始温度T0T_0T0​;温度衰减函数选择公式G1G1G1;全局最大无更优解产生次数M=300M = 300M=300;局部最大无更优解产生次数L=500L = 500L=500;扰动机制为M7M7M7(同等概率采用6种扰动机制的一种)。传统SA设置:链长L=200L=200L=200,其余设置与改进SA一样。种群规模N=30N=30N=30,最大迭代次数Max_Iteration=1000Max\_Iteration=1000Max_Iteration=1000,独立运算10次,取平均值。以att48、eil51和eil76数据集为例。

1、att48

图3为计算att48问题的收敛曲线图。

图3 两种算法计算att48问题的收敛曲线图

图4和图5分别为传统SA算法和改进SA算法计算att48得到的最优路径。

图4 传统SA算法计算att48得到的最优路径(38160.8755)

图5 改进SA算法计算att48得到的最优路径(33523.7085)

仿真实验结果显示如下:

数据集:att48
SA:最优值: 38160.8755,最差值:42228.3728,平均值:39863.4797,标准差:1633.3982
改进SA:最优值: 33523.7085,最差值:34655.1337,平均值:34106.2754,标准差:377.044

2、eil51

图6为计算eil51问题的收敛曲线图。

图6 两种算法计算eil51问题的收敛曲线图

图7和图8分别为传统SA算法和改进SA算法计算eil51得到的最优路径。

图7 传统SA算法计算eil51得到的最优路径(483.3962)

图8 改进SA算法计算eil51得到的最优路径(429.4841)

仿真实验结果显示如下:

数据集:eil51
SA:最优值: 483.3962,最差值:530.0365,平均值:504.1775,标准差:14.4904
改进SA:最优值: 429.4841,最差值:447.2196,平均值:439.4177,标准差:5.0037

3、eil76

图9为计算eil76问题的收敛曲线图。

图9 两种算法计算eil76问题的收敛曲线图

图10和图11分别为传统SA算法和改进SA算法计算eil76得到的最优路径。

图10 SA算法计算eil76得到的最优路径(673.5709)
图11 改进SA算法计算eil76得到的最优路径(555.1528)

仿真实验结果显示如下:

数据集:eil76
SA:最优值: 673.5709,最差值:724.3029,平均值:689.8244,标准差:15.7341
改进SA:最优值: 555.1528,最差值:571.5858,平均值:564.9661,标准差:5.552

由以上结果看出改进的SA算法和传统SA算法相比,运算结果不仅平均值有很大改进,而且每10次计算都能够算到最优解,同时结果的方差也相对较小,结果比较稳定,可以说明改进是成功的。

代码下载链接:https://download.csdn.net/download/weixin_43821559/85439166

三、参考文献

[1] 李鼎, 孟杰, 黄生俊, 等. 求解TSP的改进模拟退火算法研究[J]. 科学技术与工程, 2013, 13(25): 7552-7556+7572.

求解TSP的改进模拟退火算法研究相关推荐

  1. 基于模拟退火算法的TSP算法

    文章目录 一,理论基础 二,TSP问题介绍 三,思路和步骤 控制参数的设置 初始解 解变换生成新解 Metropolis准则 降温 四,MATLAB程序实现 五,结果分析 六,算法的改进 七,算法的局 ...

  2. 遗传-粒子群算法遗传-禁忌搜索算法求解TSP问题

    1. 前言 上一篇博文[五种常见启发式算法求解TSP问题-总结篇]中,总结了五种常见启发式算法在求解TSP问题上的效果,其中遗传算法的求解质量最差,而粒子群算法和禁忌搜索算法的求解效果最佳,因此本文计 ...

  3. 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  4. 模拟退火算法求解旅行商问题

    模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 旅行商(TSP)问题 一.TSP问题分析 二.模拟退火算法 1.一秒理解算法 2.算法原理 3. 算法流程 三.伪代码 四.运行结果 ...

  5. 【TWVRP】基于matlab模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】

    ⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...

  6. 模拟退火算法求解旅行商问题(python实现)

    模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 一.模拟退火算法原理 二.旅行商问题 1.求解思路 2.代码 总结 旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会 ...

  7. 蚁群算法求解TSP问题

    蚁群算法求解TSP问题 蚁群算法求解TSP问题 蚁群算法求解TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著 ...

  8. 机器学习中的数学——模拟退火算法(Simulated Annealing,SA)

    分类目录:<机器学习中的数学>总目录 相关文章: · 梯度下降法(Gradient Descent) · 随机梯度下降(Stochastic Gradient Descent, SGD) ...

  9. 模拟退huo算法的特点_兄弟,退火吗?—— 初窥模拟退火算法

    模拟退火算法(Simulated annealing, SA)是一种基于蒙特卡罗(Monte Carlo)思想设计的,常用于在较大的解空间中搜索近似全局最优解的优化算法.本文将从模拟退火算法的历史.形 ...

最新文章

  1. 如何限制只有某些IP才能使用Tomcat Manager
  2. java内部类gc_Java内部类持有外部类的引用详细分析与解决方案
  3. 在Visual C++ 中使用内联汇编
  4. MyBatis:lazy loading
  5. BERT可以上几年级了?Seq2Seq“硬刚”小学数学应用题
  6. 小米盒子老是服务器无响应,教你解决小米盒子黑屏死机等故障解决办法!
  7. 怎么样开会才有效果?
  8. 【干货合集】看完这些干货,再说你因为“怕蛇”,所以学不好Python!
  9. 你不懂API接口是什么?怎么和程序员做朋友
  10. 为什么两个controller的session的id不一样_我,为什么会离婚?我为什么离婚?
  11. 虚拟ip是什么意思_轻松了解基于Ip,Mac,组播的Valn是什么意思,通信基础第17篇...
  12. 【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp
  13. java 0xf0_用java做一个最小的操作系统内核
  14. PhotoZoom放大图片,真的能无损吗?
  15. Qt lambda 简化你的代码 connect 写法示例 省略槽函数定义
  16. 关键词云图,实现搜索功能
  17. java 验证码不显示,页面没有显示验证码解决办法
  18. log_archive_dest_2参数配置错误导致的dataguard主库无法传文件到备库
  19. 【Python网络编程】爬取百度贴吧、小说内容、豆瓣小说、Ajax爬微博、多线程爬淘宝
  20. 梦幻西游手游最多人的服务器,梦幻西游手游哪个区人多及区服选择分析

热门文章

  1. Android CE DE加密小结
  2. 前端性能优化篇——DNS/CDN
  3. 图神经网络(GNN)的必读文章
  4. 传奇开服架设要具备什么条件
  5. MySQL查询某个列中相同值的数量统计
  6. (02)Cartographer源码无死角解析-(52) 2D点云扫描匹配→ceres扫描匹配:CeresScanMatcher2D→栅格地图残差
  7. JPEG系列二 JPEG文件中的EXIF(下)
  8. PDF Extra Premium v7.0.4622 多合一 PDF 编辑器直装版
  9. linux内核声卡管理,浅析linux 2.6.30.4内核中uda134x声卡驱动源码 - audio和bluetooth
  10. win10系统要求配置_Win10 1909 系统的优点与缺点和配置要求与优化技巧