鲁棒优化入门(二)——基于matlab+yalmip求解鲁棒优化问题
上一篇博客简单介绍了可以用来求解鲁棒优化的两个工具箱:
鲁棒优化入门(一)——工具箱Xprog和RSOME的安装与使用
其实大家可能没有想过,matlab+yalmip工具箱也可以处理一些简单的鲁棒优化问题,上官方文档:Robust optimization - YALMIP
这里就和大家一起学习一下使用yalmip+cplex求解鲁棒优化问题的方法。
一、yalmip求解鲁棒优化
鲁棒优化问题可以表示为如下的一般形式:
式中,x表示决策变量,w表示不确定变量。这个表达式的含义就是在最恶劣的情况下(w的取值使目标函数最大),求出满足约束条件,并且能使目标函数最小的决策变量x。
但yalmip工具箱求解鲁棒优化问题时还是有一定局限性的,并不能处理任意形式的不确定集下的鲁棒优化问题,一般来说,当鲁棒优化问题的不确定集合为箱型不确定集、椭球不确定集以及多面体不确定集时,都可以用yalmip工具箱求解(具体细节可参考官方文档)。
二、示例代码
1.实例1:线性规划问题
考虑一个简单线性规划问题:
这个问题中不确定变量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取值
对于不确定变量w,需要用uncertain()函数将其规定为不确定变量。另外,还可以先将鲁棒优化存为yalmip模型,然后再进行求解:
[Frobust,robust_objective] = robustify(C + W,objective); % 导出鲁棒优化模型
sol = optimize(Frobust,robust_objective); % 求解鲁棒优化模型
运行结果:
显然,和我们一眼看出的结果是一样的。
对于决策变量为整数或含有逻辑约束的鲁棒优化问题,yalmip同样可以求解,例如:
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取值
运行结果:
2.实例2:含椭球不确定集的鲁棒优化问题
考虑一个含有椭球不确定集的鲁棒优化问题:
这个问题中不确定变量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取值
运行结果:
小伙伴们可能有点奇怪,说好的最优值是零呢?怎么是一个负数?其实,我们应该知道matlab的计算精度是有限的,eps表示MATLAB默认的最小浮点数精度(默认是eps(1)):
所以这个结果应该就是计算误差。
3.实例3:含不确定性的平方和(SOS,Sum of squares)规划问题
考虑如下的SOS规划问题,其中a为整数变量,取值范围[3,5]
这玩意就没法直接看出最优解了,直接上代码:
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的取值
运行结果:
可以看出,当a=5时,目标函数t取得最大值,为0.9437。
上面三个例子都是yalmip官方文档中的示例,下面来看一个实际问题:
4.实例4:股票投资问题
假设一共有150种股票可供选择,第i个股票的不确定收益用表示,其取值满足约束条件:,其中,表示股票i的期望收益,表示股票i的偏差,不确定集可以用1范数和无穷范数表示为:
该投资组合问题的鲁棒优化模型可以表示为:
在本例中,假设Γ=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) % 画出图像
运行结果:
和RSOME工具箱的求解结果一致。
鲁棒优化入门(二)——基于matlab+yalmip求解鲁棒优化问题相关推荐
- 【微电网优化】基于matlab YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题【含Matlab源码 2266期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题[含Matlab源码 2266期] ...
- 【优化求解】基于matlab遗传算法求解仓库货位优化问题【含Matlab源码 022期】
一.遗传算法仓库货位简介(仅供参考) 1 引言 随着电力企业生产规模的不断扩大,传统模式下的仓库管理模式由于利用率较低等问题已经不能很好地胜任电力企业仓储管理的需要.自动化立体仓库又称为自动仓储,极大 ...
- 【优化调度】基于matlab遗传算法求解农业水资源调度优化问题【含Matlab源码 1776期】
⛄一.农业水资源调度简介 水是生命之源,水是生产之要,水是生态之基. 目前,全球约有14亿人口缺乏安全清洁饮用水,据估测到2025年全球约有23亿人口将会面临水资源短缺问题.因此,水即将成为制约社会以 ...
- 【优化充电】基于matlab遗传算法求解电动汽车充电统一管理优化问题(含负荷功率曲线对比图及充电计划)【含Matlab源码 2300期】
⛄一.遗传算法求解电动汽车充电统一管理简介 0 引言 电动汽车是一个发展迅速的新兴产业, 它的优势在于性能良好.节能.环保, 近几年受到了科学研究人员和各国政府的广泛关注.但是, 伴随着电动汽车产生的 ...
- 【优化调度】基于matlab遗传算法求解公交车调度排班优化问题【含Matlab源码 2212期】
⛄ 一. 遗传算法简介 1 引言 公交排班问题是城市公交调度的核心内容,是公交调度人员.司乘人员进行工作以及公交车辆正常运行的基本依据.行车时刻表是按照线路的当前客流量情况,确定发车频率,提供线路车辆 ...
- 【智能优化算法】基于免疫算法求解单目标优化问题附matlab代码
1 简介 自Farmer在1986年提出免疫机理可以在机器学习等工程问题中得到应用之后,相关人员就一直在探索免疫机理在工程实际中的应用技术.而De Castro等完善了算法结构和算法模型后,更为人工免 ...
- 【智能优化算法】基于黑猩猩算法求解多目标优化问题附matlab代码
1 内容介绍 tled attacker, barrier, chaser, and driver are employed for simulating the diverse intelligen ...
- 【智能优化算法】基于蜉蝣算法求解多目标优化问题附matlab代码
1 内容介绍 本文介绍了一种称为 Mayfly 算法 (MA) 的新方法来解决优化问题. 受蜉蝣飞行行为和交配过程的启发,该算法结合了群体智能和进化算法的主要优点.为了评估所提出算法的性能,使用了 3 ...
- 【智能优化算法】基于凌日算法求解单目标优化问题附matlab代码Transit Search Optimization Algorithm
最新文章
- usaco Job Processing(mark)
- java仿qq空间音乐播放_完美实现仿QQ空间评论回复特效
- 优秀程序员的 18 大法则
- linux系统预定义变量有哪些,C++中几个预定义变量的介绍
- php自动加载什么时候用到,php的自动加载的使用
- 【Java基本功】一文读懂final关键字的用法
- 连续型切片与离散加减的思路学习
- 如何在 Mac 上的照片中创建幻灯片?
- 1.创建一个 Slim 应用
- vb mysql 教程_VB6 数据库 基础 教程
- 听完蔡学镛的分享《不瞌睡的PPT制作秘诀》后的总结
- 计算机考研专业课只考一科的学校汇总
- Python数据获取——图片数据提取
- 江苏计算机一级证书考试试题,2016年江苏省计算机一级考试试题
- Linux yum的在线安装(yum命令)
- 机器视觉中的像素、分辨率、灰度值等概念
- 金蝶系统服务器链接设置,金蝶如何设置连接服务器
- python基础之内置成员和魔法函数(16)
- java寻仙红尘缘修改版_微信拍一拍后缀创意搞笑文字大全 微信拍一拍搞笑后缀的句子...
- Python利用tkinter制作桌面翻译小工具