当前位置:首页>旅游>正文

什么是旅行商问题? 旅行商问题的简介

2023-03-24 01:16:58 互联网 未知 旅游
当地纯玩小团,一日游,包车,代订门票/酒店等服务!联系微信:w8998678

什么是旅行商问题?

什么是旅行商问题? 旅行商问题的简介

旅行商问题(Traveling Saleman Problem,TSP) 旅行商问题(Traveling Saleman Problem,TSP)是VRP的特例,由于 Gaery 祝崇俊 ,刘民,吴澄. 供应链 中 车辆路径问题 的研究进展及前景[J]. 计算机集成制造系统-CMS.2001,7(11):1- 6已证明TSP问题是 NP难题 ,因此,VRP也属于NP难题。
求采纳

旅行商问题的简介

什么是旅行商问题? 旅行商问题的简介

“旅行商问题”常被称为“旅行推销员问题”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。规则虽然简单,但在地点数目增多后求解却极为复杂。以42个地点为例,如果要列举所有路径后再确定最佳行程,那么总路径数量之大,几乎难以计算出来。多年来全球数学家绞尽脑汁,试图找到一个高效的算法TSP问题在物流中的描述是对应一个物流配送公司,欲将n个客户的订货沿最短路线全部送到。如何确定最短路线。
TSP问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-1)!。可以形象地把解空间看成是一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到山顶或谷底的过程。

旅行推销员问题(又称为旅行商问题、TSP问题)是一个多局部最优的最优化问题:有n个城市,一个推销员要从其中某一个城市出发,唯一走遍所有的城市,再回到他出发的城市,求最短的路线。

什么是旅行商问题? 旅行商问题的简介

用DNA去计算] 经过了一番深思熟虑的奇思妙想之后,1994年,美国科学家艾德曼(Adleman)利用试管中的DNA计算了7个城市13条航线的旅行推销员问题。这真是一个绝妙的想法,令人叹为观止,而这工作也从此开辟了DNA计算机研究的新纪元。 首先,艾德曼分别用20个核苷酸长的不同的DNA序列对7个城市进行了编码。比如,第二个城市的编码(O2)为TATCGGATCGGTATATCCGA;第三个城市的编码(O3)为GCTATTCGAGCTTAAAGCTA。然后,对13条航线进行编码。以城市2与城市3之间的航线O2-3为例,编码的规则是O2的后十个核苷酸作为O2-3的前十个核苷酸,O3的前十个核苷酸作为O2-3的后十个核苷酸,即O2-3为GTATATCCGAGCTATTCGAG。接着再合成7个城市编码DNA的互补DNA。所谓互补DNA就是如果前一个DNA链上某一位置上的核苷酸是A,则互补DNA链上同一位置上的核苷酸就是T;前者是C,后者则为G;反之亦然。以O3为例,它的互补DNA(记作O3~)就是CGATAAGCTCGAATTTCGAT。最后,用7个城市的互补DNA(O1~、O2~、O3~、O4~、O5~、O6~、O7~)与13条航线的不同编码DNA(Oi-j)在试管中进行混合。举例来说,由于O3~上的核苷酸正好是O2-3上后十个核苷酸和O3-4上前十个核苷酸的互补核苷酸,通过A—T、C—G的配对法则,O3~就可以像“夹板”一样将O2-3和O3-4连接在一起。同理,利用Oi~为“夹板”使对应的Oi-j分别连接,就可以产生大量的随机连接通路。 第二步,利用O1和O7~作为引物,对这些随机产生的DNA序列进行聚合酶链式反应。这样,只有那些从O1开始到O7为止的通路DNA序列可以被大量扩增,而其它通路(比如:始于O1终止于O6)因不满足扩增条件而不被扩增。 第三步,将PCR扩增的DNA序列进行电泳分离,选取分子质量为140个核苷酸的双链DNA。因为每个城市都是由20个核苷酸的DNA编码,连通7个城市的编码DNA应为20×7=140个核苷酸,所以,选取的140个核苷酸的DNA序列就是可以连通7个城市通路的DNA序列。 第四步,将选出的140个核苷酸的双链DNA序列加热变性,将双链DNA拆分成单链,再用含有O2~序列的磁珠与其互补结合,选取结合了O2~序列的单链DNA序列,这样的序列就是由城市1连通城市2的通路。将选取的序列退火复性后,再加热变性,分别用含有O3~、O4~、O5~、O6~的磁珠进行分离提取。最后能与O6~结合的序列就是从城市1起始,途径城市2、3、4、5、6,终止于城市7的通路DNA序列。 第五步,将上述分离的DNA序列再次进行聚合酶链式反应,扩增的DNA序列经过电泳分离,最终得到的序列就是7个城市13条航线的旅行推销员问题的正确答案。

旅行商问题LINGO运行结果怎么看??

路线那要看你设的0-1变量 光看最优值是看不出来的 关键是你是否了解你模型中变量的值的意义 如果了解应该很容易能看出来 否则这种情况你不给我具体的数 自己也不知道那我就没办法了

旅行社的主要作用有哪些

旅行社
性质:是存在于旅游活动中主体(旅游者)和客体(旅游区)之间中介体形式之一
作用:是旅游业支柱产业之一
是连接旅游供给和旅游需求的纽带
方便游客,促进旅游业发展
基本业务:外联及采购业务(如低价酒店,车票机票(或包机),景区门票)
组合和设计旅游产品
营销宣传、信息服务
代办旅行手续(国际旅行社可以代办签证)
提供接待服务

蛮力法求解旅行商问题 求C++代码

#include<stdlib.h>
#include<cmath>
#include<algorithm>
using namespace std
static double Tmax = 10, Tmin = 0.1, r = 0.999999
static int k = 100
inline void random_sele(int &fl, int &fp, int arr[], int n)
{
do
{
fl = rand() % n
fp = rand() % n
} while (fl == arr[fp] || arr[fl] == arr[fp])
}
inline bool accept(double r1, double r2, double T)
{
const unsigned int MASK((1 << 30) - 1)
double p = 1.0 / (1.0 + exp((r2 - r1) / T))
unsigned int temp1=((rand()<<20)^(rand()<<10)^rand())&MASK
unsigned int temp2=((rand()<<20)^(rand()<<10)^rand())&MASK
double res=(1.0*temp1+1.0*temp2/MASK)
return res < p*MASK
}
void set_SA()
{
printf(" Tmax Tmin r k ")
printf(" %.8f %.8f %.8f %d ",Tmax,Tmin,r,k)
printf("Input Tmax,Tmin,r,k: ")
scanf("%lf%lf%lf%d",&Tmax,&Tmin,&r,&k)
}
void TSP_SA(int arr[], double &evl, int n, double map[][2000])
{
double r1, r2, T = Tmax
int i, fl, sl, fp, sp
int show_s=0
srand(11827)
while (T >= Tmin)
{
for (i = 0 i < k i++)
{
random_sele(fl, fp, arr, n)
sl = arr[fl], sp = arr[fp]
r1 = map[fl][sl] + map[fp][sp] + map[sp][arr[sp]]
r2 = map[fl][sp] + map[sp][sl] + map[fp][arr[sp]]
if (accept(r1, r2, T))
{
arr[fp] = arr[sp]
arr[fl] = sp
arr[sp] = sl
sl = sp
evl = evl + r2 - r1
}
}
if(++show_s==1000000/k)
{
printf("T=%f evl=%f ",T,evl)
show_s=0
}
T *= r
}
}

最新文章