Выяснение причины невозможности модели Pyomo - PullRequest
0 голосов
/ 26 июня 2018

Я получил конкретную модель с множеством переменных и ограничений.

Каким-то образом одна из переменных внутри моей модели нарушает одно ограничение, что делает мою модель недопустимой:

WARNING: Loading a SolverResults object with a warning status into model=xxxx;
    message from solver=Model was proven to be infeasible.

Есть ли способ спросить у решателя причину невозможности?

Так, например, давайте предположим, что я получил переменную с именем x, и если я определю следующие 2 ограничения, модель будет OFC. неосуществимым.

const1:
    x >= 10

const2:
    x <= 5

И чего я хочу добиться, так это указать на ограничения и переменную, которая вызывает эту невозможность, чтобы я мог это исправить. В противном случае с моей большой моделью трудно понять, что является причиной этой невозможности.

IN: write_some_comment
OUT: variable "x" cannot fulfill "const1" and "const2" at the same time.

1 Ответ

0 голосов
/ 26 июня 2018

Многие решатели (включая IPOPT) вернут вам значение переменных при завершении решателя, даже если проблема была признана неосуществимой. В этот момент у вас есть несколько вариантов.

В pyomo.util.infeasible есть код, который может вам помочь. https://github.com/Pyomo/pyomo/blob/master/pyomo/util/infeasible.py

Использование:

from pyomo.util.infeasible import log_infeasible_constraints
...
SolverFactory('your_solver').solve(model)
...
log_infeasible_constraints(model)
...