数学建模:走遍全中国

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

走遍全中国
摘要
本文解决了周游先生周游全中国的最短路径的选取及基于省钱、省时又方便的互联网订票方案。

对于问题(1),考虑到从34个城市中制定最短的旅游路线,这是一个对称的旅行商问题(TSP ),如果采用动态规划进行求解,空间复杂性及时间复杂性都十分庞大。

因此,为解决问题(1),本文采用人工蚁群算法进行求解,即利用MATLAB 进行计算机求解,得出全国34个城市点到点最短路径的最优解,此方法节约计算资源,具有良好的可扩展性和健壮性。

对于问题(2)与问题(3)本文将其归为一类考虑,即在问题(1)得出的路线最优解的前提下,设计省钱、省时又方便的互联网订票方案。

为解决问题(2)(3),本文将此问题归为多属性决策问题,本文综合考虑了每一个车次或航班的出发时间、达到时间、旅途时间、里程或航程、票价和交通方式,并且将这些因素同周游先生主观因素结合起来,设计决策树,制定相应的问卷调查,然后计算周游先生对城市甲到城市乙中每一个车次和航班的满意度,将满意度最高的作为此路段的最佳订票结果,进而得出全部订票结果(详见附录-最佳订票方案)。

部分结果:总旅行时间天103=z T ;购票总价元19857=z P ;总行程(实际行程)
km S z 18793=;平均满意度438.7=z H
关键词:TSP ; 人工蚁群 ; 最短路径 ; 决策树 ; 满意度
一、问题重述与分析
1.1问题重述
周游先生退休后想到各地旅游。

计划走遍全国的省会城市、直辖市、香港、澳门、台北。

请你为他按下面要求制定出行方案:
(1)按地理位置(经纬度)设计最短路旅行方案;
(2)如果2010年5月1日周先生从哈尔滨市出发,每个城市停留3天,可选择航空、铁路(快车卧铺或动车),设计最经济的旅行互联网上订票方案;
(3)要综合考虑省钱、省时又方便,设定你的评价准则,建立数学模型,修订你的方案;
(4)对你的算法作复杂性、可行性及误差分析;
(5)关于旅行商问题提出对你自己所采用的算法的理解及评价。

1.2 问题分析
随着人们生活水平的不断提高,旅游已经成为人们忠爱的休闲方式之一。

在制定旅游计划的同时需要考虑很多方面的问题,比如:旅游路线的选择、交通工具的选择、旅途用时、经济花销等等。

为了在完成旅游计划的基础上实现省时、方便、经济的目标,需要制定一个最优的旅游方案。

本文给出周游先生的旅游计划—游遍中国的省会城市、直辖市、香港、澳门以及台北,要求达到旅途最短、经济、省时又方便的目的,为了实现这一目标,需要制定一个最优的旅游方案。

首先要实现旅途最短,本问题属于一个对称旅行商(TSP)问题,很显然,如果利用传统的动态规划解法在N为34的情况下,解法的空间复杂性及时间复杂性都十分庞大,不利于旅行方案的确定,因此,本文采用人了工蚁群算法,通过计算机编程可以得到最优以及次优的旅行路线。

得到优化后的旅游路径后,本文需要考虑另外的条件,经济问题、时间问题、方便问题等,为了综合考虑这几方面的因素,需要制定一个决策模型,设计决策树与问卷调查,通过问卷调查可以得到人们对于出发时间、达到时间、旅途时间、里程或航程、票
价和交通工具的选择标准,再通过合理的计算,得出满意的互联网订票方案。

