题目:
??某食品公司生产两种点心①和②,采用采用原料A和B。已知生产每盒点心①和②时消耗的原料数及原料单价、月供应量及两种点心的批发价如下表所示:
??据对市场估计,②点心月销量不超过2000盒,且其销量不超过点心①1000盒。要求计算使销售收人最大的计划安排。
模型建立:
设①点心的销量为
x
1
x_1
x1?盒,②点心的销量为
x
2
x_2
x2?盒,设销售收入为
S
S
S,那么可得
S
=
(
30
x
1
+
20
x
2
)
?
[
9.9
(
x
1
+
2
x
2
)
+
6.6
(
2
x
1
+
x
2
)
]
=
6.9
x
1
?
6.4
x
2
S=(30x_1+20x_2)-[9.9(x_1+2x_2)+6.6(2x_1+x_2)]\\=6.9x_1-6.4x_2
S=(30x1?+20x2?)?[9.9(x1?+2x2?)+6.6(2x1?+x2?)]=6.9x1??6.4x2?
为了使销售收入最大,所以目标函数就是
m
a
x
??
S
=
6.9
x
1
?
6.4
x
2
max\,\,S=6.9x_1-6.4x_2
maxS=6.9x1??6.4x2?
约束条件:
根据表中数据可得原料的供应量约束为
x
1
+
2
x
2
?
6000
2
x
1
+
x
2
?
8000
x_1+2x_2\leqslant6000 \\2x_1+x_2\leqslant8000
x1?+2x2??60002x1?+x2??8000
根据两种点心的销量关系可得销量约束为
x
2
?
2000
x
2
?
x
1
?
1000
x_2\leqslant2000\\x_2-x_1\leqslant1000
x2??2000x2??x1??1000
综上可得总的约束条件为
s
.
t
.
{
x
1
+
2
x
2
?
6000
2
x
1
+
x
2
?
8000
x
2
?
2000
?
x
1
+
x
2
?
1000
x
1
,
x
2
?
0
s.t.\left\{ \begin{array}{c} x_1+2x_2\leqslant 6000\\ 2x_1+x_2\leqslant 8000\\ x_2\leqslant 2000\\ -x_1+x_2\leqslant 1000\\ x_1,x_2\geqslant 0\\ \end{array} \right.
s.t.?
?
??x1?+2x2??60002x1?+x2??8000x2??2000?x1?+x2??1000x1?,x2??0?
模型求解:
下面我们使用两种方法针对上述问题进行求解,一种是利用CPLEX求解器进行求解,还有一种是利用matlab自带的intlinprog求解(由于该问题是整数规划,所以使用intlinprog)。
CPLEX求解代码:
%CPLEX求解
clc,clear,close
tic
x=intvar(2,1);
s=6.9*x(1)-6.4*x(2);
c=[x(1)+2*x(2)<=6000
2*x(1)+x(2)<=8000
x(1)<=2000
-x(1)+x(2)<=1000
x(1),x(2)>=0];
options=sdpsettings('solver','cplex','verbose',2);
result=solvesdp(c,-s,options);%由于本题是求最大值,所以加一个负号
if result.problem==0
xresult=value(x)
sresult=value(s)
else
disp('求解错误')
end
toc;
求解结果:
Intlinprog求解代码:
%intlinprog求解
clc,clear
s=[6.9;-6.4];
intcon=2;
a=[1,2;2,1;0,1;-1,1];
b=[6000;8000;2000;1000];
lb=zeros(2,1);
ub=[2000;2000];
[x,y]=intlinprog(-s,intcon,a,b,[],[],lb,ub)
s=-y %由于intlinprog标准形式是求最小值,所以此处取相反数最大值。
求解结果:
对比两种结果发现:求解结果一致。
所以当点心①销售2000盒,点心②销售0盒,最大销售收入为13800元。