在 CVXPY 中,如何创建类似 x == 1 OR x == 2 的 OR 约束?
In CVXPY, How to create an OR constraint like x == 1 OR x == 2?
在 CVXPY 中,如何构建这样的 'OR' 约束?
我要找的约束条件是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 或 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)
为了通用性,这里的代码将 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 了解一些数学知识。
在 CVXPY 中,如何构建这样的 'OR' 约束?
我要找的约束条件是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 或 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)
为了通用性,这里的代码将 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 了解一些数学知识。