Использование ядра Pyomo для решения дизъюнктивных моделей - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь воссоздать проблему в книге «Pyomo - Оптимизационное моделирование в Python», используя ядро ​​pyomo вместо окружающей среды. Проблема находится на странице 163 и называется «9.4 Задача смешивания с полунепрерывными переменными». Для тех, у кого нет книги, вот она:

Следующая модель иллюстрирует простую задачу смешивания с тремя полунепрерывными переменными (x1, x2, x3), которые представляют величины, которые смешиваются для удовлетворения объемного ограничение. В этом простом примере количество источников сведено к минимуму:

from pyomo.environ import *
from pyomo.gdp import *
L = [1,2,3]
U = [2,4,6]

index = [0,1,2]
model = ConcreteModel()
model.x = Var(index, within=Reals, bounds=(0,20))
# Each disjunct is a semi-continuous variable
# x[k] == 0 or L[k] <= x[k] <= U[k]
def d_rule(block, k, i):
    m = block.model()
    if i == 0:
        block.c = Constraint(expr=m.x[k] == 0)
    else:
        block.c = Constraint(expr=L[k] <= m.x[k] <= U[k])
model.d = Disjunct(index, [0,1], rule=d_rule)
# There are three disjunctions
def D_rule(block, k):
    model = block.model()
    return [model.d[k,0], model.d[k,1]]
model.D = Disjunction(index, rule=D_rule)
# Minimize the number of x variables that are nonzero
model.o = Objective(expr=sum(model.d[k,1].indicator_var for k in index))
# Satisfy a demand that is met by these variables
model.c = Constraint(expr=sum(model.x[k] for k in index) >= 7)

Мне нужно реорганизовать эту проблему для работы в ядре pyomo, но ядро ​​еще не совместимо с pyomo gdp, используемым для преобразовать дизъюнктивные модели в линейные. Кто-нибудь сталкивался с этой проблемой, и если да, то нашли ли вы хороший метод для решения дизъюнктивных моделей в ядре pyomo?

1 Ответ

0 голосов
/ 10 января 2020

У меня есть частичное переписывание pyomo.gdp, которое я мог бы сделать доступным на ветке github publi c (возможно, работает, но не тестируется). Тем не менее, я устал тратить больше времени на такие переписывания, так как лучшим подходом будет повторная реализация стандартного API pyomo.environ поверх ядра, что сделает все расширения совместимыми.

С учетом вышесказанного, если есть сотрудники, готовые участвовать в некоторых разработках и тестировании, я был бы рад помочь завершить версию kernel-gdp, которую я начал. Если вы хотите обсудить это более подробно, вероятно, лучше всего открыть вопрос на странице Pyomo Github.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...