Matlab数学建模论文自来水输送问题的数学规划方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自来水输送问题的数学规划方案
【摘要】
本文考虑在简单情况下自来水输送的数学规划问题,模型较为简单。
之后,我们使用Matlab对该典型线性规划(LP)进行了求解与结果分析。
结论显示,引水管理费的差异是导致获利大小的关键因素。
最后,本文对该模型还可引入的影响条件进行了改进讨论,并换用LINGO对结果进行了验证。
关键词:自来水输送问题数学规划线性规划LP Matlab
一、问题重述
某市有甲、乙、丙、丁四个居民区,自来水由A、B、C由三个水库供应。
四个区每天必须的基本生活用水分别为30、70、10、10千吨,但三个水库每天最多只能分别供应50、60、50千吨自来水。
由于地理位置的差别,自来水公司从各水库向各区送水所付出的引水管理费不同(如表,其中C水库与丁区间无输水管道),其它管理费均为450元/千吨。
各区用户每千吨收费900元。
此外,各区用户都向公司
二、问题假设
(一)输送到各区的自来水只要在基本用水与额外用水量以内,各区即全额付费。
三、符号说明
1.x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3:各水库向各居民区的供水量(详见表1.2)
2.u1,u2,u3:公司从A、B、C的获利
3.u:公司的总获利
四、问题分析、模型的建立与求解
1.问题的分析
该问题为典型的数学规划问题,决策变量、目标函数都较为明显,求解过程较为简单。
2.模型的建立
设A、B
表1.2
则
公司从A水库的获利为:
u1=900(x1+x2+x3+x4)−(160+450)x1−(130+450)x2−(220+450)x3−(170+450)x4公司从B水库的获利为:
u2=900(y1+y2+y3+y4)−(140+450)y1−(130+450)y2−(190+450)y3−(150+450)y4公司从C水库的获利为:
u3=900(z1+z2+z3)−(190+450)z1−(200+450)z2−(230+450)z3公司的总获利为:
u=u1+u2+u3
限定条件如下,
各区每天的供水量:
甲区:
乙区:
丙区:
丁区:
水库每天供水量的限定:
A水库:
4
∑xi=50
i=1
B水库:
4
∑yi=60
i=1
C水库:
3.模型的求解
合并u1,u2,u3三式,得到总的目标函数:
限定条件为:
4
∑xi=50
i=1
4
∑yi=60
i=1
用Matlab写出线性规划程序求解(源程序详见附录)。
因A矩阵,b矩阵的对应不等式为大于关系,为化为标准形式,故在linprog函数中A,b前加入负号。
且linprog函数默认求解的是线性规划模型的标准形式,即最小量。
故在取值范围允许的情况下,在f矩阵前加负号,以求得负最小值。
最终结果fval取相反数后即为所得结果。
4.结果分析
求解的结果如下:
表1.3
最大利润为47600元。
对该供水量规划与表1.1的引水管理费数据作对比,不难发现获得供水量的规划方案都集中在引水管理费最低的运输途径上。
由此可以得出初步结论,即引水管理费的差异是引起规划结果变化的关键因素,在满足供水需求的基础上合理规划各管道供水量,使管理费降到最低,即可获得最大利润。
模型求解的结果亦支持了这一结论。
五、模型的评价
优点
该模型较为简单明了,易于理解,原理清晰。
缺点
程序的可重用性差。
六、模型的推广与改进
在实际的供水问题中,各居民区的基本用水量在人口一定的情况下是满足小范围浮动规律的,但在满足基本供水的基础之上,各居民区的额外用水量亦应获得一定比例的满足。
额外用水量的调控可简单地以各居民区申请额外用水量的比例来加以满足,亦可引入新的额外需求量浮动数据。
另外,该模型未考虑在受不同的日期影响下,基本用水量的起伏情况(如节假日用水量的激增,与离乡务工潮等周期性的大规模人口迁移来临后用水量的变化情况),以及各区域水价差异的调控政策等因素,故还有较大的改进空间。
七、附录
matlab源程序:
clear,clc
f=[290,320,230,280,310,320,260,300,260,250,220]
A=[1 0 0 0 1 0 0 0 1 0 0;
0 1 0 0 0 1 0 0 0 1 0;
0 0 1 0 0 0 1 0 0 0 1;
0 0 0 1 0 0 0 1 0 0 0;
1 0 0 0 1 0 0 0 1 0 0;
0 1 0 0 0 1 0 0 0 1 0;
0 0 1 0 0 0 1 0 0 0 1;
0 0 0 1 0 0 0 1 0 0 0]
b=[30;70;10;10;
-80;-140;-30;-50]
Aeq=[1 1 1 1 0 0 0 0 0 0 0;0 0 0 0 1 1 1 1 0 0 0;0 0 0 0 0 0 0 0 1 1 1]
beq=[50;60;50]
ub=[50 50 50 50 60 60 60 60 50 50 50]
lb=zeros(11,1)
[x,fval,exitflag,output,lambda]=linprog(-f,-A,-b,Aeq,beq,lb,ub)
f =
290 320 230 280 310 320 260 300 260 250 220
A =
1 0 0 0 1 0 0 0 1 0 0
0 1 0 0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 1 0 0 0
1 0 0 0 1 0 0 0 1 0 0
0 1 0 0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 1 0 0 0
b =
30
70
10
10
-80
-140
-30
-50
Aeq =
1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 1 1 1
beq =
50
60
50
ub =
50 50 50 50 60 60 60 60 50 50 50
lb =
Optimization terminated.
x =
0.0000
50.0000
0.0000
0.0000
0.0000
50.0000
0.0000
10.0000
40.0000
0.0000
10.0000
fval =
-4.7600e+004
exitflag =
1
output =
iterations: 8
algorithm: 'large-scale: interior point'
cgiterations: 0
message: 'Optimization terminated.'
lambda =
ineqlin: [8x1 double]
eqlin: [3x1 double]
upper: [11x1 double]
lower: [11x1 double]
【参考文献】
[1] 姜启源,谢金星,叶俊. 数学模型[M].北京:高等教育出版社,2003.8
[2] 曾建军MATLAB语言与数学建模[M]。