【机会约束】联合机会约束计划的顺序凸近似:一种蒙特卡罗方法(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

作为随机规划的一类,机会约束常用来处理约束条件中含有随机变量的情形,数学模型如(1-2)所示,最初是作为求解不确定性环境下优化问题的工具被提出,难点在一般情况下,机会约束规划问题一般都是非凸问题.在某些假设下,Miller和 WagIer[29]研究了带有随机右端项的机会约束规划问题,证明了其确定性等价问题是一个凹规划问题.在线性决策规则下, Charnes和 Cooper [2]研究了三类模型:最大期望值模型、最小方差模型和最大概率模型,构建了相应的确定性等价模型,且证明了等价模型是凸问题. Prekopa [30]对两种随机规划模型进行了研究,第一类模型使用概率约束,并将条件期望约束添加到目标函数中作为惩罚项;第二类模型是第一类模型的特例:不确定性下的两阶段问题,其中仅要求第二阶段问题以给定的高概率被求解.
上述研究是直接考虑连续概率分布情况,另外一个研究方向是采取基于蒙特卡洛抽样的样本近似方法[31],将带有连续概率分布的机会约束规划问题转化为有限数量样本逼近问题.然后通过下面两种策略将样本逼近问题转化为大规模确定性混合整数规划问题.

本文用于联合机会约束问题的顺序凸近似算法的 Matlab 实现。它包括条件风险值 (CVaR) 和风险值的顺序凸近似 (迭代 dc) 之间的比较。

  • example_run.m:运行文件,主函数
  • main_function.m:包括生成样本,应用 CVAR 近似、ε近似和直流近似,返回特定设置的结果
  • gensample.m:为所有随机变量生成正态分布
  • obj_fun.m:目标函数
  • quantile.m:约束的分位数
  • opt_cvar.m, opt_dc.m, opt_eps.m:CVAR优化,一步直流近似,ε近似
  • con_fun_cvar.m, con_fun_dc.m, con_fun_eps.m:CVAR、一步直流近似、ε近似的约束
  • lincave.m:凹函数的线性近似

📚2 运行结果

 部分代码:

% joint chance constrained programming
function [x_cvar fval_cvar runtime_cvar x_eps fval_eps runtime_eps x_dc fval_dc runtime_dc] ...
    =mainfunction(Dim,ConDim,Alpha,SampleSize,Eps,StopEps,MaxIter,MaxDCIter,TolFun,TolCon)

global dim condim alpha sample sample_size epsilon;

dim=Dim; % dim is the dimension of random vector

condim=ConDim; % condim is the number of constraints

alpha=Alpha; % alpha is the probabilistic constraint level

sample_size=SampleSize; % number of random samples

% sample is a 3d matrix, with size: sample_size x dim x condim 
sample=gensample(dim,condim,sample_size); % generate random vector

epsilon=Eps; % epsilon for approximation

stopepsilon=StopEps; % stopping criteria

maxiter=MaxIter; % maximum iteration for each optimization

maxdciter=MaxDCIter; % maximum iteration for dc loop

tolfun=TolFun; % tolerance function value in optimization

tolcon=TolCon; % tolerance constraint value in optimization

% set starting point
x0=zeros(dim,1);

% run cvar at the first time
[x_cvar fval_cvar runtime_cvar]=opt_cvar(x0,maxiter,tolfun,tolcon);
q_cvar=quantile(alpha,x_cvar);

% run epsilon var approximation at the first time
[x_eps fval_eps runtime_eps]=opt_eps(x0,maxiter,tolfun,tolcon);
q_eps=quantile(alpha,x_eps);

% run dc iterative run, fix epsilon right now
x_dc(:,1)=x_eps;
fval_dc(1)=fval_eps;
runtime_dc(1)=runtime_eps;
for i=2:maxdciter
    x_star=x_dc(:,i-1);
    [x_dc(:,i) fval_dc(i) runtime_dc(i)] = opt_dc(x_dc(:,i-1),maxiter,tolfun,tolcon);
    if abs(fval_dc(i)-fval_dc(i-1)) < stopepsilon
       break; 
    end
end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]吕维. 可行性机会约束下两阶段随机优化问题研究[D].湖南师范大学,2021.DOI:10.27137/d.cnki.ghusu.2021.000835. 

[2]王龙源,田易之,谭栋.基于机会约束规划的风-光-CSP-火联合发电系统优化调度[J].现代电子技术,2022,45(21):109-116.DOI:10.16652/j.issn.1004-373x.2022.21.019. 

[3]@article{hong2011sequential,
  title={Sequential convex approximations to joint chance constrained programs: A Monte Carlo approach},
  author={Hong, L Jeff and Yang, Yi and Zhang, Liwei},
  journal={Operations Research},
  volume={59},
  number={3},
  pages={617--630},
  year={2011},
  publisher={INFORMS}
}

🌈4 Matlab代码实现

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值