基于改进大洪水算法求解TSP问题

article/2025/9/18 14:20:12
from function import get_distances, get_value, result_plot, get_neighbors
from random import randintdef r_opt(route):"""利用2-opt算法对route进行改进,对当前路径所有不相邻的两点进行边边交换"""new_route = route[:]value = get_value(new_route, distances)for k1 in range(city_number):for k2 in range(k1 + 1, city_number):new_route = route[:]for j in range(city_number):if k1 < j <= k2:new_route[j] = route[k1 + k2 - j + 1]new_value = get_value(new_route, distances)if new_value < value:route = new_route[:]value = new_valuereturn route, valueif __name__ == '__main__':# 算法参数N = 1000  # 迭代次数nb = 5  # 邻居城市个数# 城市坐标数据,城市序号为0,1,2,3...city_coordinates = [(41, 94), (37, 84), (54, 67), (25, 62), (7, 64), (2, 99), (68, 58), (71, 44), (54, 62),(83, 69),(64, 60), (18, 54), (22, 60), (83, 46), (91, 38), (25, 38), (24, 42), (58, 69), (71, 71),(74, 78),(87, 76), (18, 40), (13, 40), (82, 7), (62, 32), (58, 35), (45, 21), (41, 26), (4, 35), (4, 50)]city_number = len(city_coordinates)  # 城市数量distances = get_distances(city_coordinates)# 计算每个城市的邻居城市neighbors = get_neighbors(city_number, distances)# 随机生成初始解path = list(range(city_number))value = get_value(path, distances)water_level = valuebest_value = value  # 较大的初始值,存储最优解best_path = path[:]  # 存储最优路径# 进行迭代iterate_result = []for n in range(N):print(f"当前迭代次数为:{n},最优值为:{best_value}")# 使用2-opt算法对当前路径进行改进path, value = r_opt(path)# 进行城市子排列反序for k in range(nb):for i in range(city_number):city = neighbors[i][k]  # 距离城市i第k近的城市# 对城市i与城市city进行边边交换,生成新的路径index1 = path.index(i)index2 = path.index(city)index1, index2 = min(index1, index2), max(index1, index2)new_path = path[:]for j in range(city_number):if index1 < j <= index2:new_path[j] = path[index1 + index2 - j + 1]new_value = get_value(new_path, distances)if new_value < water_level:path = new_path[:]up = (water_level - new_value) / 500if up < 0.01:up = 0.01water_level = water_level - up# 当前最佳值if new_value < best_value:best_value = new_valuebest_path = new_path[:]# 随机搜索new_path = best_path[:]index1, index2 = randint(0, city_number - 1), randint(0, city_number - 1)new_path[index1], new_path[index2] = best_path[index2], best_path[index1]new_value = get_value(new_path, distances)if new_value < best_value:best_value = new_valuebest_path = new_path[:]iterate_result.append(best_value)print(best_path)print(get_value(best_path, distances))result_plot(iterate_result)

求得的最终解为: [0, 1, 2, 8, 17, 18, 19, 20, 9, 10, 6, 7, 13, 14, 23, 24, 25, 26, 27, 15, 16, 21, 22, 28, 29, 11, 12, 3, 4, 5]

有问题欢迎提问


http://chatgpt.dhexx.cn/article/KwluYm9b.shtml

相关文章

粒子群算法介绍

