Разница строительных ограничений с BuildAction () по сравнению с обычным способом - PullRequest
1 голос
/ 16 мая 2019

Как указано в документации pyomo, BuildAction() - это тема для продвинутого уровня, и, кроме того, в соответствии с документацией, ее несколько эффективнее построить / решить?ограничения с BuildAction().

Пример ограничения, сгенерированного с помощью BuildAction():

m.const1 = Constraint([(t, a) for t in m.TIME for a in m.AREA],
                      noruleinit=True)

def const1_rule(m):
    for t in m.TIME:
        for a in m.AREA:
            lhs = (some_vars_1[t,a])
            rhs = (some_vars_2[t,a])
            m.const1.add((t,a), (lhs == rhs))

m.const1_build = BuildAction(rule=const1_rule)

Итак, m.const1 = Constraint() строит ограничение pyomo без какого-либо правила с помощью noruleinit=True.

Затем m.const1_build = BuildAction() запускает функцию const1_rule, и в этой функции ограничения добавляются к m.const1 через .add().

Пример ограничения, сгенерированный обычным способом:

def const1_rule(m, t, a):
    lhs = (some_vars_1[t,a])
    rhs = (some_vars_2[t,a])
    return lhs == rhs

m.const1 = Constraint(m.TIME, m.AREA, rule=const1_rule)

ВОПРОСЫ:

Другим применением BuildAction может быть инициализация данных модели Pyomo из структур данных Python или эффективная инициализацияДанные модели Pyomo из других данных модели Pyomo.

1) Каким образом это более эффективно?

2) В чем разница при построении ограничений с BuildAction()?

3) Должен ли я его использовать, да-нет-почему?

4) Если BuildAction() лучше, как бы я воспользовался этим?(например, предположим, что существует другой принцип работы BuildAction(), и, возможно, из-за этого мне не нужно создавать некоторые pyomo Set s или Param s.)

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