旅行商问题

旅行商问题
旅行商问题

算法设计与分析实验报告实验三旅行商问题

院系:

班级:计算机科学与技术

学号:

姓名:

任课教师:

成绩:

湘潭大学

2016年5月

实验三旅行商问题

一. 实验内容

分别编程实现回溯法和分支限界法求TSP问题的最优解,分析比较两种算法的时间复杂度并验证分析结果。

二.实验目的

1、掌握回溯法和分支限界法解决问题的一般步骤,学会使用回溯法和分支限界法解决实际问题;

2、理解回溯法和分支限界法的异同及各自的适用范围。

三. 算法描述

旅行商问题的回溯法算法可描述如下:

Template

Class Traveling{

friend Type TSP(int ** , int[],int ,Type);

Private;

Void Backtrack(int i);

Int n, //图G的顶点数

*x; //当前解

*bestx; //当前最优解

Type **a, //图G的邻接矩阵

cc, //当前费用

bestc, //当前最优解

NoEdge; //无边标记

};

Template

Void Traveling : : backtrack(int i)

{if(i ==n){

if(a[x[n-1]][x[n]]!=NoEdge&&a[x[n]][1]!=NoEdge&&

(cc+a[x[n-1]][x[n]]+a[x[n]][1] +a[x[n]][1]

for(int j = 1;j<=n;j++) bestx[j] = x[j];

bestc == cc + a[x[n-1]][x[n]]+a[x[n]][1]};

}else{

For (int j = i;j<= n;j++)

//是否可进入x[j]子树?

If(a[x[i-1]][x[j]] != NoEdge &&(cc+a[x[i-1]][x[j]] < bestc || bestc == NoEdge)){

//搜素子树

Swap(x[i],x[j]);

cc += a[x[i-1]][x[i]];

Backtrack(i + 1);

cc -= a[x[i-1]][x[i]];

Swap(x[i],x[j]);

}

}

}

Template

Type TSP(Type**a, int v[], int n, Type NoEdge)

{Traveling Y;

//初始化Y

Y.x = new int [n+1];

//置x为单位排列

For(int i = 1;i <= n;i++)

Y.x[i] = i;

Y.a = a;

Y.n = n;

Y.bestc = NoEdge;

Y.bestx = v;

https://www.360docs.net/doc/9910421913.html, = 0;

Y.NoEdge = NoEdge;

//搜索x[2:n]的全排列

Y.Backtrack(2);

Delete[]Y.x;

Return Y.bestc;

}

算法效率:

如果不考虑更新bestx所需的计算时间,则Backtrack

需要O((n-1)!)计算时间。由于算法Backtrack在最坏情

款下可能需要更新当前最优解O((n-1)!)次,每次更新需

O(n)计算时间,从而整个算法的计算时间复杂性为O(n!)。

旅行商问题的分支界限法算法可描述如下:

使用优先队列来存储活节点,优先队列中的每个活节点都存储从根到该活节点的相应路径。具体算法可描述如下:

Template

Class MinHeapNode{

firend Traveling;

Public:

Operator Type() const {return lcost;}

Private:

Type lcost, //子树费用的下界

cc, //当前费用

rcost; //x[s:n-1]中定点最小出边费用和

Int s, //根节点到当前节点的路径为x[0:s]

*x; //需要进一步搜索的顶点是x[s+1:n-1]

};

四. 算法实现

源程序代码

/*回溯法*/

#include

#include

#define N 5

double cc,//当前路径费用

bestc;//当前最优解费用

double a[N+1][N+1];//邻接矩阵,存放图的信息

int bestx[N+1];//当前最优解

int x[N+1];//当前解

void inputAjac()

{

int i,j;

for(i=1;i<=N;i++)

{ for(j=i+1;j<=N;j++)

{

printf("请输入第%d个城市到第%d个城市所需路费为:",i,j);

scanf("%lf",&a[i][j]);

a[j][i]=a[i][j];

}

}

}

void backtrack(int i)

{

2.旅行商TSP问题(1.1)

旅行商问题 旅行商问题(Traveling Salesman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。 目录 目录 旅行商问题 (1) 目录 (1) 1.简介 (1) 2.研究历史 (2) 3.问题解法 (2) 4.解法思路 (2) 途程建构法 (2) 途程改善法 (2) 合成启发法 (3) 5.研究进展 (3) 6.问题分析 (3) 1.简介 “旅行商问题”常被称为“旅行推销员问题”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。规则虽然简单,但在地点数目增多后求解却极为复杂。以42个地点为例,如果要列举所有路径后再确定最佳行程,那么总路径数量之大,几乎难以计算出来。多年来全球数学家绞尽脑汁,试图找到一个高效的算法。TSP问题在物流中的描述是对应一个物流配送公司,欲将n个客户的订货沿最短路线全部送到。如何确定最短路线。TSP问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-1)。可以形象地把解空间看成是一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到山顶或谷底的过程。

2.研究历史 旅行商问题字面上的理解是:有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。 TSP的历史很久,最早的描述是1759年欧拉研究的骑士周游问题,即对于国际象棋棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起始点。 TSP由美国RAND公司于1948年引入,该公司的声誉以及线性规划这一新方法的出现使得TSP成为一个知名且流行的问题。 3.问题解法 旅行推销员的问题,我们称之为巡行(Tour),此种问题属于NP-Complete 的问题,从距离矩阵中产生一个近似最佳解的途径,有以下几种解法: 1、途程建构法(Tour Construction Procedures) 2、途程改善法(Tour Improvement Procedure) 先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法:如果成本降低(距离减少),则取代之,直到无法改善为止,K通常为2或3。 3、合成启发法(Composite Procedure) 有以下几种解法:起始解求解+2-Opt:起始解求解+3-Opt: 4.解法思路 旅行推销员的问题,我们称之为巡行(Tour),此种问题属于NP完全问题(NP-Complete),所以旅行商问题大多集中在启发式解法。Bodin(1983)等人将旅行推销员问题的启发式解法分成三种: 途程建构法 从距离矩阵中产生一个近似最佳解的途径,有以下几种解法:如 1、近邻点法(Nearest Neighbor Procedure):一开始以寻找离场站最近的需求点为起始路线的第一个顾客,此后寻找离最后加入路线的顾客最近的需求点直到最后。(像贪婪算法) 2、节省法(Clark and Wright Saving):以服务每一个节点为起始解,根据三角不等式两边之和大于第三边之性质,其起始状况为每服务一个顾客后便回场站,而后计算路线间合并节省量,将节省量以降序排序而依次合并路线,直到最后。(像Dijstra算法) 3、插入法(Insertion procedures):如插入法、最省插入法、随意插入法、最远插入法、最大角度插入法等。 途程改善法 先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法:

旅行商问题概述_郭靖扬

旅行商问题(TravelingSalesmanProblem,简称TSP)是一个著名的组合优化问题:给定n个城市,有一个旅行商从某一城市出发,访问每个城市各一次后再回到原出发城市,要求找出的巡回路径最短。如果用图论来描述,那就是已知带权图G= (C,L),寻出总权值最小的Hamilton圈。其中C={c1,c2,…,cn}表示n个城市的集合,L={lij|ci,cj∈C}是集合C中元素(城市)两两连接的集合,每一条边lij,都存在与之对应的权值dij,实际应用中dij可以表示距离、费用、时间、油量等。 TSP的描述虽然简单, 解决起来却很困难。最简单思路是用穷举法把所有可能的巡回路径全部列出来,最短的一个就是最优解,但这样只能处理很小规模的问题。旅行商问题属于 NP-complete问题, 是NP(non-deterministicpoly-nominal)问题中最难的一类,不能在多项式时间内求解。如果有n座城市,那么巡游路径共有(n-1)!/2条,计算的时间和(n-1)!成正比。当 城市数n=20,巡回路径有1.2×1018种,n=100, 巡回路径就有多达4.6×10155种,而据估计宇宙中基本粒子数“仅仅只有”1087个。 尽管如此,随着算法研究的逐步深入和计算机技术飞速提高,对TSP问题的研究不断取得进展。70年来,被征服的TSP规模从几十个城市增加到上万个城市。目前的最高记录是在2004年5月,找到的巡游瑞典24978个城镇的最优路径 (sw24978), 花费了84.8个CPU年。图1展示了TSP的研究进展,最近的二三十年时间里,被攻克的TSP规模高速增长,差不多是每十年增加一个数量级。照这样发展下去的话,再过20年就能解决上百万个城市的TSP,有专家甚至已经为此准备好了数据:全球190,4711个城市的坐标。当然,能不能达到这 个目标,有赖于未来计算技术的发展。 图1TSP的发展 字母后面的数字表示城市数,“sw24978”就是瑞典的 24978个城镇。 一、应用 旅行商问题具有重要的实际意义和工程背景。它一开始 是为交通运输而提出的,比如飞机航线安排、送邮件、快递服务、设计校车行进路线等等。实际上其应用范围扩展到了许多其他领域,下面举几个实例。 印制电路板转孔是TSP应用的经典例子,在一块电路板上打成百上千个孔,转头在这些孔之间移动,相当于对所有的孔进行一次巡游。把这个问题转化为TSP,孔相当于城市,孔到孔之间的移动时间就是距离。 为了避免大气干扰,使光学系统达到其衍射极限分辨率,欧美发达国家提出发展空间光干涉仪和综合孔径望远镜的计划。美国航空航天局有一个卫星群组成空间天文台(Space-basedObservatories)的计划, 用来探测宇宙起源和外星智慧生命。欧洲空间局也有类似的Darwin计划。对天体成像的时候,需要对两颗卫星的位置进行调整,如何控制卫星,使消耗的燃料最少,可以用TSP来求解。这里把天体看作城市,距离就是卫星移动消耗的燃料。 美国国家卫生协会在人类基因排序工作中用TSP方法绘制放射性杂交图。把DNA片断作为城市,它们之间的相似程度作为城市间的距离。法国科学家已经用这种办法作出了老鼠的放射性杂交图。 此外,旅行商问题还有电缆和光缆布线、晶体结构分析、数据串聚类等多种用途。更重要的是,它提供了一个研究组合优化问题的理想平台。很多组合优化问题,比如背包问题、分配问题、车间调度问题,和TSP同属NP-complete类,它们都是同等难度的,如果其中一个能用多项式确定性算法解决,那么其他所有的NP-complete类问题也能用多项式确定性算法解决。很多方法本来是从TSP发展起来的,后来推广到其他NP-complete类问题上去。 二、TSP求解方法 求解旅行商问题的方法可以分为两大类,一类是精确算法,目的是要找到理论最优解;另一类是近似算法,不强求最优解,只要找到“足够好”的满意解就可以了。 (一)精确算法 如前面所述,穷举法和全局搜索算法属于精确算法,但 旅行商问题概述 郭靖扬 (电子科技大学光电信息学院, 四川成都610054) 【摘要】旅行商问题是组合优化的经典问题,应用广泛,而且长期以来被作为NP-complete问题的理想研究平台。文章介绍 了旅行商问题的基础知识、应用,以及常用的求解方法。 【关键词】旅行商问题;组合优化;NP-complete;k-opt;智能算法【中图分类号】TP182【文献标识码】A【文章编号】1008-1151(2006)08-0229-02大众科技 DAZHONGKEJI2006年第8期(总第94期) No.8,2006 (CumulativelyNo.94) 【收稿日期】2006-03-18【作者简介】郭靖扬(1980-),四川宜宾人,电子科技大学光电信息学院硕士研究生。 229--

旅行商问题数学建模

黄石理工学院 数学建模大型作业2011—2012 学年第1学期

目录 一.摘要 二.旅行问题 1.问题描述 2.符号说明 3.模型设计 4.建模求解 5.模型分析 6. 三.建模过程及心得体会 四.参考文件

一.摘要 本文是一个围绕旅行商问题和背包问题这两个经典问题的论文。问题一,是一个依赖与每个城市去一次且仅去一次的路线确定问题,问题二类似于问题一。问题三是一个依赖于可背重量限制的背包问题。 关键词:HAMILTON回路 LINGO 最优旅行路线 0-1模型 二.旅行问题 问题描述 某人要在假期内从城市A出发,乘火车或飞机到城市B,C,D,E,F 旅游购物。他计划走遍这些城市各一次且仅一次,最后返回城市A。已知城市间的路费数据见附表1,请你设计一条旅行路线使得他的总路费最少。如果临行他因故只能去4个城市,该怎样修订旅行路线? 在城市间旅游时他计划购买照相机,衣服,书籍,摄像机,渔具,白酒,食品,而受航空行李重量的限制以及个人体力所限,所买物品的总重量不能超过15kg,各种物品的价格见附表2.请你为他决策买哪些物品,使所买物品价值最大。

模型设计 首先给出一个定义:设v1,v2,......,vn 是图G 中的n 个顶点,若有一条从某一顶点v1出发,经过各节点一次且仅一次,最后返回出发点v1的回路,则称此回路为HAMILTON 回路。 问题1. 分析:这个优化问题的目标是使旅行的总费用最少,要做的决策是如何设定旅行路线,决策受的约束条件:每个城市都必须去,但仅能去一次。按题目所给,将决定变量,目标函数和约束条件用数学符号及式子表示出来,就可得一下模型。 模型建立: 对于6个城市的旅行问题设A,B,C,D,E,F 六个城市分别对应v1,v2,v3,v4,v5,v6。假设ij d 表示从城市i 到城市j 的费用。定义0-1整数型变量ij x =1表示从城市i 旅行到城市j ,否则 ij x =0。则旅行问题的数学模型可表示为一个整数规划问题。 min z=66 1 ij ij i j d x =∑∑ (i ≠j) s.t. 6 1ij i x =∑=1 (i ≠j ;j=1,2, (6) 6 1 ij j x =∑=1 (i ≠j ;i=1,2, (6) 1i j ij u u nx n -+≤- (i ≠j;i=2,3,……,6;j=2,3,……6) 其中辅助变量i u (i=2,3,……,6)可以是连续变化的,虽然这些变量在最优解中取普通的整数值(从而在约束条件中,可以限定这些变量为整数)。事实上,在最优解中,i u =访问城市的顺序数。 模型求解 运用LINGO ,输入程序: MODEL : !Traveling Sales Problem for the cities of six city; SETS :

货郎担问题或旅行商问题动态规划算法

#include #include #define maxsize 20 int n; int cost[maxsize][maxsize]; int visit[maxsize]={1}; //表示城市0已经被加入访问的城市之中 int start = 0; //从城市0开始 int imin(int num, int cur) { int i; if(num==1) //递归调用的出口 return cost[cur][start]; //所有节点的最后一个节点,最后返回最后一个节点到起点的路径 int mincost = 10000; for(i=0; i

{ /*if(mincost <= cost[cur][i]+cost[i][start]) { continue; //其作用为结束本次循环。即跳出循环体中下面尚未执行的语句。区别于break } */ visit[i] = 1; //递归调用时,防止重复调用 int value = cost[cur][i] + imin(num-1, i); if(mincost > value) { mincost = value; } visit[i] = 0;//本次递归调用完毕,让下次递归调用 } } return mincost;

} int main() { int i,j; // int k,e,w; n=4; int cc[4][4]={{0,10,15,20}, {5,0,9,10}, {6,13,0,12}, {8,8,9,0}}; for(i=0; i

[精品文档]旅行商问题

算法设计与分析实验报告实验三旅行商问题 院系: 班级:计算机科学与技术 学号: 姓名: 任课教师: 成绩: 湘潭大学 2016年5月

实验三旅行商问题 一. 实验内容 分别编程实现回溯法和分支限界法求TSP问题的最优解,分析比较两种算法的时间复杂度并验证分析结果。 二.实验目的 1、掌握回溯法和分支限界法解决问题的一般步骤,学会使用回溯法和分支限界法解决实际问题; 2、理解回溯法和分支限界法的异同及各自的适用范围。 三. 算法描述 旅行商问题的回溯法算法可描述如下: Template Class Traveling{ friend Type TSP(int ** , int[],int ,Type); Private; Void Backtrack(int i); Int n, //图G的顶点数 *x; //当前解 *bestx; //当前最优解 Type **a, //图G的邻接矩阵 cc, //当前费用 bestc,//当前最优解 NoEdge; //无边标记 }; Template Void Traveling : : backtrack(int i) {if(i ==n){

if(a[x[n-1]][x[n]]!=NoEdge&&a[x[n]][1]!=NoEdge&& (cc+a[x[n-1]][x[n]]+a[x[n]][1] +a[x[n]][1] Type TSP(Type**a, int v[], int n, Type NoEdge) {Traveling Y; //初始化Y Y.x = new int [n+1]; //置x为单位排列 For(int i = 1;i <= n;i++) Y.x[i] = i; Y.a = a; Y.n = n;

旅行商问题

旅行商问题: 问题描述:已知一个由n个城市(顶点)组成的有向网G , n个城市为v1, v2,…, v n , G的邻接矩阵为D=(d ij)nxn , d ij为边< v i, v j>上的权(表示城市v i到v j的耗费)。一个旅行商从v1开始,巡回访问每个城市一次且仅一次,最后返回v1, 这个旅行商该如何选择旅行线路,使得整个行程耗费最小? ● 分析: 可利用求一般问题的所有解的回溯算法得到解最优化问题的回溯算法。 (1) 该问题是求最短的哈密顿回路。 (2) 用min表示当前最优值,s[1..n]表示当前最优解。 (3) 除了解的约束条件,用如下剪枝条件进一步剪枝: 当前路径长度>=min (4) 设置一个标记数组tag[1..n]: tag[i]=1, 顶点i在当前路径上 tag[i]=0, 顶点i不在当前路径上 当一个顶点退出当前路径时,该顶点的标记应复原为0。 ● 回溯算法: 算法 TRAVELING_SALESMAN 输入:正整数n和含n个顶点的有向网G的邻接矩阵D。 输出:关于G的旅行商问题的一条最短旅行线路和最小耗费, 若问题无解,则输出no solution。 min=∞ x[1]=1 //用x[1..n]表示当前搜索路径, 从顶点1开始。 len=0 //len表示当前路径的长度 tag[1]=1; tag[2..n]=0 //设顶点标记初值。 salesman( 2 ) if min<∞ then output (min, s[1..n]) //输出最优值和最优解。 else output (“no solution”)//输出无解 end if end TRAVELING_SALESMAN 过程 salesman(k) //在已得到当前路径x[1..k-1]的情况下,求G的长度

TSP问题算法分析

T S P问题算法分析集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

算法第二次大作业 TSP问题算法分析 021251班 王昱(02125029) 一.问题描述 “TSP问题”常被称为“旅行商问题”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。 TSP问题在本实验中的具体化:从A城市出发,到达每个城市并且一个城市只允许访问一次,最后又回到原来的城市,寻找一条最短距离的路径。 二.算法描述 2.1分支界限法 2.1.1算法思想 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

2.1.2算法设计说明 设求解最大化问题,解向量为X=(x1,…,xn),xi的取值范围为Si,|Si|=ri。在使用分支限界搜索问题的解空间树时,先根据限界函数估算目标函数的界[down,up],然后从根结点出发,扩展根结点的r1个孩子结点,从而构成分量x1的r1种可能的取值方式。 对这r1个孩子结点分别估算可能的目标函数bound(x1),其含义:以该结点为根的子树所有可能的取值不大于bound(x1),即: bound(x1)≥bound(x1,x2)≥…≥bound(x1,…,xn) 若某孩子结点的目标函数值超出目标函数的下界,则将该孩子结点丢弃;否则,将该孩子结点保存在待处理结点表PT中。 再取PT表中目标函数极大值结点作为扩展的根结点,重复上述。 直到一个叶子结点时的可行解X=(x1,…,xn),及目标函数值 bound(x1,…,xn)。 2.2A*算法 算法思想 对于某一已到达的现行状态,如已到达图中的n节点,它是否可能成为最佳路径上的一点的估价,应由估价函数f(n)值来决定。假设g*(n)函数值表示从起始节点s到任意一个节点n的一条最佳路径上的实际耗散值。h*(n)函数值表示从任意节点n到目标节点ti的最佳路径的实际耗散值。其中ti是一个可能的目标节点。f*(n)函数值表示从起始s,通过某一指定的n到达目标节点ti的一条最佳路径的实际耗散值,并有 f*(n)=g*(n)+h*(n)。

求解旅行商问题的几种解法

2010年第5期(总第77期) 边疆经济与文化 THE BORDER ECONOMY AND CULT URE No 1512010General 1No 177 10  B I A N J I A N G J I N G J I Y U W EN HUA 【旅游经济】 求解旅行商问题的几种解法 高春涛 (哈尔滨商业大学基础科学学院,哈尔滨150028) 摘 要:旅行商问题(TSP )是一个典型的NP 完全问题,现在还没有找到有效的解法。目前比较热门的求解TSP 问题的方法主要有四种:神经网络算法;模拟退火算法;遗传算法;蚁群算法。 关键词:旅行商问题;组合优化;解法 中图分类号:F 592 文献标志码:A 文章编号:167225409(2010)0520010202 收稿日期:2010201222作者简介:高春涛(1973 ),女,黑龙江拜泉人,讲师,硕士,主要从事混沌神经网络研究。 一、引言 旅行商问题(Traveling Sales man Pr oble m ),是指给定n 个城市,任何两城市之间皆有路连通,其距离为已知,某旅行商从其中某城市出发,要经过每城市一次,且只能一次,最后又必须返回出发城市,要求找出最短的巡回路径。由于在很多实际问题中,如印刷电路板的铅孔路线方案、连锁店的货物配送路线等问题经过简化处理,均可建模为旅行商问题,因而对旅行商问题求解方法的研究具有重要的应用价值。旅行商问题是运筹学中有代表性的组合优化问题,也是典型的NP 完全问题。虽然它陈述起来很简单,但求解却很困难,对于具有n 个城市的TSP 问题,其可能的路径数目为(n -1)!/2,至今尚未找到有效的求解方法,在理论上枚举法可以解决这一问题,但是当n 较大时,解题的时间消耗会使枚举法显得没有任何实际价值。因此寻求一种求解时间短,能满足实际问题精度要求的解,成为解决该问题的主要途径。 二、TSP 求解方法 求解旅行商问题的方法可以分为两大类,一类是精确算法,目的是要找到理论最优解;另一类是近似算法,其算法简单,计算量小,大多数情况下求得的满意解能满足要求。 1.Hopfield 神经网络算法 1982年,Hopfield 开创性地在物理学、神经生物学和计算机科学等领域架起了桥梁,提出了Hopfield 反馈神经网络模型(HNN )。Hopfield 网络是典型的全连接网络,通过在网络中引入能量函数以构造动力学系统,并使网络的平衡态与能量函数 的极小解相对应,从而将求解能量函数极小解的过程转化为网络向平衡态的演化过程。尤其是通过对TSP 问题的成功求解,开辟了神经网络模型在计算机科学应用中的新天地,动态反馈网络从而受到广泛的研究和关注,被广泛应用于优化问题中,且已 设计出了专用的硬件电路。 [1] Hopfield 网络是一种非线性动力学模型,通过引入类似Lyapunov 函数的能量函数概念,把神经网络的拓扑结构(用连接矩阵表示)与所求问题(用目标函数描述)对应起来,转换成神经网络动力学系统的演化问题。因此,在用Hopfield 网络求解优化问题之前,必须将问题映射为相应的神经网络。对TSP 问题的求解,首先将问题的合法解映射为一个置换矩阵,并给出相应的能量函数,然后将满足置换矩阵要求的能量函数的最小值与问题的最优解相对应。 2.模拟退火算法 模拟退火算法最初的思想由Metr opolis 在1953 年提出,[2] Kirkpatrick 在1983年成功地将其应用在组合最优化问题中。模拟退火算法的出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法在某一初温下,伴随温度参数的不断下降,结合概率突跳特征在解空间中随机寻找目标函数的全局最优解,即在局部优解能 概率性地跳出并最终趋于全局最优。[1] 用固体退火模拟组合优化问题,将内能E 模拟为目标函数f,温度T 演化成控制参数t,即得到解组合优化问题的模拟退火算法:有初始解i 和控制参数初值t 开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t 值,算法终止时的当前解即为所得近似最优解。

Tsp问题的几种算法的分析

摘要 本文分析比较了tsp问题的动态规划算法,分支界限法,近似等算法。分析了旅行商问题的时间度特点,针对启发式算法求解旅行商问题中存在的一些问题提出了改进算法。此算法将群体分为若干小子集,并用启发式交叉算子,以较好利用父代个体的有效信息,达到快速收敛的效果,实验表明此算法能提高寻优速度,解得质量也有所提高。 关键词:旅行商问题TSP Abstract this paper analyzed the time complexity of traveling salesman problem,then put forward some imprivement towards the genetic algorithm for solving this problen: divding the population into some small parent individual well.so it can quickly get into convergence, the experimental result indicates the impwoved algorithm can accelerate the apeed of finding solution and improve the precision. Keywords traveling salesman problem; genetic algorithm; subset; henristic crossover operator

目录 1、摘要--------------------------------------------------------------1 2、Abstract---------------------------------------------------------1 3、Tsp问题的提法------------------------------------------------2 4、回溯法求Tsp问题--------------------------------------------3 5、分支限界法求Tsp问题--------------------------------------7 6、近似算法求解Tsp问题-------------------------------------10 7、动态规划算法解Tsp问题----------------------------------12

TSP问题的概述

TSP问题的概述 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅行商人要拜访N个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 TSP问题的由来 TSP的历史很久,最早的描述是1759年欧拉研究的骑士周游问题,即对于国际象棋棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起始点。 TSP由美国RAND公司于1948年引入,该公司的声誉以及线形规划这一新方法的出现使得TSP成为一个知名且流行的问题。 TSP在中国的研究 同样的问题,在中国还有另一个描述方法:一个邮递员从邮局出发,到所辖街道投邮件,最后返回邮局,如果他必须走遍所辖的每条街道至少一次,那么他应该如何选择投递路线,使所走的路程最短?这个描述之所以称为中国邮递员问题(Chinese Postman Problem CPP)因为是我国学者管梅古教授于1962年提出的这个问题并且给出了一个解法。 人工智能上的旅行商问题,以下给出的是算法,只是理解算法之用。 for detail contact me QQ: 413309082 /****************算法总框架*****************************/ int i; gs.search_init(adaptee.list_place.getSelectedIndex(),adaptee.list_fun.getSelectedI ndex()); do{ i=gs.search_step(); }while(i==0); /***************searchinit**************************/ public void search_init(int startindex,int strategy) { this.strategy = strategy; AStar.graph= G; G.setSize(AStar.len); start.index = startindex; Vertex s =new Vertex(); s.index = start.index; s.parent = -1; n =null; s.value =f(s.index); //s的估价函数值 G.add(s); start.parentpos = -1; start.value = s.value;

用遗传算法解决旅行商问题

用遗传算法解决旅行商问题 姓名:王晓梅 学号:1301281 班级:系统工程6班

一、问题背景 有一个销售员,要到n 个城市推销商品,他要找出一个包含所有n 个城市的具有最短路程的环路。 现在假设有10个城市,他们之间的距离如下。 { 0, 107, 241, 190, 124, 80, 316, 76, 152, 157}, { 107, 0, 148, 137, 88, 127, 336, 183, 134, 95}, { 241, 148, 0, 374, 171, 259, 509, 317, 217, 232}, { 190, 137, 374, 0, 202, 234, 222, 192, 248, 42}, { 124, 88, 171, 202, 0, 61, 392, 202, 46, 160}, { 80, 127, 259, 234, 61, 0, 386, 141, 72, 167}, { 316, 336, 509, 222, 392, 386, 0, 233, 438, 254}, { 76, 183, 317, 192, 202, 141, 233, 0, 213, 188}, { 152, 134, 217, 248, 46, 72, 438, 213, 0, 206}, { 157, 95, 232, 42, 160, 167, 254, 188, 206, 0} 将这10个城市分别编码为0,1,2,3,4,5,6,7,8,9。要求走完这10个城市,目标是使走的距离最短。 二、建立模型 ),...,1,(1) ,...,1,(1. .)(min 11 11n j j i n i j i t s j i n j ij n i ij ij n i n j ij x x d x =≠==≠=≠∑∑∑∑==== 三、设计算法 1、种群初始化 (1)一条染色体的初始化 10个城市分别对应0~9这十个数,每个染色体代表一个解决方法,即0~9这十个数的一种排序方式,可随机产生一个数,用取余的方法得到一个0~9的数,依次得到与前面不重复的十个数,构成一个染色体。 (2)种群的初始化 这里假设种群有100个染色体,也就是循环100次染色体的初始化可得到一个种群。

算法报告-旅行商问题模板讲解

《算法设计与课程设计》 题目: TSP问题多种算法策略 班级:计算机技术14 学号: 姓名: 指导老师: 完成日期: 成绩:

旅行商问题的求解方法 摘要 旅行商问题(TSP 问题)时是指旅行家要旅行n 个城市然后回到出发城市,要求各个城市经历且仅经历一次,并要求所走的路程最短。该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中最广为人知的问题。本文主要介绍用动态规划法、贪心法、回溯法和深度优先搜索策略求解TSP 问题,其中重点讨论动态规划法和贪心法,并给出相应求解程序。 关键字:旅行商问题;动态规划法;贪心法;回溯法;深度优先搜索策略 1引言 旅行商问题(TSP)是组合优化问题中典型的NP-完全问题,是许多领域内复杂工程优化问题的抽象形式。研究TSP 的求解方法对解决复杂工程优化问题具有重要的参考价值。关于TSP 的完全有效的算法目前尚未找到,这促使人们长期以来不断地探索并积累了大量的算法。归纳起来,目前主要算法可分成传统优化算法和现代优化算法。在传统优化算法中又可分为:最优解算法和近似方法。最优解算法虽然可以得到精确解,但计算时间无法忍受,因此就产生了各种近似方法,这些近似算法虽然可以较快地求得接近最优解的可行解,但其接近最优解的程度不能令人满意。但限于所学知识和时间限制,本文重点只讨论传统优化算法中的动态规划法、贪心法、回溯法和深度优先搜索策略。 2正文 2.1动态规划法 2.1.1动态规划法的设计思想 动态规划法将待求解问题分解成若干个相互重叠的子问题,每个子问题对应决策过程的一个阶段,一般来说,子问题的重叠关系表现在对给定问题求解的递推关系(也就是动态规划函数)中,将子问题的解求解一次并填入表中,当需要再次求解此子问题时,可以通过查表获得该子问题的解而不用再次求解,从而避免了大量重复计算。 2.1.2 TSP 问题的动态规划函数 假设从顶点i 出发,令'(,)d i V 表示从顶点i 出发经过'V 中各个顶点一次且仅一次,最后回到出发点i 的最短路径长度,开始时,{}'V V i =-,于是,TSP 问

利用Hopfield神经网络求解旅行商问题研究

文章编号:1007-757X (2006)11-0001-03 利用Hopfield 神经网络求解旅行商问题研究 杨秀梅,a 陈洪亮,a 董得义a 摘 要:本文主要研究利用连续的Hopfield 网络求解TSP 问题,从连续的Hopfield 神经网络原理出发,结合TSP 问题的要求,在给定参数要求下求得问题的最优解。并分析了实际算法的弱点,给出分析改进算法,加快了算法的收敛速度,改善有效解并提高最优解的比例。 关键词:连续的Hopfield 网络;旅行商问题;改进算法;优化 中图分类号:TP 301 文献标识码:A 1 概述 用神经网络解决组合优化问题是神经网络应用的一个重 要方面。所谓组合优化问题,就是在给定约束条件下,使目标 函数极小(或极大)的变量组合问题。将Hopfield 网络应用于 求解组合优化问题,把目标函数转化为网络的能量函数,把问 题的变量对应到网络的状态。这样,当网络的能量函数收敛于 极小值时,问题的最优解也随之求出。由于神经网络是并行计 算的,其计算量不随维数的增加而发生指数性“爆炸”,因而对 于优化问题的高速计算特别有效。。本文针对将Hopfield 理论 应用于实践给出了研究性方法。2 问题的提出TSP 问题,即所谓的旅行商问题。问题的提法:在N 个城市中各经历一次后回到出发点,使所经过的路程最短。其不同选择方案有(N -1)!/2种,在城市数较少的情况下可以用枚举等方法,但如果城市数量较大,例如,N=33时,使用枚举法求解就要考虑的情况是1025数量级,计算量如此之大是不可想象的。将Hopfield 网络应用于求解TSP 问题,效果是显著的。下面就利用连续的Hopfield 网络求解T SP 问题进行探讨。3 Hopfield 神经网络及求解TSP 问题算法1)Hopfield 神经网络主要是模拟生物神经网络的记忆机理,是一种全连接型的神经网络,对于每个神经元来说,自己 输出的信号通过其他神经元又反馈到自身,所以Hopfield 神 经网络是一种反馈型神经网络。连续的Hopfield 神经网络状 态的演变过程是一个非线性动力学系统,可以用一组非线性 微分方程来描述。系统的稳定性可用所谓的“能量函数”(即李雅普诺夫或哈密顿函数)进行分析。在满足一定条件下,某种“能量函数”的能量在网络运行过程中不断地减小,最后趋于稳定的平衡状态。反馈网络达稳定状态时可以使系统的能量达极小,因而可用于一些最优化问题的计算,能量公式如下:E =-126N i =16N j =1T ij v i v j -6N i =1H i v i =-12v T Tv -v T 在实践中,Hopfield 神经网络理论可应用于很多领域。但实际中由于将理论转化为实践存在一些技术难点需要解决,导致实际中很少用。下面以TSP 问题进行连续的Hopfield 神经网络理论应用研究。 2)求解TSP 问题算法 实例:本实验中采用Hopfield 网络的方法实现以5个城市 为例的TSP 问题。设有5个城市A,B,C,D,E,用d xy (x,y ∈{A, B,C,D,E})表示城市x 和城市y 之间的距离(d xy >0)。有一推 销员从某一城市出发(如从城市C 出发)访问各城市一次且仅 一次后再回到原出发城市,要求找出一条最短的巡回路线, 即:I =d CA +d AE +d E B +d BD +d DC →m in 。 建模:在5-T SP 中,如城市1在第3个被访问,则对应的 向量为V (1)=00100。5个城市TSP 问题需用5*5个神经元 来实现,而每行每列都只能有一个1,其余为0,该阵称为换位 矩阵。换位矩阵中1的和为5,所构造的函数极小值对应于最 短路径。 式中取S =1.0;u 0为符号函数的参量,u 0越小,符号函数 的离散化程度越高。在进行迭代前,要对uxi 赋初值,不妨令 u xi,init =-0.5*u 0*1n (N-1)*(1+D ),D 是在(-0.1,0.1) 的随机数。在迭代时,u t+1xi =u t xi +du xi dt *D t 为运算步长。因为能量在极小值时变化最慢,所以将能量函数E 变化小到一定程度作为结束标变化小到一定程度作为结束标志,即$E F Min_value 。如果超过了一定的迭代次数仍没有收 a a a 董得义,上海交通大学电信学院,上海 200240 陈洪亮,上海交通大学电信学院,上海 200240 作者简介:杨秀梅,上海交通大学电信学院,硕士研究生,上海 200240

旅行商问题的几种求解算法比较

旅行商问题的几种求解算法比较 作者: (xxx学校) 摘要:TSP问题是组合优化领域的经典问题之一,吸引了许多不同领域的研究工作者,包括数学,运筹学,物理,生物和人工智能等领域,他是目前优化领域里的热点.本文从动态规划法,分支界限法,回溯法分别来实现这个题目,并比较哪种更优越,来探索这个经典的NP(Nondeterministic Polynomial)难题. 关键词:旅行商问题求解算法比较 一.引言 旅行商问题(Travelling Salesman Problem),是计算机算法中的一个经典的难解问题,已归为NP一完备问题类.围绕着这个问题有各种不同的求解方法,已有的算法如动态规划法,分支限界法,回溯法等,这些精确式方法都是指数级(2n)[2,3]的,根本无法解决目前的实际问题,贪心法是近似方法,而启发式算法不能保证得到的解是最优解,甚至是较好的解释.所以我认为很多问题有快速的算法(多项式算法),但是,也有很多问题是无法用算法解决的.事实上,已经证明很多问题不可能在多项式时间内解决出来.但是,有很多很重要的问题他们的解虽然很难求解出来,但是他们的值却是很容易求可以算出来的.这种事实导致了NP完全问题.NP表示非确定的多项式,意思是这个问题的解可以用非确定性的算法"猜"出来.如果我们有一个可以猜想的机器,我们就可以在合理的时间内找到一个比较好的解.NP-完全问题学习的简单与否,取决于问题的难易程度.因为有很多问题,它们的输出极其复杂,比如说人们早就提出的一类被称作NP-难题的问题.这类问题不像NP-完全问题那样时间有限的.因为NP-问题由上述那些特征,所以很容易想到一些简单的算法――把全部的可行解算一遍.但是这种算法太慢了(通常时间复杂度为O(2^n))在很多情况下是不可行的.现在,没有知道有没有那种精确的算法存在.证明存在或者不存在那种精确的算法这个沉重的担子就留给了新的研究者了,或许你就是成功者. 本篇论文就是想用几种方法来就一个销售商从几个城市中的某一城市出发,不重复地走完其余N—1个城市,并回到原出发点,在所有可能的路径中求出路径长度最短的一条,比较是否是最优化,哪种结果好. 二.求解策略及优化算法 动态规划法解TSP问题 我们将具有明显的阶段划分和状态转移方程的规划称为动态规划,这种动态规划是在研究多阶段决策问题时推导出来的,具有严格的数学形式,适合用于理论上的分析.在实际应用中,许多问题的阶段划分并不明显,这时如果刻意地划分阶段法反而麻烦.一般来说,只要该问题可以划分成规模更小的子问题,并且原问题的最优解中包含了子问题的最优解(即满足最优子化原理),则可以考虑用动态规划解决.所以动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的,相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略. 旅行商问题(TSP问题)其实就是一个最优化问题,这类问题会有多种可能的解,每个解都有一个值,而动态规划找出其中最优(最大或最小)值的解.若存在若干个取最优值的解的话,它只取其中的一个.在求解过程中,该方法也是通过求解局部子问题的解达到全局最优解,但与分治法和贪心法不同的是,动态规划允许这些子问题不独立,(亦即各子问题可包含公共的子子问题)也允许其通过自身子问题的解作出选择,该方法对每一个子问题只解一次,并将结果保存起来,避免每次碰到时都要重复计算. 关于旅行商的问题,状态变量是gk(i,S),表示从0出发经过k个城市到达i的最短距离,S为包含k 个城市的可能集合,动态规划的递推关系为:

相关文档
最新文档