2010-07-08 92 views
3

我完全認識到像線性代數包這樣的凸包優化包應該是你使用的東西,而不是實現。然而,純粹的教育目的 - 是否有任何良好的資源 - 如何實現凸優化包的鏈接/書? (像二次約束二次方程?)如何實現凸優化包?

謝謝!

回答

2

任何關於凸優化的優秀教科書都會包含您正在尋找的東西。一個這樣的免費,但很好的資源在這裏:CO Book。請注意,正如您正確地提到的那樣,實現本書中提到的算法肯定需要線性代數庫,您可能選擇也可能不選擇實現這些線性代數庫。

1

Optima中有一個相關的article,這是mathematical optimization society的一個簡報,名爲「使用COIN-OR快速開發一個開源Minlp求解器」。它描述了使用一些coin-or包構建非線性求解器。大部分硬幣或東西都是用C++編寫的。

對於python,您可以考慮使用numpy中可用的線性代數數據結構和算法。相關的scipy包有一些非線性優化器,但沒有具體的凸優化。

最後,您可以看看Boyd的GPL的基於python的凸優化器cvxopt,以瞭解您擁有的任何類型的任務。

0

這取決於你要去什麼,但你應該去教授。在你現在或你畢業的大學的數學優化中,你應該直接問他

我爲幾個問題實現了求解器,將其簡化爲凸優化(http://cs229.stanford.edu/proj2017/) - cvx4ml與SkLearn類似的解決方案運行得更快,並且我通過了24小時考試到Stephen Boyd,所以我可以給出建議你可以做什麼並描述你很粗略的計劃:

所以,你要創建自己的包,我會寫一步一步的指示:

  1. 你應該與稠密矩陣的工作創建庫/矢量
  2. 你應該用稀疏矩陣/向量創建工作庫
  3. 實現20種不同的算法來求解線性方程組(因爲根據情況你需要不同的方法)
  4. 介紹在您的編程語言或您創建的系統中如何描述約束,函數域等的概念。
  5. 實施幾個規範和雙重規範評估,一些分解工藝如LU,Cholesky。
  6. 爲非負圓錐體實現自定義簡單圓錐解算器。這取決於你要做什麼。 6.a - 基於內點法寫求解器。 6.b - 支持分佈式優化的寫求解器 6.c - 基於某種投影次梯度方法的求解器。

  7. 提高它支持筒等

  8. 步驟 「5」

增強你解算器,如果你想在CVXPY的水平,那麼

  • 實現像CVXPY那樣的程序描述解析並將問題轉換爲圓錐形式。
  • p.s.如果你對這個話題感到sl then不安,那麼:

    • 閱讀線性代數書,寫了prof。從你的大學

    • 在YouTube上看到EE263與S.Boyd,EE364A與S.Boyd,EE364B與S.Boyd。