线性规划

2021-01-13  本文已影响0人  Neural_PDE

1


可以明显看出来该规划中一共有5个自变量,同时有8个约束条件
结合matlab中linprog具体语法来看,linprog函数中的变量需求可以根据我们需求填写,在我们题目中我们可以采用:
x=linprog(c,A,b,aeq,beq,lb),(具体为什么采用该种形式,客官您耐心向下看哦)
具体每一个变量对应意义如下:
C:目标函数的系数,也就是目标函数minZ中各个变量的系数,在上述例子中为c=[0.2 0.7 0.4 0.3 0.8],同时该问题中是求最小值,在linprog中直接用c即可,当我们要求函数的最大值时,需要在linprog中写成-c;
A:约束条件是不等式中的系数,同时在该条件下需要注意,不等号的方向不同可能我们需要对系数做一个正负变换,如果不等式为≥,那么在A中需要取原系数的相反数,例如该题中A=[-3 -2 -1 -6 -18;-1 -0.5 -0.2 -2 -0.5 ;-0.5 -1 -0.2 -2 -0.8];
b:不等式右边的数值,同理不等号的方向不同可能我们需要对系数做一个正负变换,如果不等式为≥,那么在b中需要取原系数的相反数,该题中b=[-700;-30;-100];
aeq:等式部分的系数,该题目中约束条件不存在等式,所以在函数中aeq可以用[]来表示空白;
beq:等式等号右边的值,该问题中不存在等式,同理用[]表示;
lb:指X的下限,在我们题目中所有的变量都要求≥0,在这里lb就可以用一个0矩阵来表示,因为我们题目中有五个变量,就可以设置为lb=zeros[5,1],就是zeros生成一个5行1列的零矩阵,通过该矩阵表示五个变量的下限。
在我们题目中,我们发现通过上述几个系数,已经可以把我们题目中的约束条件表示出来,因此我们的linprog就采用上述形式,当我们面临更复杂的题目时,约束条件更多时,我们可以采用后续的linprog形式。
上述题目在matlab中可以表示为:
完整代码:
c=[0.2 0.7 0.4 0.3 0.8];
A=[-3 -2 -1 -6 -18;-1 -0.5 -0.2 -2 -0.5 ;-0.5 -1 -0.2 -2 -0.8];
b=[-700;-30;-100];
lb=zeros[5,1];
[x,fval]=linprog(c,A,b,[],[],lb);
disp(x); %x为最优解
disp(fval); %fval为我们要求的最小或者最大值

简单的matlab中linprog函数应用如上,在这里可以总结给大家几点容易报错的地方:
1.写各个系数的时候,注意;和,例如在A=[-3 -2 -1 -6 -18;-1 -0.5 -0.2 -2 -0.5 ;-0.5 -1 -0.2 -2 -0.8]中每一个不等式的系数用;隔开,而一个不等式中用,或者空格隔开。

  1. linprog函数中用法很多,当约束条件比较多的时候,可以依次采用更复杂的形式,但是不存在的约束条件不能跳过,需要用[]表示。

2

3

求f=-2x1-3x2-x3的最小值
满足的条件是
x1+x2+x3≤3
x1+4x2+7x3+x4=9
且x1、x2、x3、x4均大于等于0

Matlab求解如下:
原题等价于求f=-2x1-3x2-x3+0x4的最小值
其条件等价于
x1+x2+x3+0
x4≤3
x1+4x2+7x3+x4=9
则在Matlab输入如下内容

a=[1 1 1 0]
b=[3]
a1=[1 4 7 1]
b1=[9]
x=[ 0 0 0 0]
f=[ -2 -3 -1 0]
linprog(f,a,b,a1,b1,x)%执行命令或者输入linprog(f,a,b,a1,b1,x,[])
Optimization terminated.
ans =
1.0000
2.0000
0.0000
0.0000
%说明x1=1,x2=2,x3=0,x4=0取得最小值
上一篇 下一篇

猜你喜欢

热点阅读