鲁棒优化入门(二)——基于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工具箱的求解结果一致。

相关文章
|
10天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
15天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
基于ACO蚁群优化的VRPSD问题求解MATLAB仿真,输出ACO优化的收敛曲线、规划路径结果及每条路径的满载率。在MATLAB2022a版本中运行,展示了优化过程和最终路径规划结果。核心程序通过迭代搜索最优路径,更新信息素矩阵,确保找到满足客户需求且总行程成本最小的车辆调度方案。
|
21天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
24天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
该程序基于ACO蚁群优化算法解决VRPSD问题,使用MATLAB2022a实现,输出优化收敛曲线及路径规划结果。ACO通过模拟蚂蚁寻找食物的行为,利用信息素和启发式信息指导搜索,有效求解带时间窗约束的车辆路径问题,最小化总行程成本。
|
22天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
199 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
128 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
90 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)