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

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

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)0 x1x2x3 31000++

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. 3141412012521545313160 x1x2x3x4 50480100 x1x2x3x4 0

用 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元

  • 8
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
原料油的采购与精炼安排是否合理,直接影响着食品公司所获得的总利润。本文针对食品加工问题,立了线性规划模型,并依据所给条件,制定了一套最优采购方案和精炼方案,使得公司获得最大利润,并就原料油市场价格的波动对利润的影响作了全面计划模型Ⅰ 对问题1立了线性规划模型。本文用LINDO和LINGO对问题1进行了编程求解,结果一致,得到公司获得的最大利润为 元。 模型Ⅱ 对问题2模型。考虑如下的价格变化方式:2月份植物油价上升 ,非植物油上升 ;3月份植物油价上升 ,非植物油上升 ;其余月份保持这种线性的上升势头。对不同的值 (直到20),采用MATLAB编程法计算出变动后的价格矩阵,再将计算出的价格矩阵代入到模型1中求出相应的最大利润。最大利润如表2。 表3 价格波动 与最大利润 的对应关系 1 948222.2 10 -1759.259 2 818018.5 11 -26425.93 3 687814.8 12 -51092.59 4 557611.1 13 -70574.07 5 429907.4 14 -87074.07 6 316796.3 15 -91574.07 7 204485.2 16 -96074.07 8 115848.1 17 -100574.1 9 51411.85 18 -105074.1 19 -109574.1 20 -114074.1 本文针对模型Ⅱ所求的结果进行了拟合,并且拟合函数具有很高的可决系数,因此所拟合的函数能够较好的反应公司所获得的总利润与原料油价格上涨之间的关系。针对原料油价格上涨这一问题,拟合得到的函数为公司提供了很好的生产调整方案,具有很高的实用价值。
Python数学中的线性规划模型是一种在一组线性约束条件下,求解一个线性目标函数的最大值或最小值的问题。在Python中,可以使用scipy库来求解线性规划问题。 线性规划问题可以用决策变量、目标函数和约束条件来表示。决策变量表示需要优化的变量,目标函数是需要最大化或最小化的线性函数,约束条件是一组线性不等式。 在使用scipy库求解线性规划问题时,首先需要定义决策变量、目标函数和约束条件,然后使用scipy.optimize.linprog()函数来求解最优解。 决策变量可以使用Python中的变量来表示,目标函数和约束条件可以使用数学公式来表示。 举一个简单的例子,假设我们有两个决策变量x和y,目标函数是最大化2x + 3y,约束条件是0 <= x <= 1和0 <= y <= 2。我们可以通过以下代码来求解线性规划问题: ```python from scipy.optimize import linprog c = [-2, -3] A = [[1, 0], [0, 1]] b = [1, 2] x_bounds = (0, 1) y_bounds = (0, 2) res = linprog(c, A_ub=A, b_ub=b, bounds=[x_bounds, y_bounds]) ``` 在上述代码中,c表示目标函数的系数,A和b表示约束条件的系数和常数,x_bounds和y_bounds表示决策变量x和y的取值范围。linprog函数的返回结果res包含了最优解及其对应的目标函数值。 通过使用scipy库中的linprog函数,我们可以轻松地求解线性规划问题,并得到最优解和最优值。需要注意的是,scipy库还提供了其他方法和函数来求解更复杂的数学问题,你可以根据具体需求选择适合的方法来求解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值