线性规划

线性规划

线性规划问题

MATLAB的标准形式:

 线性规划

 

举个栗子吧:

线性规划

f = [-2;-3;5];
a = [-2 5 -1;1 3 1];
b = [-10;12];
aeq = [1 1 1];
beq = 7;
​
[x,y] = linprog(f,a,b,aeq,beq,zeros(3,1));
y = -y;
​
% 最优解 
x =
    6.4286
    0.5714
    0.0000
y =
   14.5714

 线性规划

 

 

线性规划变形

(带上绝对值咯):

 线性规划

 

 

的确很复杂,不能直接用MATLAB直接计算(Lingo完全OK),需要对其进行数学变换:

理论:对于任意的,可以写成:

 线性规划

原来的目标函数就变成了:

 线性规划

不等式就变成了:

 
 线性规划

嘿嘿,现在就可以建立矩阵了,举个栗子P4:


clc,clear
c = 1:4;
c = [c',c'];
a = [1 -1 -1 1
    1 -1 1 -3
    1 -1 -2 3];
a = [a,-a];
b = [-2 -1 -1/2]';
​
[y,z] = linprog(c,a,b,[],[],zeros(4,2));
x = y(1:4)-y(5:end);

 

是不是和书上的程序有点不同,对的,我是完全按照这个式子写的,对于原来的目标函数写一列,但是对于矩阵乘法来说,不是看有多少列吗? 刚好这里是 扩充矩阵 ,同理 也是扩充为

但是求出来的 y 很伤心却还是1维向量,却不是我想要的 矩阵,转换一下。

当然也可以像书上的那样,令u,v 的顺序,只要不等式还是原来的不等式就行,然后转为你需要的答案即可。