【问题标题】:Linear programming (optimization) with Pulp使用 Pulp 进行线性规划(优化)
【发布时间】:2020-10-23 16:01:52
【问题描述】:

我想问你一些关于优化线性程序的问题。我已经成功设置了模型。但是,我在设置元启发式算法以减少计算时间时遇到问题。基本的优化模型可以在这里看到:

在元启发式算法中有一个while循环,其条件如下:
while $ \sum_{i=1}^I b_i y_i \leq \sum_{k=1} ^K q_k $

我试图用下面的代码来实现这个条件:

while lpSum(b[i]*y[i] for i in I)<=lpSum(q[k] for k in K): 

如果分别计算这两个总和,我会得到两者的正确结果。但是,当我将它们置于这种条件下时,代码会进入无限循环,即使条件得到满足并且它应该中断循环。我想这与数据类型有关,并且参数不能是LpAffineExpression。但是,我真的很难理解这个问题。

我希望您能理解我的问题,并且非常感谢您的想法和解释!如果您需要有关特定内容的更多信息,请告诉我 - 很抱歉成为初学者。

非常感谢提前和最好的问候, 伯恩哈德

【问题讨论】:

    标签: python mathematical-optimization equation heuristics pulp


    【解决方案1】:

    lpSums 没有值,就像常规 sum 一样。

    任何 Python 对象都可以使用诸如__eq__ 之类的内置方程与其他对象进行比较。这就是我可以说date(2000, 1, 1) &lt; date(2000, 1, 2)。但是,lpAffineExpressionss(lpSums 是其中的一种)旨在用于约束。它们的内容是变量,由 LP 求解器求解,因此它们还没有任何值。

    因此lpSum(x) &lt;= lpSum(y) 的返回值不是真或假,就像正规方程一样,但它是一个方程。并且等式不是None,或False,或任何其他虚假值。你所说的等同于while &lt;some object&gt;:,这始终是正确的。因此你的无限循环。


    我不知道“使用元启发式算法来减少计算时间”在这种情况下意味着什么 - 也许您运行 LP 求解器的几次迭代,然后在结果上使用您的元启发式算法。

    如果是这种情况,请使用b[i].value() 获取变量b[i] 在该解决方案中给出的值,并确保以常规总和计算总和。

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 2013-09-18
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多