基于分布鲁棒优化(DRO)算法结合条件风险值(CVaR)来解决自主调度问题,以获得一种适用且可调整的自主调度策略(Matlab代码实现)

本文介绍了一种新的基于矩的DRO模型,结合条件风险值DR-CVaR,以解决发电公司在电价不确定性下的自主调度问题。文中提出了DRA-VS和DRA-ADMM两种有效近似模型以降低计算复杂性,通过实例验证了模型的有效性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

摘要:
为了确保在最大化利润的同时成功竞标,发电公司(GENCOs)需要一种能够应对各种情景的自主调度策略。因此,分布鲁棒优化(DRO)是一个不错的选择,因为它可以为GENCOs在不确定环境中提供可调整的自主调度策略,相比于来自分布鲁棒优化和随机优化的策略,可以更好地平衡鲁棒性和经济性。本文提出了一种新颖的基于矩的DRO模型,其中包含条件风险值,用于解决电价不确定性下的自主调度问题。模型的规模主要取决于系统规模,随着系统规模的增加,计算负担急剧增加。针对这一缺点,提出了两种有效的近似模型:一种基于向量分割的近似模型(DRA-VS),另一种基于交替方向乘子法的近似模型(DRA-ADMM)。这两种模型都能够大大减少计算时间和资源,同时确保解的质量,而DRA-ADMM在解的每一步只需要当前区域的信息,因此私密信息得到了保障。对三个IEEE测试系统进行了仿真,以证明所提出的DRO模型和两个近似模型的正确性和有效性。

在日前或实时电力能源市场中,为了最大化发电利润,发电公司(GENCOs)通常需要根据自主调度策略生成投标方案,该策略通常是通过解决基于分区边际价格的利润最大化最优功率流模型得到的[1],[2]。投标方案应采用适当的自主调度策略,以便独立系统运营商(ISOs)接受。Conejo等人[2]提供了一个框架,用于解决基于价格预测的价格接受者生产商的最优投标方案。[3]提出了GENCOs的风险测量和管理的确定性解决方案。此外,Yamin和Shahidehpour[4]考虑了同时考虑利润和风险的制定自主调度问题。然而,在这种实时自主调度问题中,准确预测价格很困难,这导致了不确定性。因此,已经提出了一种基于模糊数的风险管理方法来模拟[5]中的价格不确定性。与此同时,随着电力能源市场的发展,引入了越来越多的不确定性变量以帮助模型更好地描述实际情况。在这种不确定环境中,获得适当的自主调度策略的目标引起了学者和工程师的关注[6]。在过去的几十年中,解决具有不确定性变量的这种问题的主要方法有两种:鲁棒优化(RO)和随机优化(SO)[7]。RO构建一个不确定性集,在该集合中所有不确定性变量都包含在内。通过优化不确定性集中的最坏情况,可以保证调度方案的鲁棒性[8]。SO使用诸如平均采样逼近和随机逼近等方法来获得不确定性变量的分布,并始终假设分布是真实的[9],[10]。然而,上述两种方法都有一些缺点:RO提供了针对最坏情况的安全性,但在实践中它总是生成一个过度保守的自主调度策略,因为它忽略了不确定性变量的潜在分布信息。SO总是假设不确定性变量的分布是已知的,但实际应用中假定的分布可能不准确,导致生成了不正确的策略[7],[11]。

本文的主要贡献总结如下:

1. 我们提出了一种基于矩的分布鲁棒优化(DRO)模型结合条件风险值(DR-CVaR),为发电公司在价格不确定的情况下提供了一种可调节的发电自主调度策略。与鲁棒优化(RO)和随机优化(SO)相比,DR-CVaR在不确定环境下更全面地考虑了各种参数(不确定变量、置信度水平、负荷需求等)。因此,决策者可以根据实际情况通过调整模糊集的大小和置信度水平来调整鲁棒性和经济性的比例;模糊集越紧,策略越激进。根据模拟结果,DR-CVaR可以合理地提高发电利润。

2. 使用向量分割和主成分分析(PCA)将敏感的DR-CVaR模型转化为近似的DRA-VS模型。当系统和数据规模增加时,DR-CVaR的求解时间会迅速增加,因此我们通过向量分割和PCA将DR-CVaR转化为DRA-VS。我们可以使用PCA通过低维度矩阵来近似高维度矩阵。同时,向量分割可以减少半定矩阵的维度,从而降低半定规划求解的负担。因此,DRA-VS可以通过常用的商业求解器稳定且快速地求解,同时保持高质量的求解结果。模拟结果表明,DRA-VS模型在获得与最优解的差距不超过0.9%的情况下,可以显著减少计算时间。

