(文章复现)《高比例清洁能源接入下计及需求响应的配电网重构》

简介:         配电网重构作为配电网优化运行的手段之一,通过改变配电网的拓扑结构,以达到降低网损、改善电压分布、提升系统的可靠性与经济性等目的。近年来,随着全球能源消耗快速增长以及环境的日趋恶化,清洁能源飞速发展,分布式电源(Distributed Generator, DG)大量接入配电网中。DG 因其随机性和波动性,大量接入给配电网带来巨大冲击,也给配电网重构带来严峻的挑战,因此有必要研究适用于高比例清洁能源接入下的配电网重构方法。本文在高比例清洁能源接入的背景下,提出计及需求响应的配电网重构模型,有效利用需求响应进一步降低配电网重构费用并减少弃风弃光率,提高配电网对清洁能源的消纳能力。

 1.引言

       配电网重构作为配电网优化运行的手段之一,通过改变配电网的拓扑结构,以达到降低网损、改善电压分布、提升系统的可靠性与经济性等目的。近年来,随着全球能源消耗快速增长以及环境的日趋恶化,清洁能源飞速发展,分布式电源(Distributed Generator, DG)大量接入配电网中。DG 因其随机性和波动性,大量接入给配电网带来巨大冲击,也给配电网重构带来严峻的挑战,因此有必要研究适用于高比例清洁能源接入下的配电网重构方法。本文在高比例清洁能源接入的背景下,提出计及需求响应的配电网重构模型,有效利用需求响应进一步降低配电网重构费用并减少弃风弃光率,提高配电网对清洁能源的消纳能力。在求解算法方面,本文基于混合整数二阶锥规划对配电网重构模型进行求解,针对配电网重构的非凸模型,通过引入中间变量并对配电网重构模型进行合理二阶锥松弛,获得混合整数凸规划模型并进行求解。

2.原理介绍

2.1目标函数

       以提高清洁能源的消纳率、减小配电网的运行成本为目标,本文在高比例清洁能源接入背景下提出了考虑需求响应的配电网重构模型。该模型的目标函数为配电网综合运行成本最小,其中考虑了网损成本、弃风弃光成本以及分段开关操作惩罚成本。目标函数的计算方法如式(1)所示。

image.gif

image.gif

image.gif

2.2约束条件

①.潮流约束:

这篇文章采用了极坐标形式描述节点电压功率平衡约束,比较少见。而且功率平衡表达式存在问题,只有节点功率而没有将负荷与电源功率分开。因此我们采用通常的做法,是使用DistFlow模型约束系统潮流:

image.gif

image.gif

②.节点电压约束

在进行配电网重构时,配电网中节点电压需要满足上下限约束,即

image.gif

③.支路电流约束

image.gif

④.DG功率约束

image.gif

⑤.网络结构约束

image.gif

       原文中的公式(9)存在一定的问题,采用虚拟潮流约束还需加上虚拟电源,不然无法平衡。

⑥.储能约束

image.gif

image.gif

⑦.电容器约束

image.gif

⑧.需求响应约束

image.gif

3.文献中的问题分析

3.1 参数取值不全

       文献中部分参数的取值没有提供,代码里参考其他文献给这些参数设定了值:

       网络损耗成本系数c1为1元/kWh、弃风弃光惩罚系数1.2元/kWh,c2为以及分段开关操作惩罚成本系数c3为15元/次;

       支路最大电流设定为2pu,节点电压上下限分别设定为1.06和0.94;

       储能充放电功率上限值设定为0.2MW,容量上下限分别设定为0.15/0.8MWh,充放电效率分别为0.9/0.85,初始荷电状态设定为0.3MWh;

3.2 潮流约束不正确

       文献中没有给出潮流平衡约束,式(5)中只有节点功率表达式,而且没有和节点负荷、支路功率以及电源输出功率相关联,无法实现功率平衡。为了模型求解,我在代码里使用的是最常用的二阶锥松弛后的DistFlow潮流约束。详细介绍可以参考我的之前的博客:

基于混合整数二阶锥(MISOCP)的配电网重构(附matlab代码)

       另外,虚拟潮流约束中,漏了虚拟电源,同样无法实现功率平衡(只有负荷和支路功率,没有电源咋平衡),在代码中同样需要加上。

