如何用极大算子建立纸浆目标函数



我试图在PuLP中为成本优化制定一个目标函数,其中将数组的最大值添加到目标函数中。请忽略缩进。

#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所说,你应该重新制定。

请尝试以下操作:

  1. 创建一个伪变量m[i][j],将其添加到目标函数中
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])
  1. 添加以下约束:
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]的最大值。

最新更新