其它优化问题:
例 某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系
表示,距离单位:千米 )及水泥日用量
(吨)由下表给出。
1
2
3
4
5
6
a
1.25
8.75
0.5
5.75
3
7.25
b
1.25
0.75
4.75
5
6.5
7.25
d
3
5
4
7
6
11
目前有两个临时料场位于A(5,1),B(2,7),日储量各有20吨。假设从料场到工地之间均有直线道路相连。
问题(1):试制定每天的供应
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨千米数最小;
问题(2):为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数有多大?
分别用matlab和Lingo写出对应的求解程序。
解 记工地的位置为(ai, bi),水泥日用量为di,i=1,…,6; 料场位置为(xj, yj),日储量为ej,j=1,2;从料场j向工地i的运送量为Xij。即
工地
料场
i=1
i=2
i=3
i=4
i=5
i=6
j=1
X11
X21
X31
X41
X51
X61
j=2
X12
X22
X32
X42
X52
X62
d
3
5
4
7
6
11
则模型
设X11=X1,X21= X 2,X31= X3,X41= X4,X51= X5, X61= X6;X12= X7,X22= X8,X32= X9,X42= X10,X52= X11,X62= X12,
而工地位置
,i=1,…,6和料场位置
,j=1,2均已知。
问题一的Matlab编程如下:
% 场地运输问题的线性规划模型
%
clear all
clc
tic
%-----------------------------------
% 构造目标函数系数向量与不等式和等式约束矩阵等
% 构造目标函数系数向量
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];
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
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];
% 参数设置---options
options=optimset('LargeScale','off');
% 函数调用
[xx,fval,EXITFLAG,output]=linprog(CC,A,B,Aeq,beq,VLB,VUB,x0,options);
% 结果输出
x=reshape(xx,6,2)', fval, EXITFLAG, output % 注意
T=toc
问题二的模型是形式一样,所不同的是,其中料场位置
,j=1,2也是变量。
设X11=X1,X21= X 2,X31= X3,X41= X4,X51= X5, X61= X6;X12= X7,X22= X8,X32= X9,X42= X10,X52= X11,X62= X12,和料场位置变量
x1=X13, y1=X14; x2=X15, y2=X16
问题二的Matlab编程如下:
1)函数调用主程序
% 场地运输问题的非线性规划模型
%
clear all
clc
tic
%--------------------------
% 初始可行解与替换
% x0=[3 5 0 7 0 1 0 0 4 0 6 10 5 1 2 7]';
% x0=[ 3.0000 5.0000 0.0707 7.0000 0 0.9293 0 0 3.9293 0 6.0000 10.0707 6.3875 4.3943 5.7511 7.1867]';
% x0=[ 3.0000 5.0000 0.3094 7.0000 0.0108 0.6798 0
% 0 3.6906 0 5.9892 10.3202 5.5369 4.9194 5.8291 7.2852]';
x0=[3 5 4 7 1 0 0 0 0 0 5 11 5.6348 4.8687 7.2479 7.7499]';
%--------------------------
% 构造线性不等式和等式约束矩阵,本题没有非线性约束条件
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 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=[];
% 参数设置---options 与 函数调用、结果输出
options=optimset('LargeScale','off','Display','final');
[x,fval,exitflag,output]=fmincon('transobj',x0,A,B,Aeq,beq,vlb,vub,[],options)
xx=reshape(x(1:12),6,2)'
disp('料场位置指标(上下):')
xy=reshape(x(13:16),2,2)
fval, exitflag, output % 注意
T=toc
2)目标函数子程序
function f=transobj(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-6))^2+(x(16)-b(i-6))^2);
f2= s(i)*x(i) + f2;
end
f=f1+f2;
问题的lingo程序为:
MODEL:
!线性规划模型;
Title Location Problem;
sets:
demand/1..6/:a,b,d;
supply/1..2/:x,y,e;
link(demand,supply):c;
endsets
data:
!locations for the demand(需求点的位置);
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.75;
!quantities of the demand and supply(供需量);
d=3,5,4,7,6,11; e=20,20;
!料场位置;
!x,y=5,1,2,7;
enddata
init:
!initial locations for the supply(初始点);
! x,y=5,1,2,7;
x,y=2,2,3,3;
endinit
!Objective function(目标);
[OBJ]min=@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2) );
!demand constraints(需求约束);
@for(demand(i):[DEMAND_CON] @sum(supply(j):c(i,j)) =d(i););
!supply constraints(供应约束);
@for(supply(j):[SUPPLY_CON] @sum(demand(i):c(i,j)) <=e(j); );
@for(supply: @bnd(0.5,X,8.75); @bnd(0.75,Y,7.75); );
END
_1280951413.unknown
_1280952311.unknown
_1280952346.unknown
_1280954682.unknown
_1280951429.unknown
_1277103798.unknown
_1277103828.unknown
_1093421886.unknown