数学建模算法与应用习题 1.3
某厂生产三种产品Ⅰ,Ⅱ,Ⅲ。每种产品要经过A,B两道工序加工。设该厂有两种规格的设备能完成A工序,以A1,A2 表示;有三种规格的设备能完成B工序,以B1,B2,B3,表示。产品Ⅰ可在A,B任何一种规格设备上加工。产品Ⅱ可在任何规格的A设备上加工,但完成B工序时,只能在B1设备上加工;产品Ⅲ只能在A2与B2设备上加工。已知在各种机床设备的单件工时、原材料费、产品销售价格、各种设备有效台时以及满负荷操作时机床设备的费用如表1.2所列,试安排最优的生产计划,使该厂利润最大。
设备 | 产品Ⅰ | 产品Ⅱ | 产品Ⅲ | 设备有效台时 | 满负荷时的设备费用/元 |
---|---|---|---|---|---|
A1 | 5 | 10 | 6000 | 300 | |
A2 | 7 | 9 | 12 | 10000 | 321 |
B1 | 6 | 8 | 4000 | 250 | |
B2 | 4 | 11 | 7000 | 783 | |
B3 | 7 | 4000 | 200 | ||
原料费/(元/件) | 0.25 | 0.35 | 0.50 | ||
单价/(元/件) | 1.25 | 2.00 | 2.80 |
这里,我们可以设产品Ⅰ的A1、A2、B1、B2、B3参与生产的产品数量分别为x1、x2、x3、x4、x5。
设产品Ⅱ的A1、A2、B1参与生产的产品数量分别为x6、x7、x8。
设产品Ⅲ的A2、B2参与生产的产品数量分别为x9、x10
以下是python代码
import numpy as np
from scipy import optimize as op
# c = np.array([-3/4, -7753/10000, 3/8, 3132/7000, 7/20, 1/2, 2889/10000, -1.15, -19148/10000, 8613/7000])
c=np.array([0.75,0.7753,-0.375,-0.4474285714,-0.35,-0.5,-0.2889,1.15,1.9148,-1.230428])
bounds = [(0, None) for _ in range(10)] # Equivalent to LB = zeros(5, 1) in MATLAB
Aub=np.array([
[5,0,0,0,0,10,0,0,0,0],
[0,7,0,0,0,0,9,0,12,0],
[0,0,6,0,0,0,0,8,0,0],
[0,0,0,4,0,0,0,0,0,11],
[0,0,0,0,7,0,0,0,0,0]
])
Bub=np.array([6000,10000,4000,7000,4000])
Aeq=np.array([[1,1,-1,-1,-1,0,0,0,0,0],[0,0,0,0,0,1,1,-1,0,0],[0,0,0,0,0,0,0,0,1,-1]])
Beq=np.array([0,0,0])# ?[[0][0]]
res=op.linprog(-c,Aub,Bub,Aeq,Beq,bounds=bounds,method="highs")
print(res)