文章目录
例子
我们由上可以得到线性规划式子:
要如何解呢?
不同算法(lingo)
可以使用lingo软件:
结果为14,x1为4,x2为2。
然而,mac上没有lingo软件,用Matlab行不行?可以。
不同算法(Matlab)
翻阅资料,我找到了Matlab的写法。我们首先要了解线性规划问题的MATLAB标准型,为:
我们可以使用
[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub]
解这类问题。
x表示所解出的值,是一个按列排序的矩阵。
fval为目标函数值得结果。
f表示目标函数中未知数的系数。
A表示不等式中,位置数的系数,是一个多维数组或一维数组。
b表示不等式右边的值,也是一个矩阵。
Aeq表示等式中未知数的系数(矩阵)。
beq表示等式右边的数。
lb表示未知数取值的下限。
ub表示未知数取值的上限。
对于
代码如下:
disp('max(0) or min(1)?');
Judge=input('Judge=');
f=[2,3];
A=[1,2;4,0;0,4];
b=[8,16,12];
Aeq=[];
beq=[];
lb=[0;0];
ub=[inf;inf];
if Judge==0
[x,fval]=linprog(-f,A,b,Aeq,beq,lb,ub);
x
fval=-fval
else
[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub);
x
fval
end
并将上式保存为linePlan.m。
在命令行输入linePlan。
提示是max还是min,我们的题目是max,于是输入0。
这样就可以获得和lingo一样的答案。
我们可以再找例题试一试;
(注意,式子中>=号要改成<=,对应的数字也要变号)
代码:
disp('max(0) or min(1)?');
Judge=input('Judge=');
f=[3,-1,-1];
A=[1,-2,1;4,-1,-2];
b=[11,-3];
Aeq=[-2,0,1];
beq=[1];
lb=[0;0;0];
ub=[inf;inf;inf];
if Judge==0
[x,fval]=linprog(-f,A,b,Aeq,beq,lb,ub);
x
fval=-fval
else
[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub);
x
fval
end
所以x1=4,x2=1,x3=9。目标函数值为2。