鲁棒优化工具包-XProg和RSOME

鲁棒优化工具包-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~REP(z~)=0Ep(z~2)1PP(R):P{2z~2}=1P{1z~1}=0.9P{0.5z~0.5}[0.6,0.7]}\Bbb{F}=\begin{Bmatrix} &\tilde{z}\in \Bbb{R}\\ &\Bbb{E_{\Bbb{P}}}(\tilde{z})=0\\ &\Bbb{E_{\Bbb{p}}}(\tilde{z}^{2})\leq 1\\ \Bbb{P} \in \mathcal{P}(\Bbb{R}):&\Bbb{P}\{-2\geq\tilde{z}\leq 2\}=1\\ &\Bbb{P}\{-1\geq\tilde{z}\leq 1\}=0.9\\ &\Bbb{P}\{-0.5\geq\tilde{z}\leq 0.5\}\in [0.6,0.7]\\ \end{Bmatrix}
该种情况,RSOME只能描述前四行表示的模糊集,后两行的情况目前无法表述。

2.错误分析

在使用RSOME的时候遇到了一些错误,记录一下。
(1)对XProg的例4.2.2的多产品报童问题,使用RSOME进行改写。RSOME在建模模糊集时,利用P.suppset()添加集合约束时,需要一次性添加完成,不能分开添加,否则报错(Error using subsref, reference non-existent field objval, Error in Cplex/subsref)。
鲁棒优化工具包-XProg和RSOME
如上图所示,在定义模糊集时分开定义会报错。
鲁棒优化工具包-XProg和RSOME
解决办法,将以上图片中的关于suppset的定义全部写到一个suppset()函数中,也即是一次性把不含期望的模糊集定义完成。

(2)相同的程序代码,使用RSOME建模,利用MATLAB2013b和cplex12.4.0求解会报以下错误(Error using subsref, Reference to non-existent field ‘qcpdslack’. Error in Cplex/subsref)
鲁棒优化工具包-XProg和RSOME
目前原因尚未明确,搜索相关内容没有找到原因和解决方案。

改用高版本的cplex和MATLAB,例如MATLAB2018和cplex12.8.0会报以下错误:(错误使用 cplexlink1280, CPLEX Error: Promotional version. Problem size limits exceeded.)

由于问题求解规模超过cplex教育版的限制,此时解决方案有两种,一是缩减求解问题规模,二是使用无限制版的CPLEX或者其他对应的求解器。但是在使用的算例中(XProg的例4.2.2多产品报童问题)决策变量的规模没有超过10个,即便是引入辅助变量也没有超过30个。自我感觉,可能在使用cplex求解时又涉及相关的问题转换,导致求解变量增加,不知这样理解是否正确,有待探讨。

参考文献
[1]【学界】XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言.
https://zhuanlan.zhihu.com/p/47023680
[2]RSOME: Robust Stochastic Optimization Made Easy. www.rsomerso.com
[3] Peng Xiong. XProg 1.0 Users’ Guide-MATLAB Toolbox for Optimization under Uncertainty, 2016.10.17.