Pyomo:打印导致错误的约束

时间:2017-02-01 10:17:55

标签: printing pyomo ipopt

我在pyomo中使用ipopt,我有下一个错误:

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

如何在pyomo中打印导致错误的约束名称?

类似于AMPL命令:print _sconname[15];

谢谢,M。

2 个答案:

答案 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)

我不知道如何进行映射以专门识别您想要的约束,但另一种选择是通过您的模型并重新制定除以不受零点限制的变量的任何约束。您还应该为所有变量提供良好的初始化,或者至少将它们初始化为零以外的值。