#python #cvxpy
#python #cvxpy
Вопрос:
Итак, вот в чем проблема. У меня есть эта переменная Z, которая следует следующему правилу:
Я предполагаю, что Z должен быть определен как so:
Z = cvxpy.Variable(shape=shape_j_t, name="Z", boolean=True)
Таким образом, Z ограничен (?) балансом «B». Как мне сообщить решателю, что Z должно быть 1, если B положительное и 0 в противном случае? Особенно учитывая, что сам B состоит из other cvxpy.Variables
.
Ответ №1:
Общий подход, предполагающий априорное знание о границах (которые вообще необходимы) B
, выглядит следующим образом:
b <= UB * z
b >= LB * z
z in {0, 1}
который описывает:
z = 0 <-> b = 0
z = 1 <-> LB <= b <= UB
Но это всего лишь что-то общее, и эти вещи обычно разрабатываются с учетом полной модели. Здесь мы не знаем, что именно вы делаете. Иногда нам не нужна эквивалентность, а просто подразумевается (например, игнорировать ограничение LB …)
Возможно, нетривиально определить понятие положительного баланса, поскольку у вас есть только неравенства, и использование LB=0
будет выражать неотрицательность, но не строгую положительность. Для последнего потребуется некоторое априорное определение некоторого эпсилона (например 0.001
).