基于DELPHI软件实现神经网络算法的方法.pdf

上传人:Y94****206 文档编号:970682 上传时间:2018-03-22 格式:PDF 页数:12 大小:545.67KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910060880.0

申请日:

2009.02.27

公开号:

CN101504736A

公开日:

2009.08.12

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06N 3/02公开日:20090812|||实质审查的生效|||公开

IPC分类号:

G06N3/02; G06F9/44

主分类号:

G06N3/02

申请人:

江汉大学

发明人:

漆为民; 杨晓林

地址:

430056湖北省武汉市沌口经济技术开发区江汉大学科研处

优先权:

专利代理机构:

武汉开元专利代理有限责任公司

代理人:

俞 鸿

PDF下载: PDF下载
内容摘要

本发明公开了一种基于Delphi软件实现神经网络算法的方法,它是在建立一个Delphi应用程序和Matlab之间的ActiveX自动化连接后,在Delphi中执行Matlab的命令实现了用Matlab调用有效数据库,对有效数据进行神经网络学习分析,并实时返回算法结果到Delphi并成功运用于实际控制中。在本发明中已经成功的把Matlab神经网络的算法运用到Delphi的控制程序中,大大提高Matlab的算法执行效率;同时解决了人工神经网络算法程序与其他应用程序的无缝接口和统一打包问题,使神经网络算法程序更具有可靠性,不可修改性和保密性。

权利要求书

1、  一种基于Delphi软件实现神经网络算法的方法,它是在建立一个Delphi应用程序和Matlab之间的ActiveX自动化连接后,在Delphi中执行Matlab的命令实现了用Matlab调用有效数据库,对有效数据进行神经网络学习分析,并实时返回算法结果到Delphi并成功运用于实际控制中;所述Delphi调用神经网络算法过程为即在Delphi中执行Matlab命令的过程如下:注册ActiveX对象;产生和获得Matlab对象;Matlab读取专家数据库;Matlab生成改进的Elman神经网络;设置神经网络学习训练参数;神经网络学习训练后计算输出。

2、
  如权利要求1所述基于Delphi软件实现神经网络算法的方法,其特征在于所述神经网络是一个动态网络,包括输入层、隐含层、结构层和输出层;输入层的单元仅起信号传输作用,输出层单元起线性加权作用;隐含层单元的传递函数采用非线性函数,其输出为输入层信息和结构层信息的非线性叠加;结构层用来保存隐含层单元和自身的前一时刻的输出值,叠加后返回给隐层。

3、
  如权利要求1所述基于Delphi软件实现神经网络算法的方法,其特征在于所述所述注册ActiveX对象,是Matlab在Windows操作系统的注册表中进行注册;形式执行下列命令:mattlab/Regserver;产生和获得Matlab对象的方法是:在Delphi中使用下列语句:Matlab=Creatoleobject(‘Matlab.Application’);在Delphi中执行Matlab对象的一个方法是使用Matlab.Execute(command)函数,其中参数Command为要Matlab执行的命令字符串。

4、
  如权利要求1所述基于Delphi软件实现神经网络算法的方法,其特征在于所述Delphi应用程序从Matlab ActiveX自动化对象中获取数组的方法是GetFullMatrix,向Matlab ActiveX自动化对象中传递数组的方法是PutFullMatrix。

说明书