二、 模型的基本假设和符号说明
2.1 模型假设
(1)省会与省会之间的距离为球面最短距离;
(2)绘图时省会分布图上经线、纬线近似平行分布;
(3)票价不考虑除打折以外的其他优惠;
(4)在旅行过程中只考虑购票的经济花费,不考虑其他的消费;
(5)旅行中所乘的车次或航班均准点到达;
2.2 符号说明
模型(1):
N : 要经过的城市总数;
ij d : 任意两城市之间的距离;
)(s L : 表示蚂蚁s 行走的城市集合;
)(w f : 表示城市1 2……n 的一个排列;
ij τ: 信息值;
k ρ: 挥发因子;
W : 城市经纬度;
1S : 最短路径最优解;
2S : 最短路径次优解;
模型(2)、(3):
i m : 两城市间的旅行方式(动车1m 、快车卧铺2m 、航空3m );
N : 车次或航班;
t : 车次或航班的出发时间;
tt : 车次或航班的到达时间;
T : 车次或航班的旅行时间;
S : 车次或航班的里程;
P : 车次或航班的票价;
)(m G : 旅行方式的重要性程度;
)(t G : 出发时间的重要性程度;
)(tt G : 到达时间的重要性程度;
)(T G : 旅行时间的重要性程度;
)(S G : 旅行里程的重要性程度;
)(P G : 旅行价格的重要性程度;
)(m H m l : 旅行方式的满意度;
)(t H t l : 出发时间的满意度;
)(tt H tt l : 到达时间的满意度;
)(T H T l : 旅行时间的满意度;
)(s H S l : 旅途里程的满意度;
)(P H P l : 旅途价格的满意度;
X T : 总行程时间;
y T : 总的停留天数;
z S : 总行程;
z P : 购票总价;
Z T : 完成旅游计划总用时;
z H : 平均满意度;
三、模型的建立及求解
3.1 问题(1)模型的建立及求解
3.1.1 模型的建立
周游先生要在全国省会包括直辖市、香港、澳门共34个地点旅游,要求出最短旅行路线。

本问题属于一个对称旅行商(TSP)问题,利用传统的动态规划解法]1[在N为34的情况下,解法的空间复杂性及时间复杂性都十分庞大,因此,本文采用人工蚁群算法]6[]2[、进行求解。

图1
如图1所示,蚂蚁从A点出发,速度相同,食物在D点,可能随机选择路线ABD 或ACD。

假设初始时每条分配路线一只蚂蚁,每个时间单位行走一步,本图为经过9个时间单位时的情形:走ABD的蚂蚁到达终点,而走ACD的蚂蚁刚好走到C点,为一半路程。

图2
图2为从开始算起,经过18个时间单位时的情形:走ABD 的蚂蚁到达终点后得到食物又返回了起点A ,而走ACD 的蚂蚁刚好走到D 点。

假设蚂蚁每经过一处所留下的信息素为一个单位,则经过36个时间单位后,所有开始一起出发的蚂蚁都经过不同路径从D 点取得了食物,此时ABD 的路线往返了2趟,每一处的信息素为4个单位,而 ACD 的路线往返了一趟,每一处的信息素为2个单位,其比值为2:1。

寻找食物的过程继续进行,则按信息素的指导,蚁群在ABD 路线上增派一只蚂蚁(共2只),而ACD 路线上仍然为一只蚂蚁。

再经过36个时间单位后,两条线路上的信息素单位积累为12和4,比值为3:1。

若按以上规则继续,蚁群在ABD 路线上再增派一只蚂蚁(共3只),而ACD 路线上仍然为一只蚂蚁。

再经过36个时间单位后,两条线路上的信息素单位积累为24和6,比值为4:1。

若继续进行,则按信息素的指导,最终所有的蚂蚁会放弃ACD 路线,而都选择ABD 路线。

这就是正反馈效应。

人工蚁群有一定的记忆能力,能够记忆已经访问过的节点。

同时,人工蚁群再选择下一条路径的时候是按一定算法规律有意识地寻找最短路径,而不是盲目的。

在TSP 问题中,可以预先知道当前城市到下一个目的地的距离。

TSP 问题表示为一个N 个城市的有向图G=(N ,A ),其中
n}{1,2,...,N =,}, |j), {(i A N j i ∈= )1(
城市之间的距离目标函数为:n n ij d ⨯)(
其中
∑=-=n
l i i l l d w f 11)( )2( 为城市1,2···n 的一个排列。

),,,(21n i i i w =,11i i n =+。

假设m 只蚂蚁在图的相邻节点间移动,从而协作异步地得到问题的解。

每只蚂蚁的一步转移概率由图中的每条边上的两类参数决定:一,信息素值,也称信息素痕迹。

二,可见度,即先验值。

信息素的更新方式有2种,一是挥发,也就是所有路径上的信息素以一定的比率进行减少,模拟自然蚁群的信息素随时间挥发的过程;二是增强,给评价值“好”(有蚂
蚁走过)的边增加信息素。

蚂蚁向下一个目标的运动是通过一个随机原则来实现的,也就是运用当前所在节点存储的信息,计算出下一步可达节点的概率,并按此概率实现一步移动,逐此往复,越来越接近最优解。

蚂蚁在寻找过程中,或者找到一个解后,会评估该解或解的一部分的优化程度,并把评价信息保存在相关连接的信息素中。

算法步骤如下:
步骤1: 对n 个城市的TSP 问题,}, |j), {(i A n}{1,2,...,N N j i ∈==,城市间的距离矩阵为n n ij d ⨯)(,给TSP 图中的每一条弧),(j i 赋信息初始值
|
|1)0(A ij =τ )3( 假设m 只蚂蚁在工作,所有蚂蚁都从同一城市出发。

当前最好解是),,2,1(n w =。

步骤2:(外循环)如果满足算法的停止规则,则停止计算并输出计算得到的最好解。

否则使蚂蚁s 从起点0i 出发,用)(s L 表示蚂蚁s 行走的城市集合,初始)(s L 为空集,m s ≤≤1。

步骤3(内循环)按蚂蚁m s ≤≤1的顺序分别计算。

当蚂蚁在城市i ,若
N s L =)(或}{Φ=∉∈)(A ),(|s L l l i l , )4(
完成第s 只蚂蚁的计算。

否则,若
N s L ≠)(且}{{}Φ≠-∉∈=0)(,),(|i s L l A l i l T )5(
则以概率
T j k k p T
l ij ij ij ∈--=
∑∈,)1()1(ττ,T j p ij ∉=,0 )6( 到达j , }{j i j s L s L ==,)()( )7(

N s L ≠)(且}{}{Φ=-∈=0)(),(|i s L j i l T )8(
则到达0i ,
}{00,)()(i i i s L s L == )9(
重复步骤3。

步骤4:对m s ≤≤1,若N s L =)(,按)(s L 中城市的计算路径程度;若N s L ≠)(,路径长度置为一个无穷大值(即不可到达)。

比较m 只蚂蚁中的路径长度,记走最短路径的蚂蚁为t 。

若))(())((W L f t L f <,则)(t L W =。

用如下公式对W 路径上的信息素痕迹加强,对其他路径上的信息素进行挥发。

⎪⎪⎪⎭
⎫ ⎝⎛--=+--=---上的一条弧不是上的一条弧为W ),()1()1()(W ),(||)1()1()(111j i k k j i W k k ij k ij k ij k ij τρτρτρτ )10(
得到新的1),(+=k k k ij τ,重复步骤2。

在步骤4中,挥发因子k ρ对于一个固定的1≥K ,满足
K k k k k ≥+-
≤,)1ln(ln 1ρ )11(
并且∞=∑∞=1
k k ρ,经过k 次挥发,非最优路径的信息素逐渐减少至消失。

最总停止计算,输出本次运行的最优路径。

3.1.2 模型的求解
在求解时利用各个城市的经纬度作为决策变量,运行MATLAB-M 文件]5[(详见附录-MATLAB 程序1),将34城市的经纬度
⎥⎦
⎤⎢⎣⎡=22222523283940424446113114103108113117116123125126 W 调入程序。

运行多次后,出现多个运行结果。

在此,要对多个运行结果进行筛选,即求出多个运行结果中的最优解与次优解。

首先需要知道路径中城市与城市之间的距离ij d 。

将所有城市编号得:
利用城市经纬度
⎥⎦
⎤⎢⎣⎡=22222523283940424446113114103108113117116123125126 W 用MATLAB (详见附录-MATLAB 程序2)求出:

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢
⎢⎢
⎢⎢⎢⎢⎣⎡=06211412367264728786201200234626252856114112000266329343145236723462663028251026472625293428202302878285631455112310
ij d 根据得出的数据能够直接得到城市i 到j 距离,进而利用MATLAB 求出了最短路径最优解(图1)km S 54.158691=与次优解(图2)km S 19.159662=:
图3 图4
假设旅行线路的方向如图3、图4所示,对路径上的城市旅游的先后顺序进行编号。

路径最优解:
哈尔滨 哈尔滨

哈尔滨()上海()杭州()南京()合肥()武汉()长沙()南昌()福州()台北()香港()澳门()广州()海口()南宁()贵阳()重庆()成都()昆明()拉萨()乌鲁木齐()西宁()兰州()银川()西安()郑州()济南()石家庄()太原()呼和浩特()北京()天津()沈阳()长春()哈尔滨(134333231302928272625242322212019181716151413121110987654321→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→ 路径次优解:

哈尔滨()上海()南京()合肥()杭州()福州()台北()南昌()武汉()长沙()广州()澳门()香港()海口()南宁()贵阳()重庆()成都()昆明()拉萨()乌鲁木齐()西宁()兰州()银川()西安()郑州()济南()石家庄()太原()呼和浩特()北京()天津()沈阳()长春()哈尔滨(134333231302928272625242322212019181716151413121110987654321→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→ 3.2 问题(2)(3)模型的建立及求解
3.2.1 模型的建立
针对在问题(1)中求出的最短路径最优解(最短路径次优解的解法与此相同)在互联网上分别查到城市`1+→i i C C 的旅行方式m (动车1m 、快车卧铺2m 、航空3m )的车次或航班N ,以及每个车次或航班的出发时间t ,到达时间tt ,总共花掉的时间tt t T -=,里程S ,及价格P 。

基于要从互联网上选择最好的车次或航班,每个车次或航班具有不同的参考因素值(旅行方式,出发时间,到达时间,总共时间,里程,票价),因此,把决定车次或航班的问题归为多属性决策问题]3[。

这几个属性都属于主观评价的范围,最终结果取决于决策者的主观意见。

为了反映决策者的主观意见,这里引入重要性程度G 与满意度H ,即对于选择每个车次或航班的每一个参考因素的满意程度。

定义:(1)重要性程度G 为所有参考因素(旅行方式,出发时间,到达时间,总共时间,
里程,票价)中每个参考因素占整个参考因素的百分比。

(2)满意度H 为决策者对于每个参考因素的值的满意程度,这里用分值度量。

下面是决定车次或航班的决策树:
人在估计事物质的区别时,常采用五中判断表示,即次、较次、中、较好、好。

当需要更高精度时还可以在相邻判断之间做出比较,总共有九个判断等级,即91→个判断等级,心理学家认为,人们在比较若干个对象时,能够区别差异的心理学极限为27±个对象,它们之间的差异正好可以用九个数字表示出来,因为一天的时间为24小时,为了避免分段后出现小数,本文将一天24小时分为8个阶段,即每3小时为一个阶段。

评分标准如下:
为了收集主观上对每个因素的重要性程度G 和满意程度H (N H G ∈,),本文设计多个调查问卷分阶段让周游先生打分,分值为a ,91≤≤a 。

1、满意度)(s H S l 的调查:
将整个路线中车次或航班的最长里程m ax S 与最短里程min S 相减,再将差值均分为九
份,分别调查出在
()⎥⎦⎤
⎢⎣
⎡⎪⎭⎫ ⎝⎛-+⎪⎭⎫ ⎝⎛--+9,91min max min min max min
S S l S S S l S S S ,91≤≤S l )12( 中每个阶段的满意度)(s H S l ,满意度为9分,即满意度越高,分值越大,即
N i a i a a s H i i i S l ∈≤≤≤≤=,91,9
1,)(且 )13(
2、满意度)(m H j
l m ,
(3,2,1=j )的调查: 考虑到里程长短对选择出行方式的影响,本文将里程中分出的9个阶段分为3份,,分别按一下规则进行列车的选择:
(1)在1=j ,∈S ⎪⎪⎭⎫
⎢⎣
⎡⎪⎭⎫ ⎝⎛-+93,min max min min S S S S 时, 9
,,1)()()(3213
12
11
13
21
≤≤===a a a a m H a m H a m H m
l m
l m
l )14(
(2)在2=j ,∈S ⎪⎪⎭⎫
⎢⎣
⎡⎪⎭⎫ ⎝⎛-+⎪⎭⎫ ⎝⎛-+9693min max min min max min S S S S S S ,时, 9
,,1)()()(3213
22
21
23
21
≤≤===a a a a m H a m H a m H m l m l m l )15(
(3)在3=j ,∈S ⎥⎦
⎤⎢⎣⎡⎪⎭⎫ ⎝⎛-+max min max min 96S S S S ,时,
9
,,1)()()(3213
32
31
33
21
≤≤===a a a a m H a m H a m H m l m l m l )16(
3、满意度)(t H t l 的调查:
将一天24小时分为8个阶段,每阶段3个小时,分别调查出行满意度)(t H t l ,
81≤≤t l ,即
i l a t H t =)(,81≤≤i a ,81≤≤t l )17(
4、满意度)(tt H tt l 的调查:
将一天24小时分为8个阶段,每阶段3个小时,分别调查出行满意度)(t H t l ,
81≤≤tt l ,即
i l a t H tt =)(,81≤≤i a ,81≤≤tt l )18(
5、满意度)(T H T l 的调查:
将整个路线中车次或航班的最长时间m ax T 与最短时间m in T 相减,再将差值均分为九
份,分别调查出在⎥⎦⎤
⎢⎣⎡⎪⎭⎫ ⎝⎛-+⎪⎭⎫ ⎝⎛--+9,9)1(min max min min max min T T l T T T l T T T ,91≤≤T l 中每个阶
段的满意度)(T H T l ,即
i l a T H T =)(,91≤≤i a ,91≤≤T l )19(
6、满意度)(P H P l 的调查:
因为车次的最高价格与大部分价格相差很大,为了评分的细化,本文用1000元与整个路线中车次或航班的最低价格m in P 相减,再将差值均分为九份,分别调查出在
⎥⎦⎤
⎢⎣
⎡⎪⎭⎫ ⎝⎛-+⎪⎭⎫ ⎝⎛--+91000,91000)1(m in m in m in m in
p l P p l P P P , 91≤≤P l 中每个阶段的满意度)(P H P l (价格元1000≥P 的分值在9=P l 的项目中),即
i l a P H P =)(,91≤≤i a ,91≤≤P l )20(
为了比较的有效性以上公式(13)~(20)的相同打分值在同一个项目下不允许超过3次。

7、重要性程度)(m G ,)(t G ,)(tt G ,)(T G ,)(S G ,)(P G 的调查:
)(m G ,)(t G ,)(tt G ,)(T G ,)(S G ,)(P G %1009
1
⨯=
∑=i i
i
a
a ,91≤≤i a )21(
i a 分别为6个因素的重要程度的分值,且在这6个项目中最多出现4次分值相同的
情况。

经过以上步骤的调查,最终可确定城市`1+→i i C C 第k 个车次或航班的最终满意度
i k H 为
)()()()()()()()()()(P H P G s H T G tt H tt G t H t G m H m G H k k k k j k i k ++++= )22(
最后选择城市`1+→i i C C 的所有车次和航班中H 最高的车次或航班出行,进而求得整个旅游路径中的互联网订票方案。

3.2.2 模型的求解 1、对最优解路径的求解
(1)对于每个决策因素的重要性程度周游先生赋以下值:
57.1602max =S km 48min =S km 元4090max =P 元50min =P m T 650max = m T 45min =
km S S 73.172948
57.16029min max =-=- )23( m T T 22.67945
6509min max =-=- )24( 元6.1059
50
100091000min =-=-p )25( (2)假设周游先生对于不同长短的里程S 的满意度)(S H S l 赋以下值:
(3)假设周游先生对于不同里程区间的三种交通方式的满意度)(m H j
l m 赋以下值:
(4)假设周游先生对于不同出发时间t 区间的满意度)(t H t l 赋以下值:
(5)假设周游先生对于不同到达时间tt 区间的满意度)(tt H tt l 赋以下值:
(6)假设周游先生对于不同车次或航班运行时间T 的满意度)(T H T l 赋以下值:
(7)假设周游先生对于不同车次或航班的价格P 的满意度)(P H P l 赋以下值:
(8)利用MATLAB (计算程序详见附录-MATLAB 程序3)计算每段旅途的每个车次或航班的满意度,再取其中满意度最高的车次或航班作为最佳互联网订票标准,以此类推,得出全国路线的最佳订票方案。

这里以太原—石家庄为例:
其中出发时间与到达时间按t
t x
=241转换,其中x t 为计算采用格式,t 为24小时制时间。

在MATLAB 命令窗口输入
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢
⎢⎢
⎢⎢⎢
⎢⎢⎢
⎢⎢⎢
⎢⎢
⎢⎣⎡=184
225
74
0.9326
0.881318422575 0.7924 0.740318422574 0.7729 0.721518422569 0.7347 0.686818422574 0.6500 0.598618422574 0.6264
0.575018422574 0.5778 0.526418422569 0.5389 0.491018422574 0.5139 0.462518422574 0.4486 0.397218422568 0.4257 0.378518422575
0.4028 0.35077r 运行程序得到最佳车次或航班,按此类推,得到整个路线的车次或航班。

结果如下表(详细参考请见附录-最佳订票方案):
注:其中广州到澳门与澳门到香港因在网上无法进行动车、特快卧铺、航班的订票,所
以本文分别用大巴与轮船作为交通工具,计算满意度)(m H j
l m 时均采用1m 的标准。

由附录-最佳订票方案中数据计算得:
总行程时间h T x 8.96=,因为每个城市停留3天(出去哈尔滨)总的停留天数为
h T y 237624333=⨯⨯=,完成旅游计划总用时()
()
天10324
23768.9624
=+=+=
y x
z T T
T ,
即5月1日从哈尔滨出发,环游中国后8月11日返回哈尔滨;购票总价元19857=z P ;总行程km S z 18793=;平均满意度438.7=z H 。

如果对以上结果又不满意之处,可通过调整因素重要性程度G 与满意度H 来重新决定订票方案。

四、模型的误差分析
1、本模型利用蚁群算法计算最短路径时是依据的两两城市之间的最短距离,而实际上两城市之间的行车里程并不是两两城市之间的直接距离。

2、本模型在选取车次时判断标准为人为主观因素,在具有了普遍性的同时也具有了随机性,为减少随机性,可通过多次打分,得出较多个结果,再从中选取最优解。

3、实际里程或航程并不是球面直接距离,因此模型(1)得出的总路径长度与模型(2)
的出的结果有一定差距。

4、在旅途中会遇到很多客观的不定因素,比如天气问题等,会使正常计划受到一定的影响。

五、模型复杂性分析
1、模型的复杂性:
(1)对于周游先生计划游遍全国的省会城市、直辖市、香港、澳门、台北这一问题,我们运用了模型(1)来计算周游先生完成旅游计划的最短行程,采用人工蚁群算法,利用MATLAB编程得到了最短的旅行行程以及旅游路线,相对于传统的动态规划解法,达到了省时、简便的效果,大大降低了计算的复杂性。

(2)对于订票方案问题,我们给出了模型(2)、(3)的求解;为了反映决策者的主观意见,这里引入重要性程度G与满意度H,综合考虑了出行方式,出发时间,到达时间,旅行用时,旅行路程,票价等的重要性程度G与满意度H,给出了“决策树”,决策者先通过打分,再通过计算程序进行处理,就能简单地选择出理想订票方案。

(3)建立的模型能与实际紧密联系,结合实际情况对所提出的问题进行求解,使模型更贴近实际,达到了运用数学知识解决实际问题的目的。

六、模型可行性与推广
本案例建立的模型解决了旅游出行优化问题,采用了人工蚁群算法解决了最短路径问题,运用决策分析方法解决了旅行费用优化问题。

因此,本模型还可以运用于很多领域类似的关于路径优化以及经济优化的问题,如:输油管道的铺设问题、邮递员送信问题、交通运输问题等。

本模型具有较高的可行性与应用价值。

参考文献
[1] 卢开澄. 单目标、多目标与整数规划. 北京:清华大学出版社. 1999
[2] 吴红,王远世.搜索不同TSP最佳路径的多蚁群优化算法.中山大学报(自然科学
版).第44卷第4期 2005年7月.13~20
[3] 许玖平等. 运筹学:数据.模型.决策. 北京:科学出版社. 2006
[4] 薛定宇等. 高等运用数学的MATLAB求解. 北京:清华大学出版社. 2008.10
[5] amy2009win 蚁群算法matlab源程序
/search/matlab+%E6%97%85%E8%A1%8C%E5%95 %86%5Efield%3D%2A/1 2010.4.26
[6] Yuehui Chen 蚁群算法
/kejian/%B5%DA%CE%E5%D5%C2%D2%CF%C8%BA%CB%E3%B7%A8 .ppt 2010.4.27
MATLAB程序1:
function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=tsp prompt={'输入你的名字:','蚂蚁的个数',...
};
dlg_title = '输入参数对话框';
num_lines = [1 40];
def = {'guitar','34','200','1','5','0.1','100'};
ayf = inputdlg(prompt,dlg_title,num_lines,def,'on');
if ~strcmp(ayf{1},'guitar')
errordlg('姓名不对','Error');
return
end
temp=cellfun(@str2double,ayf(2:end));
temp=num2cell(temp);
[m,NC_max,Alpha,Beta,Rho,Q]=deal(temp{:});
[FileName,PathName] = uigetfile('*.dat','选择城市坐标的数据文件'); dataFile=strcat(PathName,FileName);
C=load(dataFile);
n=size(C,1);
D=zeros(n);
for i=1:n
for j=1:n
if i~=j
D(i,j)=sqrt(sumsqr(C(i,2:3)-C(j,2:3)));
else
D(i,j)=eps;
end
end
Eta=1./D;
Tau=ones(n);
Tabu=zeros(m,n);
NC=1;
R_best=zeros(NC_max,n);
L_best=inf+ones(NC_max,1);
L_ave=zeros(NC_max,1);
hh= waitbar(0,'Please wait...');
while NC<=NC_max
Tabu(:,1)=randi(m,1,[1,n]);
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));
J=setdiff(1:n,visited);
P=J;
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:n-1
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
[L_best(NC),pos]=min(L);
R_best(NC,:)=Tabu(pos,:);
L_ave(NC)=mean(L);
NC=NC+1;
Delta_Tau=zeros(n);
for i=1:m
for j=1:n-1
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho)*Tau+Delta_Tau;
Tabu=zeros(m,n);
mcc=NC/NC_max;
waitbar(mcc,hh,['now....',num2str(round(100*mcc)),'%']);
end
close(hh);
[Shortest_Length,Pos]=min(L_best);
Shortest_Route=R_best(Pos,:);
figure(1);
DrawRoute(C,Shortest_Route);
axis equal
figure(2);
plot(L_best);
hold on
plot(L_ave);
function DrawRoute(C,R)
N=length(R);
scatter(C(:,2),C(:,3),5);
for i=1:size(C,1)
text(C(i,2)+20,C(i,3)+20,num2str(i));
end
hold on
plot([C(R(1),2),C(R(N),2)],[C(R(1),3),C(R(N),3)])
for ii=2:N
plot([C(R(ii-1),2),C(R(ii),2)],[C(R(ii-1),3),C(R(ii),3)],'r');
pause(0.05);
end
MATLAB程序2:
function d=fn
j=[45.75 43.88333 41.8 39.91667 39.13333 38.03333 36.65 32.05
30.26667 34.5 26.08333 25.05 20.01667 23.16667 28.68333 30.51667
31.52 34.76667 37.86667 40.81666 43.76667 36.56667 36.03333 38.46667 34.26667 29.6 30.66667 29.56667 26.56667 28.21667 22.8 25.05 22.2 22.2
;126.63333 125.35 123.38333 116.41667 117.2 114.48333 117 118.78333 120.2 121.43333 119.3 121.5 110.35 113.23333 115.9 114.31667 117.17 113.65 112.53333 111.65 87.68333 101.75 103.73333 106.26667 108.95 91 104.06667 106.45 106.71667 113 108.31666 102.73333 114.1 113.5
];
i=1;
while i<=34 ;
for x=1:1:34;
c(i,x)=distance('rh',[j(1,i),j(2,i)],[j(1,x),j(2,x)]);
end;
i=i+1;
end;
i=i-1,c;
a=(c*pi/180)*6371.3
MATLAB程序3:
function H=fm(r)
Ht=0;
Htt=0;
HT=0;
Hs=0;
HP=0;
Hm=0;
HL=0;
for i=1:1:length(r(:,1))
for j=1:1:6
switch j<=6
case j==1
if r(i,j)>=0&&r(i,j)<0.125
Ht=2;
elseif r(i,j)>=0.125&&r(i,j)<0.25
Ht=3;
elseif r(i,j)>=0.25&&r(i,j)<0.375
Ht=5;
elseif r(i,j)>=0.375&&r(i,j)<0.5 Ht=6;
elseif r(i,j)>=0.5&&r(i,j)<0.625 Ht=7;
elseif r(i,j)>=0.625&&r(i,j)<0.75 Ht=9;
elseif r(i,j)>=0.75&&r(i,j)<0.875 Ht=7;
elseif r(i,j)>=0.875&&r(i,j)<1
Ht=3;
end
case j==2
if r(i,j)>=0&&r(i,j)<0.125
Htt=2;
elseif r(i,j)>=0.125&&r(i,j)<0.25 Htt=3;
elseif r(i,j)>=0.25&&r(i,j)<0.375 Htt=5;
elseif r(i,j)>=0.375&&r(i,j)<0.5 Htt=6;
elseif r(i,j)>=0.5&&r(i,j)<0.625 Htt=7;
elseif r(i,j)>=0.625&&r(i,j)<0.75 Htt=9;
elseif r(i,j)>=0.75&&r(i,j)<0.875 Htt=7;
elseif r(i,j)>=0.875&&r(i,j)<1
Htt=3;
end
case j==3
if r(i,j)>=45&&r(i,j)<112.2
HT=9;
elseif r(i,j)>=112.2&&r(i,j)<179.4 HT=8;
elseif r(i,j)>=179.4&&r(i,j)<246.7 HT=7;
elseif r(i,j)>=246.7&&r(i,j)<313.9 HT=6;
elseif r(i,j)>=313.9&&r(i,j)<381.1 HT=5;
elseif r(i,j)>=381.1&&r(i,j)<448.3 HT=4;
elseif r(i,j)>=448.3&&r(i,j)<515.6 HT=3;
elseif r(i,j)>=515.1&&r(i,j)<582.8 HT=2;
elseif r(i,j)>=582.8&&r(i,j)<650
HT=1;
end
case j==4
if r(i,j)>=48&&r(i,j)<220.73
Hs=9;
elseif r(i,j)>=220.73&&r(i,j)<393.46 Hs=8;
elseif r(i,j)>=393.46&&r(i,j)<566.19 Hs=7;
elseif r(i,j)>=566.19&&r(i,j)<738.92 Hs=7;
elseif r(i,j)>=738.92&&r(i,j)<911.65 Hs=4;
elseif r(i,j)>=911.65&&r(i,j)<1084.38 Hs=3;
elseif r(i,j)>=1084.38&&r(i,j)<1257.11 Hs=2;
elseif r(i,j)>=1257.11&&r(i,j)<1429.84 Hs=1;
elseif r(i,j)>=1429.84&&r(i,j)<1602.57 Hs=1;
end
case j==5
if r(i,j)>=50&&r(i,j)<155.6
HP=9;
elseif r(i,j)>=155.6&&r(i,j)<261.1
HP=8;
elseif r(i,j)>=155.6&&r(i,j)<261.1
HP=8;
elseif r(i,j)>=261.1&&r(i,j)<366.7
HP=7;
elseif r(i,j)>=366.7&&r(i,j)<472.2
HP=6;
elseif r(i,j)>=472.2&&r(i,j)<577.8
HP=5;
elseif r(i,j)>=577.8&&r(i,j)<683.3
HP=4;
elseif r(i,j)>=683.3&&r(i,j)<788.9
HP=3;
elseif r(i,j)>=788.9&&r(i,j)<894.4
HP=2;
elseif r(i,j)>=894.4
HP=1;
end
case j==6
switch r(i,4)>=48&r(i,4)<566.19
case r(i,j)==1
Hm=9;
case r(i,j)==2
Hm=6;
case r(i,j)==3
Hm=3;
end
switch r(i,4)>=566.19&r(i,4)<1084.38
case r(i,j)==1
Hm=8;
case r(i,j)==2
Hm=9;
case r(i,j)==3
Hm=3;
end
switch r(i,4)>=1084.38&r(i,4)<1602.57
case r(i,j)==1
Hm=7;
case r(i,j)==2
Hm=6;
case r(i,j)==3
Hm=9;
end
end
H(i)=Ht*(5/33)+Htt*(5/33)+HT*(6/33)+Hs*(2/33)+HP*(9/33)+Hm*(7/33);
end
HL=max(H); x=find(H==max(max(H)));
end,H,HL,x
最佳订票方案:。

相关文档
最新文档