旅行商问题数学建模.docx
《旅行商问题数学建模.docx》由会员分享,可在线阅读,更多相关《旅行商问题数学建模.docx(16页珍藏版)》请在冰豆网上搜索。
旅行商问题数学建模
黄石理工学院
数学建模 大型作业
2011—2012学年第1学期
一.摘要
二.旅行问题
1.问题描述
2.符号说明
3.模型设计
4.建模求解
5.模型分析
6.
三.建模过程及心得体会
四.参考文件
一.摘要
本文是一个围绕旅行商问题和背包问题这两个经典问题的论文。
问题一,是一个依赖与每个城市去一次且仅去一次的路线确定问题,问题二类似于问题一。
问题三是一个依赖于可背重量限制的背包问题。
关键词:
HAMILTON回路LINGO最优旅行路线0-1模型
二.旅行问题
问题描述
某人要在假期内从城市A出发,乘火车或飞机到城市B,C,D,E,F旅游购物。
他计划走遍这些城市各一次且仅一次,最后返回城市A。
已知城市间的路费数据见附表1,请你设计一条旅行路线使得他的总路费最少。
如果临行他因故只能去4个城市,该怎样修订旅行路线?
在城市间旅游时他计划购买照相机,衣服,书籍,摄像机,渔具,白酒,食品,而受航空行李重量的限制以及个人体力所限,所买物品的总重量不能超过15kg,各种物品的价格见附表2.请你为他决策买哪些物品,使所买物品价值最大。
附表1:
A
B
C
D
E
F
A
10
150
B
12
00
C
25
80
D
33
185
E
21
420
F
5
420
0
附表2
照相机
衣服
书籍
摄像机
渔具
白酒
食品
香烟
重量(kg)
1
2
4
3
4
2
2
1
价格(元)
435
600
模型设计
首先给出一个定义:
设v1,v2,......,vn是图G中的n个顶点,若有一条从某一顶点v1出发,经过各节点一次且仅一次,最后返回出发点v1的回路,则称此回路为HAMILTON回路。
问题1.
分析:
这个优化问题的目标是使旅行的总费用最少,要做的决策是如何设定旅行路线,决策受的约束条件:
每个城市都必须去,但仅能去一次。
按题目所给,将决定变量,目标函数和约束条件用数学符号及式子表示出来,就可得一下模型。
模型建立:
对于6个城市的旅行问题设A,B,C,D,E,F六个城市分别对应v1,v2,v3,v4,v5,v6。
假设
表示从城市i到城市j的费用。
定义0-1整数型变量
=1表示从城市i旅行到城市j,否则
=0。
则旅行问题的数学模型可表示为一个整数规划问题。
min z=
(i
j)
s.t.
=1 (i
j;j=1,2,……,6)
=1 (i
j;i=1,2,……,6)
(i
j;i=2,3,……,6;j=2,3,……6)
其中辅助变量
(i=2,3,……,6)可以是连续变化的,虽然这些变量在最优解中取普通的整数值(从而在约束条件中,可以限定这些变量为整数)。
事实上,在最优解中,
=访问城市的顺序数。
模型求解
运用LINGO,输入程序:
MODEL:
!
Traveling SalesProblem for thecitiesofsixcity;
SETS:
CITY/1..6/:
U;!
U(I)=sequence no.ofcity;
LINK(CITY,CITY):
COST,!
Thecost matrix;
X; !
X(I,J)=1ifweuselinkI, J;
ENDSETS
DATA:
!
Cost matrix,it neednot be symmetric;
COST=0 120 250 330 210 150
120 098 350 225300
25098 0 520 430 280
330 350 5200 270 185
210 225 430 270 0 420
150300280 185 420 0;
ENDDATA
N=@SIZE(CITY);
MIN=@SUM(LINK:
COST*X);
@FOR(CITY(K):
!
Itmustbe entered;
@SUM(CITY(I)| I#NE#K:
X(I,K))=1;
!
It mustbedeparted;
@SUM(CITY(J)|J#NE#K:
X(K, J))=1;
!
Weakformof thesubtourbreakingconstrains;
!
Thesearenotverypowerfulforlarge problems;
@FOR(CITY(J)|J#GT# 1 #AND#J#NE#K:
U(J)>=U(K)+X(K,J)-(N-2)*(1-X(K,J))+(N-3)*X(J,K)););
@FOR(LINK:
@BIN(X));!
Makethe X's0/1;
!
Forthefirstandlaststop weknow...;
@FOR(CITY(K)| K#GT#1:
U(K) <= N- 1-(N-2) *X(1,K);
U(K)>=1+( N-2)* X( K, 1));
END
得到结果:
总费用为1163
路线:
A-B-C-F-D-E-A
问题2.
临时因故只能去4个城市,那么应该怎样安排旅行路线。
分析:
在B,C,D,E,F五个城市中选4个城市,显然有5种可能,按照问题一中的模型,将费用矩阵稍作修改,运用LINGO分别解除5种可能的费用,进行比较,即得结果。
(1)选取B,D,E,F,计算旅行费用:
MODEL:
!
Traveling SalesProblemforthecitiesofsixcity;
SETS:
CITY/1..5/:
U;!
U(I)= sequence no.ofcity;
LINK(CITY, CITY):
COST, !
Thecostmatrix;
X;!
X( I, J)=1if weuselinkI,J;
ENDSETS
DATA:
!
Costmatrix,it neednotbesymmetric;
COST=0 120 330210 150
1200 350225 300
330 350 0 270 185
210 2252700 420
150 300 185 4200;
ENDDATA
N=@SIZE( CITY);
MIN= @SUM(LINK:
COST*X);
@FOR(CITY(K):
!
Itmust be entered;
@SUM( CITY(I)|I #NE# K:
X(I,K))=1;
!
Itmustbe departed;
@SUM(CITY( J)|J#NE#K:
X(K, J))=1;
!
Weakformof thesubtour breakingconstrains;
!
Thesearenotverypowerfulforlarge problems;
@FOR( CITY(J)| J#GT#1#AND#J#NE# K:
U(J)>=U(K)+X(K,J)-(N-2)*(1-X(K,J))+(N-3)*X(J,K)););
@FOR(LINK:
@BIN(X));!
MaketheX's0/1;
!
Forthefirstandlaststopwe know...;
@FOR(CITY(K)| K #GT#1:
U(K) <=N - 1-(N -2)*X( 1,K);
U(K) >=1+( N - 2)*X(K,1));
END
得到结果:
总费用:
950
路线:
A-B-E-D-F-A
(2)选取B,C,E,F,计算旅行费用:
MODEL:
!
TravelingSalesProblemforthecitiesofsix city;
SETS:
CITY/ 1..5/:
U;!
U(I) =sequence no. of city;
LINK(CITY, CITY):
COST,!
Thecostmatrix;
X;!
X(I,J)= 1ifwe uselink I,J;
ENDSETS
DATA:
!
Costmatrix,it neednotbesymmetric;
COST=0 120 250 210 150
120 0 98 225 300
25098 0 430 280
2102254300 420
150300280 420 0;
ENDDATA
N=@SIZE(CITY);
MIN=@SUM(LINK:
COST*X);
@FOR(CITY( K):
!
Itmustbe entered;
@SUM( CITY(I)|I #NE#K:
X( I, K))=1;
!
Itmustbedeparted;
@SUM(CITY(J)|J#NE#K:
X(K, J)) =1;
!
Weakform ofthesubtourbreakingconstrains;
!
Thesearenotverypowerfulforlargeproblems;
@FOR(CITY(J)|J #GT#1#AND#J#NE#K:
U(J)>=U(K)+X(K,J)-(N-2)*(1-X(K,J))+(N-3)*X(J,K)););
@FOR(LINK:
@BIN(X)); !
MaketheX's0/1;
!
For thefirstand laststop weknow...;
@FOR(CITY(K)| K #GT# 1:
U( K)<=N-1- (N-2)*X(1,K);
U(K)>=1 +(N-2) *X(K,1));
END
得到结果:
总费用:
963
路线:
A-E-B-C-F-A
(3)选取B,C,D,F,计算旅行费用:
MODEL:
!
TravelingSalesProblemforthecitiesofsixcity;
SETS:
CITY/1..5/:
U; !
U(I) =sequenceno.of city;
LINK(CITY, CITY):
COST,!
The costmatrix;
X;!
X(I,J) =1 ifweuselinkI,J;
ENDSETS
DATA:
!
Costmatrix, itneednotbesymmetric;
COST=0 120250 330 150
120 0 98 350 300
25098 0 520 280
330 350 520 0 185
150 300 280 185 0 ;
ENDDATA
N= @SIZE( CITY);
MIN= @SUM( LINK:
COST*X);
@FOR(CITY( K):
!
It must beentered;
@SUM( CITY( I)|I#NE#K:
X(I, K))=1;
!
Itmustbedeparted;
@SUM( CITY(J)|J#NE#K:
X(K,J)) =1;
!
Weakformofthesubtourbreakingconstrains;
!
These arenotverypowerfulforlargeproblems;
@FOR(CITY(J)|J#GT#1 #AND#J#NE# K:
U(J)>=U(K)+X(K,J)-(N-2)*(1-X(K,J))+(N-3)*X(J,K)););
@FOR(LINK:
@BIN(X));!
Makethe X's0/1;
!
For thefirstandlast stopweknow...;
@FOR( CITY(K)| K #GT# 1:
U( K)<= N-1-(N -2) *X(1, K);
U(K)>=1+( N -2)* X( K, 1));
END
得到结果:
总费用:
1013
路线:
A-B-C-F-D-A
(4)选取路线:
B,C,D,E,计算旅行费用:
MODEL:
!
TravelingSales Problem forthe citiesofsix city;
SETS:
CITY/ 1..5/:
U;!
U( I)= sequenceno.ofcity;
LINK(CITY, CITY):
COST, !
The costmatrix;
X;!
X(I,J)=1if weuselink I,J;
ENDSETS
DATA:
!
Costmatrix,itneednotbesymmetric;
COST=0 120250 330 210
1200 98 350 225
250 98 0 520 430
330 350 520 0 270
210 225430270 0 ;
ENDDATA
N=@SIZE(CITY);
MIN=@SUM(LINK:
COST *X);
@FOR(CITY(K):
!
Itmust beentered;
@SUM(CITY(I)|I #NE#K:
X(I, K)) =1;
!
It mustbedeparted;
@SUM(CITY(J)|J #NE#K:
X(K,J)) =1;
!
Weak formof the subtourbreaking constrains;
!
Thesearenotverypowerfulforlargeproblems;
@FOR(CITY(J)|J #GT#1#AND# J#NE#K:
U(J)>=U(K)+X(K,J)-(N-2)*(1-X(K,J))+(N-3)*X(J,K)););
@FOR( LINK:
@BIN(X));!
Makethe X's0/1;
!
Forthefirst and laststopweknow...;
@FOR( CITY(K)|K#GT#1:
U(K)<=N-1-(N-2)* X(1,K);
U(K) >=1 +(N -2)*X( K,1));
END
得到结果:
总费用:
1173
路线:
A-C-B-E-D-A
(5)选取C,D,E,F,计算旅行费用:
MODEL:
!
Traveling SalesProblemfor the citiesofsix city;
SETS:
CITY/1..5/:
U;!
U(I) =sequenceno. of city;
LINK( CITY,CITY):
COST, !
Thecost matrix;
X;!
X(I,J)=1 ifwe uselinkI,J;
ENDSETS
DATA:
!
Costmatrix,itneednot besymmetric;
COST=0 250 330 210150
2500 520 430 280
330 520 0 270 185
210 430270 0 420
150280 185 420 0 ;
ENDDATA
N=@SIZE(CITY);
MIN= @SUM(LINK:
COST* X);
@FOR( CITY( K):
!
Itmustbe entered;
@SUM(CITY( I)|I#NE#K:
X(I,K)) =1;
!
It mustbedeparted;
@SUM(CITY( J)|J#NE# K:
X(K,J)) =1;
!
Weakformof thesubtour breakingconstrains;
!
Thesearenotverypowerful forlargeproblems;
@FOR(CITY(J)| J#GT#1 #AND#J#NE#K:
U(J)>=U(K)+X(K,J)-(N-2)*(1-X(K,J))+(N-3)*X(J,K)););
@FOR( LINK:
@BIN( X));!
MaketheX's 0/1;
!
Forthefirstandlaststopweknow...;
@FOR( CITY(K)|K#GT#1:
U(K) <=N-1-(N -2)*X( 1,K);
U( K)>=1+(N -2)*X(K,1));
END
得到结果:
总费用:
1195
路线:
A-C-F-D-E-A
因此,总结以上
(1),
(2),(3),(4),(5)五种情况可得:
应该选用路线:
A-B-E-D-F-A。
总费用花费最少,为950.
问题3.
在城市间旅游时他计划购买照相机、衣服、书籍、摄像机、渔具、白酒、食品、香烟等物品,而受航空行李重量的限制以及个人体力所限,所买物品的总重量不能超过15kg,各种物品的价格见附表2。
请你为他决策买哪些物品,使所买物品总价值最大?
分析:
解读题意,实际上此题涉及背包问题,题目转化为一个限重15公斤的背包,要求在8件可带可不带的物品中做出合理的方法。
模型建立:
将照相机,衣服,书籍,摄像机,渔具,酒,食品和香烟编号为1,2,3,4,5,6,7,8。
设总容量为b,
为每个物品的重量,
为每个物品各自的价格。
定义一个变量
,当
=1是,表示装第i件物品,当
=0时,则不装(i=1,2,……,8).
则约束条件为:
maxz=
=0或1,(i=1,2,……,8)
模型求解:
利用LINGO软件求解,在LINGO中输入以下程序:
model:
sets:
M/1..8/:
W;
price/1..8/:
p;
number/1..8/:
x;
endsets
data:
W=1,2,4,3,4,2,2,1;
P=1300,2750,320,4350,1400,300,120,600;
enddata
MAX=@SUM(M:
X*P);
@SUM(M:
X*W)<=15;
@FOR(M:
@BIN(X));
End
得到结果:
选择照相机,衣服,摄像机,渔具,酒,食品和香烟,最大价值为10820。
三.建模过程及心得体会
数学建模是一个经历观察、思考、归类、抽象与总结的过程,也是一个信息捕捉、筛选、整理的过程,更是一个思想与方法的产生与选择的过程。
它给学生再现了一种“微型科研”的过程。
数学建模教学有利于激发学生学习数学的兴趣,丰富学生数学探索的情感体验;有利于学生自觉检验、巩固所学的数学知识,促进知识的深化、发展;有利于学生体会和感悟数学思想方法。
同时教师自身具备数学模型的构建意识与能力,才能指导和要求学生通过主动思维,自主构建有效的数学模型,从而使数学课堂彰显科学的魅力。
为了使描述更具科学性,逻辑性,客观性和可重复性,人们采用一种普遍认为比较严格的语言来描述各种现象,这种语言就是数学。
使用数学语言描述的事物就称为数学模型。
有时候我们需要做一些实验,但这些实验往往用抽象出来了的数学模型作为实际物体的代替而进行相应的实验,实验本身也是实际操作的一种理论替代。
数学建模要有团队精神。
数学建模不是一个人的事,是团队的一项活动。
三个人要相互支持,相互鼓励。
不能只管自己的那一部分。
特别是模型的建立,一个人根本不可能想的那么全面,只有大家一起讨论才能把问题搞清楚。
必须合理的安排时间。
做任何事情,合理的时间安排非常重要,建模也是一样,事先要做好一个规划,建模一共分十个板块。
你每天昨晚哪几个板块事先要确定好,这样做才会使自己游刃有余,保证在规定的时间内完成论文,以避免在时间上的不妥,以至于最后无法完成论文。
有些同学经常会借鉴一些别人的论文里的思想,然后变成自己的东西,不过那也是一种能力,不能小瞧。
所以也要多看些别人的论文来调高自己。
四.参考文件。
【1】.运筹学,科学出版社,徐玖平,胡知能,2003年11月第一版
【2】.运筹学——数据,模型,决策,科学出版社,徐玖平,胡知能,2006年3月第一版