模拟退火算法解决TSP问题

您所在的位置:网站首页 模拟退火算法优缺点 模拟退火算法解决TSP问题

模拟退火算法解决TSP问题

2024-06-12 22:59| 来源: 网络整理| 查看: 265

旅行商问题的几种求解:https://wenku.baidu.com/view/0579c5206294dd88d1d26b70.html 模拟退火法解决TSP及Matlab实现:https://www.cnblogs.com/youngsea/p/7461977.html 模拟退火法TSP问题的Python实现:https://blog.csdn.net/qq_34798326/article/details/79013338

一、旅行商问题

1. 问题描述:一名商人要到若干城市去推销商品,已知城市个数和各城市间的路程(或旅费),要求找到一条从城市1出发,经过所有城市且每个城市只能访问一次,最后回到城市1的路线,使总的路程(或旅费)最小。 2. 问题分析:该问题是组合优化问题,属于NP难题,是诸多领域内出现的多种复杂问题的集中概括和简化形式,并且已成为各种启发式的搜索、优化算法的间接比较标准。 TSP (图片来源https://www.cnblogs.com/youngsea/p/7461977.html)

二、 模拟退火算法

1. 算法 模拟退火算法可分为解空间、目标函数和初始解三部分,其基本思想是: (1)初始化:初始温度T(充分大),初始解状态s(是算法迭代的起点),每个T值的迭代次数L; (2)对k=1,……,L做第(3)至第6步; (3)产生新解s′; (4)计算增量cost=cost(s′)-cost(s),其中cost(s)为评价函数; (5)若t t2[0]: for i in np.arange(markovlen): #下面的两交换和三角换是两种扰动方式,用于产生新解 if np.random.rand() > 0.5:# 交换路径中的这2个节点的顺序 # np.random.rand()产生[0, 1)区间的均匀随机数 while True:#产生两个不同的随机数 loc1 = np.int(np.ceil(np.random.rand()*(num-1))) loc2 = np.int(np.ceil(np.random.rand()*(num-1))) ## print(loc1,loc2) if loc1 != loc2: break solutionnew[loc1],solutionnew[loc2] = solutionnew[loc2],solutionnew[loc1] else: #三交换 while True: loc1 = np.int(np.ceil(np.random.rand()*(num-1))) loc2 = np.int(np.ceil(np.random.rand()*(num-1))) loc3 = np.int(np.ceil(np.random.rand()*(num-1))) if((loc1 != loc2)&(loc2 != loc3)&(loc1 != loc3)): break # 下面的三个判断语句使得loc1 loc3: loc2,loc3 = loc3,loc2 if loc1 > loc2: loc1,loc2 = loc2,loc1 #下面的三行代码将[loc1,loc2)区间的数据插入到loc3之后 tmplist = solutionnew[loc1:loc2].copy() solutionnew[loc1:loc3-loc2+1+loc1] = solutionnew[loc2:loc3+1].copy() solutionnew[loc3-loc2+1+loc1:loc3+1] = tmplist.copy() valuenew = 0 for i in range(num-1): valuenew += distmat[solutionnew[i]][solutionnew[i+1]] valuenew += distmat[solutionnew[0]][solutionnew[51]] # print (valuenew) if valuenew



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3