鲁棒优化工具包-XProg和RSOME
记录一下鲁棒优化学习内容。之前研究过一段时间的鲁棒优化,但由于没有数据也就没有继续研究下去。最近有时间,觉得鲁棒优化比较有意思就继续研究一下。主要结合XProg[1]和RSOME[2]进行鲁棒优化的学习和实际操作。
1.XProg和RSOME
XProg工具箱针对随机规划、鲁棒优化和分布鲁棒优化(DRO)设计的MATLAB工具包,优化问题求解需要调用CPLEX12.6或者依赖C/C++编译器。新加坡国立大学的 Peng Xiong于2016年发布了1.0版本,其后没再更新[3],对于XProg感兴趣的可以通过文献[1]获得源代码。
RSOME是针对鲁棒随机优化(RSO)设计的MATLAB工具箱,其也能够处理一般的随机规划、鲁棒优化和DRO问题[2]。RSO处理的是拥有不确定场景(多种场景)的不确定性优化问题,可以理解为,对前述的不确定性问题(例如DRO),把其扩展到多种不同的场景,每种场景具有一定的概率。相反,如果把多场景退化为单场景,也就是最基本的DRO问题。
XProg和RSOME中关于场景(Scenario)的定义和实现不太相同。XProg的场景实现方式主要针对于随机规划(stochastic programming),需要针对每个场景设置不同的参数和概率。对于DRO而言,XProg其一般只关注于模糊集的设计,并且只针对于单一场景。而RSO是对DRO在多场景下的扩展,也即是把DRO从单一的场景推广到了多个不同的场景,并且每一场景的模糊集可以不相同。这也是RSO的定义,多场景下的DRO和随机线性规划。
XProg中大部分的功能和应用场景可以使用RSOME改写建模,因为XProg的作者同样是RSOME的作者之一,二者思想和代码具有相似性。但是对于DRO中具有嵌套子集(非全概率)的情况,自我感觉还无法使用RSOME进行建模。
例如,XProg用户手册中例4.2.1中定义的模糊集:
F = { z ~ ∈ R E P ( z ~ ) = 0 E p ( z ~ 2 ) ≤ 1 P ∈ P ( R ) : P { − 2 ≥ z ~ ≤ 2 } = 1 P { − 1 ≥ z ~ ≤ 1 } =