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