Pyomo-IPOPT: solver falls into local minima, how to avoid that?

試著忘記壹切 提交于 2019-12-13 17:54:34

问题


I am trying to solve an optimisation problem consisting in finding the global maximum of a high dimensional (10+) monotonic function (as in monotonic in every direction). The constraints are such that they cut the search space with planes.

I have coded the whole thing in pyomo and I am using the ipopt solver. In most cases, I am confident it converges successfully to the global optimal. But if I play a bit with the constraints I see that it sometimes converges to a local minima.

It looks like a exploration-exploitation trade-off. I have looked into the options that can be passed to ipopt and the list is so long that I cannot understand which parameters to play with to help with the convergence to the global minima.

edit:

Two hints of a solution:

  • my variables used to be defined with very infinite bounds, e.g. bounds=(0,None) to move on the infinite half-line. I have enforced two finite bounds on them.

  • I am now using multiple starts with:

    opt = SolverFactory('multistart')
    results = opt.solve(self.model, solver='ipopt', strategy='midpoint_guess_and_bound')
    

So far this has made my happy with the convergence.


回答1:


Sorry, IPOPT is a local solver. If you really want to find global solutions, you can use a global solver such as Baron, Couenne or Antigone. There is a trade-off: global solvers are slower and may not work for large problems.

Alternatively, you can help local solvers with a good initial point. Be aware that active set methods are often better in this respect than interior point methods. Sometimes multistart algorithms are used to prevent bad local optima: use a bunch of different starting points. Pyomo has some facilities to do this (see the documentation).



来源:https://stackoverflow.com/questions/54975188/pyomo-ipopt-solver-falls-into-local-minima-how-to-avoid-that

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!