秒懂算法 | 排列树模型——旅行商问题的分支限界法

简介: 介绍旅行商问题的队列式分支限界法、优先队列式分支限界法及其改进、改进算法的Python编程实战。

640.jpg

01、旅行商问题

在旅行商问题的解空间和解空间组织结构基础上,讨论如何用分支限界法进行搜索。

640.png


图1无向连通图

考虑n=4的实例,如图1所示,城市1为售货员所在的住地城市。

对于该实例,简单做如下分析:

(1) 问题的解空间(x1,x2,x3,x4),其中令S={1,2,3,4},x1=1,x2∈S-{x1},x3∈S-{x1,x2},x4∈S-{x1,x2,x3}。

(2) 解空间的组织结构是一棵深度为4的排列树。

(3) 搜索:设置约束条件g[i][j]!=∞,其中1≤i≤4,1≤j≤4,g是该图的邻接矩阵;设置限界条件:cl<bestl,其中cl表示当前已经走的路径长度,初始值为0;bestl表示当前最短路径长度,初始值为∞。

1●队列式分支限界法

(1) 算法设计。

用先进先出的队列存储活节点,当活节点表不空,循环做:从活节点表中取出一个活节点,一次性扩展它的所有孩子节点,判断约束条件和限界条件,若满足约束条件和限界条件,则将该孩子节点插入到活节点表中;否则,舍弃该孩子节点;直到活节点表为空或找到了所需要的解。

2●优先队列式分支限界法

(1) 算法设计。

用堆结构存储活节点,算法的优先级定义为当前节点的路径长度cl,当前路径长度cl越短,优先级越高。当活节点表不空,循环做:从堆中取出一个活节点,一次性扩展它的所有孩子节点,判断约束条件和限界条件,若满足约束条件和限界条件,则将该孩子节点插入到活节点表中;否则,舍弃该孩子节点;直到活节点表为空或找到了所需要的解。

3●算法优化

(1) 优化策略。

根据题意,每个城市各去一次销售商品。因此,可以估计路径长度的下界(用zl表示),初始时,zl等于图中每个顶点权最小的出边权之和。随着搜索的深入,可以估计剩余路径长度的下界(用rl表示)。故可以考虑用zl(zl=当前路径长度cl+剩余路径长度的下界rl)作为活节点的优先级,同时将限界条件优化为zl=cl+rl<bestl,cl的初始值为0,rl初始值为每个顶点权最小的出边权之和。那么,依照该限界条件,队列式分支限界法和优先队列式分支限界法搜索过程形成的搜索树如图2所示。

640.png


图2 优化条件下的搜索树


(2) Python实战——优先队列式分支限界法。
首先导入程序需要的类包math和queue。

640.png


定义一个类Node,用于描述树节点。该类有4个字段,分别是当前路径长度cl,当前节点在解空间树中的层次level、路径长度下界bl和当前节点代表的部分解x。其中,路径长度下界bl为优先级,路径长度下界bl越小,优先级越高。类Node重载了小于__lt__()方法和等于__eq__()方法,定义参与比较的字段为bl。其代码如下:

640.png


定义一个lower_bound()函数,用于计算无向连通带权图G中每个城市的最小出边Minout及所有路径长度下界rl。其代码如下:

640.png


定义一个traveling()函数,用于搜索最优旅行路线,并记录最短路径长度。该函数接收图的邻接矩阵a,出发地start和城市数量g_n,输出最优旅行路线和最短路径长度。其代码如下:

640.png


定义Python入口——main()函数,在main()函数中,初始化旅行商问题的一个实例,给定图的邻接矩阵中,下标代表城市编号,从1开始,故Python二维列表a中的第0行第0列为无效数据。然后调用 traveling()函数得到问题的最优解bestx和最优值bestl,bestx中的0号存储单元中的数据为无效数据。最后打印输出,将结果显示在显示器上。其代码如下:

640.png


输出结果为

最短路径长度为:43

最优旅行路线为:[0, 1, 4, 3, 2, 5]

目录
相关文章
|
6月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
296 4
|
7月前
|
机器学习/深度学习 人工智能 JSON
微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
Microsoft Research最新推出的rStar2-Agent在AIME24数学基准测试中以80.6%的准确率超越超大规模模型DeepSeek-R1,展现“思考更聪明”而非“更长”的AI推理新方向。
264 8
微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
|
7月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
465 2
|
7月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
171 8
|
7月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
7月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
7月前
|
机器学习/深度学习 运维 算法
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
582 0
|
8月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
245 2
|
7月前
|
机器学习/深度学习 数据采集 传感器
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
446 0
|
7月前
|
机器学习/深度学习 存储 算法
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
189 0

热门文章

最新文章