此文簡單介紹AROMA的1.0版本:XProg。希望可以幫做魯棒最佳化相關的同行們省去手動求對偶和Robust Counterpart,然後吭哧吭哧程式設計的麻煩。
本文將簡單介紹XProg(內容主要來自Xprog的使用者手冊)。Julia語言裡有為魯棒最佳化開發的JuMPeR。個人使用體驗是XProg更簡潔,功能更齊全:可以直接程式設計最新的分散式魯棒最佳化(DRO)的相關模型,而JuMPeR主要適用於傳統的魯棒最佳化模型,而且似乎現在處於無人維護的狀態。Julia入門科普請出門左轉到 @覃含章的覃含章:Julia:簡單易用的數值計算/最佳化程式語言
https://zhuanlan.zhihu.com/p/39253127
XProg由Dr. Peng Xiong開發,旨在用最簡單直觀的語言進行魯棒最佳化模型的求解。最新版本的AROMA由Prof. Melvyn Sim, Dr. Peng Xiong 和Dr. Zhi Chen開發。XProg只有Matlab版;AROMA將會增加Python版本。兩者都可透過呼叫Gurobi,Cplex, MOSEK等求解器進行求解。
XProg
先上一個多產品的分散式魯棒報童模型的求解,直觀感受一下。
其中,模糊集(ambiguity set) 為,
求解程式如下:
對於裡面的extended模糊集和extended LDR的概念,請參考
Adaptive Distributionally Robust Optimization
pubsonline.informs.org
由上面的例子可以看出,XProg提供了一種照著原始模型編出來的簡潔高效程式設計方法。它已經把求對偶求robust counterpart等步驟全部內嵌到程式裡去了。這大大地減少了之前做RO或者DRO的問題的時候,往往得先手動求對偶,然後再用C, C++, Java,Matlab等求解的那份酸爽!
以下直接舉例來闡明XProg的用法,具體語法請參閱XProg包裡面的“使用者手冊”。以下所舉的例子大都在安裝包中的“examples”。
1、線性規劃 (Linear Programming)
對於任意的線性規劃:
實現起來特別方便:
比如下面這個線性規劃:
只需要在程式開始賦值:
解出來結果如下:
2、混合整數規劃(Mixed Integer Programming)
對於混合整數規劃,只需在定義變數時註明是二進位制變數(binary variable)還是整數變數就可:
3、隨機規劃
XProg 還可以對隨機規劃問題進行求解。不同場景下的決策可以用cell array實現,舉例如下(編者實在太懶。。。問題描述請參考使用者手冊第15頁):
求解程式如下:
求解結果如下:
4、經典魯棒最佳化模型求解
舉例多階段庫存最佳化模型(問題描述請參考使用者手冊22頁):
實現程式如下:
5、分散式魯棒最佳化模型求解
詳見文首的例子。
鑑於XProg很快就要被功能強大N多的AROMA取代,本文特別精簡地介紹了XProg這個簡單實用的魯棒最佳化(RO, DRO)程式語言。AROMA進一步對XProg進行了精簡,但是功能卻更加強大了。等AROMA正式上線之後,再寫一篇詳細的入門介紹文章。