前言
之前的几篇鲁棒优化的文章,大致介绍了鲁棒优化基本原理,本文对原理部分不再赘述。如果对鲁棒优化基本原理还不了解的同学,建议先补上基础。言归正传,鲁棒优化作为经典的处理不确定性方法,深受大家的喜爱,但是其重复繁琐的对偶转换步骤,同样让很多人望而却步。为此,本文将基于yalmip语言中的uncertain命令,介绍一种鲁棒优化的快速建模求解方法,方便大家在论文中作对比算例。
一、uncertain是什么?
uncertain(w,distribution) 是基于yalmip语言中处理不确定变量的工具,该工具是为了解决鲁棒优化、随机优化而创建的。其中w就是指不确定变量,distribution为改不确定变量的分布。这个分布可以是不确定集合,盒子不确定集合、多面体不确定集合、椭圆不确定集合等等,也可以是已知的分布,例如正态分布等。更详细介绍,建议直接看原文档。接下来,将以一个股票投资的例子向大家展示该命令的使用方法。股票投资问题如下:
二、uncertain怎么用?
代码
`n = 150; %150只股票
x = sdpvar(n, 1); %每只股票的投资比例
w = sdpvar(n, 1); %不确定变量
sigma = zeros(n, 1);
z = sdpvar(1, 1);
p = zeros(n, 1);
for i = 1 : n
sigma(i, 1) = (0.05 * sqrt(2 * i * n * (n + 1))) / 450; %股票回报的标准差
end
for i = 1 : n
p(i, 1) = 1.15 + i * 0.05 / 150; %股票回报的均值
end
%约束条件
st = [];
for i = 1 : n
st = [st, 0 <= x(i)]; %每只股票的投资比例大于0
end
st = [st, sum(x) == 1]; %投资总比例为1
% U = [norm(w,inf)<=1,uncertain(w)];%指明变量w为不确定变量,并指出范围,norm为范数,盒子不确定集合
% U = [norm(w,inf)<=1,norm(w,1)<=5,uncertain(w)];%多面体不确定集合
U = [norm(w,2)<=1,uncertain(w)];%椭圆不确定集合
%目标函数
obj = p’ * x + (w .* sigma)’ * x; %收益最大化
ops = sdpsettings(‘solver’, ‘gurobi’); %参数指定程序用cplex求解器
optimize([st, U], -obj, ops)%带上不确定约束U
plot(value(x));
总结
盒子不确定集合下,x投资比例
多面体不确定集合下,x投资比例
椭球不确定集合下,x投资比例