如何用max运算符制定纸浆目标函数

问题描述

我正在尝试为PuLP中的成本优化制定目标函数,其中将数组的最大值添加到目标函数。请忽略缩进。
#Decision Variables
allocation_vars = LpVariable.dicts(
    'Allocation',[(i,j,k) for i in TruckTypes for j in Days for k in RS],LpInteger
)

#Objective Function
for i in TruckTypes:
    for j in Days:
        prob += max(allocation_vars[(i,k)] * TransCost[i][k] for k in RS)

尝试运行以上命令时出现以下错误:

prob += max(allocation_vars[(i,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],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,k)]*TransCost[i][k],它将尝试减少最大值所有loop中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...