SCI论文复现:考虑价格歧视和风险评估的Stackelberg合作博弈能源管理策略程序代码!

文摘   2024-12-16 09:03   江苏  

简介


本程序主要参考SCI论文《A cooperative Stackelberg game based energy management considering price discrimination and risk assessment二区;文章中生产和消费者的互动过程视为一个Stackelberg合作博弈,其中零售商作为领导者,消费者作为追随者;考虑到可再生能源的不确定性,采用具有条件风险值(CVaR)的随机规划方法来处理零售商的预期损失。模型程序中算例丰富、注释清晰、干货满满,创新性很高!下面对文章和程序做简要介绍!

程序主要由3个子问题组成,其中子问题1、2使用Cplex或Gurobi求解均可;子问题3使用Mosek求解器求解!

创新点及主要工作


1. 双层随机规划。2.Stackelberg合作博弈模型。

3. 分布式可再生能源不确定性。4. 价格歧视。

5. 点对点(P2P)交易。6. 纳什讨价还价模型。

提出了一个双层能源管理框架,可以帮助零售市场协调多个生产消费者之间的对等(P2P)能源交易。为此,互动过程视为一个Stackelberg合作博弈模型,其中零售商充当决定各种生产消费者价格歧视的领导者,生产消费者充当追随者,以合作博弈的方式对领导者的决定做出反应。基于纳什讨价还价方案,生产消费者参与P2P能源交易,共享闲置能源。考虑到可再生能源的不确定性,采用具有条件风险值(CVaR)的随机规划方法来表征零售商的预期损失,建立考虑价格歧视和风险评估的Stackelberg合作博弈能源管理策略双层优化模型。在第一阶段,利用Karush-Kuhn-Tucker条件,将双层模型转化为等价的单层混合整数线性规划问题。此外,第二阶段完成市场清算,并根据调度结果确定生产消费者的费用。

文章框架

文中结果



程序结果


部分程序


%% 决策变量初始化C_epay_1=sdpvar(1,10); %产消者1的各场景的转移支付C_epay_2=sdpvar(1,10); %产消者2的各场景的转移支付C_epay_3=sdpvar(1,10); %产消者3的各场景的转移支付%% 导入常数变量load P_trading.mat       %导入P_tradingload C_Non.mat           %导入C_Nonload C_trade.mat         %导入C_trade%产消者1-3风电场景概率pai_1=0.1*ones(1,10);pai_2=0.1*ones(1,10);pai_3=0.1*ones(1,10);%负数代表获得收益C_trade_1=-C_trade_1;C_trade_2=-C_trade_2;C_trade_3=-C_trade_3;%计算贡献度alpha_1=sum(abs(P_trading_1),2)./(sum(abs(P_trading_1),2)+sum(abs(P_trading_2),2)+sum(abs(P_trading_3),2));alpha_2=sum(abs(P_trading_2),2)./(sum(abs(P_trading_1),2)+sum(abs(P_trading_2),2)+sum(abs(P_trading_3),2));alpha_3=sum(abs(P_trading_3),2)./(sum(abs(P_trading_1),2)+sum(abs(P_trading_2),2)+sum(abs(P_trading_3),2));%% 结果矩阵C_epay1_save=zeros(1,10);C_epay2_save=zeros(1,10);C_epay3_save=zeros(1,10);%% 迭代求解自动满足    C=[C,C_trade_1(w)+C_epay_1(w)<=C_Non_1(w), %公式21C_trade_2(w)+C_epay_2(w)<=C_Non_2(w),       C_trade_3(w)+C_epay_3(w)<=C_Non_3(w),C_epay_1(w)+C_epay_2(w)+C_epay_3(w)==0, %公式22];   %目标函数 TC_benefits=-alpha_1(w)*log(C_Non_1(w)-C_trade_1(w)-C_epay_1(w))-...alpha_2(w)*log(C_Non_2(w)-C_trade_2(w)-C_epay_2(w))-...%求解结果保存C_epay1_save(w)=double(C_epay_1(w));C_epay2_save(w)=double(C_epay_2(w));C_epay3_save(w)=double(C_epay_3(w));    %% 结果输出C_epay1_real=pai_1*C_epay1_save';C_epay2_real=pai_2*C_epay2_save';C_epay3_real=pai_3*C_epay3_save';

部分内容源自网络,侵权联系删除!

欢迎感兴趣的小伙伴点击文末阅读原文获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!

更多创新性预测及优化程序请点击公众号首页:《预测优化》|《综合能源》链接!

创新优化及预测代码
免费分享研究理论及方法,基础代码资料,努力提供电力系统相关专业预测及优化研究领域的创新性代码,保质保量!面包多地址:https://mbd.pub/o/yc_yh/work
 最新文章