工具箱可以从这里下载:鲁棒优化工具箱Xprog和RSOME

一、Xprog

1.工具箱简介

Xprog是由新加坡国立大学的Peng Xiong于2016年发布的一款matlab工具箱,可以用于求解确定性优化、随机优化、鲁棒优化和分布式鲁棒优化问题。目前文献中很常见的多阶段鲁棒优化问题,同样可以利用Xprog工具箱进行求解。

对于鲁棒优化的的求解方法,一般都是通过求对偶将鲁棒优化的目标函数进行转换,再采用常规方法进行求解,但求对偶问题的过程还是比较麻烦,很容易出问题。利用工具箱Xprog的话,就是帮你把求对偶,求解模型的过程封装起来,只需要给定决策变量,不确定集以及约束条件,就可以快速求出结果,省去繁琐的中间不走。另外,工具箱默认求解器是cplex,如果你用的是cplex教育版,可问题的规模是有限制的,使用xprog求解大规模问题时很有可能会报错。

2.工具箱的下载安装

Xprog工具箱的下载方式,可以参考这篇文章:

【学界】XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言

安装步骤如下:

step1.下载完成之后,可以先将解压之后的文件放在matlab的toolbox文件夹下:

step2.点击设置路径,将Xprog添加到matlab搜索路径中:

step3.在matlab命令行中输入configure并回车,如果使用的是cplex12.6.1-3之间的版本,直接输入对应的数字就可以安装:

如果使用的是其他版本的cplex,则需要事先安装一个兼容的C/C++编译器,然后在命令行输入mex-setup命令激活matlab和C++的混合编译,然后再运行configure,这样也可以顺利安装Xprog工具箱。

混合编译的步骤可以参考这篇博客:

matlab mex -setup错误解决方法

        提示“Xprog configuration completed!”就代表工具箱配置成功了。

step4.如果使用了其他版本的matlab,最后还需要把cplex根目录(cplex/bin)中的cplexxxx.dll文件复制到Xprog工具箱的functions文件夹中,就完成了Xprog的安装。

3.工具箱测试

以下算例都来自Xprog用户手册:

3.1 算例1:简单线性规划

matlab代码:

model=xprog('Simple LP');          % 新建一个名为"Simple LP"的Xprog模型x=model.decision;                  % 给模型新增一个变量x
y=model.decision;                  % 给模型新增一个变量ymodel.max(3*x+4*y);                % 目标函数,求maxmodel.add(2.5*x+y<=20);            % 增加第1个约束条件
model.add(3*x+3*y<=30);            % 增加第2个约束条件
model.add(x+2*y<=16);              % 增加第3个约束条件
model.add(x>=0);                   % x的范围
model.add(y>=0);                   % y的范围model.solve;                       % 求解模型Obj=model.get                     % 求解目标函数值
X  =x.get                         % 求x的取值
Y  =y.get                         % 求y的取值

运行结果:

3.2 算例2:随机规划问题

一家家具公司生产的书桌(desks)、餐桌(tables)和椅子(chairs),售价分别为60美元、40美元和10美元。每种产品的制造都需要木材(lumber)和两种工人:安装工(finishing)和木工(Carpentry)。下表列出了每种资源的成本和制造每种类型的家具所需的数量:

在这个问题中,每个产品的需求都是不确定的。不确定的需求有三种情况:“需求低(low)”、“需求还行(most likely)”和“需求多(high)”。各情景和相关概率的结果如下表:

表示是场景s中家具i的需求,是场景s的概率。设x为表示所购买资源数量的第一阶段决策,决策变量y表示在第s个场景中生产的书桌、餐桌和椅子的数量。目标函数为利润最大化,可用随机规划问题表示为:

matlab代码:

