Pyomo: выведите ограничение, вызывающее ошибку

Я использую ipopt в pyomo, у меня следующая ошибка:

Error evaluating constraint 15: can't compute -1.65898/0.
halt_on_ampl_error=yes

Как я могу напечатать имя ограничения, которое вызывает ошибку в pyomo?

Что-то вроде команды AMPL: print _sconname[15];

Спасибо, М.


person Michael    schedule 01.02.2017    source источник


Ответы (2)


Эта ошибка выдается ASL при оценке выражения в процессе решения (т. Е. Это не ошибка Pyomo).

Чтобы сделать ошибку более понятной, нужно попросить Pyomo передать "символические" метки решателю. По умолчанию это отключено из соображений эффективности: создание удобочитаемых меток дороже, чем простая нумерация ограничений и переменных, и пользователи редко взаимодействуют с необработанной моделью, которая отправляется в решатель.

  • Если вы используете команду pyomo, вы можете передать параметр --symbolic-solver-labels:

    pyomo solve --solver ipopt --stream-solver --symbolic-solver-labels #...
    
  • Если вы пишете скрипты, вы хотите установить symbolic_solver_labels=True в вызове solve():

    SolverFactory('ipopt').solve(model, tee=True, symbolic_solver_labels=True)
    
person jsiirola    schedule 02.02.2017

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

person Bethany Nicholson    schedule 01.02.2017