分布式电源对配电网故障定位的影响(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()


相关文章
|
22天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
29 6
|
15天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
57 8
|
22天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
45 11
|
19天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
20天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
44 6
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
131 2
基于Redis的高可用分布式锁——RedLock
|
22天前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
64 5
|
25天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
54 8
|
1月前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
58 16