model=xprog('SP Example');         % 新建一个名为"SP Example"的xprog模型x=model.decision(3);               % 第一阶段的决策变量x
y=cell(1,3);                       % 新建三维元胞变量y,分别表示三个场景
for s=1:3y{s}=model.decision(3);        % 为场景s定义第二阶段决策变量y(s)
endP= [0.3 0.4 0.3];                  % 三个场景的概率
c=-[2 4 5.2];                      % 第一阶段目标函数的系数
q= [60 40 10];                     % 第二阶段目标函数的系数
Exp=0;
for s=1:3Exp=Exp+P(s)*q*y{s};           % 第二阶段目标函数的期望
end
model.max(c*x+Exp);W=[8 6   1;                        % 定义约束矩阵4 2   1.5;2 1.5 0.5];
D=[50  150 250;                    % 定义随机的需求矩阵20  110 250;200 225 500];
for s=1:3model.add(W*y{s}-x<=0);        % 添加约束条件add 1st~3rd constraintsmodel.add(y{s}>=0);            % y(s)的范围model.add(y{s}<=D(:,s));       % 需满足需求的约束
end
model.add(x>=0)                    % x的范围model.solve;                       % 求解问题Obj=model.get                     % 目标函数取值
X  =x.get                         % 变量x的取值

运行结果:

3.3算例3:鲁棒优化问题

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

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

