模拟退火算法求解TSP问题

前言:模拟退火(simulated annealing)技术,在每一步都以一定的概率接受比当前结果更差的结果,从而有助于“跳出”局部极小。在每次迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法的稳定性。

嘻嘻嘻,推荐一篇好文章让你快速学习模拟退火算法求解旅行商问题

作者用的是c++编写的程序,而且作者在程序中设置的是每个城市的坐标,也就默认city a 到city b的距离和city b 到city a的距离一样了,和老师题目要求的用非对称矩阵来描述城市之间的距离是不一样的。

下面我参考作者代码,按老师的要求(A-B的距离不等于 B-A的距离)用 python 实现了TSP问题,其中参数也调了调。
不得不说,python真是个简单便捷的语言呢!!!

'''
设有n个城市和距离矩阵D=[dij],
其中dij表示城市i到城市j的距离,i,j=1,2 … n,
则问题是要找出遍访每个城市恰好一次的一条回路并使其路径长度为最短。
'''from time import time
from copy import copy
from numpy import exp
import numpy as np
import randomT0 = 10.0       # 初始温度
T_end = 0.001   # 最低温度
q = 0.98        # 退火系数
L = 10          # 每个温度时的迭代此时,即链长
N = 5           # 城市数量
city_list = [i for i in range(N)]  # 初始化一个解
city_dis = np.floor(10 * np.random.random((N, N)) + 1)  # 城市之间的距离矩阵# 计算路径长度
def path_len(path_list):path = 0for i in range(len(path_list) - 1):city1 = path_list[i]city2 = path_list[i + 1]dis = city_dis[city1][city2]path += dislast_city = path_list[-1]first_city = path_list[0]dis = city_dis[last_city][first_city]path += disreturn path# 采用随机交换位置的方式产生新解
def create_new():pos1 = random.randint(0, N - 1)  # randint闭区间pos2 = random.randint(0, N - 1)temp = city_list[pos1]city_list[pos1] = city_list[pos2]city_list[pos2] = tempif __name__ == '__main__':t1 = time()count = 0  # 记录降温次数T = T0city_list_copy = []  # 保存原始解while T > T_end:  # 当温度低于结束温度时,退火结束for i in range(L):city_list_copy = copy(city_list)  # 复制数组create_new()  # 产生新解f1 = path_len(city_list_copy)  # 初始解目标函数值f2 = path_len(city_list)  # 新解目标函数值df = f2 - f1# Metropolis 准则if df >= 0:print("df:", df)print("exp:", exp(-df / T))if exp(-df / T) <= random.random():  # 保留原来解city_list = copy(city_list_copy)T *= q  # 降温count += 1t2 = time()print("城市之间的距离矩阵:\n", city_dis)print("模拟退火算法,初始温度T0=%.2f,降温系数q=%.2f,每个温度迭代%d次,共降温%d次\n" % (T0, q, L, count))print("TSP最优路径为:", city_list)print("最优路劲长度为:%1f\n" % (path_len(city_list)))print("程序耗时:%1f秒\n" % (t2 - t1))

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章彻底搞懂“分布式事务”

在如今的分布式盛行的时代&#xff0c;分布式事务永远都是绕不开的一个话题&#xff0c;今天就谈谈分布式事务相关的一致性与实战解决方案。 01 为什么需要分布式事务 由于近十年互联网的发展非常迅速&#xff0c;很多网站的访问越来越大&#xff0c;集中式环境已经不能满足业…

C++很难学?这个ACM金牌大佬可不这么认为!

C作为一门底层可操作性很强的语言&#xff0c;广泛应用于游戏开发、工业和追求性能、速度的应用。比如腾讯&#xff0c;无论游戏&#xff0c;还是微信&#xff0c;整个鹅厂后台几乎都是 C 开发&#xff0c;对 C 开发者的需求非常大。但问题是C入门和精通都比较困难&#xff0c;…

数据结构--位图 BitMap

文章目录1. 位图2. 位图代码3. 布隆过滤器 Bloom Filter4. 总结1. 位图 我们有1千万个整数&#xff0c;整数的范围在1到1亿之间。如何快速查找某个整数是否在这1千万个整数中呢&#xff1f; 当然&#xff0c;这个问题可以用散列表来解决。可以使用一种特殊的散列表&#xff0…

领域应用 | 企业效益最大化的秘密:知识图谱

本文转载自公众号&#xff1a;TigerGraph。凡是有关系的地方都可以用知识图谱。知识图谱知识图谱是用节点和关系所组成的图谱&#xff0c;为真实世界的各个场景直观地建模&#xff0c;运用“图”这种基础性、通用性的“语言”&#xff0c;“高保真”地表达这个多姿多彩世界的各…

国家一级职业资格证书 计算机类有哪些

当前bai&#xff0c;计算机证书考试多种du多样&#xff0c;水平参差不齐。比较正规且得到社会zhi认可的dao计算机证书考试有以下几种&#xff1a;全国计算机应用软件人员水平考试、计算机等级考试、计算机及信息高新技术考试、计算机应用水平测试和各种国外著名大计算机公司组织…

阿里P8架构师谈:分布式系统全局唯一ID简介、特点、5种生成方式

什么是分布式系统唯一ID 在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。 如在金融、电商、支付、等产品的系统中&#xff0c;数据日渐增长&#xff0c;对数据分库分表后需要有一个唯一ID来标识一条数据或消息&#xff0c;数据库的自增ID显然不能满足…

朴素贝叶斯算法--过滤垃圾短信

