几类可以神奇转化为线性规划的问题matlab求解

来源:互联网 发布:数据字典设计文档模板 编辑:程序博客网 时间:2024/05/14 23:54

几类可以神奇转化为线性规划的问题matlab求解

    有些有约束的“伪线性规划”问题可以巧妙转化成线性规划的问题得以求解。实在太巧秒了

1.第一类问题(含绝对值的“伪线性规划”问题):

[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
[学习笔记]几类可以神奇转化为线性规划的问题matlab求解

则上面的优化问题转化为:

[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
程序:

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.第二类问题(含取最大或最小值的“伪线性规划”问题):

[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
现令x0=max{x1-x2+x3,x1+x2,x1-x3},故有

x0>=x1-x2+x3,x0>=x1+x2,x0>=x1-x3

故上面的规划问题转换为:

[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
程序:

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+x3;
f(2) = x1+x2;
f(3) = x1-x3;
x1+x2-x3=1;
2*x1-x2=2;
x1-2*x2+x3<=1;
min = @smax(f(1),f(2),f(3));
end

 

Objective value:         1.000000

Variable       Value        

   X1        1.000000            

   X2        0.000000            

   X3        0.000000           

与matlab求的一致。

3.第三类问题:线性回归问题

    线性回归是一种常用的数理统计方法,这个方法要求对图上的一系列点(x1,y1),(x2,y2),...,(xn,yn)选配一条合适的直线拟合。方法通常是先定直线方程为:y=bx+a,然后按某种准则求a、b。通常这个准则为最小二乘法,则求[学习笔记]几类可以神奇转化为线性规划的问题matlab求解对应的a、b值。

    下面用线性规划求解:

    按照第一类问题的解法,设有四个点为:(1,2),(2,4),(3,8),(4,10),令

[学习笔记]几类可以神奇转化为线性规划的问题matlab求解

模型转化为:

[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
clear;
clc;
c=[0,0,1,1,1,1,1,1,1,1];
Aeq=[1,1,1,0,0,0,-1,0,0,0;1,2,0,1,0,0,0,-1,0,0;1,3,0,0,1,0,0,0,-1,0;1,4,0,0,0,1,0,0,0,-1];
beq=[2;4;8;10];
lb=[-inf,-inf,0,0,0,0,0,0,0,0];
abuv0=ones(10,1);
options = optimset('LargeScale', 'off', 'Simplex', 'on','Diagnostics','on','MaxIter',1000);
[abuv,fval,exitflag,output,lambda]=linprog(c,[],[],Aeq,beq,lb,[],abuv0,options)

求解得出:a= -0.6667,b=2.6667。验证结果:[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
[学习笔记]几类可以神奇转化为线性规划的问题matlab求解
用Lingo求解验证:

min=u1+u2+u3+u4+v1+v2+v3+v4;
a+b+u1-v1=2;
a+2*b+u2-v2=4;
a+3*b+u3-v3=8;
a+4*b+u4-v4=10;
@free(a);@free(b);

求得a=-0.6666667 ,b=2.666667。与matlab的是一致的。  

原创粉丝点击