CVXPY устанавливает Z в 1, если значение B положительное

#python #cvxpy

#python #cvxpy

Вопрос:

Итак, вот в чем проблема. У меня есть эта переменная Z, которая следует следующему правилу:

если заем j имеет положительный баланс в момент времени t Z = 1, в противном случае Z = 0

Я предполагаю, что 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 ).