【故障诊断】动态系统故障诊断的不断演进方法研究(Python代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 第一种故障场景

2.2 第二种故障场景

2.3 第三种故障场景

🎉3 参考文献

🌈4 Python代码、数据、文章


💥1 概述


本文提出了一种使用在线演进方法进行动态系统故障识别的方法论。所提出的方法分为三个阶段:预处理、处理和后处理。我们方法的核心部分是处理过程本身,在这个过程中,我们使用一种名为AutoCloud的在线学习演进算法来对不同类型的故障进行聚类。该提议已经通过在试验规模上进行的实际水平控制过程的数据进行验证。获得的结果表明我们的提议对于动态系统的故障识别是合适的。

介绍
工业过程的故障检测和诊断(FDD)技术在过去几十年中受到关注,而在过去几年中,越来越多的研究表明了该领域的相关性(Precup等,2015年)。这种兴趣很大程度上是由于工业过程的复杂性增加,以满足市场需求,提高生产连续性和过程可靠性,同时要在更严格的环境和安全限制下运行(Bezerra等,2016年)。例如,根据研究,人为操作错误导致工业环境中约70%至90%的事故(Venkatasubramanian等,2003年,Wang和Guo,2013年)。

因此,故障检测和识别技术的实施旨在保证现代工业过程的效率和质量,因为检测是识别是否发生故障的任务,而故障识别是指确定工业过程操作可能遭受的各种故障类型、位置和检测时间(Precup等,2015年)。

FDD基本上可以采用两种方法:基于模型和基于数据,其中基于模型的方法是从过程动态知识中发展而来,而基于数据的方法基本上使用过程变量的数据。更近期的研究采用了基于数据的方法,因为它们不依赖于增强模型来描述过程动态,并且目前可以获得数据。

目前,大多数基于数据的FDD方法都使用一些机器学习技术。最早采用机器学习技术的基于数据的FDD方法采用离线学习策略,例如神经网络(Ayoubi,1994年,Sorsa等,1991年)。更近期的方法使用了更复杂的神经网络模型,例如Zhao等人(2018年)采用了一种称为长短期记忆(LSTM)的递归神经网络,同时结合了一种称为批量归一化(BN)的重参数化技术(Ioffe和Szegedy,2015年)。

这些采用离线策略的研究在整个数据集事先可用时表现出良好的结果。然而,工业环境中的数据通常不是完全事先可用的。通常情况下,这些数据是持续获取的,需要进行处理以及时识别故障,避免诸如工作事故、意外停机、设备寿命缩短和环境问题等不良后果。处理连续获得的数据的另一个问题是,它们在理论上具有无限的大小,这使得难以进行离线训练的存储和处理变得困难。

因此,最近的研究更加专注于使用在线无监督学习策略进行FDD应用,因为这些策略更适合于在实际场景中,不是所有可能的故障都是事先已知的情况。值得强调的是,通过将新的在线样本选择标准纳入增量学习,可以实现在线学习。

在具有在线学习的模糊方法方面,Lemos等人(2013年)讨论了一种基于增量聚类过程生成模糊规则的方法,用于描述检测到的新操作状态,而Liu等人(2019年)则提出了一种基于在线学习的Fisher判别分析(FDA)技术。在Rodríguez-Ramos等人(2018年)中,采用的方法结合了面向密度的模糊C均值(DOCFM)、核模糊C均值(KFCM)和优化算法,用于工业过程的故障检测,采用在线学习方式,但仍然需要进行故障检测的离线训练阶段。在另一个结合离线和在线学习策略的例子中,Silva等人(2020年)使用了基于案例推理(CBR)技术结合人工免疫系统(AIS)来进行电机运行的故障检测和诊断。

聚类算法应该最大程度地增加同一聚类中样本之间的相似性,并最小化不同聚类中样本之间的相似性,考虑到一些相似性度量。通常,这些算法反映了数据集中的隐含模式。通过获取数据中隐含的与FDD问题相关的模式,可以识别不同类型的故障。根据Hou和Xiao(2017年)的说法,传统聚类方法(如K均值、归一化切割(NCuts)和DBSCAN(基于密度的空间聚类应用与噪声))在FDD中的局限性在于需要关于数据集的信息的先验知识,例如聚类数量、邻域半径、最小聚类大小等。此外,这些方法无法适应数据集的变化。

📚2 运行结果

2.1 第一种故障场景

2.2 第二种故障场景

2.3 第三种故障场景

部分代码:

#Processing
for t in data_f:
    teste.run(np.array(t))
#Result
result_f = teste.classIndex
result_filter_time = filterTime.filterTime(result_f,80,80)
plt.figure(figsize=(10,18)) 
sns.set(style= 'whitegrid' )
plt.subplot(311)
plt.xlabel("Time (s)")
plt.ylabel("Value")
plt.plot(data_f[:,0])
plt.plot(data_f[:,1])
plt.legend(["Normalized Pressure","Normalized Level"])
plt.title('a)')
plt.subplot(312)
plt.xlabel("Time (s)")
plt.ylabel("# group")
plt.plot(result_f)
plt.title('b)')
plt.ylim(-0.2,6.2)
plt.subplot(313)
plt.xlabel("Time (s)")
plt.ylabel("# group")
plt.ylim(-0.2,6.2)
plt.plot(result_filter_time)
plt.title('c)')
plt.savefig('result_third_scenario.png')
plt.show()
target = np.concatenate((np.zeros(5360),np.ones(1290),np.zeros(6135),2*np.ones(1100),np.zeros(6162),3*np.ones(2300),np.zeros(5707),4*np.ones(1600),np.zeros(6111)),axis=0)
print("------------------------- Result Third Fault Scenario------------------------- ")
print("Supervised metrics evaluation:")
print(classification_report(target,result_filter_time))
print("Unsupervised metric evaluation:")
print("Adjusted Rand Index:")
print(metrics.adjusted_rand_score(target,result_filter_time))
print("Homogeneity:")
print(metrics.homogeneity_score(target,result_filter_time))
print("Completeness:")
print(metrics.completeness_score(target,result_filter_time))
print("Measure v:")
print(metrics.v_measure_score(target,result_filter_time))

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]Mailson Ribeiro Santos , Clauber Gomes Bezerra, Bruno Sielly Jales Costa, Goran Andonovski, Luiz Affonso Guede

🌈4 Python代码、数据、文章

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值