通过神经网络与专家系统实现漏钢预报
裴斌
摘 要:针对连铸生产中粘结性漏钢引起的恶性事故,为解决该情况,设计采用基于BP神经网络为机理的漏钢预报系统解决方案,介绍了神经网络的训练步骤及数据处理分析。方案经测试,能够准确实现漏钢预报,误报率较低,为用户创造了显著的经济效益。
关键词:神经网络;数据归一化处理;专家系统
中图分类号:TF77 文献标识码:A
概述
漏钢是连铸生产中的恶性事故,它不仅产生废品、降低铸机作业率和影响产量,而且损坏设备,极大地降低企业经济效益,每次漏钢造成的经济损失达十几万元。因此,铸机漏钢成为衡量铸机生产水平高低的重要指标之一。在各种原因造成的漏钢中粘结性漏钢占绝大多数,因此减少粘结性漏钢是降低连铸漏钢率的关键。解决粘结性漏钢问题除了改善保护渣质量同时精心操作以确保拉速、结晶器内钢液面稳定以外,开发漏钢预报装置用于预先警告漏钢的发生是最有效的措施。所以,目前国内外装备先进的板坯连铸机都装配了结晶器漏钢预报装置,并在生产实际中发挥了重要作用,为用户创造了显著的经济效益。
1 系统硬件结构
该系统结构如图1所示
2 软件实现
神经网络漏钢预测模式识别系统在上位机软件中采用vc作为开发平台。利用vc中的MFC框架构建系统,对神经网络的训练采用matlab软件来实现。这样既可以利用matlab强大的数学运算能力,又可以利用vc强大的运算控制能力和友好的人机交互能力。
漏钢预报采用神经网络技术,根据比较研究本设计采用BP神经网络。BP的学习算法是一种有教师的学习算法。
本系统中所用三层前向BP神经网络的结构及相关公式如下图所示。
其中λ[0,1]为一常数, W(n)为上一次学习时的权值修正量。这样做有利于加速学习过程,λ的取值一般可在0.7~0.8左右。本次设计的神经网络模型选取的是feed-forward backprop网络。
2.1网络训练
在漏钢检测中,要想达到高的报出率和低的误报率,训练样本中应该包含有足够多的信息量。为达到足够信息的目的,在仿真中综合20多组数据作为训练样本构建网络,以其中一组数据为输入仿真网络得到真实输入与目标值的误差图像如图3所示:
分析原因不难发现在这些数据中有很多趋势接近的数据所默认的目标值却完全不相同。为避免这一矛盾,简化训练样本,选取了其中一组较典型的数据以求达到以较少的样本量却包含较多信息的目的,将这一数据叫做样本一。
在确定以样本一为训练对象后,选取了一个3个热电偶数据序列输入18个隐含层的网络来训练,此次训练中隐含层和输出层函数均选用的对数函数“tansig”,训练步数选取为100步。之后选取了样本一中比较典型的3个热电偶数据作为热电偶的输入数据,训练结果如图4:
从图4可看出的训练结果精度还是比较理想,针对上图训练所构建的网络,将训练数据作为输入数据所达到的实际输出与目标输出之间的差值如上图5所示:
由差值图6-7像可以看出,对应于输入值的实际输出值和目标输出值之间的差别极小,结果比较理想,但是在实际的环境中,输入值的高低会随着各种因素的改变而改变(如环境温度,冷却速度等),因此,将输入值整体降低50度、整体升高50度后作为输入仿真图像的结果分别如图5所示:
从上面两个仿真图的结果可以看出,当输入的数据保持与训练数据一样的趋势,但整体均值有所差异的时候,训练数据所构建的网络仿真结果非常不理想,为解决这一矛盾,采取数据处理及专家系统,避免了由温度偏差所造成的误报、漏报。
2.2数据归一化处理:
在bpnet.c中datafloat函数中修改数据处理的方法。
/*doublemaxvalue=0,minvalue=400;
for(dfi=0;dfi<datanum;dfi++){if(maxvalue<*(dfmatrix+dfi))
if(minvalue>*(dfmatrix+dfi)){minvalue=*(dfmatrix+dfi);}// 求得最小值}
for(dfi=0;dfi<datanum;dfi++){*(dfmatrix+dfi)=((*(dfmatrix+dfi)-minvalue)
2.3专家系统
知识库:
规则1:if 当前采样值前30个平均值小于前200个温度值的平均值的1.15倍Then正常
规则2:if 在当前采样点的以前的连续40个采样点中,下热点偶温度超过上热偶温度的个数<15 Then正常
规则3:if 当前采样点的前30个采样数据中下热电偶温度超过上热点温度的最大连续采样点数<5The正常
#definenumbaffer200 #defineriserate1.15 #defineconvertnum15 #definecontiueconvernem5 intdatabuffer[numbaffer][42];
doublesumdateH200=0, sumdateL200=0, sumdateH30=0, sumdateL30=0;
int compareresult[40];
//比较结果int coutinuecompass[36];
//连续5个值下热偶超过上面热电偶int sum5=0;
//连续5个比较结果int sumcoutinous5=0 ;
//有多少个连续5个for (int num=0;num<numbaffer-1;num++)