某厂生产甲、乙两种产品,已知制成一吨产品甲需用资源A 3吨,资源B 4m3;制成一吨产品乙需用资源A 2吨,资源B 6m3,资源C 7个单位。若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200m3和210个单位。试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?
令生产产品甲的数量为x1,生产产品乙的数量为x2。由题意可以建立下面的模型:
\[\left\{ \begin{matrix} max z=7{x}_{1}+5{x}_{2} \\ 3{x}_{1}+2{x}_{2}\leq90 \\ \begin{matrix} 4{x}_{1}+6{x}_{2}\leq200 \\ \begin{matrix} 7{x}_{2}\leq210 \\ {x}_{1}\geq0,{x}_{2}\geq0 \end{matrix} \end{matrix} \end{matrix} \right.\]
Python中使用SciPy包optimize子包的linprog函数求解线性规划。在Python IDLE Shell窗口键入下面的命令行:
code.python
>>> from 400">scipy.optimize import linprog
>>> c=[-class="text-muted">7,-5] #目标函数
>>> A=[[3,2],[4,6],[class="text-muted">0,7]] #不等式约束系数矩阵
>>> b=[90,200class="text-muted">,210] #不等式约束右端项
>>> x1_bounds=(0,class="text-muted">class="text-secondary">None) #变量1下界
>>> x2_bounds=(0,class="text-muted">class="text-secondary">None) #变量2下界
>>> linprog(c,A_ub=A,b_ub=b,bounds=[x1_bounds,x2_bounds])
con: array([], dtype=float64)
fun: -217.99999999808617
message: class="text-primary">'Optimization terminated successfully.'
nit: 5
slack: array([7.24298843e-10, 3.20360982e-09, 4.20000000e+01])
status: 0
success: class="text-secondary">True
x: array([14., 24.])
计算结果中,fun为最优解时目标函数的值,x表示最优解,message说明迭代成功收敛,nit表示迭代次数。由上可知,生产甲种产品14吨、乙种产品24吨可使创建的总经济价值最高。最高经济价值为218万元。