簡體   English   中英

Pyomo-IPOPT:求解器落入局部最小值,如何避免?

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

我試圖解決一個優化問題,包括找到高維(10+)單調函數的全局最大值(如在每個方向上單調)。 約束使得他們用平面切割搜索空間。

我已經在pyomo編寫了整個pyomo ,我正在使用ipopt解算器。 在大多數情況下,我相信它會成功融合到全球最優。 但是如果我對約束有所了解,我發現它有時會收斂到局部最小值。

它看起來像是一種勘探開發權衡。 我已經研究了可以傳遞給ipopt的選項,並且列表很長,以至於我無法理解要使用哪些參數來幫助收斂到全局最小值。

編輯:

解決方案的兩個提示:

  • 我的變量曾經被定義為非常無限的邊界,例如bounds=(0,None)在無限半線上移動。 我已對它們強制執行兩個有限邊界。

  • 我現在使用多個啟動:

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

到目前為止,這讓我對融合感到滿意。

對不起,IPOPT是一個本地解算器。 如果您真的想找到全局解決方案,可以使用Baron,Couenne或Antigone等全局求解器。 需要權衡:全局解算器速度較慢,可能無法解決大問題。

或者,您可以幫助本地解算器獲得良好的初始點。 請注意,在這方面,活動集方法通常比內點方法更好。 有時候使用多重算法來防止糟糕的局部最優:使用一堆不同的起點。 Pyomo有一些設施可以做到這一點(參見文檔)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM