加工奶制品的生产计划
加工1桶牛奶有两种加工方式,(1)生产12小时得到3公斤A1,获利24元/公斤(2)生产8小时得到4公斤A2,
获利16元/公斤
每天:
50桶牛奶 时间480小时 至多加工100公斤A1
制订生产计划,使每天获利最大
分析:
设x1桶牛奶生产A1x1桶牛奶生产A2
则生产A1获利 24×3x1 生产A2获利 16×4 x2
每天获利
Max z=72x1+64x2
约束条件
原料 x1+x2≤50
时间 12×x1+8×x2≤480
加工能力 3×x1≤100
非负约束 x1,x2≥0
LINGO代码
model:
max=72*x1+64*x2;
[milk] x1+x2<50;
[time]
12*x1+8*x2<480;
[cpct] 3*x1<100;
end
结果
Global optimal solution found.
Objective value: 3360.000
Infeasibilities: 0.000000
Total solver iterations: 2
Variable Value Reduced Cost
X1 20.00000 0.000000
X2 30.00000 0.000000
Row Slack or Surplus Dual Price
1 3360.000 1.000000
MILK 0.000000 48.00000
TIME 0.000000 2.000000
CPCT 40.00000 0.000000
Matlab求解
f=(-1)*[72 64]; %因为题中要求最大值这里取相反数,linprog是求最小值的
A=[1 1;12 8;3 0;-1 0;0 -1];
b=[50 480 100 0 0];
[xopt fxopt]=linprog(f,A,b)
-fxopt %再取负得到最大值
代码2
f=(-1)*[72 64]; %因为题中要求最大值这里取相反数,linprog是求最小值的
A=[1 1;12 8;3 0];
b=[50 480 100];
LB=[0;0];
[xopt fxopt]=linprog(f,A,b,[],[],LB)
-fxopt %再取负得到最大值
结果
Optimization terminated.
xopt =
20.0000
30.0000
fxopt =
-3.3600e+003
ans =
3.3600e+003
线性规划的一般形式
minf=c1x1+c2x2+...+cnxn
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪a11x1+a12x2+...+a1nxn≤b1a21x1+a22x2+...+a2nxn≤b2..............................am1x1+am2x2+...+amnxn≤bm
xi≥0(i=1,2,...n)
用矩阵表示是
minf=cTX
s.t.AX≤b,X≥0
例:求解线性规划问题
maxf=3x1−x2−x3
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪x1−x2+x3≤11−4x1+x2+2x3≥32x1−x3=−1xi≥0,i=1,2,3
解:考虑到linprog函数只能解决形如
minf=cTX
s.t.⎧⎩⎨⎪⎪AX≤Baeqx=beqxX≥0
变形为下面这个形式
minf=−3x1+x2+x3
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪2x1−x3=−1x1−x2+x3≤114x1−x2−2x3≤−3xi≥0,i=1,2,3
matlab代码
c=[-3;1;1];
A=[1 -2 1;4 -1 -2];
b=[11;-3];
aeq=[2 0 -1];
beq=-1;
vlb=[0;0;0];
[x,fval]=linprog(c,A,b,aeq,beq,vlb)
结果
Optimization terminated.
x =
4.0000
1.0000
9.0000
fval =
-2.0000
对应原来的线性规划中即知目标函数的最大值为2,此时
x1=4,x2=1,x3=9
LINGO求解
model:
max=3*x1-x2-x3;
x1-2*x2+x3<=11;
-4*x1+x2+2*x3>=3;
2*x1-x3=-1;
end
结果
Global optimal solution found.
Objective value: 2.000000
Infeasibilities: 0.000000
Total solver iterations: 0
Variable Value Reduced Cost
X1 4.000000 0.000000
X2 1.000000 0.000000
X3 9.000000 0.000000
Row Slack or Surplus Dual Price
1 2.000000 1.000000
2 0.000000 0.3333333
3 0.000000 -0.3333333
4 0.000000 0.6666667