在本例中,假设Γ=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;model=xprog('portfolio');           % 新建一个xprog模型x=model.decision(n);                % 决策变量x% 随机变量和不确定集
z=model.random(n);                  % 与期望收益之间的不确定偏差z
u=model.random(n);                  % z的绝对值
model.uncertain(abs(z)<=1);         % z的无穷范数小于1
model.uncertain(abs(z)<=u);         % 用u表示z的绝对值
model.uncertain(sum(u)<=Gamma);     % z的1范数小于Γr = p + sigma.*z;                   % 股票的不确定性收益
model.max(r'*x)                     % 目标函数
%model.add(a<=r'*x);                % a是目标的下界
model.add(sum(x)==1);               % x的约束条件
model.add(x>=0);                    % x的范围model.solve;                        % 求解鲁棒优化问题
Obj=model.get                       % 目标函数取值
plot(x.get)                         % 图形表示购买股票的比例

运行结果

可以看到,对于简单的确定性优化问题、随机规划问题与鲁棒优化,Xprog都可以快速求解,功能还是比较强大的。

二、RSOME

1.工具箱简介

还有一个针对鲁棒随机优化设计的matlab工具箱——RSOME(Robust Stochastic Optimization Made Easy),也可以用来解决一般的线性规划、随机规划、鲁棒优化和数据驱动的分布式鲁棒优化问题。Xprog的作者是Dr. Peng Xiong,他也是RSOME的三位作者之一,两个工具箱的编程思路和数据格式都是比较类似的。

Xprog求解优化时调用的是cplex求解器;RSOME的默认求解器是cplex,但是同样支持gurobi或mosek求解器。

2.工具箱的下载安装

直接去官网下载就可以:

Robust Stochastic Optimization Made Easy

安装步骤比较简单:

安装步骤如下:

step1.下载完成之后,可以先将解压之后的文件放在matlab的toolbox文件夹下:

step2.点击设置路径,将RSOME添加到matlab搜索路径中即可:

3.工具箱测试

以下算例都来自于RSOME工具箱用户手册:

3.1简单线性规划

matlab代码:

model = rsome('LP Exmaple');        % 新建一个名为"LP Example"的模型x = model.decision;                 % 决策变量x
y = model.decision;                 % 决策变量ymodel.max(3*x + 4*y);               % 目标函数model.append(2.5*x + y <= 20);      % 约束条件1
model.append(x + 2*y <= 16);        % 约束条件2
model.append(abs(y) <= 4);          % 约束条件3model.solve;                        % 求解问题Obj = model.get;                    % 目标函数取值
X = x.get;                          % 变量x取值
Y = y.get;                          % 变量y取值

运行结果:

3.2 鲁棒优化问题

对于上文中提到的股票投资组合问题,是一个典型的鲁棒优化问题:

同样可以采用RSOME进行数学建模,matlab代码如下:

n  = 150;                                % 股票数量
p  = 1.15+ 0.05/150*(1:n)';              % 期望收益
sigma = 0.05/450*sqrt(2*(1:n)'*n*(n+1)); % 偏差
Gamma = 3;model=rsome('portfolio');           % 新建一个名为"portfolio"的rsome模型x=model.decision(n);                % 决策变量xz=model.random(n);                  % 与期望收益之间的不确定性偏差P = model.ambiguity;                % 模型的模糊集集
P.suppset(norm(z, Inf) <= 1, ...norm(z, 1) <= Gamma);     % z的不确定集合表示
model.with(P);                      % 将P表示为模型的模糊集r = p + sigma.*z;                   % 股票的不确定收益
model.max(r'*x)                     % 目标函数
model.append(sum(x)==1);            % 约束条件
model.append(x>=0);                 % x的范围model.solve;                        % 求解问题
plot(x.get)                         % 画图表示
Obj=model.get;                      % 目标函数取值

运行结果:

3.3 分布式鲁棒优化问题

考虑一个单产品的报童问题,报童问题是一个典型的存贮问题,也可以用分布式鲁棒优化模型来表示。假设p为一份报纸的售价,c为一份报纸的成本,w为决策变量,表示报童订购的报纸数,为用户的不确定性需求,是一个随机变量,服从于概率分布,即,概率分布包含于模糊集,也就是。用Wasserstein模糊集表示为:

式中,S是样本数量,是Wasserstein球半径,为场景s下需求的估计值,表示两者之间的Wasserstein距离,通过引入一个中间变量,可以把模糊集改写为如下形式:

则该问题的分布式鲁棒优化模型可以表示为:

取p=1.5,c=1,=100,S=500,=0.01,则该鲁棒优化问题可以用matlab代码表示为:

%% 参数
Ubar = 100;                             % 不确定需求的上限
S = 500;                                % 样本数
Uhat = Ubar * rand(1, S);               % 需求的经验分布p = 1.5;                                % 一份报纸的售价
c = 1.0;                                % 一份报纸的成本
theta = Ubar*0.01;                      % Wasserstein球半径%% Create a RSOME model
model = rsome('newsvendor');            % 创建一个名为"newsvendor"的rsome模型%% Random variables and a type-1 Wasserstein ambiguity set
u = model.random;                       % 不确定的需求变量u
v = model.random;                       % 中间变量v
P = model.ambiguity(S);                 % 创建具有S个场景的模糊集
for n = 1:SP(n).suppset(0 <= u, u <= Ubar, ...   norm(u-Uhat(n)) <= v );% 定义每个场景的支持集
end
P.exptset(expect(v) <= theta);
prob = P.prob;                          % 所有场景的概率分布函数
P.probset(prob == 1/S);                 % 每个场景的概率
model.with(P);                          % 将P定义为模型的模糊集%% 决策变量
w = model.decision;                     % 决策变量w%% 目标函数
loss = maxfun({p*(w-u), 0});            % 未售出部分造成的损失
model.max((p-c)*w - expect(loss));      % 分布式鲁棒优化的目标函数%% 约束条件
model.append(w >= 0);                   % w的取值范围%% 求解问题
model.solve;                            % 求解模型%% 结果
obj=model.get;                          % 目标函数取值
W=w.get;                                % 决策变量取值
disp(['目标函数取值:',num2str(obj),',决策变量取值:',num2str(W)])

运行结果:

鲁棒优化入门(一)——工具箱Xprog和RSOME的安装与使用相关推荐

  1. 鲁棒优化入门(三)——鲁棒优化工具箱RSOME快速上手与应用实例

    RSOME1.2安装包:鲁棒优化工具箱Xprog和RSOME RSOME安装和基本使用方法:鲁棒优化入门(一)--工具箱Xprog和RSOME的安装与使用 目录 一.model相关语法 1.rsome ...

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

    上一篇博客简单介绍了可以用来求解鲁棒优化的两个工具箱: 鲁棒优化入门(一)--工具箱Xprog和RSOME的安装与使用 其实大家可能没有想过,matlab+yalmip工具箱也可以处理一些简单的鲁棒优 ...

  3. 鲁棒优化入门(4)-两阶段鲁棒优化及行列生成算法(CCG)超详细讲解(附matlab代码)

    本文的主要参考文献: Zeng B , Zhao L . Solving Two-stage Robust Optimization Problems by A Constraint-and-Colu ...

  4. 分布式鲁棒优化基础知识学习 | Ref:《鲁棒优化入门》「运筹OR帷幄」

    鲁棒:考虑最坏情况: 分布:最坏情况的主体是环境参数的分布变量. 从数学角度说,分布式鲁棒优化囊括随机规划和传统鲁棒优化两种形式. 当分布式鲁棒优化下,环境变量的分布函数获知时,分布鲁棒优化退化为随机 ...

  5. 【鲁棒优化笔记】以Coding入门鲁棒优化:以一个例子引入(二)-错误版

    [鲁棒优化笔记]以Coding入门鲁棒优化:以一个例子引入(二) 投资组合的例子 鲁棒优化模型的reformulation: 利用对偶进行reformulation 利用对偶进行reformulati ...

  6. python可以做鲁棒优化吗_XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言

    此文简单介绍AROMA的1.0版本:XProg.希望可以帮做鲁棒优化相关的同行们省去手动求对偶和Robust Counterpart,然后吭哧吭哧编程的麻烦. 本文将简单介绍XProg(内容主要来自X ...

  7. 鲁棒优化(4):通过yalmip中的kkt命令实现CCG两阶段鲁棒优化

    两阶段鲁棒优化的原理推导部分,已经较多的文章进行分析.目前大部分同学面临的问题是,子问题模型中存在的双线性项该如何处理? 目前,主流方式是,采用对偶定理或KKT条件,将第二阶段的双层问题变成单层问题. ...

  8. 分布式鲁棒优化初学1

    针对不同类型的分布式鲁棒优化问题,求解思路: 1.1不确定项在目标函数中 模型1: 运用最大化,最小化,maxmin转化为minmax即可,然后对max求对偶,即可统一为min问题. 模型2: 此类问 ...

  9. 两阶段鲁棒优化程序 采用微网为模型,主要将安装成本、运营成本以及综合效益三个方面纳入考虑范围

    两阶段鲁棒优化程序 采用微网为模型,主要将安装成本.运营成本以及综合效益三个方面纳入考虑范围,建立两阶段鲁棒优化模型,采用的是CCG方法,本程序为matlab编制,有售后,可以进行!另外本程序考虑发电 ...

最新文章

  1. mysql select * f
  2. 徐文尚计算机控制系统,【计算机控制系统 徐文尚】_计算机控制系统 徐文尚参考资料-毕业论文范文网...
  3. Liunx下MySQL常用命令
  4. axios的数据请求方式及跨域
  5. 深度学习之---yolo源代码部分分析
  6. 拓端tecdat|R语言使用ARIMAX预测失业率经济时间序列数据
  7. 微信小程序弹框滑动冒泡,外层页面也被滑动问题
  8. php mktime 2037,phpmktime计算两时间之差_PHP教程
  9. php混淆解密,php混淆加密解密实战
  10. 【常用表】三角函数基本公式
  11. 改进YOLOv7的早餐价格检测系统
  12. 热重启golang服务器(graceful restart golang http server)
  13. 打字练习。。又退步了
  14. 干草堆[单调队列优化DP]
  15. [LOJ]#6515. 「雅礼集训 2018 Day10」贪玩蓝月
  16. 年总结(一):逝去的14年
  17. larval 操作mysql数据库_laravel操作数据库
  18. BLT-HC05 BLE蓝牙模块设置AT模式和比特率方法
  19. 川崎机器人 K-ROSET 仿真软件插件开发
  20. 2018金华高一计算机考试题目,2018年9月金华十校信息技术考试试题(含解析).docx...

热门文章

  1. 稳定版全网淘宝商品接口,淘宝主图接口取分类,主图,标题,价格,旺旺等
  2. JQuery 插件 JQprint 打印功能
  3. 【.NET框架】—— ASP.NET MVC5 初识(一)
  4. 1198 今天星期几
  5. Dinal爱磕盐--QFN封装的焊接
  6. 广东财经大学计算机自考科目,广东财经大学自考会计本科(120203K)专业介绍及考试计划...
  7. 烟台大学能小自考计算机么,烟台大学有自考本科吗?
  8. 数据分析--Excel数组
  9. 实验报告一——网络侦查与网络扫描
  10. 使用Testin云测试进行兼容测试