鲁棒优化入门(二)——基于matlab+yalmip求解鲁棒优化问题

简介: 鲁棒优化的含义就是在最恶劣的情况下(不确定变量的取值使目标函数最大),求出满足约束条件,并且能使目标函数最优的决策变量。 yalmip工具箱可以用来求解鲁棒优化问题,但还是有一定局限性的,并不能处理任意形式的不确定集下的鲁棒优化问题,一般来说,当鲁棒优化问题的不确定集合为箱型不确定集、椭球不确定集以及多面体不确定集时,都可以用yalmip工具箱求解(具体细节可参考官方文档)。本文介绍了利用yalmip求鲁棒优化问题的一般方法。......

      上一篇博客简单介绍了可以用来求解鲁棒优化的两个工具箱:

       其实大家可能没有想过,matlab+yalmip工具箱也可以处理一些简单的鲁棒优化问题,上官方文档:Robust optimization - YALMIP

       这里就和大家一起学习一下使用yalmip+cplex求解鲁棒优化问题的方法。

一、yalmip求解鲁棒优化

       鲁棒优化问题可以表示为如下的一般形式:

image.gif

式中,x表示决策变量,w表示不确定变量。这个表达式的含义就是在最恶劣的情况下(w的取值使目标函数最大),求出满足约束条件,并且能使目标函数最小的决策变量x。

       但yalmip工具箱求解鲁棒优化问题时还是有一定局限性的,并不能处理任意形式的不确定集下的鲁棒优化问题,一般来说,当鲁棒优化问题的不确定集合为箱型不确定集、椭球不确定集以及多面体不确定集时,都可以用yalmip工具箱求解(具体细节可参考官方文档)。

二、示例代码

1.实例1:线性规划问题

       考虑一个简单线性规划问题:

image.gif

       这个问题中不确定变量w仅存在于约束条件中,目标函数中不包含不确定变量。显然,当w=0.5时是最恶劣的情况,此时f(x)的最大值为0.5。采用yalmip编程验证一下:

sdpvar x w                              % 定义变量
C = [x+w <= 1];                         % 约束条件
W = [-0.5 <= w <= 0.5, uncertain(w)];   % 不确定集
objective = -x;                         % 目标函数
sol = optimize(C + W,objective);        % 求解模型
obj=-value(objective);                  % 目标函数取值
x=value(x);                             % 决策变量x取值

image.gif

       对于不确定变量w,需要用uncertain()函数将其规定为不确定变量。另外,还可以先将鲁棒优化存为yalmip模型,然后再进行求解:

[Frobust,robust_objective] = robustify(C + W,objective);    % 导出鲁棒优化模型
sol = optimize(Frobust,robust_objective);                   % 求解鲁棒优化模型

image.gif

运行结果:

image.gif

        显然,和我们一眼看出的结果是一样的。

       对于决策变量为整数或含有逻辑约束的鲁棒优化问题,yalmip同样可以求解,例如:

image.gif

        matlab代码为:

intvar x
sdpvar w                                                    % 定义变量
C = [x+w <= 2];                                             % 约束条件
W = [-0.5 <= w <= 0.5, uncertain(w)];                       % 不确定集
objective = -x;                                             % 目标函数
sol = optimize(C + W,objective);                            % 求解模型
obj=-value(objective);                                      % 目标函数取值
x=value(x);                                                 % 决策变量x取值

image.gif

       运行结果:

image.gif

2.实例2:含椭球不确定集的鲁棒优化问题

       考虑一个含有椭球不确定集的鲁棒优化问题:

image.gif

        这个问题中不确定变量w仅存在于约束条件中,目标函数中不包含不确定变量。假设n=2,也不难看出,当w1=w2=0.5时,属于最恶劣的场景,此时f(x)最大值为0。编程验证一下:

sdpvar x w(2,1)                                             % 定义变量
C = [x+sum(w) <= 1];                                        % 约束条件
W = [norm(w) <= 1/sqrt(2), uncertain(w)];                   % 不确定集
objective = -x;                                             % 目标函数
sol = optimize(C + W,objective);                            % 求解模型
obj=-value(objective);                                      % 目标函数取值
x=value(x);                                                 % 决策变量x取值

image.gif

       运行结果:

image.gif

       小伙伴们可能有点奇怪,说好的最优值是零呢?怎么是一个负数?其实,我们应该知道matlab的计算精度是有限的,eps表示MATLAB默认的最小浮点数精度(默认是eps(1)):

image.gif

        所以这个结果应该就是计算误差。

3.实例3:含不确定性的平方和(SOS,Sum of squares)规划问题

       考虑如下的SOS规划问题,其中a为整数变量,取值范围[3,5]

image.gif

        这玩意就没法直接看出最优解了,直接上代码:

intvar a
sdpvar x y t u                  % 定义决策变量
p = a*x^4+y^4+u*x*y+1;          % 多项式表示
F = [uncertain(u), -1<=u<=1];   % 不确定集
F = [F, a>=3, a<=5];            % 约束条件a∈[3,5]
F = [F, sos(p-t)];              % 多项式约束
solvesos(F, -t)                 % 求解模型
A=value(a);                     % 决策变量a的取值 
T=value(t);                     % 目标函数t的取值

image.gif

运行结果:

image.gif

       可以看出,当a=5时,目标函数t取得最大值,为0.9437。

       上面三个例子都是yalmip官方文档中的示例,下面来看一个实际问题:

4.实例4:股票投资问题

       假设一共有150种股票可供选择,第i个股票的不确定收益用image.gif编辑表示,其取值满足约束条件:image.gif编辑,其中,image.gif编辑表示股票i的期望收益,image.gif编辑表示股票i的偏差,不确定集可以用1范数和无穷范数表示为:

image.gif

        该投资组合问题的鲁棒优化模型可以表示为:

image.gif

        在本例中,假设Γ=5,参数pi和σi满足如下公式:


        求解该问题的matlab代码如下:

n  = 150;                                               % 股票的数量 
p  = 1.15+ 0.05/150*(1:n)';                             % 期望的收益
sigma = 0.05/450*sqrt(2*n*(n+1)*(1:n)');                % 收益的偏差
gamma=5;                                                % 不确定预算
z=sdpvar(n,1);                                          % 不确定变量z
x=sdpvar(n,1);                                          % 决策变量x
C=[sum(x)==1,x>0];                                      % x的约束条件
Z=[norm(z,Inf)<=1,norm(z,1)<=gamma,uncertain(z)];       % 不确定集
objective = -(p + sigma.*z)'*x;                         % 目标函数
sol = optimize(C+Z,objective);                          % 求解模型
x=value(x);                                             % 决策变量x取值
plot(x)                                                 % 画出图像

image.gif

       运行结果:

image.gif

       和RSOME工具箱的求解结果一致。

相关文章
|
2月前
|
存储 传感器 分布式计算
针对大尺度L1范数优化问题的MATLAB工具箱推荐与实现
针对大尺度L1范数优化问题的MATLAB工具箱推荐与实现
|
2月前
|
机器学习/深度学习 供应链 算法
【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)
【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 新能源
基于动态非合作博弈的大规模电动汽车实时优化调度电动汽车决策研究(Matlab代码实现)
基于动态非合作博弈的大规模电动汽车实时优化调度电动汽车决策研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 存储 人工智能
基于双层共识控制的直流微电网优化调度(Matlab代码实现)
基于双层共识控制的直流微电网优化调度(Matlab代码实现)
111 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
120 0
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
203 0
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
109 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
105 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
141 8

热门文章

最新文章