基于系统仿真和机器学习的电网故障定位检测
Patrice Brunelle,魁北克水电公司
MathWorks和Hydro-Québec探索了如何使用系统模拟和机器学习来开发算法,这些算法可以使用电压凹陷测量来检测电网故障的位置。系统模拟用于生成综合故障数据,这些数据涵盖了比单独测量数据更广泛的运行范围。然后,合成的数据用于训练机器学习分类算法。您将了解如何使用分类算法的性能来进一步深入了解系统的物理行为以及与训练数据相关的任何限制。您还将了解如何从这种见解中提出建议,以增强系统测量和训练数据集,以提高整体分类的准确性。
你好,每个人。我叫Graham Dudgeon,是MathWorks电气技术部门的首席产品经理。今天和我一起来的是Patrice Brunelle,他是魁北克水电研究所IREQ的首席科学家。嗨,帕特里斯。你好吗,我的朋友?
我很好。谢谢,格雷厄姆。我很高兴今天能和你谈话。
在这次演讲中,Patrice和我将讨论如何使用系统模拟和机器学习来开发算法,从而通过电压跌落测量来检测电网故障的位置。Patrice将首先介绍故障定位检测的一些背景知识,我们将讨论魁北克水电公司在这一领域的一些举措。Patrice随后将描述所研究的系统,并讨论如何配置仿真模型以在多个位置生成故障数据。
然后Patrice树将传递给我,我将讨论Classification Learner的使用,它是统计和机器学习工具箱的一部分,用于训练和评估机器学习算法。接下来,我将看看分类算法的结果,它可以帮助指导我们对可能需要哪些额外的测量来改善整体结果提出建议。然后,我将探讨减少的数据集如何影响分类算法的准确性。这有助于指导我们需要多少数据才能提供准确的分类,以及如果我们使用减少的数据集进行训练,可能存在哪些限制。然后我们将以总结结束。
我想从设置故障定位检测背后的一些上下文开始。显然,能够准确地确定故障的位置具有很高的操作价值。有了精确的位置,系统操作员可以采取明确的行动,更有效地派遣维护人员。魁北克水电公司在发展先进的故障定位和基于条件的维护能力方面有着悠久的历史。
MILES项目就是一个例子。英里,代表线路上的维护和调查。使用MILES,可以在关键位置进行电压测量,并开发对数,仅根据这些测量结果对故障位置进行三角测量。我们在右边看到的图像显示了MILES故障定位器的一个示例,用于估计实际故障。
MILES算法基于电力系统工程理论。和世界各地的许多公用事业公司一样,魁北克水电公司正在探索机器学习可以为运营监控提供补充能力和增强能力的领域。这就是为什么我们很兴奋地在一个有代表性的问题上使用MathWorks探索这种功能。
正在调查的系统是一个径向配电网,它是MILES项目使用的系统的代表。仿真结果已在实际系统中得到验证。因此,我们有很高的信心,模拟故障响应将代表实际响应。
在本研究中,有五个电压测量位置用绿色表示。我们选择了38个不同的位置来应用断层。对于每个伏的位置,我们使用288相电阻和中性电阻的组合。这样做是为了生成超过10,000个故障场景,特别是38个故障位置,每个位置288个故障场景——结果超过10,000个故障场景。
为什么我们要设定这么多的场景?对于机器学习来说,通常数据越多越好。1万似乎是一个合理的目标。当然,如果需要的话,我们可以生产更多。
我还应该指出,我们生成的是正常数据,即来自模拟的数据,其中没有应用故障。我们只改变载荷值,在每个载荷上使用正态分布。现在我将切换到MATLAB,向您展示我们用于生成仿真数据的模型和脚本。
让我们首先来看看我们在Simscape Electrical的专业电力系统中开发的仿真模型。配电网通过电网与配电变压器相连。这是一条超过15公里的三相线路,我把它分成了三部分,每部分5公里,还有一个两相的分支。
所以我标记了所有的块,L1 L2 L3 L4。也有一些单相配电馈线接入网络。我有6个。我标记L1阶段1。我们还有一个母线来测量模型中五个位置的电压和电流。它们被标记为B1 B2 B3 B4。我们在这里收集所有的信号。对于每一个折线,我们都要测量它的正、负、零序列。我们在一次输出中收集所有信号。
让我们快速浏览一下三相体系。你看,我用这个方块把它分成了1千米的部分。这就是我们指定直线参数的地方。这样我就可以访问直线上的5到6个点。这样我就可以在这里放一个错误。
目的是有故障块,我可以为各种故障类型和故障阻抗编程。这样我就可以设置这个block,然后脚本会沿着我们之前看到的所有位置移动它。因此,它将允许我在我之前提到的38个位置应用断层。当然,这也适用于单相线。
现在,让我们看一下用于生成模拟数据的脚本。全屏显示。开始吧。
这是我指定通用通用参数的地方,在这里我定义了错误的类型。现在,我将只编程一个AB接地故障与专用参数。在这里,我列出了我的模型中所有的10行,我将使用我们以后可以使用的特殊标签应用故障。
在这里,我们可以指定直线。在这个模拟中,我们假设只有1和5。所以单相线和两相线,只是给你们展示一下原理。在此之后,对于列表中的每一行,我们将把整个块添加到其中。我会做一些分析,这取决于我们是做三相正转还是单相故障,我必须相应地设置块,如果我们往下看每个部分,每个插入点,我会做一条硬线,所以我会把整个块连接到我想做默认的位置,对于每个照片位置,错误r相位和r中性值。
这就给了我很多错误——典型的错误——这个错位。那么下一步,我们来看看。这里,让我们模拟一个,来告诉你们原理。模拟的时候我们会快一点。然后下一步是启动模拟。并且在模拟完成后,将模拟的数据保存在一个表格中,这样在模拟完成后就可以使用了。
现在,我们开始吧。哦,有一个站。让我们继续。您应该看到完整的块出现在这个子系统中。这是L1线。开始吧。它连接到第一个点,我想从这里对折。模型正在编译,模拟,然后我将进入下一节,做同样的设置,应用折叠,收集提交数据,等等。我让它运行这一行的剩余部分。
我们现在开始提交第4次。一旦我们用完L1线,你就自动关闭它,然后打开单相线。这里也是一样。我在做add block,我在第一个位置应用错误,然后模拟,得到结果,然后到下一个位置。
还有两个模拟,这一个和最后一个。好的。现在我们来看MATLAB命令。您可以在这里看到故障位置和生成的数据表。
让我们快速浏览一下模拟结果。例如,我做的第一个,总线B1上的第一个故障,年份ID ABC相位大小,只是向你们展示我正在计算和得到的序列参数。再看看我上次在同一辆车上做的模拟。
现在我将把话题转回Graham,他将讨论如何使用机器学习工具。
谢谢你,帕特里斯。因此,一旦故障数据生成后,我们将其组织在MATLAB表格中。该表包括每个总线电压测量的序列数据和故障分类。我们在这里看到的示例仅显示了几个数据点,用于说明目的。我们有一个序列数据的幅度和角度,以及断层分类。
对于这个示例,我们生成了超过10,000个场景的数据。分类学习器是一个用户界面,在机器学习工具箱中提供统计数据。我马上要打开分类学习器,我可以向你们展示它的一些功能。我要指出的是,我不会给出一个全面的概述,所以在我展示的内容之后,如果您想了解更多信息,我建议您参考文档。
我要做的第一件事是加载数据集并调用分类学习器。我在这里使用项目,所以我可以组织我的文件和创建快捷方式来帮助我更好地管理我的工作流程。我要点击获取原始训练数据。它要做的就是加载数据,然后调用分类学习器。
如果您想了解更多关于项目的信息,请参阅文档。我将把分类学习器展开到全屏。
在Classification Learner中,我首先启动一个新会话并从工作区加载数据。在这个例子中,我的数据在MATLAB表格中。现在,它是工作区中唯一的变量,所以它会自动选择这个变量。如果您的工作空间中有多个数据集变量,您可以选择。在这种情况下,我不需要这样做。您将看到数据是自动传递的,默认列基本上是分类的,有39个独特的分类。我将提醒我们的38个故障位置和一个正常分类。
因为它本质上是分类的,分类学习器自动地将错误作为响应数据。选择数据表T中的其他变量作为预测因子。当然,现在你可以控制。如果分类没有得到正确的信息,你可以适当地选择,但在这种情况下,他确切地知道我想做什么。
我们现在要做的是选择我们想要验证的东西。有两种选择——交叉验证(使用统计方法将数据分离为训练和测试集)或保留验证(保留一定百分比的数据用于测试,然后使用剩余数据进行修整)。
我们将继续使用默认设置,即使用带有五个错误的交叉验证。然后单击Start Session。您可以看到,我们已经默认为散点图,在这种情况下,它显示了正序列的总线1电压大小。负极序列实际上有总线1的电压大小。
在这里我想提出几点看法。首先,正常运行,没有故障,但我们改变了负载值,它似乎非常干净。实际上就是右下角的这个小区域。如果我向下滚动到正常的类。是红色的那个。如果我悬停在。然后我们会得到一些关于被选中的数据点的信息。你可以看到,这是正常班级。
所以我们可以看到,正常的行为是非常干净的,因为我们有一个紧密的分布,我们没有看到任何重叠与任何故障,条件。在这种情况下,我们认为正常操作是很容易被归类的。第二个观察结果是,虽然我们可以在故障数据上看到模式,但我们也看到了数据点的重叠,这意味着通过传统工程分析进行分类将具有挑战性。
现在让我们把这些数据展示给机器学习算法,看看我们能实现什么。我总是从选择所有快速训练开始。它会选择一些机器学习算法,对于我展示的数据,这些算法会在相对较短的时间内进行训练。如果我然后选择训练,如果安装了并行计算工具箱,这将自动调用并行池,这将允许训练算法受益于多个核心。
现在我们可以看到在训练过程中有很多不同的算法。我们只讲几个。正如你所看到的,当他们完成时,准确度就会提高。最好的模型会用白色方框突出显示。现在我们的准确率是67.9%我们让它再运行一段时间,这样可以做得更好。精细kNN为75.9%,中等kNN为80.6。这很好。所以我们能做的是,当其他人都在等待完成训练时,这是我们目前为止最好的一个。
那么80.6%是什么意思呢?为了更深入地了解这个数字,我们可以查看混淆矩阵。我们到这里,选择混淆矩阵。混淆矩阵向我们展示了训练数据在训练分类器上的表现。我们看到我们有真实等级和预测等级。如果我们有一个完美的分类器,我们会在这个矩阵上只看到对角线项,我们也会对结果有一点怀疑。
完美的训练数据分类,命名你的开销分类算法或你有一些数据质量问题。在这种情况下,我们可以看到一些区域有明显的非对角线模式,在分类中,看看与训练集相关的数字,我们可以看到这里有很多与L1 PH3和L1 PH2相关的数字,这里也有L1 PH5和L1 PH5相关的数字。因此,分类器很难区分L1 PH2和L1 PH3上的错误,也很难分类L1 PH4和L1 PH5上的默认值。
这个问题迫使我们回到物理系统,并确定是否有物理特征促成了这个结果。让我们考虑一下系统发生了什么。我们所测量的电压都来自于上游的分叉线路。分叉线包含等效的电气特性。
这意味着如果在分叉上发生故障,例如在这个示例中的位置F1的例子。然后用电恶魔指示的电压测量,虽然它可以检测到故障,但它不能区分故障是否在位置。F1或者F2。
让我们再看一下系统模型,这样我就可以向你们展示分叉线。好的。所以我们有L1 PH2和L1 PH3的问题。如果我在L1 PH2下面,看到这里有4段。如果我们到L1 PH3,我们有两个段。但是11 nn的直线,在这里。所以我们确实有一个叉子,它有相同的电特性。因此,这就是为什么我们在L1 PH2和L1 PH3的分类上有困难。
L1 PH4和L1 PH5也是一样。在这个例子中,我们有相同的设置。所以我们把困惑矩阵中比较困难的部分放大一点。所以我们看到了明显的非对角线分类,这是错误的,因为有分叉的线。那么我们能做些什么来改善这种情况呢?
一种解决方案是在分叉的末端进行额外的电压测量。注意,一般来说,我们需要y - 1个额外的测量值,其中y是分叉的数量。所以有了两个分叉,这就是我们系统中的情况,我们只需要一个额外的测量。因此,我们更新了模拟模型,以包括额外的测量,在这种情况下,测量L1 PH2以帮助区分L1 PH2和L1 PH3故障,测量L1 PH4以帮助区分L1 PH4和L1 PH5折叠。
因此,我们现在将加载附加测量值的新数据集,并重新训练分类算法。我们没有对新数据集进行培训。现在,请记住,上次,当我们没有这些额外的测量时,分叉线是一个问题,我们在所有快速训练中得到的最好结果是80.6%。让它通过,看看我们能得到什么。
到目前为止,75%的人都是好树。我们再等几秒钟让一两列火车上来。91.9%。所以我们已经得到了更好的回应,但实践才能证明。我们必须看看混淆矩阵,看看我们是否在帮助解决我们遇到的特定问题。
我选择正kNN或者余弦kNN。它们的准确度是一样的。它们的结果可能略有不同,但我只选一个来看一下。我们来看看混淆矩阵。
我再试一次。实际上我们有三个结果是一样的。现在它选择了加权kNN。所以我选择它,我们来看看混淆矩阵。
所以我们看不到,你可能还记得当我们研究L1 PH2和L1 PH3的时候我们有一个明显更大的非对角线分量。所以我们有了比以前更好的分类。所以对L1 PH2和L1 PH4的额外测量的引入帮助我们实现了更高水平的准确性。这也有助于建立我们的信心,我们所看到的效果确实是由分叉线引起的。
我在这里再强调几点。我只用所有的速成训练。但是有了分类学习器,你可以使用更广泛的模型。你可能会想看一下支持向量机。万博1manbetx我通常使用二次支持向量机,因为我发现它们更准确。万博1manbetx但他们需要更长的时间来训练。所以我在这个演讲中没有训练它,因为它确实需要更长的时间。但通常你会看到更准确的。
另一点是,当你有一个训练好的模型时,你可以按Export model,然后你可以为你的模型选择一个名字,然后点击OK。然后进入MATLAB工作区。你可以看到我们在工作空间中有一个训练过的模型,它也显示了你必须在MATLAB工作空间中调用它。
在接下来的结果中,我将在这个演示中展示我将使用MATLAB脚本来做到这一点。我不打算展示MATLAB脚本,因为它们只是几行代码。在这次演讲中,我更愿意把重点放在结果上。但是我们可以为那些想要仔细研究这些工作流的人提供脚本。
我们将知道只使用边缘情况进行训练。我们这样做的原因是让我们对成功训练分类算法所需的数据类型有一些了解。特别是,我们能否在减少的数据集上获得准确的结果?
我们将考虑三种情况。首先,对仅从一线区段收集的故障数据进行训练。其次,对最后一段采集的故障数据进行训练。第三,对第一部分和最后一部分的故障数据进行训练。我们可以从这里显示的混淆矩阵中看到,我们在提供的数据上得到了非常准确的分类结果。这是意料之中的。
问题是,当来自其他部分的故障数据通过这些模型传递时,分类器将如何响应?我们将看几行来探索这个特定系统发生了什么。让我先给你们介绍一下你们看到的混淆矩阵。让我们关注右边的结果,在第一部分训练过。这意味着除了第1节之外,我们没有任何预测类。这就是为什么,如果你看这里的列,你会看到第2节、第3节和第4节——这些都是空的。这是意料之中的,因为我们没有在这些方面进行训练。
因此,对角线上的结果是最好的,因为我们有这种情况的数据。如果我们在绿框中进行分类,这意味着我们已经确定了正确的长度。例如,我们来看L1 PH4的第二部分。这是真正的类,它没有接受第一部分数据的训练。它被鉴定为L1 PH4 section 1。所以直线是相同的,所以有了这个绿色的方框。对于我们没有训练过的部分,这是我们能做的最好的,至少是把它们分类在正确的线上。
任何超出绿框的东西都意味着我们没有确定正确的线。所以我们可以看到,通过这三种不同的边缘情况,我们并没有得到令人满意的结果。例如,L1 PH4第1节上的故障行为并不包含足够的信息来推断另一个可用的L1 PH4节上的故障可以被确定为属于该行。
这是另一个例子,L1 PH6。这条线只有两个部分,我们可以看到,在最后一个部分上进行训练时,这里的中间响应产生了识别正确直线的准确结果。第一部分的训练是不准确的。因此,当我们看到这些结果以及我在这里没有展示的其他结果时,我们得出的结论是,我们需要在每个线段上进行广泛的虚假场景,以便准确地分类故障位置。这也许并不令人惊讶,但剩下的问题是,我们在线段上需要什么样的粒度级别才能达到可接受的精度级别。
这个问题超出了本文的范围,但是可以通过从仿真模型生成合成数据来探讨。因此,总的来说,这项研究的结果是令人鼓舞的。我们已经证明了分类机器学习算法可以用于对故障位置进行相对较高的精度分类。我们看到分叉线对于上游测量是有问题的。因此,在这种情况下,我们建议在分叉的末端进行额外的测量。
通过这些额外的测量,我们能够在故障定位分类上获得更高的精度。我们还研究了如何处理简化的数据集。我们发现,在这个例子中,只训练第一个和最后一个部分不足以以可接受的精度找到正确的线。这意味着广泛的合成数据对于有效地训练机器学习算法是必要的。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。