当前位置:首页 > Matlab数学建模论文-自来水输送问题数学的规划方案
?zi?50
i?133.模型的求解
合并u1,u2,u3三式,得到总的目标函数:
Maxu?290x1?320x2?230x3?280x4?310y1?320y2?260y3?300y4? 260z1?250z2?220z3限定条件为:
30?x1?y1?z1?30?50 70?x2?y2?z2?70?70 10?x3?y3?z3?10?20 10?x4?y4?10?40
?zi?50
i?13用Matlab写出线性规划程序求解(源程序详见附录)。因A矩阵,b矩阵的对应不等式为大于关系,为化为标准形式,故在linprog函数中A,b前加入负号。
且linprog函数默认求解的是线性规划模型的标准形式,即最小量。故在取值范围允许的情况下,在f矩阵前加负号,以求得负最小值。最终结果fval取相反数后即为所得结果。
4.结果分析
求解的结果如下:
各输送管道的供水量:
供水量(千吨) A B 甲 0 0 乙 50 50 丙 0 0 丁 0 10 C 40 表1.3 0 10 / 最大利润为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 = 0 0 0 0 0 0 0 0 0 0 0
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]
共分享92篇相关文档