#python #cvxpy
#питон #cvxpy
Вопрос:
В CVXPY, как сконструировать ограничение «ИЛИ» подобным образом?
Ограничение, которое я ищу, заключается в том, что x может быть 1 или 2. Оптимизатор минимизирует x и получает оптимальное x = 1.
Например, [x == 1 или x == 2] недопустимо, а [x == 1, x == 2] означает x == 1 И 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)
Ответ №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 для некоторой математики.