【问题标题】:Pulp: Adding multiple LpSum in a loop纸浆:在循环中添加多个 LpSum
【发布时间】:2021-04-23 23:49:19
【问题描述】:

我有一个类似的列表:

list = [var_1, var_2, var_3]

使用 Pulp 库,我试图将它们定义为带有 for 循环的变量:

LpVariable(list[i] for i in range(len(list)))

然后我尝试将它们全部相加并将其分配给模型:

model += LpVariable(list[i] for i in range(len(list)))

在这两种情况下,我都会收到一个错误提示 expected string or bytes-like object

谁能帮帮我?

问候

【问题讨论】:

  • 我猜第二行和第三行末尾的右括号 ] 应该是右括号),对吧?你到底想用 list[i] for i in range(len(list)) 来实现什么?不确定这个 LpVariable 是什么,但它似乎需要一个字符串或类似字节的对象作为输入。你提供了一个生成器。
  • 最后的 ] 是一个错字。在 Pulp 库中,您必须定义线性规划的变量,并且必须使用 de LpVariable 对象来完成。
  • 什么是var_1等?这些是字符串吗? Lpvariable 的第一个参数应该是它的名称(即一个字符串)。如果您想索引一堆变量,请使用列表、dict 或 PuLP 的 LpVariable.dicts。
  • 我建议不要调用变量 list 或任何其他内置类型名称或 python 关键字。 Python 不会抛出错误,但这是个坏主意。

标签: python linear-programming pulp


【解决方案1】:

Id 没有检查语法,但 lpSum 可以对 LpVariables 列表求和,所以你想要看起来更像的东西

model += LpSum([LpVariable(i) for i in list])

这假定列表中的元素是名称字符串,并且您要创建新的 LpVariables。

如果是这样,您可能希望首先将这些新的 LpVariables 保存在列表或字典中,以便您可以在约束中使用它们,然后将它们作为目标添加到模型中

如果列表中的元素已经是 LpVariables 那么你只需要

model += LpSum(list)

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多