基于Matlab的运输问题求解方法探究.docx
《基于Matlab的运输问题求解方法探究.docx》由会员分享,可在线阅读,更多相关《基于Matlab的运输问题求解方法探究.docx(7页珍藏版)》请在冰豆网上搜索。
课程名称:
系统工程导论
论文题目:
基于Matlab的运输问题求解方法探究
院(系):
专业:
姓名:
学号:
实验室:
实验组别:
同组人员:
无实验时间:
2012年6月
评定成绩:
审阅教师:
基于Matlab的运输问题求解方法探究
摘要:
运输行业的重要性随着中国经济的不断发展而快速提高,为了降低物流成本,我们有必要研究物流运输中如何组织物资调运才能使总运输成本最少这一重要问题。
而传统的手工解决方式存在着效率低、计算繁琐、数据易丢失等缺点,因此利用MATLAB软件来计算出最佳结果是很有必要的。
本论文以运输问题中一个典型的案例为例阐述了基于MATLAB的定量分析方法,解决了运输最优方案编制中求解这一大难题,可以广泛应用于物流配送领域,对实践工作具有较强的指导意义。
一、我国物流运输问题的一个现状了解:
运输行业的重要性随着中国经济的不断发展而快速提高,不管是旅客运输还是货物运输的发展与变化都成为国民经济发展的重要部分,而在其中公路运输又成为运输行业的重中之重。
2007年1-11月份,全国公路运输完成货运量和货物周转量分别为1,452,378万吨和101,215,988万吨公里,分别比2006年同期增长12.3%和17.3%。
2008年1-11月份,全国公路运输完成货运量和货物周转量分别为1,637,412万吨和116,792,172万吨公里,分别比2007年同期增长12.7%和15.4%。
由于目前中国运输业瓶颈效应尚未消除,而陆上运输方式中铁路运力增长有限,因此公路运输将是全社会物流量大幅增长的主要受益者。
2008年11月5日,国家决定实行积极的财政政策和适度宽松的货币政策,出台更加有力的扩大国内需求措施,加快民生工程、基础设施、生态环境建设和灾后重建,提高城乡居民特别是低收入群体的收入水平,促进经济平稳较快增长。
在这“四万亿”计划里,公路投资占到10%,将加快公路重大基础设施的建设。
中国公路在客运量、货运量、客运周转量等方面均遥遥领先于其他运输方式的总和。
根据交通部规划,到2010年,公路总里程要达到210万至230万公里,全面建成“五纵七横”国道主干线[1]。
随着生产、经济、技术的发展,人们在生活和工作中对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。
最优化方法就是专门研究从多个方案中科学合理地提取最佳方案的方法。
由于最优化问题无处不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,土木工程、机械工程、化学工程、运输调度、生产控制、经济规划管理等等,并取得了显著成效。
在所有的物流功能中,运输是一个最基本的功能,是物流的核心问题。
为了降低物流成本,我们有必要研究物流运输中如何组织物资调运才能使总运输成本最少这一重要问题。
研究物资运输过程中最优的运输方案,需要在满足各种资源限制的条件下,找到使运输总成本最少的调运方案。
实践中通常是通过建立数学模型,用定量分析的方法来解决这一问题。
但由于此类问题所涉及的条件变量较多,一般的数学方法运算难度较大,结果不容易求出。
而线性规划法则是最优化问题领域中最简单、最基本和使用最广泛的方法。
利用MATLAB的优化工具箱,可以求解线性规划、非线性规划和多目标规划等多种问题。
此外,它还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等大中型问题的求解方法,为优化方法在工程中的实际应用提供了更方便、快捷的途径。
二、对matlab软件的介绍:
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
矩阵运算在运筹学线性规划中一直有着较广的应用,物流运输规划中通常采用线性规划法来构建物流运输模型,通过矩阵运算求得最优调运方案。
三、线性规划与运输问题:
线性规划是运筹学的一个分支,它是最优化问题领域中最简单、最基本和使用最广泛的方法。
在交通运输领域中,运输是一个最基本的功能,也是物流的核心问题。
将同一种物资从几个不同的发货点运到另外几个不同的收货点,因为运费是单位运价和运输量的乘积,所以如何选择一个合理的运输方案,使总运费最省,这是一个很有应用价值的问题,这类问题就称为运输问题。
研究物资运输过程中最优的运输方案,需要在满足各种资源限制的条件下,找到使运输总成本最少的调运方案。
实践中如果建立数学模型,用线性规划的方法来解决这一问题,则可以节省大量的工作,但由于此类问题所涉及的条件变量较多,一般的数学方法运算难度较大,结果不容易求出,而如果能有效的借助MATLAB软件中强大的运算功能则可以得到事半功倍的效果。
四、Matlab求解运输问题的原理:
在Matlab中构建函数l(x)用来解决线性规划问题。
众所周知,运输问题的最优解本质属于极值问题,极值有最大和最小两种,而极大值问题的求解可以转化为极小值问题,因此在Matlab中以求极小值为标准形式,构建的函数l(x)的具体格式如下:
[X,v,e,o,l]=l(F,A,b,m,n,M,N,P,Z)
式中:
X为问题的解向量;F为由目标函数的系数构成的向量;A为一个矩阵;b为一个向量,表示线性规划中不等式约束条件,A,b是系数矩阵和右端向量;m和n为线性规划中等式约束条件中的系数矩阵和右端向量;M和N为约束变量的下界和上界向量;P为给定的变量的初始值;Z为控制规划过程的参数系列;v为优化结束后得到的目标函数值。
e=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数,e>0表示优化过程中变量收敛于解X,e<0表示计算不收敛。
五、具体问题分析:
我选择的是产销不平衡问题的求解,这里做的是产量大于销量的问题求解。
案例:
某食品公司下属的A1,A2,A3,3个厂生产方便食品,要运输到B1,B2,B3,3个销售点;公司的初始运输方案如表1所示;3个厂到各销售点每吨方便食品的运价如表2所示。
问该食品公司在满足
各销售点销售量的情况下如何安排运输使得总运费最小。
B1
B2
B3
产量ai
A1
8
3
3
15
A2
5
6
5
18
A3
5
3
8
17
销量bj
18
12
16
总产量为:
15+18+17=50
总销量为:
18+12+16=46
属于产>销问题。
表1:
初始运输方案(单位:
t)
B1
B2
B3
A1
50
90
20
A2
30
10
70
A3
60
20
80
由表1和表2的数据可知,在初始运送方案下,总的运费为:
S=8*50+3*90+3*20
+5*30+6*10+5*10
+5*60+3*20+8*80
=1990元
表2:
单位运价(单位:
元/t)
针对产销不平衡问题,核心方法是:
将产销不平衡转换为产销平衡的情形,然后由表上作业法进行求解。
(1)对于“产>销”情形:
可虚拟一个销售地(库存),让多余的产量均运抵此销售地,则其销售量=“产-销”,同时令该虚拟的销售地的单位运价为0;(虚拟的销地)
(2)对于“销>产”,可虚拟一个产地,让其产量=“销-产”,同时令该虚拟的产地的单位运价为0.
对于这个实际问题,虚设一销地,令其销量为产销量之差。
B4=∑ai-∑bj=(15+18+17)–(18+12+16)=4
该列单位运价为0,即可化为产销平衡问题。
如下表所示:
B1
B2
B3
B4
产量ai
A1
50
90
20
0
15
A2
30
10
70
0
18
A3
60
20
80
0
17
销量bj
18
12
16
4
方案优化:
针对上述案例,首先构建数学模型,建立线性方程组。
假设产地A1,A2,A3
向销地B1,B2,B3,B4配送的运输量分别是X1,X2,……X12,
各变量如下表所示:
B1
B2
B3
B4
产量ai
A1
X1
X2
X3
X4
15
A2
X5
X6
X7
X8
18
A3
X9
X10
X11
X12
17
销量bj
18
12
16
4
根据假设的运输条件及案例给出的限定条件,设最小运费为Smin,构建如下线性方程组:
Smin=50*X1+90*X2+20*X3+0*X4
+30*X5+10*X6+70*X7+0*X8
+60*X9+20*X10+80*X11+0*X12
约束条件如下:
X1+X2+X3+X4=15;X5+X6+X7+X8=18;
X9+X10+X11+X12=17;X1+X5+X9=18;
X2+X6+X10=12;X3+X7+X11=16;
X4+X8+X12=4;Xi≥0(i=1,2,…,12)
上述方程和约束条件对应的Matlab代码如下:
F=[509020030107006020800];
m=[111100000000
000011110000
000000001111
100010001000
010001000100
001000100010
000100010001];
n=[1518171812164];
M=[00000000