优化算法——粒子群优化介绍 1. 基本概念 粒子群优化算法(PSO&#xff1a;Particle swarm optimization) 是一种进化计算技术&#xff08;evolutionary computation&#xff09;。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想&#xff1a;是通过群体中个体之间的协作…

Python实现VRP常见求解算法——离散量子行为粒子群算法(DQPSO)

基于python语言&#xff0c;实现经典离散量子行为粒子群算法&#xff08;DQPSO&#xff09;对车辆路径规划问题&#xff08;CVRP&#xff09;进行求解。 目录 优质资源1. 适用场景2. 求解效果3. 问题分析4. 数据格式5. 分步实现6. 完整代码参考 优质资源 python实现6种智能算法…

回归预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM、BiLSTM多输入单输出回归预测

回归预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM、BiLSTM多输入单输出回归预测 目录 回归预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM、BiLSTM多输入单输出回归预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-BiLSTM、PSO-BiLSTM、BiLSTM神经…

云模型量子粒子群算法

云模型量子粒子群算法 量子粒子群推导过程&#xff1a; 量子粒子群算法(Quantum-behaved Particle Swarm Optimization&#xff0c;QPSO)具有进化方程简单、控制参数少、收敛速度快、运算量少等特点。QPSO从量子动力学运动方程出发&#xff0c;通过蒙特卡洛逆变换法定格某时刻…

【配电网重构】基于粒子群算法求解配电网重构问题附matlab代码

1 内容介绍 随着大规模,跨区域的配电网不断发展,对配电网运行的经济性和可靠性要求越来越高,在配电网发生大范围停电事故后,需要对配电网的拓扑结构进行重新组合,从而达到恢复供电的目的,这个重新组合配电网拓扑结构的过程即为配电网恢复重构.配电网恢复重构是一个多目标非线性…

回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测

回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测 目录 回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-GRU、PSO-GRU和GRU门控循环单元多变量回归预测&#xff1b; 2.输…

回归预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU多变量回归预测

回归预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU多变量回归预测 目录 回归预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU多变量回归预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-BiGRU、PSO-BiGRU和BiGRU双向门控循环单元多变量回归…

QPSO---收缩扩张系数的选择方案(未完待续)

一、理论基础 平均最优位置&#xff1a; 其中,P代表第i个粒子的最优位置&#xff0c;即局部最优位置&#xff0c;mbest为平均最优位置。对于多维粒子而言&#xff0c;每一维上的最优位置等于全部粒子在该维度上的平均值。 其中小写的p代表每个粒子的局部吸引子&#xff0c;它的…

组合预测模型 | 基于QPSO-LSTM、PSO-LSTM、LSTM单输入单输出时序预测(Matlab程序)

组合预测模型 | 基于QPSO-LSTM、PSO-LSTM、LSTM单输入单输出时序预测(Matlab程序) 目录 组合预测模型 | 基于QPSO-LSTM、PSO-LSTM、LSTM单输入单输出时序预测(Matlab程序)预测结果基本介绍程序设计参考资料预测结果

时序预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU时间序列预测

时序预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于QPSO-GRU、PSO-GRU、GRU时间序列预测。 1.Matlab实现QPSO-GRU、PSO-GRUG…

时序预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM时间序列预测

时序预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM时间序列预测。 1.Matlab实现QPSO-LSTM…

回归预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM多输入单输出回归预测

回归预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM多输入单输出回归预测 目录 回归预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM多输入单输出回归预测效果一览基本描述模型描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-LSTM、PSO-LSTM和LSTM神经网络时间序…

QPSO Algorithm

QPSO Algorithm C#语言.NetFramwork4.6.1平台实现&#xff08;需了解QPSO算法原理&#xff0c;可参考清华大学孙俊教授编写的教材《量子行为粒子群优化原理及其应用》&#xff09; using System; using System.Collections.Generic; using System.Linq; using System.Text; u…

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目&#xff0c;提供了一个微信小程序组件&#xff08;Component&#xff09;&#xff0c;我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…

微信小程序案例---本地生活

文章目录 首页效果以及实现步骤接口地址新建项目并梳理项目结构配置导航栏效果配置 tabBar 效果实现轮播图效果实现九宫格效果实现图片布局 本地生活&#xff08;列表页面&#xff09;演示页面效果以及主要功能列表页面的 API 接口页面导航并传参获取并渲染列表数据上拉触底时加…

微信小程序--操作示例2

微信小程序--商城首页 我们首先有一个商城的接口 调用商城中首页所需要的一些数据 例如&#xff1a; onLoad: function () {var that this;//请求服务器时间戳wx.request({url: http://www.tp.com/index.php?mApi&cBase&agetServerTime, //请求地址success: fu…

微信小程序官方示例

微信小程序官方示例 下载微信客户端版本号&#xff1a;6.3.27 及以上&#xff0c;只有小程序绑定的开发者有权限扫码体验。下载源码 版本20161010

什么是云开发?小程序实例超详细演示~

学习视频&#xff1a; 八分钟读懂云开发_哔哩哔哩_bilibili小姐姐带你30分钟创建并上线小程序项目【云开发实战】_哔哩哔哩_bilibili 参考资料&#xff1a; 微信开放文档 (qq.com)云开发_百度百科 (baidu.com) 推荐阅读&#xff1a; 云原生推动全云开发与实践 - 知乎 (zhihu.co…

微信小程序入门教程+案例demo

微信小程序入门教程案例demo 尊重原创&#xff0c;转载请注明出处&#xff1a;原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态&#xff0c;——微信小程序开发也就那么回事。你只需要一点点css&#xff08;真的只要一点点&#xff09;的基础就可以了。 认清…

微信小程序开发 | API应用案例(下)

API应用案例&#xff08;下&#xff09; 6.1【案例5】模拟时钟6.1.1 案例分析6.1.2 前导知识6.1.3 钟表页面布局6.1.4 钟表页面绘制 6.2【案例6】罗盘动画6.2.1 案例分析6.2.2 前导知识6.2.3 设计罗盘页面布局6.2.4 手指触摸旋转罗盘6.2.5 单击按钮操作罗盘 6.3【案例7】文件上…