Как динамически изменить границы LpVariable в PuLP?

Я инициализировал свою LpVariable так:

x = LpVariable('x', None, None) 

На данный момент моя переменная имеет верхнюю и нижнюю границы как float('inf') и float('-inf'). Теперь, исходя из некоторых параметров моей логики, я хочу привязать верхний предел этой переменной к, скажем, любому x < 20.

Могу ли я сделать это, только добавив LpProblem и изменив переменную, используя параметры задачи?

y = LpProblem('Minimizing Problem', LpMinimize) 
y += x < 20 

Или есть другой способ манипулировать переменной? Изменение x.upBound не работает. Я все еще могу установить недопустимые целые числа/поплавки в качестве решения (например, values > 20), и он их принимает.


person SashaZd    schedule 22.11.2016    source источник


Ответы (1)


Оказывается оба способа работают. Итак, для примера:

y = LpProblem("min", LpMinimize)
y += x + 10  # Objective Function
x = LpVariable('x', None, None)  # set to bounds=[float("-inf"),float("inf")]

Мы можем изменить нижнюю границу x с float("-inf") по умолчанию на 20 одним из следующих способов:

Вариант 1: изменение ограничений на LpProblem. Так, например, если вы хотите изменить lowBound of x to 20, вам нужно будет использовать:

y += x > 20, "changing lower bound of x" 

Вариант 2: изменение атрибута lowBound объекта LpVariable:

x.lowBound = 20 

Оба эти изменения должны дать нам решение y = 30

person SashaZd    schedule 29.12.2016
comment
Как насчет добавления новых переменных к уже существующему ограничению? Я решил проблему, а затем хочу включить некоторые дополнительные переменные, которых не было в исходном решении - как я могу добавить их в функцию obj и ограничения без необходимости полного переформулирования проблемы? - person user3431083; 12.10.2017
comment
Можете ли вы задать это как новый вопрос и связать его в комментариях? Это другой вопрос/решение, чем этот... Тем временем я разработаю пример кода для того, что вы спрашиваете. - person SashaZd; 14.10.2017