数学建模:线性规划—奶制品的生产销售计划模型

数学建模:线性规划—奶制品的生产销售计划模型 ,第1张

目录
    • 奶制品的生产销售计划一 (粗加工)
      • 1. 制订生产计划, 使每天获利最大
      • 2. 35 元可买到 1 桶牛奶, 买吗? 若买, 每天最多买多少?
      • 3. 可聘用临时工人,付出的工资最多是每小时几元?
      • 4. A 1 A_1 A1的获利增加到 30 元/kg, 应否改变生产计划?
    • 奶制品的生产销售计划二 (深加工)
      • 1. 制订生产计划, 使每天净利润最大
      • 2. 30 元可增加 1 桶牛奶, 3 元可增加 1 h 时间, 应否投资?
      • 3. 现投资 150 元, 可赚回多少?
      • 4. B 1 , B 2 B_1, B_2 B1,B2 的获利经常有 10% 的波动, 对计划有无影响?
      • 5. 每天销售 10 kg A 1 A_1 A1 的合同必须满足, 对利润有什么影响?

奶制品的生产销售计划一 (粗加工)

1  桶牛奶 { 12   h ⟶ 3   k g   A 1 ⟶  获利  24  元 / k g 8   h ⟶ 4   k g   A 2 ⟶  获利  16  元 / k g 1 \ \text{桶牛奶} \begin{cases} 12 \ \mathrm{h} \longrightarrow 3 \ \mathrm{kg} \ A_1 \longrightarrow \text { 获利 } 24 \text { 元} / \mathrm{kg}\ 8 \ \mathrm{h} \longrightarrow 4 \ \mathrm{kg} \ A_2 \longrightarrow \text { 获利 } 16 \text { 元} / \mathrm{kg}\ \end{cases} 1 桶牛奶{12 h3 kg A1 获利 24 /kg8 h4 kg A2 获利 16 /kg

每天 50 桶牛奶, 时间 480 h, 至多加工 100 kg A 1 A_1 A1.

  1. 制订生产计划, 使每天获利最大;
  2. 35 元可买到 1 桶牛奶, 买吗? 若买, 每天最多买多少?
  3. 可聘用临时工人,付出的工资最多是每小时几元?
  4. A 1 A_1 A1 的获利增加到 30 元/kg, 应否改变生产计划?
1. 制订生产计划, 使每天获利最大

x 1 x_1 x1 桶生产 A 1 A_1 A1, x 2 x_2 x2 桶生产 A 2 A_2 A2, 建立线性规划模型
max ⁡ z = 72 x 1 + 64 x 2 s . t . { ( 1 1 12 8 ) ⋅ ( x 1 x 2 ) ⩽ ( 50 480 ) 0 ⩽ ( x 1 x 2 ) ⩽ ( 1000 3 + ∞ ) \begin{gathered} \max z=72 x_{1}+64 x_{2} \ s.t. \begin{cases} \left( \begin{matrix} 1& 1\ 12& 8\ \end{matrix} \right) \cdot \left( \begin{array}{c} x_1\ x_2\ \end{array} \right) \leqslant \left( \begin{array}{c} 50\ 480\ \end{array} \right) \ \mathbf{0} \leqslant \left( \begin{array}{c} x_1\ x_2\ \end{array} \right) \leqslant \left( \begin{array}{c} \frac{1000}{3}\ + \infty \ \end{array} \right) \end{cases} \end{gathered} maxz=72x1+64x2s.t.(11218)(x1x2)(50480)0(x1x2)(31000+)

用 scipy.optimize.linprog 函数求解

from scipy.optimize import linprog
c=[-72, -64]    #目标向量
A=[[1, 1],[12, 8]]; b=[[50],[480]]
bound=((0,100/3.0),(0,None))
res=linprog(c,A,b,None,None,bound,method='simplex')
print('最优值:',res.fun)
print('最优解:',res.x)
最优值: -3360.0
最优解: [20. 30.]

即最优解为 x 1 = 20 , x 2 = 30 x_{1}=20, x_{2}=30 x1=20,x2=30, 最大收益为 3360 元

2. 35 元可买到 1 桶牛奶, 买吗? 若买, 每天最多买多少?

设买 x 3 x_3 x3 桶, 模型变为

max ⁡ z = 72 x 1 + 64 x 2 − 35 x 3 s . t . { ( 1 1 − 1 12 8 0 ) ⋅ ( x 1 x 2 x 3 ) ⩽ ( 50 480 ) 0 ⩽ ( x 1 x 2 x 3 ) ⩽ ( 1000 3 + ∞ + ∞ ) \begin{gathered} \max z=72 x_{1}+64 x_{2}-35 x_3 \ s.t. \begin{cases} \left( \begin{matrix} 1& 1& -1\ 12& 8& 0\ \end{matrix} \right) \cdot \left( \begin{array}{c} x_1\ x_2\ x_3\ \end{array} \right) \leqslant \left( \begin{array}{c} 50\ 480\ \end{array} \right) \ \mathbf{0} \leqslant \left( \begin{array}{c} x_1\ x_2\ x_3\ \end{array} \right) \leqslant \left( \begin{array}{c} \frac{1000}{3}\ + \infty \ + \infty \ \end{array} \right) \end{cases} \end{gathered} maxz=72x1+64x235x3s.t.(1121810)x1x2x3(50480)0x1x2x331000++

from scipy.optimize import linprog
c=[-72, -64, 35]    #目标向量
A =[[1, 1, -1],[12, 8, 0]]; b=[[50],[480]]
bound=((0,100/3.0),(0,None),(0,None))
res=linprog(c,A,b,None,None,bound,method='simplex')
print('最优值:',res.fun)
print('最优解:',res.x)
最优值: -3490.0
最优解: [ 0. 60. 10.]

所以应该买 10 桶, 最大收益 3490 元

3. 可聘用临时工人,付出的工资最多是每小时几元?

计算间增加 1 单位的利润增长

from scipy.optimize import linprog
c=[-72, -64]    #目标向量
A =[[1, 1],[12, 8]]
b1=[[50],[480]]
bound=((0,100/3.0),(0,None))
res1=linprog(c,A,b1,None,None,bound,method='simplex')
b2=[[50],[480+1]]
bound=((0,100/3.0),(0,None))
res2=linprog(c,A,b2,None,None,bound,method='simplex')
print(res1.fun-res2.fun)
2.0

即时间增加 1 单位, 利润增长 2 元, 所以聘用临时工人付出的工资最多每小时 2 元.

4. A 1 A_1 A1的获利增加到 30 元/kg, 应否改变生产计划?

将目标函数变为 max ⁡ z = 90 x 1 + 64 x 2 \max z=90 x_{1}+64 x_{2} maxz=90x1+64x2 再次求解

from scipy.optimize import linprog
c=[-90, -64]    #目标向量
A=[[1, 1],[12, 8]]; b=[[50],[480]]
bound=((0,100/3.0),(0,None))
res=linprog(c,A,b,None,None,bound,method='simplex')
print('最优值:',res.fun)
print('最优解:',res.x)
最优值: -3720.0
最优解: [20. 30.]

最优解仍为 x 1 = 20 x_{1}=20 x1=20, x 2 = 30 x_{2}=30 x2=30, 无需改变生产计划.

奶制品的生产销售计划二 (深加工)

1  桶牛奶 → { → 12   h 3   k g   A 1 → {  获利  24 元 / k g → 1   k g ,   2   h ,   3 元 0.8   k g   B 1 →  获利  44  元  / k g → 8   h 4   k g   A 2 → {  获利  16 元 / k g → 1   k g ,   2   h ,   3 元 0.75   k g   B 2 →  获利  32  元  / k g 1 \ \text{桶牛奶} \rightarrow \begin{cases} \xrightarrow{12 \ \mathrm{h}} 3 \ \mathrm{kg} \ A_1 \rightarrow \begin{cases} \text { 获利 } 24 \text {元} / \mathrm{kg}\ \xrightarrow{1 \ \mathrm{kg}, \ 2 \ \mathrm{h}, \ 3 \text{元}}0.8 \ \mathrm{kg} \ {B}_{1} \rightarrow \text { 获利 } 44 \text { 元 } / \mathrm{kg} \end{cases} \ \xrightarrow{8 \ \mathrm{h}} 4 \ \mathrm{kg} \ A_2 \rightarrow \begin{cases} \text { 获利 } 16 \text {元} / \mathrm{kg}\ \xrightarrow{1 \ \mathrm{kg}, \ 2 \ \mathrm{h}, \ 3 \text{元}}0.75 \ \mathrm{kg} \ {B}_{2} \rightarrow \text { 获利 } 32 \text { 元 } / \mathrm{kg} \end{cases} \end{cases} 1 桶牛奶12 h 3 kg A1{ 获利 24/kg1 kg, 2 h, 3 0.8 kg B1 获利 44  /kg8 h 4 kg A2{ 获利 16/kg1 kg, 2 h, 3 0.75 kg B2 获利 32  /kg

每天 50 桶牛奶, 时间 480 h, 至多加工 100 kg A 1 A_1 A1.

  1. 制订生产计划, 使每天净利润最大;
  2. 30 元可增加 1 桶牛奶, 3 元可增加 1 h 时间, 应否投资?
  3. 现投资 150 元, 可赚回多少?
  4. B 1 , B 2 B_1, B_2 B1,B2 的获利经常有 10% 的波动, 对计划有无影响?
  5. 每天销售 10 kg A 1 A_1 A1 的合同必须满足, 对利润有什么影响?
1. 制订生产计划, 使每天净利润最大

设出售 x 1 kg ⁡ A 1 , x 2 kg ⁡ A 2 x_{1} \operatorname{kg} A_{1}, x_{2} \operatorname{kg} A_{2} x1kgA1,x2kgA2, x 3 kg ⁡ B 1 , x 4 kg ⁡ B 2 x_{3} \operatorname{kg} B_{1}, x_{4} \operatorname{kg} B_{2} x3kgB1,x4kgB2,. x 5 kg ⁡ A 1 x_{5} \operatorname{kg} A_{1} x5kgA1 加工 B 1 B_{1} B1, x 6 kg ⁡ A 2 x_{6} \operatorname{kg} A_{2} x6kgA2 加工 B 2 B_{2} B2

x 5 = x 3 0.8 \displaystyle{x_5=\frac{x_3}{0.8}} x5=0.8x3, x 6 = x 4 0.75 \displaystyle{x_6=\frac{x_4}{0.75}} x6=0.75x4

建立线性规划模型
max ⁡ z = 24 x 1 + 16 x 2 + 44 x 3 + 32 x 4 − 3 x 5 − 3 x 6 s . t . { x 1 + x 5 3 + x 2 + x 6 4 ≤ 50 4 ( x 1 + x 5 ) + 2 ( x 2 + x 6 ) + 2 x 5 + 2 x 6 ≤ 480 x 1 + x 5 ≤ 100 x i ≥ 0 \begin{gathered} \max \quad z=24 x_{1}+16 x_{2}+44 x_{3}+32 x_{4}-3 x_{5}-3 x_{6} \ s.t. \begin{cases} \displaystyle{\frac{x_{1}+x_{5}}{3}+\frac{x_{2}+x_{6}}{4} \leq 50} \ 4\left(x_{1}+x_{5}\right)+2\left(x_{2}+x_{6}\right)+2 x_{5}+2 x_{6} \leq 480\ x_{1}+x_{5} \leq 100 \ x_i \geq 0 \end{cases} \end{gathered} maxz=24x1+16x2+44x3+32x43x53x6s.t.3x1+x5+4x2+x6504(x1+x5)+2(x2+x6)+2x5+2x6480x1+x5100xi0

⟹ \Longrightarrow
max ⁡ z = 24 x 1 + 16 x 2 + 161 4 x 3 + 28 x 4 s . t . { ( 1 3 1 4 5 12 1 3 4 2 15 2 16 3 1 0 5 4 0 ) ( x 1 x 2 x 3 x 4 ) ⩾ ( 50 480 100 ) ( x 1 x 2 x 3 x 4 ) ⩾ 0 \begin{gathered} \max \quad z=24 x_{1}+16 x_{2}+\displaystyle{\frac{161}{4}} x_{3}+28 x_{4} \ s.t.\begin{cases} \left( \begin{matrix} \frac{1}{3}& \frac{1}{4}& \frac{5}{12}& \frac{1}{3}\ 4& 2& \frac{15}{2}& \frac{16}{3}\ 1& 0& \frac{5}{4}& 0\ \end{matrix} \right) \left( \begin{array}{c} x_1\ x_2\ x_3\ x_4\ \end{array} \right) \geqslant \left( \begin{array}{c} 50\ 480\ 100\ \end{array} \right) \ \left( \begin{array}{c} x_1\ x_2\ x_3\ x_4\ \end{array} \right) \geqslant \mathbf{0} \end{cases} \end{gathered} maxz=24x1+16x2+4161x3+28x4s.t.3141412012521545313160x1x2x3x450480100x1x2x3x40

用 scipy.optimize.linprog 函数求解

from scipy.optimize import linprog
c=[-24, -16, -161/4, -28]    #目标向量
A =[[1/3, 1/4, 5/12, 1/3],[4, 2, 15/2, 16/3],[1, 0, 5/4, 0]]
b=[[50],[480],[100]]
Lb=[0]*4; Ub=[None]*4
bound=tuple(zip(Lb, Ub))
res=linprog(c,A,b,None,None,bound,method='simplex')
print('最优值:',res.fun)
print('最优解:',res.x)
最优值: -3460.8
最优解: [  0.  168.   19.2   0. ]

每天销售 168 kg A 2 A_2 A2 和 19.2 kg B 1 B_1 B1, 利润 3460.8 元

2. 30 元可增加 1 桶牛奶, 3 元可增加 1 h 时间, 应否投资?
# 增加牛奶
from scipy.optimize import linprog
c=[-24, -16, -161/4, -28]    #目标向量
A =[[1/3, 1/4, 5/12, 1/3],[4, 2, 15/2, 16/3],[1, 0, 5/4, 0]]
b1=[[50],[480],[100]]
Lb=[0]*4; Ub=[None]*4
bound=tuple(zip(Lb, Ub))
res1=linprog(c,A,b1,None,None,bound,method='simplex')
b2=[[50+1],[480],[100]]
res2=linprog(c,A,b2,None,None,bound,method='simplex')
print(res1.fun-res2.fun)
37.91999999999962

即增加 1 桶牛奶使利润增长 37.92 元

# 增加时间
from scipy.optimize import linprog
c=[-24, -16, -161/4, -28]    #目标向量
A =[[1/3, 1/4, 5/12, 1/3],[4, 2, 15/2, 16/3],[1, 0, 5/4, 0]]
b1=[[50],[480],[100]]
Lb=[0]*4; Ub=[None]*4
bound=tuple(zip(Lb, Ub))
res1=linprog(c,A,b1,None,None,bound,method='simplex')
b2=[[50],[480+1],[100]]
res2=linprog(c,A,b2,None,None,bound,method='simplex')
print(res1.fun-res2.fun)
3.2600000000002183

即增加 1 h 时间使利润增长 3.26 元

3. 现投资 150 元, 可赚回多少?

相同投资增加牛奶的收益 ( 37.92 30 = 1.264 \frac{37.92}{30}=1.264 3037.92=1.264) 大于增加时间的收益 ( 3.26 3 = 1.087 \frac{3.26}{3}=1.087 33.26=1.087), 所以投资 150 元增加 5 桶牛奶, 可赚回 189.6 元

4. B 1 , B 2 B_1, B_2 B1,B2 的获利经常有 10% 的波动, 对计划有无影响?

目标函数变为 max ⁡   z = 24 x 1 + 16 x 2 + 44 ( 1 ± 0.1 ) x 3 + 32 ( 1 ± 0.1 ) x 4 − 3 x 5 − 3 x 6 \max \, z=24 x_{1}+16 x_{2}+44(1\pm 0.1) x_{3}+32(1\pm 0.1) x_{4}-3 x_{5}-3 x_{6} maxz=24x1+16x2+44(1±0.1)x3+32(1±0.1)x43x53x6, x 5 = x 3 0.8 \displaystyle{x_5=\frac{x_3}{0.8}} x5=0.8x3, x 6 = x 4 0.75 \displaystyle{x_6=\frac{x_4}{0.75}} x6=0.75x4, 分别求解

from scipy.optimize import linprog
c0=[-24, -16, -161/4, -28]    #目标向量
A =[[1/3, 1/4, 5/12, 1/3],[4, 2, 15/2, 16/3],[1, 0, 5/4, 0]]
b=[[50],[480],[100]]
Lb=[0]*4; Ub=[None]*4
bound=tuple(zip(Lb, Ub))
res0=linprog(c0,A,b,None,None,bound,method='simplex')
# B1 增加 10%
c11=[-24, -16, -893/20, -28]
res11=linprog(c11,A,b,None,None,bound,method='simplex')
# B1 减少 10%
c12=[-24, -16, -717/20, -28]
res12=linprog(c12,A,b,None,None,bound,method='simplex')
# B2 增加 10%
c21=[-24, -16, -161/4, -156/5]
res21=linprog(c21,A,b,None,None,bound,method='simplex')
# B2 减少 10%
c22=[-24, -16, -161/4, -124/5]
res22=linprog(c22,A,b,None,None,bound,method='simplex')
print('原始方案',res0.x)
print('B1增加10%',res11.x)
print('B1减少10%',res12.x)
print('B2增加10%',res21.x)
print('B2减少10%',res22.x)
原始方案 [  0.  168.   19.2   0. ]
B1增加10% [  0.  168.   19.2   0. ]
B1减少10% [  0. 160.   0.  30.]
B2增加10% [  0. 160.   0.  30.]
B2减少10% [  0.  168.   19.2   0. ]

B 1 B_1 B1 获利下降 10%, B 2 B_2 B2 获利上升 10%时对计划有影响, 所以浮动对计划有影响

5. 每天销售 10 kg A 1 A_1 A1 的合同必须满足, 对利润有什么影响?

增加约束条件 x 1 ≥ 10 x_1 \geq 10 x110, 再次求解

from scipy.optimize import linprog
c=[-24, -16, -161/4, -28]    #目标向量
A =[[1/3, 1/4, 5/12, 1/3],[4, 2, 15/2, 16/3],[1, 0, 5/4, 0]]
b=[[50],[480],[100]]
Lb0=[0]*4; Ub=[None]*4
Lb=[10,0,0,0]
bound0=tuple(zip(Lb0, Ub))
bound=tuple(zip(Lb, Ub))
res0=linprog(c,A,b,None,None,bound0,method='simplex')
res=linprog(c,A,b,None,None,bound,method='simplex')
print('最优值:',res.fun)
print('利润减少:',res0.fun-res.fun)
最优值: -3444.0
利润减少: -16.800000000000182

所以利润减少16元

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/785998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存