【MATLAB】线性规划问题中碰到绝对值的情况

例题:使用MATLAB求解下列规划问题
【MATLAB】线性规划问题中碰到绝对值的情况_第1张图片
对于一般的线性规划问题,我们可以使用MATLAB的bif—linprog来做,但是由于这个线性规划问题中带有绝对值,所以不能直接使用linprog,这样不符合这个函数参数的定义:

linprog(f,A,b,Aeq,beq,lb,ub)#其中除了A,Aeq是矩阵,其他都是列向量

不过我们倒是可以把绝对值变量转换成一般变量处理,
对任意的xi ,存在ui,vi>0,满足xi=ui-vi; |xi|=ui+vi,我们用这个公式把带绝对值的变量先转化成u和v的,之后把这个问题当成一般线性规划问题求解,最后再对结果进行xi=ui-vi的处理,这样就求出了结果矩阵x和z值
下面是按照这个思路写出的MATLAB代码

clc,clear;
f=1:4;
f=[f,f]';#|x|=u+v (min fy)
Aeq=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];
Aeq=[Aeq,-Aeq];#x=u-v (Ay=b)
beq=[0,1,-1/2]';
[y,z]=linprog(f,[],[],Aeq,beq,zeros(8,1));#下界规定出来防止报错
x=y(1:4)-y(5:end),z

最终运行结果如下所示
【MATLAB】线性规划问题中碰到绝对值的情况_第2张图片

你可能感兴趣的:(Matlab)