1.1线性规划的基本式如下
在Matlab中,线性规划问题一般是求解的最小值,如果需要求解最大值,那么只需要对目标值加上一个负号即可。
%其中的c和x为n维列向量。A、Aeq为适当维数的矩阵,b、beq为适当维数的列向量
[x,fval]=linprog(c,A,b)
[x,fval]=linprog(c,A,b,Aeq,beq)
[x,fval]=linprog(a,A,b,Aeq,beq,lb,ub)
-
例题
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));
x, y=-y
1.2转化为线性规划问题
目标值变成min|x1|+|x2|+|x3|,那么可以利用,对于任意的x,存在u,v>0满足x=u-v,|x|=u+v,事实上,取u=(x+|x|)/2,v=(|x|-x)/2,就可以满足
1.2.1例题
a=0;hold on
while a<0.05
c=[-0.05,-0.27,-0.19,-0.185,-0.185];
A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];
b=a*ones(4,1);
Aeq=[1,1.01,1.02,1.045,1.065];
beq=1; LB=zeros(5,1);
[x,Q]=linprog(c,A,b,Aeq,beq,LB);
Q=-Q; plot(a,Q,'*k');
a=a+0.001;
end
xlabel('a'),ylabel('Q')