数学建模文档格式.docx
《数学建模文档格式.docx》由会员分享,可在线阅读,更多相关《数学建模文档格式.docx(5页珍藏版)》请在冰豆网上搜索。
四、方案建立:
方案建立:
;
将中国的34个城市从整体上划分为六大区域(并非严;
1,Xij=;
巡回路线是从i
B题:
走遍全中国
本文将最优走遍全中国问题转化为最佳旅行推销员回路问题。
首先根据地理区位摘要,以总集中度把34个城市划分为6组,将每组的地理区域抽象为一点(即几何中心点)路线最短为原则,构建整数规划模型并引入0—1变量,先求得各大区域间最短路径选择,再计算各区域间最短衔接及区域内最短路径,最后确定了全局的最优方案。
然后以问题一中得出的最短路径方案为基础,对于问题二最经济的和最省时的订票方案在已有的调查数据基础上确定了三种交通工具中快车硬卧的单位里程价格最低,飞机的单位时速最高再分别求解,得到两个状态:
最低总费用对应的较长时间;
最短耗时对应较高的总费用。
问题三引入无差异曲线及预算线,整合已得数据,综合考虑费用及时间因素的偏好问题在允许变化范围内的相互关系,讨论省时省钱又方便的旅行路线。
关键字:
旅行商问题;
整数规划;
无差异曲线关键字
1
问题提出
1.周游先生退休后想到各地旅游。
计划走遍全国的省会城市、直辖市、香港、澳门、台北。
要求按地理位置(经纬度)设计最短路旅行方案;
2.2010年5月1日周先生从哈,设计最经济尔滨市出发,每个城市停留3天,可选择航空、铁路(快车卧铺或动车)的旅行互联网上订票方案;
3.综合考虑省钱、省时又方便,评价准则,建立数学模型并修订原方案;
4.对算法作复杂性、可行性及误差分析;
5.关于旅行商问题提出对自己所采用的算法的理解及评价。
问题分析
第一问其实是个最佳旅行商问题。
旅行商问题(TravelingSalemanProblem,TSP)又可译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的最短路线问题。
该问题是从寻求单一旅行者由起点出发,经过所有给定的需求点后,最终再回到原点的最小路径成本。
最早的关于旅行商问题的数学规划是由Dantzig(1959)等人提出。
这是一个NP难题,本文中将通过先分区后综合的方式加以简化以建立方案。
三、问题假设问题假设:
假设
2.忽略旅行方案中交通工具衔接问题,设衔接时间包含于周先生在每个城市停留的3天;
3.各交通工具均匀速运行,各地区均通火车飞机,忽略打折机票的存在,忽略火车里程的加价率。
方案建立:
将中国的34个城市从整体上划分为六大区域(并非严格按官方行政区域划分),分为东北(包括哈尔滨、长春、沈阳3个城市,标号为A),华北(包括呼和浩特、北京、,华中(包括郑州、合肥、武汉、南天津、石家庄、太原、济南6个城市,标号为B)京、上海、杭州、南昌、长沙8个城市,标号为C),华南(包括福州、广州、南宁、,西南(包括拉萨、成都、重庆、贵阳、海口、香港、澳门、台北7个城市,标号为D)昆明5个城市,标号为E),西北(包括西安、兰州、西宁、银川、乌鲁木齐5个城市,标号为F)。
按每个区域最北最南最东最西的平均坐标求得各大区域的中心位置,然后由坐标求得各大区域几何中心坐标点之间的直线距离(具体数据见表1-1)表1-1单位:
公里ABCDEFA01012.81640.82605.32759.52142.1B1210.80922.51790.51726.71267.6C1640.8922.50953.81501.91779.2D2605.31790.5953.801268.72188.2E2759.51726.71501.91268.701250.3F2142.11267.61779.22188.21250.30在具体的实现上,我们采用了整数规划法,并辅以LINGO软件编程实现(参见PRG_1)。
在这里我们要解决的是一个典型的TSP问题,我们这里介绍一种建立模型的方法,是把该问题的每个解看作是一次“巡回”。
在下述意义下,引入一些0—1变量:
2
1,Xij=
巡回路线是从i到j,且i≠j
0,其他情况其目标是使∑DijXij(i≠j)最小。
ij表示i区到j区的距离)(D这里有两个明显的必须满足的条件:
访问区域i后必须要有一个即将访问的确切区域;
访问区域j前必须要有一个刚刚访问过的确切区域。
用下面的两组约束分别实现上面的两个条件。
∑Xij=1j:
1→n(i=1,2,…,n)∑Xij=1i:
1→n(j=1,2,…,n)到此我们得到了一个模型,他是一个指派问题的整数规划模型。
但以上两个条件对于TSP来说并不充分,仅仅是必要条件。
例如:
65314
以上两个条件都满足,但它显然不是TSP的解,它存在两个子巡回。
这里,我们将叙述一种在原模型上附加充分的约束条件以避免产生子巡回的方法。
把额外变量Ui(i=2,3,…,n)附加到问题中。
可把这些变量看作是连续的。
现在附件下面形式的约束条件:
Ui-Uj+nXij≤n-1,2≤i≠j≤n.为了证明该约束条件有预期的效果,必须证明:
(1)任何含子巡回的路线都不满足该约束条件;
(2)全部巡回都满足该约束条件。
首先证明
(1),用反证法。
假设还存在子巡回,也就是说至少有两个子巡回。
那么至少存在一个子巡回中不含区域1.把该子巡回记为i1i2…iki1,则必有:
Ui1-Ui2+n≤n-1Ui2-Ui3+n≤n-1……Uik-Ui1+n≤n-1把这k各式子相加,有n≤n-1,矛盾。
故假设不正确,结论1得证。
下面证明
(2),采用构造法。
对于任意的总巡回1i1…in-11,可取Ui=访问区域的顺序数,取值范围为{1,2,…,n-1}。
因此,Ui-Uj≤n-2,2≤i≠j≤n。
下面来证明总巡回满足该约束条件。
(ⅰ)总巡回上的边Ui1-Ui2+n=n-1≤n-1Ui2-Ui3+n=n-1≤n-1……Uin-2-Uin-1+n=n-1≤n-1(ⅱ)非总巡回上的边
3
Uir-Uj≤n-2≤n-1,r=1,2,…,n-2,
j∈{2,3,…,n}-{ir,ir+1}
Ui1-Ui2+n=n-1≤n-1,j∈{2,3,…,n}-{ir}从而结论
(2)得证。
这样我们把TSP转化成了一个混合整数线性规划问题。
Minz=∑DijXij(i≠j)s.t.∑Xij=1j:
1→n(i=1,2,…,n)
(1)∑Xij=1i:
1→n(j=1,2,…,n)
(2)Ui-Uj+nXij≤n-1,2≤i≠j≤n(3)Xij=0,1,i,j=1,2,…,n(4)Ui≥0,i=2,3,…,n(5)我们就可以利用数学软件LINGO来求解该问题。
首先把各大区域抽象为各自中心点,以总路线最短为原则,利用整数规划模型求得各大区域间的旅行优先顺序。
LINGO软件编程如下:
PRG_1:
model:
sets:
city/1..6/:
u;
link(city,city):
dist,x;
endsetsn=@size(city);
data:
dist=Matrix1(data);
%Matrix1(data)为所需的数据矩阵,此题中应为表1-1中数据enddatamin=@sum(link:
dist*x);
@for(city(k):
@sum(city(i)|i#ne#k:
x(i,k))=1;
@sum(city(j)|j#ne#k:
x(k,j))=1;
);
@for(city(i)|i#gt#1:
@for(city(j)|j#gt#1#and#i#ne#j:
u(i)-u(j)+n*x(i,j)<
=n-1);
);
@for(city(i):
u(i)<
@for(link:
@bin(x));
End运行结果显示:
Globaloptimalsolutionfoundatiteration:
Objectivevalue:
Variable1.0000001.0000001.0000001.0000001.0000001.000000Value1012.8001267.6001640.800953.80001268.7001250.30044
7394.000ReducedCost
X(X(X(X(X(X(
1,2,3,4,5,6,
2)6)1)3)4)5)
4
注:
运行结果仅摘列出有效的那部分数据,括号中数据1—6分别与矩阵中A—F对应,表示六个大区。
由结果可知各大区旅行的先后顺序为A—B—F—E—D—C—A,即周先生旅行各大区的顺序是:
东北—华北—西北—西南—华南—华中—东北。
然后考虑各区域之间的最短衔接问题,讨论各分区内的最短路线。
在东北区域内,由于是从哈尔滨出发,则最优的路线只能是哈尔滨—长春—沈阳,所以不做过多的讨论。
其他五个区域的讨论方法为:
将目标区域的上一区域的终点纳入新的目标区域,与。
同时,在目标区现有的目标区域(含N个城市)组成新的目标区域(含N+1个城市)域预定路线的下一区域的衔接上,可将目标区域内城市中的与下一个区域几何中心点最近的若干个城市假定为目标区域的终点,这样我们同样可以把这个问题转化为整数规划模型。
其实现方法只需将上面的整数规划模型的约束条件
(1)
(2)改为(6)--(9)即可实现。
2→n-1(i=1,2,…,n)(6)∑Xij=1i:
2→n-1(j=1,2,…,n)(7)∑X1j=1(j=1,2,…,n)(8)∑Xin=1(i=1,2,…,n)(9)利用LINGO编程(参见PRG_2)分别对其求解,并找出最优解,对应的目标区域的终点即为该区域的最优终点。
LINGO程序如下:
PRG_2:
city/1..n/:
%n表示目标区域的的城市个数link(city,city):
dist=dist(A)%dist(A)为求解时所需距离矩阵;
enddatamin=@sum(link:
@for(city(k)|k#ne#1#and#k#ne#n:
@for(city(k)|k#eq#1:
@sum(link(k,i):
x(k,i))=1);
@for(city(k)|k#eq#n:
@sum(link(i,k):
x(i,k))=1);
End
5
具体操作过程如下所示。
由实际的地理坐标可知,在华北区内,距离下一个目标区域(西北区)的几何中心点最近的城市有呼和浩特、太原。
因此,当前讨论的华北区的待选终点即为呼