我在pyomo中使用ipopt,我有下一个错误:
Error evaluating constraint 15: can't compute -1.65898/0.
halt_on_ampl_error=yes
如何在pyomo中打印导致错误的约束名称?
类似于AMPL命令:print _sconname[15];
谢谢,M。
答案 0 :(得分:1)
在解决方案过程中评估表达式时,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)
答案 1 :(得分:0)
我不知道如何进行映射以专门识别您想要的约束,但另一种选择是通过您的模型并重新制定除以不受零点限制的变量的任何约束。您还应该为所有变量提供良好的初始化,或者至少将它们初始化为零以外的值。