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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
简介: 介绍旅行商问题的队列式分支限界法、优先队列式分支限界法及其改进、改进算法的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]

目录
相关文章
|
4天前
|
机器学习/深度学习 算法
扩散模型=进化算法!生物学大佬用数学揭示本质
在机器学习与生物学交叉领域,Tufts和Harvard大学研究人员揭示了扩散模型与进化算法的深刻联系。研究表明,扩散模型本质上是一种进化算法,通过逐步去噪生成数据点,类似于进化中的变异和选择机制。这一发现不仅在理论上具有重要意义,还提出了扩散进化方法,能够高效识别多解、处理高维复杂参数空间,并显著减少计算步骤,为图像生成、视频合成及神经网络优化等应用带来广泛潜力。论文地址:https://arxiv.org/pdf/2410.02543。
31 21
|
10天前
|
人工智能 算法 搜索推荐
单纯接入第三方模型就无需算法备案了么?
随着人工智能的发展,企业接入第三方模型提升业务能力的现象日益普遍,但算法备案问题引发诸多讨论。根据相关法规,无论使用自研或第三方模型,只要涉及向中国境内公众提供算法推荐服务,企业均需履行备案义务。这不仅因为服务性质未变,风险依然存在,也符合监管要求。备案内容涵盖模型基本信息、算法优化目标等,且需动态管理。未备案可能面临法律和运营风险。建议企业提前规划、合规管理和积极沟通,确保合法合规运营。
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
266 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
49 2
|
2月前
|
算法
基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真
本项目基于MATLAB2022a,采用模糊PI控制算法结合龙格-库塔方法,对CSTR模型进行Simulink建模与仿真。通过模糊控制处理误差及变化率,实现精确控制。核心在于将模糊逻辑与经典数值方法融合,提升系统性能。
|
2月前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
3月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
179 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
171 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
3月前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
61 2
|
3月前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。

热门文章

最新文章