20组乘公交看奥运
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
20组刘远超 徐良 梁辉
乘公交看奥运的数学模型
摘要
本文解决的核心问题是确立公交线路选择的模型与算法,以此开发解决公交线路选择问题的自主查询计算机系统。
由于不同乘客有不同的需求,为此建立了多目标优化模型,以换乘次数为主,花费时间为第二目标、花费费用为第三目标进行求解。
对于问题一:建立有向赋权图,运用考虑换乘因素后改进的Floyd-Warshall 算法建立以换乘次数最少、花费时间最短、花费费用最少为目标的多目标模型。
然后,根据乘客的不同需求,对所建立的模型求最优解。
最后,用matlab 编程求得结果为:
起始站 终点站
换乘 次数 换乘 站点 花费 时间 花费
费用
S3359 S1828 1 S1784 104min 3元 S1557 S0481 2 S1919 S3186 109min 3元 S0971 S0485 1 S2184 113min 3元 S0008 S3676 1 S0291 86min 2元 S0148 S0485 2 S0036 S2210 109min 3元 S0087 S3676 1 S3496 68min 3元 对于问题二:考虑换乘因素后改进的Floyd-Warshall 算法中换乘付出的代价ijm 和i 站点到j 站点付出代价ij l 均发生变化。
由此,建立了同问题一的多目标优化模型。
对每个目标函数进行求解,得到结果为:
起始站 终点站 换乘站点
换乘次数 花费费用 花费时
间
S3359 S1828 S1784 1 3元 104min S1557 S0481 S1919 S3186 2 3元 109min S0971 S0485 S2184 1 3元 131min S0008 S3676 S0291 1 2元 86min
S0148 S0485 S1487(D2)
D21(S0464)
2 5元 90.5min
S0087(D27) S3676(D36
)
/ 0 3元 28min
对于问题三:建立有向赋权图,引入0-1决策变量表示弧(,)i j 是否在起点与终点的路上。
据此求出换乘次数最少、行程时间最短、花费费用最少和步行时间最短的多目标优化模型。
此时,换乘次数基本保持不变,总的花费时间会增长,而花费费用会相对减少。
关键词:改进的Floyd-Warshall 算法 多目标优化 直达矩阵 0-1决策
1.问题的重述
1.1问题的背景
我国人民翘首企盼的第29届奥运会明年8月将在北京举行,届时有大量观众到现场观看奥运比赛,其中大部分人将会乘坐公共交通工具(简称公交,包括公汽、地铁等)出行。
这些年来,城市的公交系统有了很大发展,北京市的公交线路已达800条以上,使得公众的出行更加通畅、便利,但同时也面临多条线路的选择问题。
针对市场需求,某公司准备研制开发一个解决公交线路选择问题的自主查询计算机系统。
1.2问题的提出
为了设计这样一个系统,其核心是线路选择的模型与算法,应该从实际情况出发确立线路选择的模型和算法,以满足各种查询者的各种不同需求。
本文需要解决的问题有:
(1)仅仅考虑公汽线路,给出任意两公汽站点之间线路选择问题的一般数学模型与算法。
并根据附录数据,利用你们的模型与算法,求出以下6对起始站→终到站之间的最佳路线(要有清晰的评价说明)。
(1)、S3359→S1828 (2)、S1557→S0481 (3)、S0971→S0485
(4)、S0008→S0073 (5)、S0148→S0485 (6)、S0087→S3676
(2)同时考虑公汽与地铁线路,解决以上问题。
(3)假设又知道所有站点之间的步行时间,请你给出任意两站点之间线路选择问题的数学模型。
为了简化问题,基本参数设定如表1:
表1 基本参数设定
参数时间
相邻公汽站平均行驶时间(包括停站时间):3分钟
相邻地铁站平均行驶时间(包括停站时间) 2.5分钟
公汽换乘公汽平均耗时5分钟(其中步行时间2分钟)
地铁换乘地铁平均耗时4分钟(其中步行时间2分钟)
地铁换乘公汽平均耗时7分钟(其中步行时间4分钟)
公汽换乘地铁平均耗时6分钟(其中步行时间4分钟) 公汽票价:分为单一票价与分段计价两种,标记于线路后;其中分段计价的票价为:0~20站:1元;21~40站:2元;40站以上:3元。
地铁票价:3元(无论地铁线路间是否换乘)。
2.模型的假设与符号说明
2.1模型的假设
假设1:题中所给的数据具有可靠性
假设2:不考虑交通拥挤、交通事故等因素,即公共交通系统运行正常。
假设3:同一地铁站对应的任意两个公汽站之间可以通过地铁站换乘(无需支付地铁费)。
假设4:根据乘客的尽量减少麻烦的心理,将乘车方案的换乘次数控制在两次以内。
3.问题的分析
此题研究的是公交路线选择的多目标优化的数学建模问题。
考虑实际生活中,不同乘客有各种不同的需求,因此要根据乘客的需求建立优化方案。
通过查阅相关文献[1]得到2002年在对合肥10各主要站点进行乘客出行路线选择因素问卷调查结果显示乘客考虑各选择因素的百分比如表1:
方法对所建立的多目标模型进行求解。
问题一的分析:首先,根据乘客的不同需求和趋利避害的心理,仅考虑公交线路,建立有向赋权图,运用考虑换乘因素后改进的Floyd-Warshall 算法建立多目标优化模型。
确立直达矩阵,将换乘站点看作两站点间的节点,采用松弛技术建立了以换乘次数最少、花费时间最短、花费费用最少为目标的数学模型。
然后,对模型进行求解。
问题二的分析:此时考虑换乘因素后改进的Floyd-Warshall 算法中的换乘付出代价ijk δ需重新考虑。
题中有四种换乘方式,不同换乘方式的换乘付出代价ijk δ是不同的。
同时i 站点到j 站点付出代价ij l 会变化,若,i j 其中一个为地铁站,另外一个为公交站点时,从i 对应的换乘站点t 不能直达j ,则ij l =∞;从i 对应的换乘站点t 能达到j ,则ij tj l l =。
根据问题一,建立多目标优化模型,通过matlab 进行编程求解。
问题三的分析:此问增加了所有站点之间的步行时间目标函数,建立公交路线和地铁路线有向赋权图G(V,E),G(V,E ’)。
引入0-1决策变量ij x 表示弧(,)i j 是否在起点与终点的路上。
求得站点i 到j 之间换乘次数等于经过的总弧数减去1。
总的步行时间包括相同车型换乘、不同车型换乘的步行时间,据此求出步行时间目标函数。
行程总时间包含乘车时间、换乘时间和起始站等待时间。
关键是处理换乘时间,根据建立的有向赋权图可以求得四种换乘方式的换乘时间。
从而得到行程总时间的目标函数。
建立费用直达矩阵()ij n n W p ⨯=,只需判断弧(,)i j 是否在起始站与终点站的路上,从而得出费用的目标函数。
最终建立了多目标优化模型。
4.数据的处理
4.1异常数据的处理
分析题中所给的数据,发现有些数据出现异常。
如下是对异常数据的处理:
(1)对于个别线路相邻站点名相同,采取不作处理的方式,因为一般不会影响实例计算中线路选择的结果。
(2)对于L406未标明是环行线的问题,将L406当作环行线来处理。
(3)对于L290标明是环线,但首尾站点分别为1477与1479的问题,可将所有线路中1477与1479统一为1477后计算。
4.2总体数据的处理
将公交线路,地铁线路和地铁换乘公交数据运用matlab 编程进行处理将原始数据导入matlab (详细代码见附录一)中,得到41040⨯的元胞数组矩阵。
将元胞数组矩阵最后一列提出,生成861040⨯的有关公交线路的矩阵,通过matlab 编程(详细代码见附录二)得到问题一的两个直达矩阵表2和表3如下:
表2问题一中的时间直达矩阵
1 2 3 4 … 3955 3956 3957 1 0 Inf Inf Inf … Inf Inf Inf 2 Inf 0 Inf 72 … Inf Inf Inf 3 Inf Inf 0 Inf … Inf Inf Inf 4 Inf 72 Inf 0 … Inf Inf Inf 5 Inf Inf Inf 150 … Inf Inf Inf 6 Inf Inf Inf 147 … Inf Inf Inf 7 Inf 6 Inf 66 … Inf Inf Inf …
…
…
…
…
…
…
…
…
3955 Inf Inf Inf
Inf … 0 Inf Inf 3956 Inf Inf Inf Inf … Inf 0 Inf 3957 Inf Inf
Inf Inf … Inf Inf 0
表3问题一中的费用直达矩阵 1 2 3 4 … 3955 3956 3957 1 0 Inf Inf Inf … Inf Inf Inf 2 Inf 0 Inf 2 … Inf Inf Inf
3 Inf Inf 0 Inf …Inf Inf Inf
4 Inf 2 Inf 0 …Inf Inf Inf
5 Inf Inf Inf 3 …Inf Inf Inf
6 Inf Inf Inf 3 …Inf Inf Inf
7 Inf 1 Inf 2 …Inf Inf Inf
………………………3955 Inf Inf Inf Inf …0 Inf Inf 3956 Inf Inf Inf Inf …Inf 0 Inf 3957 Inf Inf Inf Inf …Inf Inf 0 问题二中增加了39个地铁站,用同样的方法,此时得到86
1042 的矩阵。
通过matlab编程(详细代码见附录三)得到问题二中的两个直达矩阵表4和表5如下:
表4问题二中的时间直达矩阵
1 2 3 4 …3994 3995 3996
1 0 Inf Inf Inf …Inf Inf Inf
2 Inf 0 Inf 72 …Inf Inf Inf
3 Inf Inf 0 Inf …Inf Inf Inf
4 Inf 72 Inf 0 …Inf Inf Inf
5 Inf Inf Inf 150 …Inf Inf Inf
6 Inf Inf Inf 14
7 …Inf Inf Inf
7 Inf 6 Inf 66 …Inf Inf Inf
………………………3990 Inf Inf Inf Inf …37.5 35 32.5 3991 Inf Inf Inf Inf …40 37.5 35 3992 Inf Inf Inf Inf …42.5 40 37.5 3993 Inf Inf Inf Inf …45 42.5 40 3994 Inf Inf Inf Inf …0 45 42.5 3995 Inf Inf Inf Inf … 2.5 0 45 3996 Inf Inf Inf Inf … 5 2.5 0
表5 问题二中的费用直达矩阵
1 2 3 4 …3994 3995 3996
1 0 Inf Inf Inf …Inf Inf Inf
2 Inf 0 Inf 2 …Inf Inf Inf
3 Inf Inf 0 Inf …Inf Inf Inf
4 Inf 2 Inf 0 …Inf Inf Inf
5 Inf Inf Inf 3 …Inf Inf Inf
6 Inf Inf Inf 3 …Inf Inf Inf
7 Inf 1 Inf 2 …Inf Inf Inf
………………………3990 Inf Inf Inf Inf … 3 3 3 3991 Inf Inf Inf Inf … 3 3 3 3992 Inf Inf Inf Inf … 3 3 3
3993 Inf Inf Inf Inf … 3 3 3 3994 Inf Inf Inf Inf … 3 3 3 3995 Inf Inf Inf Inf … 3 3 3 3996 Inf Inf Inf Inf … 3 3 3
5.建立模型前的准备
5.1改进的Floyd-Warshall 算法:
Floyd-Warshall 算法是一种用于寻找给定的加权图中顶点间最短路径的算法。
通过一个图权值矩阵,求出它的每两点间的最短矩阵。
从加权图中的带权邻接矩阵()
ij
n n
A a ⨯=开始,递归地进行n 次更新。
即由矩阵0
D A =,按一个公
式,构造出矩阵(1)
D ;又用同样地公式由(1)
D 构造出()
n D ;……;最后又用
同样的公式由(1)
n D
-构造出矩阵()
n D。
矩阵()
n D
的i 行j 列元素便是i 号顶点
到j 号顶点的最短路径权,称为()
n D 为图的权矩阵,同时还可引入一个后继节点矩阵path 来记录两点间的最短路径。
采用的是松弛技术,对在i 和j 之间的所有其他点进行一次松弛,所以时间复杂度为)(3n O 。
其状态转移方程如下:
{}[,]min [,][,],[,]map i j map i k map k j map i j =+
其中[.]map i j 表示i 到j 的最短权,k 是穷举,i j 的断点。
改进的Floyd-Warshall 算法考虑了断点处的其他因素的影响,状态转移方程为:
{}[,]min [,][,][,,]|1,2,3,...,map i j map i k map k j i j k k n δ=++=
6.问题一的解答
建立有向赋权图,建立了多目标最优模型。
根据题意确立了三个目标分别为:换乘次数最少,消耗时间最短,花费费用最少。
采用以换乘次数为主,花费时间为第二目标、花费费用为第三目标方法对模型进行求解。
6.1定义直达矩阵与矩阵算子
首先建立n n ⨯的直达矩阵(0)
A
:
(0)(0)()ij n n A a ⨯=
其中,
(0)0,,,ij
ij
i j a i j l ⎧=⎪
=∞⎨⎪⎩到无直达否则 其中:n 表示公共汽车站的站点数;ij l 表示第i 个站点到第j 个站点付出的代价。
若ij l 表示花费的时间,则直达矩阵(0)
A
表示时间直达矩阵;同样的ij l 表示
花费的费用,则直达矩阵(0)
A 表示费用直达矩阵。
然后定义矩阵算子“⊙”如下:
设B A ,均为n 阶方阵,可以得到矩阵C A B =⊙。
其中矩阵C 中的元素为ij c :
{}min |1,2,3...,ij ik kj ijk c a b k n δ=++=
6.2模型一的建立
6.2.1换乘次数目标函数的确立
min z m =
6.2.2花费时间目标函数的确立
建立n n ⨯时间直达矩阵(0)
A
,ijk δ为换乘时花费的时间,由于问题一仅考虑
公交线路,则5t
ijm δ=分钟。
此问中3957n =,根据改进Floyd-Warshall 算法
迭代知道第i 站点到第j 站点经过m 次换乘(换乘站点依次记为1,2,3,,m )的最短时间(付出的代价)为:
()10m m A A A
-=()()
⊙ 定义两次换乘前某辆公交经过的站数为ij n :
ij i j n i j ∞⎧=⎨
⎩,
站点与站点不直达某辆公交经过的站数,站点与站点直达
从而知到换乘m 次花费最短时间为:
()
112min 3()t m ij i mj ijm l n n n m δ=++++
最后得到时间目标函数为:
min m ij ij T l =,其中1,2,...,m M =
综上所述,得到花费时间目标函数:
()
112min min 3()t m ij ij i mj ijm T l n n n m δ==++++
6.2.3花费费用目标函数的确立
建立n n ⨯费用直达矩阵(0)
A ,此时ij l 表示第i 站点到第j 站点花费的最少费
用,换乘时花费费用=0p ijm δ。
由此得到第i 站点到第j 站点的经过m 次换乘的
最少费用为:
()10m m A A A -=()()
⊙ 求得两次换乘间花费的费用为:
,
1,1202204040ij ij ij ij ij n n p n n ∞=∞⎧⎪⎪⎪
≥=⎨⎪<≤⎪
>⎪⎩该公交路线是单一票价,
否则,3,
从而得到换乘m 次(换乘站点依次记为1,2,3,,m )花费的最少费用(付
出的代价)为:
()
112min p m ij i mj ijm l p p p m δ=++++
最后得到费用目标函数为:
min m ij ij P l =,其中1,2,...,m M =
综上所述,得到花费费用目标函数为:
()
112min min p m
ij ij i mj ijm P l p p p m
δ==++++ 6.3约束条件的确立
根据题意得到约束条件如下:
02,,1,12022040405=0ij t p ij ij ij ij ij ijm ijm m m n n n p n n δδ≤≤⎧
⎪
⎪
⎪∞=∞⎧⎪⎪⎪⎪⎪⎪
≥=⎨⎨⎪⎪<≤⎪⎪
>⎪⎪⎩⎪
=⎪
⎪⎩
且为整数为整数该公交路线是单一票价,
否则,3,
6.4综上所述,得到所建立的多目标优化模型为:
目标函数:min min min ij ij z
T P
⎧⎪
⎨⎪⎩
s.t . 02,,1,12022040405=0ij t p ij ij ij ij ij ijm ijm m m n n n p n n δδ≤≤⎧
⎪
⎪
⎪∞=∞⎧⎪⎪⎪⎪⎪⎪
≥=⎨⎨⎪⎪<≤⎪⎪
>⎪⎪⎩⎪
=⎪
⎪⎩
且为整数为整数该公交路线是单一票价,
否则,3,
6.5模型一的求解
模型一的求解过程流程图如下:
matlab对模型进行编程(详细代码见附录二)求解,得到结果如表6:
表6 模型一的求解结果
起始站终点站换乘
次数
换乘
站点
花费
时间
花费
费用
S3359 S1828 1 S1784 104min 3元S1557 S0481 2 S1919 S3186 109min 3元S0971 S0485 1 S2184 113min 3元S0008 S3676 1 S0291 86min 2元S0148 S0485 2 S0036 S2210 109min 3元S0087 S3676 1 S3496 68min 3元6.6模型一结果的评价
观察上述结果发现虽然花费的费用相对还是比较多的,但主最优目标换乘次数能够达到最少。
在一定换乘次数范围内,换乘站数少时,公交经过的站点数会较多,从而分段票价就较高。
因此建立的模型还是可行且符合实际的。
7.问题二的解答
7.1模型二的建立
7.1.1换乘次数目标函数的确立
min z m =
7.1.2花费时间目标函数确立
建立n n ⨯时间直达矩阵(0)
A
,此时3957393996n =+=。
ij l 表示花费时
间,若,i j 其中一个为地铁站,另外一个为公交站点时,从i 对应的换乘站点t 不能直达j ,则ij l =∞;从i 对应的换乘站点t 能达到j ,则ij tj l l =。
公汽换乘公汽、公交换乘地铁、地铁换乘地铁、地铁换乘公交平均耗时(分钟)(包含步行时间)分别为1
2
3
4
5,6,4,7ijk ijk ijk ijk δδδδ====。
两次换乘之间花费的时间为:
3,2.5ij ij ij n i j n i j η⎧=⎨
⎩站点到站点公汽站平均行驶时间
,
站点到站点地铁站平均行驶时间 根据问题一中的花费最短时间:()10m m A A A
-=()()
⊙,从而知道换乘m 次花费最短时间为:
44
11211min |i m ij
i mj ijk i i i i l
k m k ηηηδ==⎛⎫=++++= ⎪⎝⎭
∑∑
由此得到花费时间目标函数为:
min()m ij ij T l =,其中1,2,...,m M =
综上所述,得到花费时间目标函数为:
4
1121min min i m ij ij
i mj ijk i i T l
k ηηηδ=⎛⎫==++++ ⎪⎝⎭
∑
7.1.3花费费用目标函数的确立
建立n n ⨯费用直达矩阵(0)
A
,此时ij l 表示花费费用。
,i j 其中一个为地铁站,另外一个为公交站点时,若从i 对应的换乘站点t 不能直达j ,则ij l =∞;若从i 对应的换乘站点t 能达到j ,则ij tj l l =。
求得两次换乘间花费的费用为:
,
1,12022040403,
ij ij ij ij ij n n p n n ∞=∞⎧⎪⎪⎪≥=⎨<≤⎪⎪>⎪
⎩该公交路线是单一票价,否则,
3,乘坐地铁
而考虑地铁站间换乘时,换乘费用0ijm δ=。
可以得到换乘m 次(换乘站点依次记为1,2,3,,m )花费的最少费用为:
()112min m ij i mj l p p p =+++
最后得到花费费用目标函数为:
min m ij ij P l =
综上所述,得到花费费用目标函数为:
()112min min m ij ij i mj P l p p p ==+++
7.2约束条件的确立
由问题二中的已知条件可以求得约束条件如下:
02,,1,12022040403,0ij ij ij ij ij ij ijm m m n n n p n n δ≤≤⎧
⎪
⎪
⎪∞=∞⎧⎪⎪⎪⎪⎪
⎪≥⎨
=⎨⎪<≤⎪⎪
⎪⎪>⎪⎪
⎩⎪
⎪=⎩
且为整数为整数该公交路线是单一票价,否则,3,乘坐地铁 7.3综上所述,得到所建立的多目标优化模型为:
目标函数:min min min ij ij z
T P
⎧⎪
⎨⎪⎩
s.t . 02,,1,12022040403,0ij ij ij ij ij ij ijm m m n n n p n n δ≤≤⎧
⎪
⎪
⎪∞=∞⎧⎪⎪⎪⎪⎪⎪≥⎨=⎨⎪<≤⎪⎪
⎪⎪>⎪⎪
⎩⎪
⎪=⎩
且为整数为整数该公交路线是单一票价,否则,3,乘坐地铁
7.4模型二的求解
通过matlab 对所建立的多目标优化的数学模型进行求解得到结果如表7:
表7 模型二的求解结果
起始站 终点站
换乘 站点 换乘 次数 花费 费用 花费
时间
S3359 S1828 S1784 1 3元 104min S1557 S0481 S1919 S3186 2 3元 109min S0971 S0485 S2184 1 3元 131min S0008 S3676 S0291 1 2元 86min S0148 S0485 S1487(D2) D21(S0464) 2 5元 90.5min S0087(D27) S3676(D36) / 0 3元 28min 7.5模型二的结果的评价
将所得的结果同模型一的结果进行比较发现,增加了地铁站点,乘客的选择变多使得换乘次数相对较少且花费时间变短。
同时观察两问题中所求的S0087 站点到S3676站点的花费时间如下:
起始站 终点站
换乘 站点 换乘 次数 花费 费用 花费
时间
问题一 S0087 S3676 S3496 1 3元 68min 问题二 S0087(D27) S3676(D36) / 0 3元 28min 显然在增加地铁站后,乘客的换乘次数减少,花费时间变短。
由于乘坐地铁的费用要高于公交的费用,所以乘客花费的费用会相对增加。
而花费费用在乘客考虑选择因素的百分比是最低的,因此在乘客能承受花费费用增加的范围内,所建立的模型还是比较实用的。
8.问题三的解答
增加了所有站点之间的步行时间,由此建立了以换乘次数最少、步行总时间最短、花费费用最少、花费总时间最小为目标的数学模型。
8.1模型三的建立
8.1.1换乘次数目标函数的确立
建立公交路线和地铁路线有向赋权图G(V,E),G(V,E ’),引入0-1决策变量表示弧(,)i j 是否在起点与终点的路上,则:
1,(,)0,ij i j x ⎧=⎨
⎩弧位于起点与终点的路上
否则
站点i 到j 之间换乘次数等于经过的总弧数减去1,即换乘次数目标函数可表示为:
(,)
min 1ij i j z x =-∑
8.1.2步行总时间1T 目标函数的确立
设总步行时间为1T ,则总的步行时间包含相同站点类型换乘的步行、不同站点类型换乘的步行时间以及从一站点到另一站点的步行时间(非换乘),设步行从i 到j 经过的汽车站到汽车站的站点数为1
ij s ,汽车站到地铁站数为2
ij s ,地铁站到汽车站数为3
ij s ,地铁站到地铁站数为4
ij s ,相连两站点的步行时间分别为1t 、
2t 、3t 、4t ,则步行的最短时间可表示为:
''''4
1,1(,)
(,,)
,)
min 2(
1)4(
1)k ij ij k ij
i E j E or k i j i E j E or i E j E i E j E T x x t s ∈∈=∈∈∈∈∈∈=-+-+∑
∑∑∑())(( 8.1.3花费费用目标函数的确立
i 站点到j 站点直达费用权 ()ij n n W p ⨯= 表示为:
,
1,120
22040403,
ij ij ij ij ij n n p n n ∞=∞⎧⎪⎪⎪≥=⎨
<≤⎪⎪>⎪
⎩该公交路线是单一票价,否则,
3,乘坐地铁 则可以得到换乘费用目标函数的表达式为:
(,)
min ()m ij ij ij i j P x p =⨯∑
8.1.4行程总时间(不包含步行时间)T 目标函数的确立 建立时间直达(0)
()ij n n A
t ⨯=,行程总时间包含乘车时间、换乘时间、起始站
等待时间三个方面。
则可以求得行程总时间目标函数为:
(,)
(,)()
(,)(')
min [3(
1)2(
1)]3ij ij ij ij i j i j j E i j j E T t x x x ∈∈=+-+-+∑∑
∑
8.2约束条件的确立
分析换乘次数目标函数,以c 表示乘客所能接受的最大换乘次数,则约束条件为:
(,)'
1ij i j E x c ∈-≤∑
,c 为自然数
对最短路起始点进行约束:
∑∑⎪⎩
⎪
⎨⎧-=-),(),(10,1j i j ji j i j ij i i i x x 为终点,点既不是起始点又不是终,为起始点 8.3综上所述,得到所建立的多目标优化模型为:
目标函数:1
min min min min m
ij z T T
P ⎧⎪⎪⎨⎪⎪⎩
s.t. (,)(,)(,)11,0-11,(,)0,ij i j ij ji j j i j i j ij x c i x x i i i j x ⎧
-<⎪⎪
⎪⎧⎪⎪⎪
-=⎨⎨⎪⎪⎩⎪⎪⎧⎪=⎨⎪⎩⎩
∑∑∑为起点,既不是起始点又不是终点,为终点
弧位于起点与终点的路上否则
8.4模型的解答
问题三只是增加了步行花费的时间目标,其它目标基本保持不变。
首先,根据模型一和模型二的结果对模型三的结果进行大致的估计。
仍然采用上述6个路线对模型三求解进行说明。
换乘次数则基本保持不变。
增加步行目标则大部分乘客的花费费用可能会有少许减少,同时花费时间会增长。
因为若两站点相距较短,则乘车的乘客往往会是老年人或伤残者,大部分青年人会选择步行,此时花费的时间则增长。
而相对于老年人和伤残者,青年人才是乘车的大群体,所以大部分乘客的花费费用会减少。
9.模型的评价、改进和推广
9.1模型的评价
优点: (1)所建立的模型能与实际紧密相连,通过结合实际情况对模型进行求解,使得建立的模型能够运用到实际。
(2)将Floyd-Warshall 算法进行改进,考虑乘客换乘和换乘时间因素,建立的模型更加准确。
(3)对迭代后产生的直达矩阵进行储存,所需的存储空间较小,对硬件的要求较低。
当调用时,查询的速度较快。
缺点:
(1)模型中只考虑了换乘次数不超过两次的情况,实际生活中可能不止两次。
(2)当可能有几条最优路线时,建立的模型只能找出其中的一条。
9.3模型的改进
根据不同乘客的需求,可以对所建立的多目标模型中的目标进行排列组合分别求解,得到具有个性化的最佳路线供乘客选择。
9.2模型的推广
本题的求解是一个典型的运筹学最短路问题,运用Floyd-Warshall 算法建立的模型使用范围非常广泛,在工业、商业、交通运输、行政管理等领域有着广泛的应用。
参考文献
[1]邵慧燕,姚春龙,基于层次分析法的公交查询模型,大连工业大学学报,第
28卷第5期,2009.9
[2]雷德明,严新平,多目标智能优化算法及其应用,科学出版社,2009.3
[3]宋来忠,王志明,数学建模与实验,科学出版社,2005.8
[4]方沛辰,吴孟达,“乘公交,看奥运”参考解答,工程数学学报,第24卷,增刊2,2007.12
附录
附录一
数据处理中生成元胞数组的程序
%读取数据
clear L a
fid = fopen('1.1 公汽线路信息.txt','r');
i=1;
while 1
tline = fgetl(fid);%Read line from file, discarding newline character if ~ischar(tline), break, end % ischar:Determine whether item is character array
if strcmp(tline,'') % strcmp:Compare strings
continue
end
if strcmp(tline(1),'L')
str=tline;
continue
elseif strcmp(tline,'END')
break
end
if strcmp(tline,'单一票制1元。
')
P=1;
continue
elseif strcmp(tline,'分段计价。
')
P=2;
continue
end
if strcmp(tline(1:2),'上行')
L{i,1}=str;
L{i,2}=P;
L{i,3}='上行';
L{i,4}=tline(4:end);
i=i+1;
continue
elseif strcmp(tline(1:2),'下行')
L{i,1}=str;
L{i,2}=P;
L{i,3}='下行';
L{i,4}=tline(4:end);
i=i+1;
continue
elseif strcmp(tline(1:2),'环行')
L{i,1}=str;
L{i,2}=P;
L{i,3}='环行1';
L{i,4}=strcat(tline(4:end),tline(10:end));
i=i+1;
%计算来回
L{i,1}=str;
L{i,2}=P;
L{i,3}='环行2';
L{i,4}=strcat(tline(4:end),tline(10:end));
i=i+1;
continue
elseif strcmp(tline(1),'S')
L{i,1}=str;
L{i,2}=P;
L{i,3}='来回1';
L{i,4}=tline;
i=i+1;
%计算来回
L{i,1}=str;
L{i,2}=P;
L{i,3}='来回2';
L{i,4}=tline;
i=i+1;
continue
end
end
fclose(fid);
for i=1:size(L,1)
tline=L{i,4};
t=findstr(tline,'S');
temp=zeros(1,length(t));
if strcmp(L{i,3},'来回2') ||strcmp(L{i,3},'环行2') for j=length(t):-1:1
temp(length(t)-j+1)=str2double(tline(t(j)+1:t(j)+4)); end
else
for j=1:length(t)
temp(j)=str2double(tline(t(j)+1:t(j)+4));
end
end
L2{i,1}=temp;
end
for i=1:3957
if floor(i/10)==0
Cit{i}=strcat('S000',num2str(i));
elseif floor(i/100)==0
Cit{i}=strcat('S00',num2str(i));
elseif floor(i/1000)==0
Cit{i}=strcat('S0',num2str(i));
else
Cit{i}=strcat('S',num2str(i));
end
end
附录二
问题一产生直达矩阵的程序
(1)时间直达矩阵)0(A
for aa=1:3957
for bb=1001:2000
s=300;t1=200;%aa=4;bb=2;
[m1,n1]=find(a==aa);
[m2,n2]=find(a==bb);
for i=1:length(m1)
for j=1:length(m2)
if m1(i)==m2(j)
t=n1(i)-n2(j);
if t>0
s=t;
end
if t<0
ss=0;
if mod(m1(i),2)==0
if
length(a(m1(i),:))==length(a(m1(i)-1,:))
for k=1:length(a(m1(i),:))
if a(m1(i),k)==a(m1(i)-1,k) ss=ss+1;
end
end
if ss==length(a(m1(i),:))
for mm=1:length(a(m1(i),:)) if a(m1(i),mm)==0
mmm=mm-1;
break;
end
end
if a(m1(i),1)==a(m1(i),mmm) s=mmm+t;
else
s=-t;
end
else
break;
end
else
yy=find(a(m1(i)-1,:)==bb);%?aa for mm=1:86
if a(m1(i)-1,mm)==0
mmm=mm-1;
break;
end
end
s=mmm-yy+aa-1;
end
else
break;
end
end
end
if s<t1
t1=s;
end
end
end
if aa==bb
c(bb,aa)=0;
end
if aa~=bb
if s==300
c(bb,aa)=inf;
else
c(bb,aa)=t1*3;
end
end
end
end
A(问题一的时间求解)
(2)通过迭代产生时间直达矩阵)(m
for i=1:3957;
for j=1:3957;
s=2000;
for k=1:3957
if i==j||k==i||k==j
g=0;
else
g=5;
end
d(i,j)=c(i,k)+c(k,j)+g;
if d(i,j)==inf
d(i,j)=1000;
end
if d(i,j)<s
s=d(i,j);
k;
end
if s==1000
d(i,j)=inf;
else
d(i,j)=s;
end
end
end
end
(3)费用直达矩阵)0(A
for aa=1:3957
for bb=1:3957
s=300;t1=200;%aa=4;bb=2;
[m1,n1]=find(a==aa);
[m2,n2]=find(a==bb);
for i=1:length(m1)
for j=1:length(m2)
if m1(i)==m2(j)
t=n1(i)-n2(j);
if t>0
s=t;
end
if t<0
ss=0;
if mod(m1(i),2)==0 if
length(a(m1(i),:))==length(a(m1(i)-1,:))
for k=1:length(a(m1(i),:))
if a(m1(i),k)==a(m1(i)-1,k) ss=ss+1;
end
end
if ss==length(a(m1(i),:))
for mm=1:length(a(m1(i),:)) if a(m1(i),mm)==0
mmm=mm-1;
break;
end
end
if a(m1(i),1)==a(m1(i),mmm) s=mmm+t;
else
s=-t;
end
else
break;
end
else
yy=find(a(m1(i)-1,:)==bb);%?aa for mm=1:86
if a(m1(i)-1,mm)==0
mmm=mm-1;
break;
end
end
s=mmm-yy+aa-1;
end
else
break;
end
end
end
if s<t1
t1=s;
end
for ww1=1:2
for ww2=1:237
if ww(ww1,ww2)==m1(i)
s1=1;
break;
end
end
end
if t1<=20
s1=1;
end
if t1<=40&&t1>20
s1=2;
end
if t1>40
s1=3;
end
end
end
if aa==bb
f(bb,aa)=0;
end
if aa~=bb
if s==300
f(bb,aa)=inf;
else
f(bb,aa)=s1;
end
end
end
end
A(问题一费用的求解)(4)通过迭代产生费用直达矩阵)(m
for i=1:3957
for j=1:3957
s=2000;
for k=1:3957
ff2(i,j)=f2(i,k)+f2(k,j);
if ff2(i,j)==inf
ff2(i,j)=1000;
end
if ff2(i,j)<s
s=ff2(i,j);
end
if s==1000
ff2(i,j)=inf;
else
ff2(i,j)=s;
end
end
end
end
附录三
问题二产生直达矩阵的程序
(1)时间直达矩阵)0(A
for i=1:3996
for j=1:3996
tt=3000;ss=1000;
if i<=3957
if j<=3957
c2(i,j)=c(i,j);
else
for k=1:5
if p(j-3957,k)==0
m=k-1;
break;
end
end
for kk=1:m
c22(i,j)=c(i,p(j-3957,kk))+4; if c22(i,j)==inf
c22(i,j)=1000;
end
if c22(i,j)<tt
tt=c22(i,j);
end
end
if tt==1000;
tt=inf;
end
c2(i,j)=tt;
end
end
if i>3957
if j>3957
% i=3958;j=3959;
[m1,n1]=find(aa==i);
[m2,n2]=find(aa==j);
for mm=1:length(m1)
for nn=1:length(m2)
if m1(mm)==m2(nn)
t=n1(mm)-n2(nn);
if t>0
s=t;
end
if t<0
if m1(mm)==1041 s=-t;
end
if m1(mm)==1042 s=19+t;
end
end
if s<ss
ss=s;
end
end
end
end
if i==j
ss=0;
end
if ss==1000;
ss=inf;
end
c2(i,j)=ss*2.5;
else
for k=1:5
kkk=j;
if kkk>39
kkk=39;
end
if p(kkk,k)==0
m=k-1;
break;
end
end
for kk=1:m
c22(i,j)=c(p(kkk,kk),j)+4;
if c22(i,j)==inf
c22(i,j)=1000;
end
if c22(i,j)<tt
tt=c22(i,j);
end
end
if tt==1000;
tt=inf;
end
c2(i,j)=tt;
end
end
end
end
A(问题二时间的求解)(2)通过迭代产生的时间直达矩阵)(m
for i=1:3996
for j=1:3996
s2=2000;
for k=1:3996
if i==j||k==i||k==j
g=0;
else
if i<3957
if j<3957
g=5;
else
g=2;
end
else
if j<3957
g=3;
else
g=4;
end
end
end
d2(i,j)=c2(i,k)+c2(k,j)+g;
if d2(i,j)==inf
d2(i,j)=1000;
end
if d2(i,j)<s
s2=d2(i,j);
end
if s2==1000
d2(i,j)=inf;
else
d2(i,j)=s2;
end
end
end
end
(3)费用直达矩阵)0(A
for i=1:3996
for j=1:3996
tt=3000;ss=1000;
if i<=3957
if j<=3957
b2(i,j)=b(i,j);
else
for k=1:5
if p(j-3957,k)==0
m=k-1;
break;
end
end
for kk=1:m
b22(i,j)=b(i,p(j-3957,kk)); if b22(i,j)==inf
b22(i,j)=1000;
end
if b22(i,j)<tt
tt=b22(i,j);
end
end
if tt==1000;
tt=inf;
end
b2(i,j)=tt;
end
end
if i>3957
if j>3957
% i=3958;j=3959;
[m1,n1]=find(aa==i);
[m2,n2]=find(aa==j);
for mm=1:length(m1)
for nn=1:length(m2)
if m1(mm)==m2(nn)
t=n1(mm)-n2(nn);
if t>0
s=t;
end
if t<0
if m1(mm)==1041 s=-t;
end
if m1(mm)==1042 s=19+t;
end
end
if s<ss
ss=s;
end
end
end
end
if i==j
ss=0;
end
if ss==1000;
ss=inf;
end
b2(i,j)=3;
else
for k=1:5
kkk=j;
if kkk>39
kkk=39;
end
if p(kkk,k)==0
m=k-1;
break;
end
end
for kk=1:m
b22(i,j)=b(p(kkk,kk),j);
if b22(i,j)==inf
b22(i,j)=1000;
end
if b22(i,j)<tt
tt=b22(i,j);
end
end
if tt==1000;
tt=inf;
end
b2(i,j)=tt;
end
end
end
end
(4)通过迭代产生的费用直达矩阵(问题二费用的求解)for i=1:3996
for j=1:3996
s=2000;
for k=1:3996
ff2(i,j)=f2(i,k)+f2(k,j);
if ff2(i,j)==inf
ff2(i,j)=1000;
end
if ff2(i,j)<s
s=ff2(i,j);
end
if s==1000
ff2(i,j)=inf;
else
ff2(i,j)=s;
end
end
end
end。