Pyomo的Baron错误:POW表达式中的非线性错误

时间:2018-09-01 07:41:49

标签: pyomo

我正在尝试用Baron解决Pyomo中的非线性优化问题。 使用ipopt,bonmin,couenne等求解器时,求解效果很好。

使用男爵时,出现以下错误:

===========================================================================
 BARON version 18.5.9. Built: WIN-64 Wed May 9 22:52:08 EDT 2018

BARON is a product of The Optimization Firm, LLC. http://www.minlp.com/
BARON: NonLinearity Error in POW expression
ERROR: Solver (baron) returned non-zero return code (9)
ERROR: See the solver log above for diagnostic information.
Traceback (most recent call last):
  File "C:/Users/public.THREADRIPPER/Desktop/CGAM_SWP.py", line 602, in <module>
    Results = opt.solve(comp, tee=True, keepfiles=True)
  File "C:\Anaconda3\lib\site-packages\pyomo\opt\base\solvers.py", line 626, in solve
    "Solver (%s) did not exit normally" % self.name)
pyutilib.common._exceptions.ApplicationError: Solver (baron) did not exit normally

Process finished with exit code 1

知道哪里出了问题吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定这件事有多紧急,但我遇到了与您相同的问题。实际上,在BARON.py文件中有关于此错误消息here的注释(希望您可以看到我的屏幕截图,由于某些原因,我不允许上传图片)。 无论如何,我遇到问题的方式与BARON.py文件中指出的方式不同。在我的情况下,我正在使用pyomo.core.base.symbolic.differentiate()函数来创建函数的第一阶导数,这些函数的幂为(1/3),然后得出负指数,男爵显然对此有疑问。如果我用除法手动交换负指数,它似乎可以工作。 希望对您有帮助。

更新:我必须更新我的评论,因为它本身不是负指数,这在我的情况下引起了所关注的错误消息(“ POW表达式中的NonLinearity错误”,求解器(男爵)返回了非零的返回码) (9)),但这是我在输入文件中介绍它们的方式。在男爵手册中,有一个我要参考的案例(see screenshot)。 因此,在我的情况下,由于我定义了如下约束而导致了错误消息: ... *(-241.5 + 0.5 * x12)^ -1.0 *(x1-x6)^ -1.0 *(-483.0 + x12 + x1-x6)^ -1.0 * ... 根据我的意图,这是根据求解器误解的男爵手册。实际上,在我的情况下,使用嵌套的负指数表达式创建了x ^ y情况,如果以不同的方式引入see next screenshot,男爵可能会解决它。但是,如果我在指数周围加上括号,则可以得到我想要的表达式,即: ... *(-241.5 + 0.5 * x12)^(-1.0)*(x1-x6)^(-1.0)*(-483.0 + x12 + x1-x6)^(-1.0)* ... 效果很好。