3. 为了进一步缩短大规模系统的计算时间,同时实现信息隐私保护,我们通过根据物理区域进一步划分提出了DRA-ADMM。它使用一种分布式方法进行求解,只需公开相邻区域之间的公共边界信息。每个区域可以在不依赖其他区域信息的情况下并行计算,因此DRA-ADMM在实际应用中具有更大的价值,因为信息隐私得到了保障。

本文的其余部分组织如下。第二部分介绍了自主调度问题的公式。第三和第四部分分别提出了不确定性自主调度的DRO框架和DR-CVaR模型的两种近似方法。第五部分给出了所提出的DRO模型和两种近似模型在IEEE 6、30和118母线测试系统上的模拟结果。最后,第六部分总结了本文。

📚2 运行结果

部分代码:

T = SCUC_data.totalLoad.T;  % 时段数T
G = SCUC_data.units.N;      % 发电机数
N = SCUC_data.baseparameters.busN;  % 节点总数

all_branch.I = [ SCUC_data.branch.I; SCUC_data.branchTransformer.I ]; %所有支路起点 前是支路起点 后是变压器支路起点
all_branch.J = [ SCUC_data.branch.J; SCUC_data.branchTransformer.J ]; %所有支路终点
all_branch.P = [ SCUC_data.branch.P; SCUC_data.branchTransformer.P ]; %支路功率上限

beta_CVaR = 0.99;

% 形成直流潮流系数矩阵B
type_of_pf = 'DC';
Y = SCUC_nodeY(SCUC_data,type_of_pf);
B = -Y.B; %因为是直流方程 所以B忽略了电阻 只考虑电抗

% 定义一些方便用的常量
diag_E_T = sparse(1:T,1:T,1); %T*T的对角阵,对角线全1
low_trianle = diag_E_T(2:T,:) - diag_E_T(1:T-1,:); 

% 定义变量y                               
for i=1:N    % 逐 个 处理每个节点   
    if ismember(i, SCUC_data.units.bus_G)    % 如果是发电机节点 决策变量包括 功率,相角,功率约束z
        y{i}.PG = sdpvar(T,1); %sdpvar创建实数型决策变量
        y{i}.theta = sdpvar(T,1);
        y{i}.z = sdpvar(T,1);
    else
        y{i}.theta = sdpvar(T,1);
    end
end


cons = [];  % 所有的约束集合

% 按照节点开始建立各类约束
% 直流潮流不等式 每个循环构造T行不等式,总的构造了N*T个不等式
for i = 1:N  
    %构造中间项
    cons_PF = sparse(T,1); %一个t一个约束 T行约束
    if ismember(i, SCUC_data.units.bus_G) %如果i是发电机节点,则中间项应该加上PG
        cons_PF = cons_PF +  y{i}.PG;
    end
    for j = 1:N
        cons_PF = cons_PF -B(i,j) .* y{j}.theta;
%         if ismember(j, SCUC_data.units.bus_G) && j == i   % 如果是发电机节点 所在的对角子矩阵位置
%             cons_PF = cons_PF +  y{j}.PG;
%         end
    end
    
    %构造右侧项
    %find函数返还的是下标号
    index_loadNode = find(SCUC_data.busLoad.bus_PDQR==i); % 节点i是否为负荷节点
    if index_loadNode>0
        b_tmp = SCUC_data.busLoad.node_P(:,index_loadNode); %按下标取出该负荷节点负载
    else
        b_tmp = sparse(T,1);
    end
    cons = [cons, ...
        0 <= cons_PF <= b_tmp     ];
        
end
% end of 直流潮流不等式


% 参考节点
%每个模型都只设定第一个节点为参考节点?
cons = [cons, ...
    y{1}.theta == sparse(T,1)      ];  
% end of 参考节点


% 处理发电机节点约束
for i = 1:G
    bus_index_Gen = SCUC_data.units.bus_G(i);
    % 机组出力上下界
    cons = [cons, ...
        SCUC_data.units.PG_low(i) * ones(T,1) <= y{bus_index_Gen}.PG <= SCUC_data.units.PG_up(i) * ones(T,1)     ];
    
    % 爬坡 Pup和Pdown相等 且不考虑P0
    cons = [cons, ...
        -SCUC_data.units.ramp(i) * ones(T-1,1) <= low_trianle * y{bus_index_Gen}.PG <= SCUC_data.units.ramp(i) * ones(T-1,1)  ];
    
    % 发电费用线性化
    for l = 0:(L-1)

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值