日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

求解器選擇與收斂性問題(OR-Tools)

作者:大財小用71 更新時間: 2022-09-22 編程語言

文章目錄

  • 1.求解器的選擇
  • 2.求解器的收斂
    • 2.1 相同時間下求解結果
    • 2.2 不同時間段求解結果
    • 2.3 目標函數變化曲線
  • 3.結論

1.求解器的選擇

OR-Tools提供了用于求解 線性規劃和 混合整數規劃問題的 MPSolver 接口容器,易于調用各種不同求解器。gurobi 當然無論在各個問題上性能都要優勝許多,考慮到畢竟是商用求解器,這里主要枚舉開源免費的求解器。

問題類型 求解器
純整數規劃(IP) CP-SAT
線性規劃(LP) Glop
混合整數規劃(MIP) SCIP, CP-SAT

由于MIP問題是最為麻煩難解的,建模時候盡量考慮建成LP或IP,求解速度會快很多。尤其google ortools 整合了SAT/CP solver,CP_SAT 對于一部分MIP問題也可以求解,部分問題效果比SCIP好很多。

2.求解器的收斂

做一個簡單的數值實驗對比不同求解器的求解速度。構建一個小規模整數規劃問題,算例都一樣,模型也一樣,唯一的區別即求解器不同,這里測試GUROBI,CP_SAT,SCIP三個比較常用的求解器。

ortools調用solver.

solver = pywraplp.Solver.CreateSolver('SCIP')  # GUROBI  SCIP  CP_SAT 

2.1 相同時間下求解結果

先用gurobi求解算例,14s后得到最優解,設定求解時間為14s,再依次求解CP_SAT,SCIP,結果如下表所示。

求解器 求解時間(s) 是否最優解 obj
gurobi 14 9190.0
CP_SAT 14 9190.0
SCIP 14 9305.49

(CP_SAT 在規定時間內同樣求得最優解,但如果不加限制求解依然不會停止,這里可能是求解器數值問題)

2.2 不同時間段求解結果

我們設定不同的停止時間,觀察求解器的求解情況,可以看到gurobi無論是在初始解以及最后的收斂上都要技高一籌,其實在第7s時就已經找到了最優解,但程序最終停止時間是14s,剩余的這段時間大概就是驗優的過程。我設置的算例為IP,CP_SAT表現略遜gurobi但也不錯,但SCIP在短時間內陷入了局部最優,跳出局部最優需要更多的時間,顯然這就是不同求解器內部性能的一個差異了。

limit Time(s) gurobi CP_SAT SCIP
1 9215.0 9241.0 9305.49
2 9215.0 9215.5 9305.49
3 9215.0 9215.0 9305.49
5 9209.5 9211.5 9305.49
7 9190.0 9199.5 9305.49
10 opt 9196.0 9305.49
12 opt 9205.5 9305.49
14 opt 9190.0 9305.49

2.3 目標函數變化曲線

上面用一個小規模算例簡單比較了一下三個求解器的求解性能,為了更好的看到求解器gap變化情況,這里將算例規模適當擴大(算例太大了過于費時),給予不同的停止時間,繪制目標函數隨時間變化曲線。結果很顯著,對于整數規劃問題CP_SAT效果明顯優于SCIP。

在這里插入圖片描述
求解器內部搜索、剪枝算法有差異,尤其到接近最優解時,容易圍繞最優解震蕩,耗費大量的時間,在調用時需要注意,最好限制GAP或時間。這里參考知乎回答:
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

3.結論

  1. gurobi的收斂性能很好,但商業求解器價格昂貴,在一些小規模case上尤其IP使用google的CP_SAT是個不錯的替代選項;
  2. 在使用時有必要限定求解時間和gap,尤其在不要求最優解的情況下;

原文鏈接:https://blog.csdn.net/DCXY71/article/details/124228024

欄目分類
最近更新