目录
1 概述
人类在日常生活中越来越依赖电力,使用需要电力的设备不再是奢侈品,而是成为必需品。负责向民众提供这种资源的各方必须处理电力的生产、传输和分配问题。尽管过去几十年在电力系统保护方面取得了许多进展,但在提高能源供应服务的连续性方面仍有很大的空间。在配电的背景下,以巴西为例,可以通过配电服务的连续性指标来量化消费者的电力供应质量。国家电能署 (Aneel) 在 [PRODIST 2012] 中提供了其中两个指标,即每用电单位的等效中断持续时间 (DEC) 和每用电单位的等效中断频率 (FEC)。 DEC 是通过在计算期间内,相关用电单位的电能分配服务中断的平均值获得的时间间隔。 FEC 是在所考虑的单位中发生这种不连续性的平均频率。
本文旨在确定分布式光伏发电对径向配电网络故障定位的影响。光伏系统的尺寸针对该电路的穿透限制而定。在 OpenDSS 上执行故障模拟,以获取变电站的电压和电流值。这些结果记录在数据库中并用于训练多层感知器类的神经网络,该网络能够以 90% 的平均成功率确定电路中存在或不存在分布式光伏发电的 6 个可能地理区域之间的故障位置。
1.1 MLP
MLP 是一种分层工作的神经网络。输入层接收问题输入,中间隐藏层执行映射操作,输出层提供输出,如图 1.1 所示。模拟神经元的基本层单元称为感知器。除了感知器,输入层和中间层还有一个偏置节点,用于处理等于 0 的输入。
作为补充,基于 [Goodfellow et al. 2016],MLP 只是一个函数 y = f(x; θ),它使用优化的 θ 参数将输入 x 映射到输出 y。可以说,根据 [Géron 2017] 一书,感知器的工作原理是对其输入进行加权求和,并根据其符号离散化该总和的值,如等式所示
作为补充,MLP 只是一个函数 y = f(x; θ),它使用优化的 θ 参数将输入 x 映射到输出 y。可以说,感知器的工作原理是对其输入进行加权求和,并根据其符号离散化该总和的值,如等式所示:
其中 hw 是感知器的输出,x 是输入值,w 是分配给每个输入的权重,step 是和值的离散化函数,可以是 Heaviside 函数或信号函数。
调整 MLP 权重的方法之一是通过反向传播技术。该机制包括,在确定神经网络的正向权重及其总误差后,反向计算每个权重的误差贡献,提出在每次迭代中总误差较小的新权重。为了使这种方法可行,激活函数,即传统感知器结构中的阶跃函数,必须用平滑函数代替,例如逻辑函数、双曲正切函数或整流线性单位函数(ReLU ),如等式所示:
其中 hw,b(x) 是 ReLU 函数,b 是偏差值。此外,通过计算函数梯度的反向传播方法可以使用随机梯度下降进行优化。
2 目标
本文旨在确定分布式光伏发电对径向配电网络故障定位的影响。光伏系统的尺寸针对该电路的穿透限制而定。在 OpenDSS 上执行故障模拟,以获取变电站的电压和电流值。这些结果记录在数据库中并用于训练多层感知器类的神经网络,该网络能够以 90% 的平均成功率确定电路中存在或不存在分布式光伏发电的 6 个可能地理区域之间的故障位置。总体目标是验证GDFV在配电系统故障定位中的影响。支持主要目标的次要目标是:为配电馈线在其穿透极限下设计不同的光伏系统,并评估其功率流;模拟负荷曲线不同点处配电馈线所有母线的故障。实施能够检测故障并将其分类为类型、电阻和地理位置的算法。
3 python代码实现
3.1 结果展示
3.2 python代码
部分代码:
def plot_5_pv():
ckt24_plot()
substation, = pylab.plot([11735514.42],[3709460.816],'k^',
markersize=10, label='Substation')
pvsyst, = pylab.plot(
[11740361.09,11745683.27,11740622.95,11740594.66,11735219.81],
[3709237.782,3712746.259,3714771.12,3718243.191,3718067.52],
color='orange', marker='s', markersize=10, linestyle='None',
label='PV System')
blue_patch = mpatches.Patch(color='blue', label='Three-phase lines')
green_patch = mpatches.Patch(color='green', label='Two-phase lines')
red_patch = mpatches.Patch(color='red', label='One-phase lines')
pylab.legend(handles=[substation, pvsyst, blue_patch, green_patch,
red_patch])
pylab.title("5 PV systems")
pylab.show()
def plot_5_pv():
ckt24_plot()
substation, = pylab.plot([11735514.42],[3709460.816],'k^',
markersize=10, label='Substation')
pvsyst, = pylab.plot(
[11740361.09,11745683.27,11740622.95,11740594.66,11735219.81],
[3709237.782,3712746.259,3714771.12,3718243.191,3718067.52],
color='orange', marker='s', markersize=10, linestyle='None',
label='PV System')
blue_patch = mpatches.Patch(color='blue', label='Three-phase lines')
green_patch = mpatches.Patch(color='green', label='Two-phase lines')
red_patch = mpatches.Patch(color='red', label='One-phase lines')
pylab.legend(handles=[substation, pvsyst, blue_patch, green_patch,
red_patch])
pylab.title("5 PV systems")
pylab.show()
def plot_5_pv():
ckt24_plot()
substation, = pylab.plot([11735514.42],[3709460.816],'k^',
markersize=10, label='Substation')
pvsyst, = pylab.plot(
[11740361.09,11745683.27,11740622.95,11740594.66,11735219.81],
[3709237.782,3712746.259,3714771.12,3718243.191,3718067.52],
color='orange', marker='s', markersize=10, linestyle='None',
label='PV System')
blue_patch = mpatches.Patch(color='blue', label='Three-phase lines')
green_patch = mpatches.Patch(color='green', label='Two-phase lines')
red_patch = mpatches.Patch(color='red', label='One-phase lines')
pylab.legend(handles=[substation, pvsyst, blue_patch, green_patch,
red_patch])
pylab.title("5 PV systems")
pylab.show()