用分支限界法求解旅行商问题.pdf
吴茂献①侯丽萍②李安宁③
(D炮兵学院(函河南信阳农业高等专科学校(爹河南驻马店市委党校
摘要:用分支限界法求解旅行商问题,用c++语言编程实现
关键字:分支限界法、旅行商问题、C++语言
1.引言 stancIntrm吐)1st=ⅣLaxCost:
旅行商问题(1'SP问题1就是一销售商从n个城市中 sta石cPATHminpath:
的某一城市出发,不重复地走完其余n一1个城市并回 EDGE
sdecte(1Edge;
到原出发点,在所有可能的路径中求出路径长度最短 NoDE★le矗,★right;
的一条。它是组合优化中研究最多的问题之一,是一个 /★如果当前矩阵大小为2.说明还有两条边没有
经典的NP难题。吸引了许多不同领域的研究工作者, 选,而这两条边必定只能有一种组合,
包括数学、运筹学、物理、生物和人工智能等领域,它是 ★才能构成整体回路.所以事实上所有路线已经
目前优化领域里的研究热点。 确定。★/
目前解决旅行商问题有诸多算法.神经网络、遗传
算法、免疫算法等,在各种解决旅行商问题的算法中, if(root.LowCost
还是存在很多问题。本次设计尝试使用分支限界法来 minDist=root.LowCost:
求旅行商问题的最优解。并用C++语言编程实现。该算
法可以取得较好的效果。 cin.get0;
2.分支限界法的基本思想 retum(r11inPath);})
分支限界法以广度优先或最小耗费f最大效益1优
先的方式搜索问题的解空间树.其搜索策略是:在扩展 下界尽量大的原则选分枝边★/
结点处,先生成其所有的儿子结点(分支),在这些儿子 le丘=newNoDE:
结点中。那些导致不可行解或导致非最优鳃的儿子结 /★建立左右分枝结点★/
点被舍弃,其余儿子结点被加入活结点表中。此后,从 2new
ri曲t NoDE;
活结点表中取下一个结点成为当前扩展结点,并重复 leR一>LowCost=root.LowCost:
上述结点扩展过程。这个过程一直持续到找到所需的 /★继承父结点的下界★/
解或活结点表为空时为止。
3.用C++语言编程求解旅行商问题的主要代码如 /★删掉分枝边★/
下: le丘一>path=root.path;
/★算法主搜索函数.root是当前的根结点★/ /★继承父结点的路径,没有增加新边★/
PATH leR一>1eR=NULL:
Search(NoDEroot){
电膀翔识与技术
5
囊甏鏊萎i瀚赣麓蠛
le丘一>right=NULL; for(col=0:col
right一>LowCost=mot.LowCost;