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

目录
打赏
0
0
0
0
42
分享
相关文章
基于和声搜索优化算法的机器工作调度matlab仿真,输出甘特图
本程序基于和声搜索优化算法(Harmony Search, HS),实现机器工作调度的MATLAB仿真,输出甘特图展示调度结果。算法通过模拟音乐家即兴演奏寻找最佳和声的过程,优化任务在不同机器上的执行顺序,以最小化完成时间和最大化资源利用率为目标。程序适用于MATLAB 2022A版本,运行后无水印。核心参数包括和声记忆大小(HMS)等,适应度函数用于建模优化目标。附带完整代码与运行结果展示。
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
基于遗传优化算法的多AGV栅格地图路径规划matlab仿真
本程序基于遗传优化算法实现多AGV栅格地图路径规划的MATLAB仿真(测试版本:MATLAB2022A)。支持单个及多个AGV路径规划,输出路径结果与收敛曲线。核心程序代码完整,无水印。算法适用于现代工业与物流场景,通过模拟自然进化机制(选择、交叉、变异)解决复杂环境下的路径优化问题,有效提升效率并避免碰撞。适合学习研究多AGV系统路径规划技术。
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
|
8月前
|
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
322 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
199 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
269 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等