3.3 需求响应模型描述不清

       文献对需求响应约束进行描述时,没有解释变量ρi,t的含义,导致模型难以理解,对此我是这样理解的:

       变量ρi,t代表没有实施需求响应之前的电价,是一个固定值。实施需求响应后,电价由固定值改为分时电价,负荷高峰期电价很高,平时段电价一般,谷时段电价较低,所以就可以引导一些负荷从高峰段转移到谷时段用电,达到降低负荷峰谷差的目的。初始固定电价没有提供,我在代码里假设为0.35元/kWh。

       另外,式(15)也存在一定问题。假设调度时段为一天,T=24,这个公式的含义是一天内系统全部节点的在所有时间内的负荷总量保持不变。这么写似乎负荷不仅可以在时间上转移,还能在空间上转移,从一个节点转向另一个节点,显然是不太合理的。需求响应负荷应该只有在时间上转移的特性,所以公式(15)正确表达形式应该是:

image.gif

3.4 算例信息描述不清

       文献采用改进的IEEE33节点系统,但是光伏和风机的额定容量,电容器组的可接入位置都没说清楚。算例中提供了新能源的渗透率信息,我在代码中假设所有DG的额定容量都相同,那么就可以求出DG的额定容量=系统总负荷量×新能源渗透率/DG数量。算例图中好像在节点33处画了电容器,所以我假设电容器组接在节点33处,单个电容器无功补偿容量为0.15Mvar,节点最大可投切电容器数目为5。

4.部分Matlab代码

       由于该问题的数学模型是一个大规模的混合整数二阶锥规划问题,我测试了cplex和gurobi,收敛精度为0.01的情况下,两个求解器分别需要6小时和3小时左右才能求出最优解。收敛精度同样是0.01,mosek求解器20分钟左右即可求出最优解。其中部分matlab代码如下:

%% 清除内存空间
clc
clear
close all
warning off
%% 系统参数
mpc = IEEE33;
% 风光负荷曲线
P_wind0=[0.21 0.07 0.11 0.21 0.38 0.42 0.12 0.19 0.22 0.47 0.55 0.71 0.80 0.99 0.89 0.99 0.99 0.98 0.99 0.99 0.98 0.77 0.61 0.19];
P_pv0=[0 0 0 0 0.17 0.24 0.40 0.54 0.60 0.51 0.35 0.29 0.27 0.25 0.18 0.10 0.06 0 0 0 0 0 0 0];
P_L0=[0.37 0.33 0.31 0.28 0.27 0.28 0.28 0.27 0.26 0.24 0.30 0.76 0.82 0.86 0.76 0.54 0.43 0.65 0.81 0.95 0.99 0.91 0.65 0.19];
nb=33;                                      % 节点数
ns=1;                                       % 电源节点数
nl=37;                                      % 支路数
n_pv=2;                                     % 光伏数
n_wind=3;                                   % 风机数
n_ess=2;                                    % 储能数
T=24;                                       % 调度时段总数
F=0.6;                                      % 渗透率
P_DG=sum(mpc.bus(:,3))*F/mpc.baseMVA/5;     % DG额定容量
P_wind_max=P_DG*P_wind0;                    % 风机最大有功
P_pv_max=P_DG*P_pv0;                        % 光伏最大有功
P_load=mpc.bus(:,3)/mpc.baseMVA*P_L0;       % 有功负荷
Q_load=mpc.bus(:,4)/mpc.baseMVA*P_L0;       % 无功负荷
r_ij=mpc.branch(:,3)*ones(1,T);             % 线路电阻
x_ij=mpc.branch(:,4)*ones(1,T);             % 线路电抗
wind=[9 25 32];                             % 风机接入位置
pv=[17 22];                                 % 光伏接入位置
ess=[7 25];                                 % 储能接入位置
Umax=[1;1.06*1.06*ones(32,1)];              % 电压上限的平方
Umin=[1;0.94*0.94*ones(32,1)];              % 电压下限的平方
I_max=2;                                    % 电流上限值
P_ch_max=0.2/mpc.baseMVA;                   % 充电功率上限0.2MW
P_dis_max=0.2/mpc.baseMVA;                  % 放电功率上限0.2MW
E_min=0.15/mpc.baseMVA;                     % 储能容量下限0.15MWh
E_max=0.8/mpc.baseMVA;                      % 储能容量上限0.8MWh
n_ch=0.9;                                   % 充电效率为0.9
n_dis=0.85;                                 % 放电效率为0.85
E0=0.3/mpc.baseMVA;                         % 初始荷电状态为0.3MWh
Q_CB_st=0.15/mpc.baseMVA;                   % 单个电容器无功补偿容量0.15Mvar
N_CB_max=5;                                 % 最大可投切电容器数目
ksai=0.5;                                   % 弹性系数
c1=1;                                       % 网络损耗成本系数1元/kWh
c2=1.2;                                     % 弃风弃光惩罚系数1.2元/kWh
c3=15;                                      % 分段开关操作惩罚成本系数15元/次
rho=zeros(1,24);                            % 分时电价
rho([12:15,19:23])=1.026;                   % 峰时电价
rho([7:11,16:18])=0.691;                    % 平时电价
rho([1:6,24])=0.2561;                       % 谷时电价
rho0=0.35;                                  % 初始节点电价为0.35元/kWh
M=1.1*1.1 - 0.9*0.9;                        % 中间变量                   
P_g_max=10/mpc.baseMVA;                     % 电源有功功率最大值
Q_g_max=10/mpc.baseMVA;                     % 电源无功功率最大值
branch_to_node=zeros(nb,nl);                % 流入节点的支路
branch_from_node=zeros(nb,nl);              % 流出节点的支路
for k=1:nl
    branch_to_node(mpc.branch(k,2),k)=1;
    branch_from_node(mpc.branch(k,1),k)=1;
