1、一、问题提出 某公司有6个建筑工地要开工,每个工地得位置(用平面坐标系(a,b)表示,距离单位:km)及水泥日用量d(吨)由下表给出。目前有两个料场位于A(5,1),B(2,7),日储量各有20吨。 (1) 试制定每天得供应计划,即从A,B两料场分别向各工地运送多少水泥,可使运输费用(总得吨千米数)最小,并求出吨千米数。 ( 注:先画图,在坐标上标出各工地位置(用蓝色*标示)与料场位置(用红色o标示)) (2)目前公司准备建立两个新得料场,日储量各为20吨,为使运输费用最省,问新得料场应建在何处,并算出两料场分别向工地运输多少吨水泥与费用。 (注:初始值取x0=[3 5 4
2、7 1 0 0 0 0 0 5 11 5 4 7 7]’) 二、问题分析 对于问题(1),确定用A,B两料场分别向各工地运送水泥,使运输费用(总得吨千米数)最小,即要知道两点间线段最小,料场到工地得路线就是直得,而要满足六个工地得需求,又要考虑到A、B两个料场得供应量,即在各工地用量必须满足与各料场运送量不超过日储量得条件下,使总得吨千米数最小,这就是线性问题。。 对于问题(2),需要重新改建六个新得料场,使得在在各工地用量必须满足与各料场运送量不超过日储量得条件下,使总得吨千米数最小,则需要确定新得料场得具体位置,这就是非线性问题。 三、模型假设 1、假设料场
3、与建筑工地之间都可以由直线到达; 2、运输费用由“吨千米数”来衡量; 3、两料场得日存储量够向各建筑工地供应; 4、运输途中不发生意外,从料场运出得水泥总量不会超过各个料场得日存储量。 四、模型建立 (显示模型函数得构造过程) 记工地得位置为,水泥日用量为,i=1,…,6;料场位置为, 日储量为,j=1,2;料场向工地得运送量为。 目标函数为: 约束条件为: 当用临时料场时决策变量为: 当不用临时料场时决策变量为:,, 使用临时料场得情形: 使用两个临时料场A(5,1),B(2,7).求从料场j向工地得运送量、 在各工地用量必须满足与各料场运送量不超过日
4、储量得条件下,使总得吨千米数最小,这就是线性规划问题。线性规划模型为: 其中 ,i=1,2,…,6,j=1,2,为常数 设 X11=X1, X21= X 2,, X31= X 3, X41= X 4, X51= X 5,, X61= X 6 X12= X 7, X22= X 8,, X32= X 9, X42= X 10, X52= X 11,, X62= X 12 改建两个新料场得情形: 改建两个新料场,要同时确定料场得位置(xj,yj)与运送量,在同样条件下使总吨千米数最小.这就是非线性规划问题.非线性规划模型为: 设 X11=X1, X21= X 2, X3
5、1= X 3, X41= X 4, X51= X 5,, X61= X 6 X12= X 7, X22= X 8, X32= X 9, X42= X 10, X52= X 11, X62= X 12 x1=X13, y1=X14, x2=X15, y2=X16 五、模型求解 (显示模型得求解方法、步骤及运算程序、结果) 建立chengxu、m程序: x=[1、25 8、75 0、5 5、75 3 7、25]; y=[1、25 0、75 4、75 5 6、5 7、75]; x0=[5,2]; y0=[1,7]; plot(x,y
6、'*b'); hold on; plot(x0,y0,'or'); text(1、25,1、25,'¹¤µØ1'); text(8、75,0、75,'¹¤µØ2'); text(0、5,4、75,'¹¤µØ3') text(5、75,5,'¹¤µØ4'); text(3,6、5,'¹¤µØ5'); text(7、25,7、25,'¹¤µØ6') text(5,1,'Áϳ¡A'); text(2,7,'Áϳ¡B'); 使用临时料场得情形: 编写程序liaochang1、m如下: clear a=[1、25 8、75 0、5 5、75 3 7、25
7、]; b=[1、25 0、75 4、75 5 6、5 7、75]; d=[3 5 4 7 6 11]; x=[5 2]; y=[1 7]; e=[20 20]; for i=1:6 for j=1:2 aa(i,j)=sqrt((x(j)-a(i))^2+(y(j)-b(i))^2); end end CC=[aa(:,1); aa(:,2)]' A=[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1]; B=[20;20]; Aeq=[1 0 0 0 0 0 1 0 0 0 0 0
8、 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 ]; beq=[d(1);d(2);d(3);d(4);d(5);d(6)]; vlb=[0 0 0 0 0 0 0 0 0 0 0 0];vub=[]; x0=[1 2 3 0 1 0 0 1 0 1 0 1]; [xx,fval]=linprog(CC,A,B,Aeq,beq,vlb,vub
9、x0) 程序截图如下: 程序得运行结果为: xx = 3、0000 5、0000 0、0000 7、0000 0、0000 1、0000 0、0000 0、0000 4、0000 0、0000 6、0000 10、0000 fval = 136、2275 运行结果截图如下: 即由料场A、B向6个工地运料方案为: 1 2 3 4 5 6 料场1 3 5 0 7 0 1 料场2 0 0 4 0 6 10 总得吨
10、千米数为136、2275、 改建两个新料场得情形: 先编写M文件liaochang、m: function f=liaoch(x) a=[1、25 8、75 0、5 5、75 3 7、25]; b=[1、25 0、75 4、75 5 6、5 7、75]; d=[3 5 4 7 6 11]; e=[20 20]; f1=0; for i=1:6 s(i)=sqrt((x(13)-a(i))^2+(x(14)-b(i))^2); f1=s(i)*x(i)+f1; end f2=0; for i=7:12 s(i)=sqrt((x(15)-a(i-
11、6))^2+(x(16)-b(i-6))^2); f2=s(i)*x(i)+f2; end f=f1+f2; 再编写主程序liaochang2、m为: clear x0=[3 5 4 7 1 0 0 0 0 0 5 11 5 4 7 7]; A=[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0]; B=[20;20]; Aeq=[1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
12、0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0]; beq=[3 5 4 7 6 11]'; vlb=[zeros(12,1);-inf;-inf;-inf;-inf]; vub=[]; [x,fval,exitflag]=fmincon('liaoch',x0,A,B,Aeq,beq,vlb,vub) 程序截图如下: 程序运行结果如下: x
13、 = Columns 1 through 8 3、0000 5、0000 4、0000 7、0000 1、0000 0 0 0 Columns 9 through 16 0 0 5、0000 11、0000 5、6962 4、9289 7、2500 7、7500 fval = 89、8835 exitflag = 5 程序结果截图如下: 即两个新料场得坐标分别为(5、6962,4、9289),(7、2500,7、7500),由料场A、B向6个工地运料方案为: ﻩ 1 2 3 4 5 6 料场1 3 5 4 7 1 0 料场2 0 0 0 0 5 11 总得吨千米数为89、8835,比用临时料场节省约46吨千米。






