解题思路:
目标函数:
约束条件:
python实现:
from pulp import LpProblem, LpVariable, LpMaximize, lpSum, value
import numpy as np
a=np.array([18,15,23,12]) #货物质量
b=np.array([480,650,580,390]) #单位质量空间
c=np.array([3100,3800,3500,2850]) #利润
w=np.array([10,16,8]) #质量限制
v=np.array([6800,8700,5300]) #体积限制
#创建线性规划问题
prob=LpProblem('双下标优化',LpMaximize)
#创建决策变量
x=LpVariable.dicts('x',((i,j) for i in range(len(a)) for j in range(len(w))), lowBound=0)
#设置目标函数
prob+=lpSum(c[i]*x[(i,j)] for i in range(len(a)) for j in range(len(w)))
#添加约束条件
for j in range(len(w)):
prob += lpSum(x[i,j] for i in range(len(a)))<=w[j]
for i in range(len(a)):
prob += lpSum(x[i,j] for j in range(len(w)))<=a[i]
for j in range(len(w)):
prob += lpSum(b[i]*x[(i,j)] for i in range(len(a)))<=v[j]
prob += lpSum(x[(i,0)] for i in range(len(a)))/10 == lpSum(x[(i,1)] for i in range(len(a)))/16
prob += lpSum(x[(i,0)] for i in range(len(a)))/10 == lpSum(x[(i,2)] for i in range(len(a)))/8
#求解问题
prob.solve()
#输出结果
if prob.status==1: #表示问题已求解
print('最优解:')
for i in range(len(a)):
print(f"货物{i+1}:{value(sum(x[(i,j)] for j in range(len(w))))}吨")
print('最大利润:')
print(value(prob.objective))
else:
print('优化未成功')
结果:
最优解:
货物1:0.0吨
货物2:15.0吨
货物3:15.947368吨
货物4:3.0526316吨
最大利润:
121515.78805999999