2017-02-01 2 views
0

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

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

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

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

Спасибо, М.

ответ

0

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

1

Эта ошибка генерируется ASL при оценке выражения во время процесса решения (т. Е. Это не ошибка 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) 
    
Смежные вопросы