分布式电源对配电网故障定位的影响(Python代码实现)

简介: 分布式电源对配电网故障定位的影响(Python代码实现)

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()


相关文章
|
6天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
9天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
5天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
13 1
|
6天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
8天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
18 2
|
1月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
112 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
8天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
42 16
|
1月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
59 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁

热门文章

最新文章