如何使用 max 运算符制定 Pulp Objective 函数
How to Formulate a Pulp Objective Function with a max operator
我正在尝试为 PuLP 中的成本优化制定一个 objective 函数,其中将数组的最大值添加到 objective 函数。请忽略缩进。
#Decision Variables
allocation_vars = LpVariable.dicts(
'Allocation',
[(i,j,k) for i in TruckTypes for j in Days for k in RS],
0,
LpInteger
)
#Objective Function
for i in TruckTypes:
for j in Days:
prob += max(allocation_vars[(i, j, k)] * TransCost[i][k] for k in RS)
我在尝试 运行 以上内容时遇到以下错误:
prob += max(allocation_vars[(i, j, k)] * TransCost[i][k] for k in RS)
TypeError: '>' not supported between instances of 'LpAffineExpression' and 'LpAffineExpression'
你应该重新表述,正如@AirSquid所说。
尝试以下方法:
- 创建一个虚拟变量
m[i][j]
,将其添加到 objective 函数;
m = LpVariable.dicts(
'maxCosts',
[(i,j) for i in TruckTypes for j in Days],
0,
LpInteger
)
prob += lpSum([m[i][j] for j in Days for j in TruckTypes])
- 添加以下约束:
for i in TruckTypes:
for j in Days:
for k in RS:
prob += allocation_vars[(i,j,k)]*TransCost[i][k] <= m[i][j]
假设你有一个最小化问题,这将与 max
完全相同:它会尽可能地减少 m[i][j]
,并且要减少更多,它会尝试减少所有 allocation_vars[(i,j,k)]*TransCost[i][k]
.
中的最大值
我正在尝试为 PuLP 中的成本优化制定一个 objective 函数,其中将数组的最大值添加到 objective 函数。请忽略缩进。
#Decision Variables
allocation_vars = LpVariable.dicts(
'Allocation',
[(i,j,k) for i in TruckTypes for j in Days for k in RS],
0,
LpInteger
)
#Objective Function
for i in TruckTypes:
for j in Days:
prob += max(allocation_vars[(i, j, k)] * TransCost[i][k] for k in RS)
我在尝试 运行 以上内容时遇到以下错误:
prob += max(allocation_vars[(i, j, k)] * TransCost[i][k] for k in RS)
TypeError: '>' not supported between instances of 'LpAffineExpression' and 'LpAffineExpression'
你应该重新表述,正如@AirSquid所说。
尝试以下方法:
- 创建一个虚拟变量
m[i][j]
,将其添加到 objective 函数;
m = LpVariable.dicts(
'maxCosts',
[(i,j) for i in TruckTypes for j in Days],
0,
LpInteger
)
prob += lpSum([m[i][j] for j in Days for j in TruckTypes])
- 添加以下约束:
for i in TruckTypes:
for j in Days:
for k in RS:
prob += allocation_vars[(i,j,k)]*TransCost[i][k] <= m[i][j]
假设你有一个最小化问题,这将与 max
完全相同:它会尽可能地减少 m[i][j]
,并且要减少更多,它会尝试减少所有 allocation_vars[(i,j,k)]*TransCost[i][k]
.