繁体   English   中英

如何使用 max 运算符制定 Pulp 目标函数

[英]How to Formulate a Pulp Objective Function with a max operator

我正在尝试为 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM