【问题标题】:In CVXPY, How to create an OR constraint like x == 1 OR x == 2?在 CVXPY 中,如何创建像 x == 1 OR x == 2 这样的 OR 约束?
【发布时间】:2020-11-25 09:11:45
【问题描述】:

在 CVXPY 中,如何像这样收缩“或”约束?

我正在寻找的约束是 x 可以是 1 或 2。优化器最小化 x 并获得最优 x = 1。

例如,[x == 1 or x == 2] 无效,[x == 1, x == 2] 表示 x == 1 AND x == 2 无效。

我正在寻找将 x 限制为 1 或 2 的约束:x == 1 OR x == 2。是否可以创建这样的 CVXPY 约束?

import cvxpy as cp
x = cp.Variable(name='x')
## x is 1 or 2
## constraints = [ x...]  # x is 1 or 2; for example, 'constraints = [x == 1 or x == 2]' does not work

objective = cp.Minimize(x)
problem = cp.Problem(objective, constraints)
problem.solve()
print("x.value = " , x.value)

【问题讨论】:

    标签: python cvxpy


    【解决方案1】:

    为了通用性,这里的代码将x 值限制为1,3,5

    x = cp.Variable()
    z = cp.Variable(3, boolean=True)
    constraints = [cp.sum(z)==1, [1,3,5] @ z == x]
    

    例如,在您的情况下,事情可以简化

    x = cp.Variable()
    z = cp.Variable(boolean=True)
    constraints = [x == 1 + z]
    

    甚至

    x = cp.Variable(integer=True)
    constraints = [1 <= x, x <= 2]
    

    当然你需要一个混合整数求解器,否则不可能。请参阅Mosek modeling cookbook 了解一些数学知识。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多