Matlab:数模09-线性规划模型

文章目录

例子

Matlab:数模09-线性规划模型
我们由上可以得到线性规划式子:
Matlab:数模09-线性规划模型
要如何解呢?

不同算法(lingo)

可以使用lingo软件:
Matlab:数模09-线性规划模型
Matlab:数模09-线性规划模型
结果为14,x1为4,x2为2。

然而,mac上没有lingo软件,用Matlab行不行?可以。

不同算法(Matlab)

翻阅资料,我找到了Matlab的写法。我们首先要了解线性规划问题的MATLAB标准型,为:
Matlab:数模09-线性规划模型

我们可以使用

[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub]

解这类问题。

x表示所解出的值,是一个按列排序的矩阵。

fval为目标函数值得结果。

f表示目标函数中未知数的系数。

A表示不等式中,位置数的系数,是一个多维数组或一维数组。

b表示不等式右边的值,也是一个矩阵。

Aeq表示等式中未知数的系数(矩阵)。

beq表示等式右边的数。

lb表示未知数取值的下限。

ub表示未知数取值的上限。

对于

Matlab:数模09-线性规划模型

代码如下:

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。

Matlab:数模09-线性规划模型
提示是max还是min,我们的题目是max,于是输入0。
Matlab:数模09-线性规划模型
这样就可以获得和lingo一样的答案。

我们可以再找例题试一试;

Matlab:数模09-线性规划模型
(注意,式子中>=号要改成<=,对应的数字也要变号)

代码:

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

Matlab:数模09-线性规划模型
所以x1=4,x2=1,x3=9。目标函数值为2。

上一篇:2020 BIT冬训-模拟与暴力 A - Online Judge HDU - 1073


下一篇:Terraced fields