【问题标题】:Python pulp optimizer with min absolute value具有最小绝对值的 Python 纸浆优化器
【发布时间】:2016-05-23 09:11:38
【问题描述】:

我正在使用纸浆 (https://pythonhosted.org/PuLP/) 进行优化并遇到问题。我需要使用像abs(x) > MIN 这样的约束,我在这里找到了解决方案http://lpsolve.sourceforge.net/5.5/absolute.htm,我只创建了两个约束:

x + M * B >= MIN
-x + M * (1 - B) >= MIN

其中 B 为 0 或 1 且 M 值足够大。问题是当我使用 M ~ 10000 时一切正常,但是当我使用 INT_MAX_VALUE 或 ~ 10000000000 时它不起作用。 有没有人遇到过这样的问题?

【问题讨论】:

  • B 是布尔变量,为什么要使用10000100000000000 之类的值?
  • M 应该选择尽可能小(否则你会遇到严重的数字问题,正如你所注意到的)。在您的情况下,您可以将M 视为x 的界限,即|x|

标签: python mathematical-optimization linear-programming integer-programming pulp


【解决方案1】:

也许您使用 COIN-CBC 会做得更好。我在另一篇文章中看到了您的数字问题,它似乎只是来自一些 VUB 限制。

首先,CBC 背后的 LP 求解器 (CLP) 比 GLPK 更精细,其次您可以使用 SOS 约束,它对这些 VUB 约束进行建模,您想更好地将其用于您的 abs-Function (没有任何数字危险,它只是将它们分支出来)。总体而言,性能通常更好。 请随时跟进我的回答并评论问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多