【问题标题】:Integer programming: assignment of absolute value (depending on variable value)整数规划:绝对值的赋值(取决于变量值)
【发布时间】:2015-02-17 18:38:20
【问题描述】:

我对整数编程比较陌生,并且(再次)陷入了约束的制定。

在我的简化模型中,我有一个(连续)变量,其下限 LB 低于零,上限 UB 高于零。现在我想根据变量所取的值将变量值分配给其他变量。

我想表达的逻辑如下:

LB > 0
UB > 0
-LB <= Variable1 <= UB

if Variable1 => 0:
    Variable2 = Variable1
    Variable3 = 0
else:
    Variable2 = 0
    Variable3 = abs(Variable1)

如何使用线性(不)等式来描述这一点?

我想吸收有点慢..

提前致谢!

** 编辑:对于建模,我使用 Python、Pyomo 和最新的 Gurobi 求解器。

*** 编辑:我现在通过使用二进制变量以下列方式制定它。 (我知道它是二次的,但以后可以线性化):

LB > 0
UB > 0

-LB <= Variable1 <= UB
0 <= Variable2 <= UB
0 <= Variable3 <= LB
Variable4 = Variable2 * BinaryVariable - Variable3 * (1-BinaryVariable)

但现在我仍然必须确保如果 Variable2 > 0 则 Variable3 为 0,反之亦然。

有什么想法吗?

【问题讨论】:

  • “混合整数规划” .... “在 ... 实数内” ... 那么这是整数规划,还是浮点(伪实数)?另外,您在这里谈论什么语言/框架/平台/程序?表达任何类型的逻辑通常需要使用特定的语言。你已经表达的逻辑有什么问题?您尝试了哪些方法,哪些方法不起作用?
  • 哦,对不起,你是对的!它是整数编程,变量是连续的(请参阅我的编辑)。我正在寻找一种使用(不)等式来描述这一点的方法。对于建模,我使用 Python、Pyomo 和最新的 gurobi 求解器!

标签: optimization mathematical-optimization linear-programming scientific-computing integer-programming


【解决方案1】:

首先创建一个二进制变量,如果Variable1 &gt; 0 等于1,Variable1 &lt; 0 等于0:

Variable1 <= UB * BinaryVar
LB * (1 - BinaryVar) <= Variable1

(如果Variable1 &gt; 0,那么BinaryVar必须等于1。如果Variable1 &lt; 0,那么BinaryVar必须等于0。注意如果Variable1 = 0,那么BinaryVar可以等于0 或 em> 1,但这对您的问题无关紧要,因为如果 Variable1 = 0 然后 Variable2 = Variable3 = 0 和下面的约束可以正常工作。)

现在添加强制执行 Variable2Variable3 值的约束:

Variable2 = Variable1 * BinaryVar
Variable3 = -Variable1 * (1 - BinaryVar)

这些是二次约束,然后您可以对其进行线性化。

线性化:

Variable2 <= UB * BinaryVar
Variable2 >= -LB * BinaryVar
Variable2 <= Variable1 + LB * (1 - BinaryVar)
Variable2 >= Variable1 - UB * (1 - BinaryVar)
Variable3 = Variable2 - Variable1

【讨论】:

  • 感谢您的回答,grendelsdad!你的表述对我来说似乎是合乎逻辑的。但如果我将方程放入模型中,BinaryVar 总是设置为 1,而 Variable1、Variable2 和 Variable3 设置为零(或 SomeValue*e-13)。我已经检查过 Variable1 是否保持在上限和下限内。到目前为止,我找不到这不起作用的原因......
  • 如果 Variable1 的值为负数,则第二个不等式 (LB * (1 - BinaryVar)
  • 将第二个不等式表述为“-LB * (1 - BinaryVar)
  • 顺便说一句,我已将问题公式更改为 LB > 0、UB > 0 和 -LB
  • 有趣。在公式“LB > 0 / UB > 0 / -LB
猜你喜欢
  • 2023-01-10
  • 2012-12-15
  • 2018-09-19
  • 2015-07-22
  • 2017-06-26
  • 2018-03-03
  • 2020-02-21
相关资源
最近更新 更多