文章目录1. 基于黑名单过滤2. 基于规则过滤3. 基于概率统计过滤4. 总结上一节我们讲到&#xff0c;如何用位图、布隆过滤器&#xff0c;来 过滤重复数据。今天&#xff0c;我们再讲一个跟过滤相关的问题&#xff0c;如何过滤垃圾短信&#xff1f;1. 基于黑名单过滤 可以维护一…

2020深度文本匹配最新进展:精度、速度我都要!

文 | QvQ编 | 兔子酱在过去的几年里&#xff0c;信息检索(IR)领域见证了一系列神经排序模型的引入&#xff0c;这些模型多是基于表示或基于交互的&#xff0c;亦或二者的融合。然鹅&#xff0c;模型虽非常有效&#xff0c;尤其是基于 PLMs 的排序模型更是增加了几个数量级的计算…

开源开放 | Gowild 狗尾草“七律”知识图谱进入 OpenKG,开放 8000 万中文百科知识三元组数据...

项目网站: https://ai.gowild.cn/kgOpenKG发布地址: http://openkg.cn/dataset/7lore狗尾草科技&#xff1a;https://www.gowild.cn1.七律开放知识图谱简介作为人工智能技术的重要分支&#xff0c;知识图谱自2012年被提出并成功应用后&#xff0c;就获得了迅速发展&#xff0c;…

向量空间 Vector Space -- 推荐系统

文章目录1. 算法解析2. 基于相似用户做推荐3. 基于相似歌曲做推荐4. 总结音乐App的功能越来越强大&#xff0c;不仅可以自己选歌听&#xff0c;还可以根据你听歌的口味偏好&#xff0c; 给你推荐可能会喜爱的音乐&#xff0c;有时候&#xff0c;推荐的还非常适合你的口味。1. 算…

阿里P8架构师谈:分布式事务的解决方案,以及原理、总结

分布式事务是企业集成中的一个技术难点&#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西&#xff0c;特别是在这几年越来越火的微服务架构中&#xff0c;几乎可以说是无法避免&#xff0c;本文就围绕分布式事务各方面与大家进行介绍。 事务 1.1 什么是事务 数据库…

美团NLP中心算法实习生内推啦!

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术部门介绍搜索与NLP部是美团人工智能技术研发的核心团队&#xff0c;致力于打造高性能、高扩展的搜索引擎和领先的自然语言处理核心技术和服务能力&#xff0c;依托搜索排序&#xff0c;NLP&#xff08;自然语…

B+树 -- MySQL数据库索引

文章目录1. 定义清楚问题2. 尝试学过的数据结构解决问题3. 改造二叉查找树来解决问题4. 总结为了加速数据库中数据的查找速度&#xff0c;我们常对表中数据创建索引。数据库索引是如何实现的呢&#xff1f;底层使用的是什么数据结构和算法呢&#xff1f; 1. 定义清楚问题 如何…

创建python的虚拟环境(图文教程),并使用。

创建python的虚拟环境 第一步&#xff1a;打开anaconda命令行&#xff0c;即打开anaconda prompt。 base的主环境切换到虚拟环境nlp (base) C:\Users\user>conda env list 查看环境列表 (base) C:\Users\user>conda create -n nlp python 创建一个虚拟环境&#xff0…

领域应用 | 到底什么时候使用图数据库?

本文转载自公众号&#xff1a;TigerGraph。图数据库作为近两年快速发展的新型数据受到了市场极大的关注。但对于很多行业而言&#xff0c;图数据库还是一个很新的概念&#xff0c;企业管理人员和技术人员面临着同样的问题&#xff1a;企业的业务适不适合使用图&#xff1f;到底…

常用的后端性能优化六种方式:缓存化+服务化+异步化等

后端优化的六种方法&#xff1a; 1.硬件升级 硬件问题对性能的影响不容忽视。 举一个例子&#xff1a;一个DB集群经常有慢SQL报警&#xff0c;业务排查下来发现SQL都很简单&#xff0c;该做的索引优化也都做了。后来DBA同学帮忙定位到问题是硬件过旧导致&#xff0c;将机械硬…

有钱可以多任性?OpenAI提出人肉模型训练,文本摘要全面超越人类表现!

文 | 小轶背景三个多月前&#xff0c;OpenAI的GPT-3在NLP界掀起轩然大波。就在上周&#xff0c;视金钱如粪土的OpenAI团队又在文本摘要方面推出了最新力作&#xff0c;全方位超越人类表现。其亮点在于&#xff1a;以人类偏好替代自动化评测方法&#xff08;如ROUGE、BLUE&#…

数据挖掘第一次作业

我先大概写了写&#xff0c;还有一些读过的论文没有往上放&#xff0c;一些论文之间的联系线条没有搞出来。 就先这样吧&#xff01;有空再搞&#xff0c;我现在想去玩板子啦&#xff01;

A*搜索算法--游戏寻路

文章目录1. 算法解析2. 总结仙剑奇侠传这类MMRPG游戏中&#xff0c;有人物角色 自动寻路功能。当人物处于游戏地图中某位置时&#xff0c;点击另一个相对较远的位置&#xff0c;人物就会自动地绕过障碍物走过去。这个功能是怎么实现的呢&#xff1f;1. 算法解析 这是一个非常典…

阿里P8架构师谈:应用后端+移动端的性能优化指标,以及性能优化方法

性能优化专题 阿里P8架构师谈&#xff1a;MySQL数据库的索引原理、与慢SQL优化的5大原则 阿里P8架构师谈&#xff1a;Web前端、应用服务器、数据库SQL等性能优化总结 大型网站Web前端优化最佳实践&#xff0c;以及最全优化工具集锦 阿里P8架构师谈&#xff1a;多线程、架构、…