首页 > 编程语言 >模拟退火算法

模拟退火算法

时间:2023-04-29 13:00:42浏览次数:46  
标签:搜索算法 算法 模拟退火 最优 SA TSP

访问【WRITE-BUG数字空间】_[内附完整源码和文档]

该项目主要是利用局部搜索算法(LS)和模拟退火算法(SA)解决 TSP 问题。先是使用 LS 求解 TSP 问题,再尝试 SA 问题,比较两者,在效率上 SA 更占有。最后再在 LS 的基础上使用 SA,再优化 SA 部分算法,尝试求解 TSP 问题。选用的 TSP 测例为 eil101(有 101 个城市)。代码使用 python 语言编写,因此运算速度因为语言特性比编程语言要低。

摘要

该项目主要是利用局部搜索算法(LS)和模拟退火算法(SA)解决 TSP 问题。先是使用 LS 求解 TSP 问题,再尝试 SA 问题,比较两者,在效率上 SA 更占有。最后再在 LS 的基础上使用 SA,再优化 SA 部分算法,尝试求解 TSP 问题。选用的 TSP 测例为 eil101(有 101 个城市)。代码使用 python 语言编写,因此运算速度因为语言特性比编程语言要低。

导言

旅行商问题,即 TSP 问题(Traveling Salesman Problem),是求最短路径的问题,即“已给一个 n 个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路”。TSP 是组合优化问题,可以被证明具有 NPC 计算复杂性。如果希望暴力搜索其最佳解,其复杂度将是 O(n!),其计算量随着 n 的增加将轻易超过目前计算机的可能算力。因此我们需要用更智能的方法求解。

于是我们先考虑局部搜索算法。局部搜索算法是贪心算法,他往往往邻域中最好的状态搜索,因此容易进入局部最优结果,而无法跳出局部最优的区域。

第二部分使用模拟退火算法。模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。模拟退火算法比起局部搜索算法,赋予了一定跳出局部最优解的能力,但能否跳出局部最优解依然依赖随机性。

实验过程

首先使用两种不同的局部搜索算法。

第一种选择邻域的方法是随机交换两个城市在序列中的顺序。每次循环中产生的候选序列为城市数(以下用 Cs 表示)*10,并从中选择一个最优的(距离最短的)作为下一步。

第二种选择邻域的方法是随机交换三个城市在序列中的顺序。每次循环中产生的候选序列为 Cs*10,并从中选择一个最优的(距离最短的)作为下一步。

这两种算法都按以下步骤实现:

录入初始状态,并打乱顺序产生一组随机状态,从这组状态(包括初始状态)

模拟退火算法_搜索算法

模拟退火算法_最优解_02

模拟退火算法_搜索算法_03

模拟退火算法_最优解_04

中选最佳的状态作为起点;

Repeat:

产生一个集合 S

Repeat 10 * Cs times:

标签:搜索算法,算法,模拟退火,最优,SA,TSP
From: https://blog.51cto.com/u_16075443/6236718

相关文章

  • 三维重建原理和算法
    原理采集深度图像:使用深度相机采集场景深度信息,并将其转换为深度图像。点云生成:根据深度图像,将场景中的点云数据进行生成。点云滤波:对于采集到的点云数据进行滤波处理,去除无效数据点。点云配准:如果需要将多个点云数据融合为一个完整的点云模型,需要进行点云配准操作,使得各个点......
  • 1.ORB-SLAM3论文重点导读及整体算法流程梳理
    摘要ORB-SLAM3是第一个能够执行纯视觉、视觉-惯导以及多地图的SLAM系统,可以在单目,双目以及RGB-D相机上使用针孔以及鱼眼模型。本文主要新颖之处在于基于特征的VIO紧耦合系统,该系统完全依赖于最大后验估计,即使在IMU初始化阶段也是如此。本系统在小型和大型、室内和室外环境中实时稳......
  • jQuery轮播图(模仿滑动窗口算法)
    conststatus=["left:0px;","left:10px;","left:20px;","left:30px;","left:40px;",];constlist=$("#carousel>ul>li");constlen=lis......
  • 【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图
    一.本次需求背景本文主题:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解之前的文章我们已经对爬取的数据做了清洗处理,然后又对其数据做了一个薪资数据的倾斜情况以及盒图离群点的探究。我们这次的需求是:使用散点图、使用......
  • 非对称加密算法的两种应用:签名与加密
    非对称加密的特点在于:首先:有一对私钥和公钥,其中私钥加密的东西,只能对应公钥解密。反之,公钥加密的东西,只能对应私钥解密。换种角度讲,私钥可以用来加密、用来解密(与之相对的公钥可以用来解密、用来加密)。其次:公钥可以公开传播,私钥需要私密保存。利用这两点我们可以实现加密通信......
  • VC中实现哈希Hash算法
       Hash函数我们可以自己用C来编写,但是如果在VC中就不必了,因为在VC中有实现hash算法的函数可以调用,就是CryptAcquireContext函数,这个函数的定义在wincrypt.h头文件中。下面是我在MFC中实现的,因为想要结果输出到messagebox中,所以就在视类里定义和实现了GetHash函数来计算哈希值......
  • JAVA AES 加密算法实现
    importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjava.nio.charset.StandardCharsets;importjava.util.Base64;publicclassAESUtil{privatestaticfinalStringDEFAULT_KEY="hj7x......
  • 二分查找算法讲解及其C++代码实现
    二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。算法描述:首先确定数组的中间位置mid=(left+right)/2;然后将要查找的值key与中间位置的值进行比较;如果key等于中间位置的值,则查找成功,返回mid;如果key小于中间位置的值,则在......
  • 2022“杭电杯”中国大学生算法设计超级联赛(3)签到题4题
    ProblemsSolvedProblemIDTitleRatio(Accepted/Submitted)1001EquipmentUpgrade33.53%(115/343)1002BossRush13.79%(246/1784)1003CyberLanguage69.82%(1189/1703)1004DividetheSweets3.24%(7/216)1005SpanningTreeGame9.83%(40/407)1006Du......
  • 2022“杭电杯”中国大学生算法设计超级联赛(1)签到题5题
    SolvedPro.IDTitleRatio(Accepted/Submitted)1001String11.88%(125/1052)1002Dragonslayer19.56%(473/2418)1003Backpack14.23%(270/1897)1004Ball15.29%(52/340)1005Grammar12.21%(21/172)1006Travelplan24.18%(22/91)1007Treasure12.93%(38/294)......