end
%% 优化变量
alpha_ij=binvar(nl,1);                      % 支路开断情况
U_i=sdpvar(nb,T);                           % 电压的平方
I_ij=sdpvar(nl,T);                          % 电流的平方
P_ij=sdpvar(nl,T);                          % 线路有功功率
Q_ij=sdpvar(nl,T);                          % 线路无功功率
P_wind=sdpvar(n_wind,T);                    % 风机输出功率
P_pv=sdpvar(n_pv,T);                        % 光伏输出功率
Q_wind=sdpvar(n_wind,T);                    % 风机输出功率
Q_pv=sdpvar(n_pv,T);                        % 光伏输出功率
P_ch=sdpvar(n_ess,T);                       % 储能充电功率
P_dis=sdpvar(n_ess,T);                      % 储能充电功率
y_ch=binvar(n_ess,T);                       % 储能充电状态
y_dis=binvar(n_ess,T);                      % 储能放电状态
E_ESS=sdpvar(n_ess,T);                      % 储能荷电状态
N_CB=intvar(1);                             % 投切的电容器数量
P_cur=sdpvar(nb,T);                         % 需求响应后的负荷量
P_g=sdpvar(nb,T);                           % 节点注入有功
Q_g=sdpvar(nb,T);                           % 节点注入无功
P_g_dot=sdpvar(nb,1);                       % 虚拟电源
P_L_dot=ones(nb,1);                         % 虚拟负荷
P_ij_dot=sdpvar(nl,1);                      % 虚拟功率
%% 约束条件
Constraints = [];
。。。。。。省略
%% 目标函数
g1=c1*I_ij.*r_ij*10000;
g2=c2*(sum(ones(n_pv,1)*P_pv_max-P_pv)+sum(ones(n_wind,1)*P_wind_max-P_wind))*10000;
g3=c3*abs(alpha_ij-[ones(32,1);zeros(5,1)]);
objective=sum(g1(:))+sum(g2)+sum(g3);
%% 设求解器
ops=sdpsettings('verbose', 3, 'solver', 'MOSEK','cachesolvers',1);
ops.mosek.MSK_DPAR_OPTIMIZER_MAX_TIME=600;% 运行时间限制为10min
ops.mosek.MSK_DPAR_MIO_TOL_REL_GAP=0.01;% 收敛精度限制为0.01
sol=optimize(Constraints,objective,ops);
%% 分析错误标志
if sol.problem == 0
    disp('求解成功');
else
    disp('运行出错');
    yalmiperror(sol.problem)
end
%% 各项费用计算
cost_all=value(objective); 
cost_pv=value(sum(c2*(sum(ones(n_pv,1)*P_pv_max-P_pv)))*10000);
cost_wind=value(sum(c2*(sum(ones(n_wind,1)*P_wind_max-P_wind)))*10000);
cost_loss=value(sum(g1(:)));
switch_num=value(sum(abs(alpha_ij-[ones(32,1);zeros(5,1)])));
U_i=sqrt(value(U_i));
%% 结果呈现
show_result;

image.gif

5.代码运行结果与原文献对比

       原文中数据提供不全,所以代码复现结果会有偏差,但原理完全一样,并修改了原文献中笔误的地方。以下所有结果图,均为复现结果在前,原文结果在后。

5.1 图2

image.gif

image.gif

5.2 图3

image.gif

image.gif

5.3 表1

image.gif

image.gif

5.4 图4

image.gif

image.gif

5.5 图5

image.gif

image.gif

5.6 图6

image.gif

image.gif

5.7 表2

image.gif

image.gif

5.8 图7

image.gif

image.gif

5.9 图8

image.gif

image.gif



