4.1简单生产计划问题
今天建模课学习了规划模型问题,分别用LINGO和MATLAB求解
题目可以自己提炼为几个表达式:
目标函数:max f=8*x+9*y;
约束条件有三个:
1、 3*x+4*y<=300
2、10*x+8*y<=700
3、x>=0且y>=0(下界均为零)
①LINGO
打开LINGO直接敲入
max=8*x+9*y;%目标函数
[st_1] 3*x+4*y<300;%约束条件,注意LINGO中没有小(大)于等于号,只能写小(大)于号
[st_2] 10*x+8*y<700;%约束条件 st_1和st_2只是两种符号代表约束条件
输入完了之后点那个红色的圈“求解”
//观察结果
Global optimal solution found.
Objective value: 706.2500 %这是目标值,也就是最后利润可以达到多少
Infeasibilities: 0.000000
Total solver iterations: 2
Objective value: 706.2500 %这是目标值,也就是最后利润可以达到多少
Infeasibilities: 0.000000
Total solver iterations: 2
Model Class: LP
Total variables: 2
Nonlinear variables: 0
Integer variables: 0
Nonlinear variables: 0
Integer variables: 0
Total constraints: 3
Nonlinear constraints: 0
Nonlinear constraints: 0
Total nonzeros: 6
Nonlinear nonzeros: 0
Nonlinear nonzeros: 0
Variable Value Reduced Cost %value是决策变量的取值,即X取25,Y取56.25时,利润达到最大706.25
X 25.00000 0.000000
Y 56.25000 0.000000
X 25.00000 0.000000
Y 56.25000 0.000000
Row Slack or Surplus Dual Price %Slack or Surplus这一列是指剩余变量,剩余变量均为0,就代表工作日和资源量这2个约束条件取了等号,全部用完
1 706.2500 1.000000 %Dual Price意为对偶价格
ST_1 0.000000 1.625000 %这个约束条件的对偶价格为1.625,即当工作日增加1时,最大利润增加1.625,即工作日最大为301时,最大利润为707.875
ST_2 0.000000 0.3125000 %这个约束条件的对偶价格为0.3125,即当资源原量(小麦)增加1时,最大利润增加0.3125,即工作日最大为701时,最大利润为706.5625
1 706.2500 1.000000 %Dual Price意为对偶价格
ST_1 0.000000 1.625000 %这个约束条件的对偶价格为1.625,即当工作日增加1时,最大利润增加1.625,即工作日最大为301时,最大利润为707.875
ST_2 0.000000 0.3125000 %这个约束条件的对偶价格为0.3125,即当资源原量(小麦)增加1时,最大利润增加0.3125,即工作日最大为701时,最大利润为706.5625
②MATLAB
首先要知道用什么函数,这个要用linprog(f,A,b,Aeq,beq,[],lb)/*不知道的时候要会用help 。min f'*x 约束条件:A*x<=b;Aeq*x=beq;Aeq,beq指等式约束,本题中没有等式约束,故为空[],linprog是求极小化的问题,我们要求最大化问题,故先求最小值,再加负号即可。
线性规划标准模型:
min z=f*X
使得:1.AX<=b;
2.AeqX=beq//本题无等式约束条件,故Aex 和beq均为[]
3.lb<=x<=ub//lb为下界,ub为上界,本题,X Y下界均为0故 lb=[0;0],无上界
代码:
f=[-8 -9];
A=[3 4;10 8];
b=[300;700];
lb=[0;0];
[x fval]=linprog(f,A,b,[],[],lb)
fmax=-fval
结果:X=
25.000
56.2500
fval=
-706.2500
fmax=
706.25
对比LINGO和MATLAB发现,对于线性规划而言,用LINGO给出的信息更多更加方便