基于Delphi软件实现神经网络算法的方法
技术领域
本发明属于计算机软件技术在编制神经网络应用程序方面的应用,具体涉及一种基于Delphi软件实现神经网络算法的方法。
背景技术
人工神经网络是进行多种算法研究的一个重要工具,一般的人工神经网络应用软件都是在Matlab的平台下编制的,然后再与其他的界面应用软件接口,形成一个计算机内有多个应用平台软件的局面。
人工神经网络是研究各种复杂算法的一个重要工具软件平台,进行神经网络的应用研究,要在Matlab的平台下,用专门的编程语句进行编程,这个程序难以被编译为一个可执行文件,即神经网络源程序只可在Matlab平台下面打开;另外,神经网络的算法软件进行的结果,还要与其他的系统应用程序进行接口,这个接口技术也比较复杂。因此在一个实际的应用技术中间,如果既有一般的应用程序又有神经网络的算法程序,一般的应用程序可以打包为可执行的文件,这种可执行文件用户看不到源程序,因此此程序具有保密性和可靠性;而神经网络应用软件不能够打包,用户可以看到源程序,并且可以对此程序进行随意修改,造成安全隐患。
发明内容
本发明的目的在于提供一种基于Delphi软件实现神经网络算法的方法;它在应用程序的平台下直接采用Delphi软件编写神经网络算法软件,然后将算法软件和应用软件一起打包形成可执行文件,两种软件实现无缝连接,用户看不到源程序,更不可能对源程序进行修改。大大增加了算法程序的安全性和可靠性,也增加了程序的保密性。
本发明的技术方案为:基于Delphi软件实现神经网络算法的方法,它是在建立一个Delphi应用程序和Matlab之间的ActiveX自动化连接后,在Delphi中执行Matlab的命令实现了用Matlab调用有效数据库,对有效数据进行神经网络学习分析,并实时返回算法结果到Delphi并成功运用于实际控制中;所述Delphi调用神经网络算法过程为即在Delphi中执行Matlab命令的过程如下:注册ActiveX对象;产生和获得Matlab对象;Matlab读取专家数据库;Matlab生成改进的Elman神经网络;设置神经网络学习训练参数;神经网络学习训练后计算输出并供Delphi程序使用。
所述注册ActiveX对象,是Matlab在Windows操作系统的注册表中进行注册;形式执行下列命令:mattlab/Regserver;产生和获得Matlab对象的方法是:在Delphi中使用下列语句:Matlab=Creatoleobject(‘Matlab.Application’);在Delphi中执行Matlab对象的一个方法是使用Matlab.Execute(command)函数,其中参数Command为要Matlab执行的命令字符串。
所述Delphi应用程序从Matlab ActiveX自动化对象中获取数组的方法是GetFullMatrix,向Matlab ActiveX自动化对象中传递数组的方法是PutFullMattix。Delphi是非常灵活的可视化编程语言,但是在数值处理分析和算法等方面效率太低。而Matlab在自动控制、神经网络等方面有着成熟算法。在本专利中已经成功的把Matlab神经网络的算法运用到Delphi的控制程序中,达到了预期的控制效果。
在本专利用于动态的数据处理如自来水厂生产的自动控制系统中,利用Delphi建立了完整的采集数据库,由神经网络对采集的数据进行学习、分析并给出投矾控制量。由于数据量较大,如果用Matlab直接对数据库中的大量数据直接进行操作(比如自动删除无效数据),速度太慢,因为Matlab中for循环效率很低。而Delphi有着运行效率很高的数据库接口,通过Delphi对数据库中的有效数据进行整理后,建立一个Matlab专用的数据库,可以大大提高Matlab的算法执行效率。
Delphi是支持Windows OLE控制端协议的,而Matlab是支持Windows OLE服务器端协议的,一旦它们之间的连接协议成功建立,可以用Delphi来编写和执行任何Matlab命令。本专利中通过在Delphi中执行Matlab的有关命令实现了用Matlab调用有效数据库,对有效数据进行神经网络分析,并实时返回算法结果到Delphi并成功运用于实际控制中。
在智能投矾系统中,Matlab在后台调用神经网络函数进行运算,主程序则只在界面上显示结果,以方便生产人员来监控投矾量是否正确。Delphi调用Matlab有以下几种方式:将M文件转化为Dll文件,在Delphi中调用;或使用DDE动态数据交换方式;或用ActiveX技术。而Delphi要调用Matlab中的神经网络函数以及牵涉到Matlab调用数据库文件时,采用ActiveX技术是最为合适的。ActiveX自动化协议是一种允许一个应用程序(控制端)去控制另一个应用程序(服务器端)的协议。Matlab支持ActiveX服务器端协议,而Delphi也支持ActiveX自动化控制端协议,因此,如果建立一个Delphi应用程序和Matlab之间的ActiveX自动化连接,可以方便得在两者间交换数据。
本发明中采用的Delphi是非常灵活的可视化编程语言,同时Matlab在自动控制、神经网络等方面有着成熟算法。在本发明中已经成功的把Matlab神经网络的算法运用到Delphi的控制程序中,大大提高Matlab的算法执行效率;同时解决了人工神经网络算法程序与其他应用程序的无缝接口和统一打包问题,使神经网络算法程序更具有可靠性,不可修改性和保密性,它使得整个应用程序一体化程度提高,软件的可靠性大大提高,保密性增加,软件执行的速度加快。
附图说明
图1Delphi调用神经网络算法框图。
图2改进Elman的网络结构示意图。
图3人工神经网络输出误差变化图。
图4Elman神经网络学习训练框图。
具体实施方式
如图1所示,ActiveX对象的建立:Matlab作为服务器,Delphi应用程序作为控制端,要想建立这一连接,首先要建立ActiveX对象,也即Matlab在Windows操作系统的注册表中进行注册。其方法是以命令行的形式执行下列命令:
mattlab/Regserver
这个命令只要执行一次就可以,除非移动了Matlab软件在硬盘中的位置。Matlab软件在注册表中的ActiveX对象名为“Matlab.Application”,为了产生和获得Matlab对象,在Delphi中使用下列语句即可:
Matlab=Creatoleobject(‘Matlab.Application’)
在Delphi中执行Matlab命令:
Matlab ActiveX自动化对象的一个主要方法是使用Matlab.Execute(command)函数,其中参数Command为要Matlab执行的命令字符串;运行结果以字符串返回,图形则以Matlab图形窗口的形式显示。凡是在Matlab命令窗口可键入的执行命令都可用该函数调用。Delphi应用程序从Matlab ActiveX自动化对象中获取数组的方法是GetFullMatrix,向Matlab ActiveX自动化对象中传递数组的方法是PutFullMatrix。
要在Delphi程序中调用Matlab的神经网络函数,并在界面上显示运算结果,主要代码如下:
procedure TForml.FormCreate(Sender:TObject);
begin
matlab:=CreateOleObject(′matlab.application′);
end;
procedure TForml.Button2Click(Sender:TObject);
begin
……%读取专家库中数据
rstr:=matlab.execute(net=modelm(minmax(P),[25,1],{′tansig′,′purelin′};);%生成改进的Elman神经网络
%以下设置神经网络训练参数
rstr:=matlab.execute(net.trainFcn=′traingdx′;);
rstr:=matlab.execute(net.trainParam.epochs=1000;);
rstr:=matlab.execute(net.trainParam.show=50;);
rstr:=matlab.execute(net.trainParam.lr=0.03;);
rstr:=matlab.execute(net.trainParam.mc=0.8;);
rstr:=matlab.execute(net.trainParam.goal=le-3;);
rstr:=matlab.execute([net,tr]=train(net,P,T););
rstr:=matlab.execute(A=sim(net,P););%神经网络训练完毕后计算输出
rstr:=matlab.execute(E=T-A;);
rstr:=matlab.execute(MSE=mse(E););
rstr:=matlab.execute(xc3=postmnmx(A,minxc3,maxxc3));
……%在界面中显示运算结果
end;
end.
改进动态Elman神经网络
考虑到投药系统是非线性、大滞后的动态系统,采用传统的静态前向网络(如BP网络)其动态性能无法满足要求。本控制系统经多次实验,采取了一种改进的Elman动态网络,较好的提高了逼近能力,加快了收敛速度。
Elman神经网络是一种典型的动态神经网络,自身含有动态环节,无需使用较多的系统状态作为输入,从而减少了输入层单元数。但基本Elman网络只对一阶系统能有效辨识,而水厂投矾系统是非线性高阶系统,为此我们采用改进的Elman网络来实现对模型的控制及预测。如图2所示;该网络其输入层、隐含层和输出层的连接类似于前馈网络,输入层的单元仅起信号传输作用,输出层单元起线性加权作用。隐含层单元的传递函数采用非线性函数,其输出为输入层信息和结构层信息的非线性叠加;结构层用来保存隐含层单元和自身的前一时刻的输出值,叠加后返回给隐层,可以认为是一个一步延时算子。该网络在基本Elman网络的结构层增加了一组自反馈因子,使网络具有更好的记忆特性,更适用于动态模型的辨识。
设网络的输入层、输出层、隐层的个数分别为m、n、r,w1、w2、w3分别为结构单元到隐层、输入层到隐层,以及隐层到输出层的连接权矩阵,f分别为输出单元和隐层单元之激发函数所组成的非线性向量函数。其非线性状态空间表达式为:
x j ( k ) = f ( Σ j = 1 m w 2 i , j u i ( k ) + Σ i = 1 r w 1 i , j c i ( k ) ) - - - ( 1 ) ]]>
ci(k)=xi(k-1)+α×ci(k-1)           (2)
y j ( k ) = g ( Σ i = 1 r w 3 i , j x j ( k ) ) - - - ( 3 ) ]]>
上式中可采用Sigmoid函数,即 f ( x ) = 1 1 + e - x ; ]]>可采用线性函数,即g(x)=kx。
权值修正和误差递推算法可参阅BP算法的梯度下降法来修正,算法实施步骤为:
(1)初始化模型和神经网络。离线初步训练神经网络,预置神经网络初始权值和阈值;
(2)检测实际输出y(k),前向计算网络输出并计算预测误差e(k);
(3)计算补偿输入分量Δuc和控制增量Δu;
(4)计算uc(k+1)和u(k+1);
(5)用递推最小二乘法学习网络权值及阈值一次;
(6)令k=k+1,转入(2);
Elman神经网络学习训练过程如图4所示。
该学习方法可参阅文献:
[1]Cheng Y C,Qi W M,Cai W Y.Dynamic Properties of Elman and Modified ElmanNeural Network[A].Proc of the lst Int Conf on Machine Learning andCybernetics[C].Beijing,2002,2(2):637-640.
[2]漆为民,程远楚,姬巧玲,蔡维由.PID型Elman网络及在动态系统辨识中的应用研究[J].控制与决策,2005,20(10):1197-1200.
[3]Gao X Z,Gao X M,Ocaska S J.A Modifi ed Elman Neural Network Model withApplication to Dynami cal Systems Identification[A].IEEE Int Conf onSystems,Man,and Cybernetics[C].Beijing,1996:1376-1381.
运行结果分析:
应用Elman网络对自来水厂生产的过程中的数据进行训练,经过1000次学习,误差输出小于0.03。采样数据每3分钟取一次平均值,克服了扰动。输入量包括进水流量、进水浊度、温度、滤前水浊度,共得到1200组数据,构成专家库以预测控制量。图3是改进Elman神经网络的误差输出图。
经过自学习的改进Elman神经网络输出的预测值与实际操作值比较。改进Elman网络的控制预测值,与工人实际控制值(代表投矾量),两者大部分情况吻合,同时神经网络自动去除了实际生产中的工人误操作信号,经分析,达到了更高的控制精度。
采样10000组数据,经2000次学习后得到的系统输出。虽然流量(flux)在某时刻突然增大,或者进水浊度突然降低,但是神经网络的输出依然保持较稳定的状态,和人工最佳操作类似。这表明Elman神经网络具有智能去除输入信号中的杂波,自动求得最佳控制方案的特性。第6000组数据附近工人操作的泵行程实际值有较大变化,而神经网络输出则比较平稳,这是由于第5000组数据时流量发生了突变,但人工操作时工人看到流量突然变化,可能会频繁调节计量泵。经分析,投药反应时间具有滞后性,流量的突变不会导致反应池中浊度发生突变,所以神经网络的控制输出值是正确的,其控制效果大大优于人工控制,既保证了生产的安全,又达到节能降耗的目的。
神经网络的输出由专家系统进一步微调,专家库包括历史优选数据库和三天实际操作数据库,人工神经网络每两个小时对这两个数据库进行一次学习,大约耗时2分钟。然后每5分钟对实测的参数进行一次输出参数推演,最后形成一个最终的控制值去对计量泵进行控制。专家库中的数据初始置信度取0.5,若神经网络学习后其输出满足要求,将匹配成功记录的置信度加0.01,反之则减去0.01。经长期运行后,专家库中置信度小于平均置信度15%的记录可以认为是不良数据,由自学习机构删除。
系统软件采用Dephi语言开发,运行速度符合现场实时要求。数据库在Access平台下建立,界面友好,操作方便。系统安全性能非常高,采用计算机、人工双控方式。一般情况下均为计算机自动控制投矾,仅在浊度、流量发生突变,与专家库中数据差别太大以致神经网络无法学习时,将报警提示工作人员手工紧急动作。

基于DELPHI软件实现神经网络算法的方法.pdf_第1页
第1页 / 共12页
基于DELPHI软件实现神经网络算法的方法.pdf_第2页
第2页 / 共12页
基于DELPHI软件实现神经网络算法的方法.pdf_第3页
第3页 / 共12页
点击查看更多>>
资源描述

《基于DELPHI软件实现神经网络算法的方法.pdf》由会员分享,可在线阅读,更多相关《基于DELPHI软件实现神经网络算法的方法.pdf(12页珍藏版)》请在专利查询网上搜索。

本发明公开了一种基于Delphi软件实现神经网络算法的方法,它是在建立一个Delphi应用程序和Matlab之间的ActiveX自动化连接后,在Delphi中执行Matlab的命令实现了用Matlab调用有效数据库,对有效数据进行神经网络学习分析,并实时返回算法结果到Delphi并成功运用于实际控制中。在本发明中已经成功的把Matlab神经网络的算法运用到Delphi的控制程序中,大大提高Matl。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1