相关文章
|
弹性计算 NoSQL 关系型数据库
又降价啦!2024年阿里云核心产品价格全线下调,最高幅度达55%
2024年3月1日开始,阿里云将开启新一轮的降价政策,核心产品价格全线下调,平均降幅20%,最高幅度达55%,阿里云希望通过此次大规模降价,让更多企业和开发者用上先进的公共云服务,加速云计算在中国各行各业的普及和发展。
又降价啦!2024年阿里云核心产品价格全线下调,最高幅度达55%
|
机器学习/深度学习 人工智能 自然语言处理
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
760 0
鲁棒优化入门(二)——基于matlab+yalmip求解鲁棒优化问题
鲁棒优化的含义就是在最恶劣的情况下(不确定变量的取值使目标函数最大),求出满足约束条件,并且能使目标函数最优的决策变量。 yalmip工具箱可以用来求解鲁棒优化问题,但还是有一定局限性的,并不能处理任意形式的不确定集下的鲁棒优化问题,一般来说,当鲁棒优化问题的不确定集合为箱型不确定集、椭球不确定集以及多面体不确定集时,都可以用yalmip工具箱求解(具体细节可参考官方文档)。本文介绍了利用yalmip求鲁棒优化问题的一般方法。......
鲁棒优化入门(三)——鲁棒优化工具箱RSOME快速上手与应用实例
本文主要参考RSOME工具箱的用户手册《Users Guide for RSOME》 RSOME的用户手册并不是很长,但一些地方可能不是特别好理解,在这里我主要是通过写博客分享一下我的使用方法,和大家一起学习,也能加深自己的理解。
|
机器学习/深度学习 算法 调度
深度学习|改进两阶段鲁棒优化算法i-ccg
深度学习|改进两阶段鲁棒优化算法i-ccg
|
10月前
|
存储 弹性计算 网络协议
深度对比阿里云服务器ECS通用型g7、g7a、g8i、g8y、g8ise和g8a性能对比
阿里云ECS通用型g7、g7a、g8i、g8y、g8ise和g8a云服务器性能对比,涵盖CPU、内存、网络、存储等多方面参数。这些实例适用于多种企业级应用场景,如数据库、Web应用、大数据处理等。
638 3
|
程序员 编译器 Go
常见的go语言十大注意事项
【6月更文挑战第18天】本文记录 Go语言常见问题概览,包括运行风险, 空值对比 ,级数计算,Channel使用,结构体嵌套检测,面向对象限制,for循环陷阱,ABI调用,可变参数,数组传递,map遍历,返回值屏蔽 ,recover用法,Goroutine管理,CPU独占,并发一致性,闭包引用,循环defer,切片内存管理
205 3
常见的go语言十大注意事项
|
存储 算法 新能源
储能运行约束的Matlab建模方法
储能运行约束的matlab建模方法,分别使用引入一组0-1变量,引入两组0-1变量,以及智能优化算法中的简化表示对储能的运行进行建模。 使用一个风光储系统的实际算例验证了三种方法的有效性: 某地有一个风-光-储互补系统,某一天中风电、光伏出力以及负荷需求都是已知的,现在需要控制储能的充放电策略,尽可能降低负荷短缺以及弃风弃光的现象。其中,储能系统的额定容量为40MW,额定功率为20MW,充放电效率分别为0.95和0.96,最大和最小荷电状态分别为15%和90%,初始荷电状态为30%
储能运行约束的Matlab建模方法
基于蒙特卡洛的电力系统可靠性分析matlab仿真,对比EDNS和LOLP
电力系统可靠性评估研究,聚焦于LOLP(电力不足概率)和EDNS(期望缺供电量)的模拟分析。使用MATLAB2022a进行基于蒙特卡洛的仿真,模拟单线及多线故障,分析连锁效应。程序中通过随机断开线路,计算潮流,判断越限并用PSO优化。结果显示,LOLP和EDNS增加时,故障概率降低,但小概率大影响事件概率上升。以IEEE24-RTS系统为案例,考虑元件失效的马尔科夫过程,不考虑3个及以上元件失效情况,因为可能导致系统大规模崩溃。仿真步骤包括随机线路断开、故障分析和稳定性评估,涉及信息节点概率计算、潮流计算及优化决策。
|
算法 调度
【完全复现】基于改进粒子群算法的微电网多目标优化调度
该文档描述了一个使用改进粒子群算法实现的微电网多目标优化调度的Matlab程序。该模型旨在最小化运行成本和环境保护成本,将多目标问题通过权值转换为单目标问题解决。程序中定义了决策变量,如柴油发电机、微型燃气轮机、联络线和储能的输出,并使用全局变量处理电负荷、风力和光伏功率等数据。算法参数包括最大迭代次数和种群大小。代码调用了`PSOFUN`函数来执行优化计算,并展示了优化结果的图表。

热门文章

最新文章