几类可以神奇转化为线性规划的问题matlab求解.PDF
几类可以神奇转化为线性规划的问题 matlab 求解
有些有约束的“伪线性规划” 问题可以巧妙转化成线性规划的问题得以求解。实在太巧秒了。
1.第一类问题(含绝对值的“伪线性规划” 问题):
则上面的优化问题转化为:
程序:
c=[1,2,3,4,1,2,3,4];
Aeq=[1,‐1,‐1,1,‐1,1,1,‐1;1,‐1,1,‐3,‐1,1,‐1,3;1,‐1,‐2,3,‐1,1,2,‐3];
beq=[0;1;‐1/2];
lb=zeros(8,1);
uv0=ones(8,1);
options = optimset('LargeScale', 'off', 'Simplex', 'on','Diagnostics','on','MaxIter',1000);
[uv,fval,exitflag,output,lambda]=linprog(c,[],[],Aeq,beq,lb,[],uv0,options)
解得 u1,u2,u3,u4,v1,v2,v3,v4 分别为:1/4,0,0,0,0,0,0,1/4,即 x1,x2,x3,x4 的值分别为:1/4,0,0,‐
1/4 时,最小者为 1.25
用 Lingo 验证结果:
model:
min=@abs(x1)+2*@abs(x2)+3*@abs(x3)+4*@abs(x4);
x1‐x2‐x3+x4=0;
x1‐x2+x3‐3*x4=1;
x1‐x2‐2*x3+3*x4=‐1/2;
@free(x1);@free(x2);@free(x3);@free(x4);
end
Objective value: 1.250000
Variable Value
X1 0.2500000
X2 0.000000
X3 0.000000
X4 ‐0.2500000
与 matlab 求得结果一致。
2.第二类问题(含取最大或最小值的“伪线性规划”问题):
现令 x0=max{x1‐x2+x3 ,x1+x2,x1‐x3},故有
x0>=x1‐x2+x3,x0>=x1+x2,x0>=x1‐x3
故上面的规划问题转换为:
程序:
clear;
clc;
c=[1,0,0,0];
Aeq=[0,1,1,‐1;0,2,‐1,0];
beq=[1;2];
A=[0,1,‐2,1;‐1,1,‐1,1;‐1,1,1,0;‐1,1,0,‐1];
b=[1;0;0;0];
lb=zeros(3,1);
xx0=[‐inf;0;0;0];
options = optimset('LargeScale', 'off', 'Simplex', 'on','Diagnostics','on','MaxIter',1000);
[x,fval,exitflag,output,lambda]=linprog(c,A,b,Aeq,beq,lb,[],xx0,options)
求得结果:x1,x2,x3 分别为:1,0,0 时,取得最优解为 1。
用 Lingo 验证结果:
model:
sets:
object/1..3/: f;
endsets
f(1) = x1‐x2