专利名称:基于Delphi软件实现神经网络算法的方法
技术领域:
本发明属于计算机软件技术在编制神经网络应用程序方面的 应用,具体涉及一种基于Delphi软件实现神经网络算法的方法。
背景技术:
人工神经网络是进行多种算法研究的一个重要工具, 一般的 人工神经网络应用软件都是在Matlab的平台下编制的,然后再与 其他的界面应用软件接口 ,形成一个计算机内有多个应用平台软
件的局面。
人工神经网络是研究各种复杂算法的一个重要工具软件平 台,进行神经网络的应用研究,要在Matlab的平台下,用专门的 编程语句进行编程,这个程序难以被编i奪为一个可执4f文件,即 神经网络源程序只可在Matlab平台下面打开;另外,神经网络的 算法软件进行的结果,还要与其他的系统应用程序进行接口 ,这 个接口技术也比较复杂。因此在一个实际的应用技术中间,如果 既有 一般的应用程序又有神经网络的算法程序, 一般的应用程序 可以打包为可执行的文件,这种可执行文件用户看不到源程序, 因此此程序具有保密性和可靠性;而神经网络应用软件不能够打 包,用户可以看到源程序,并且可以对此程序进行随意修改,造 成安全隐患。
发明内容
本发明的目的在于提供一种基于DelpW软件实现神经网络算 法的方法;它在应用程序的平台下直接采用Delphi软件编写神经 网络算法软件,然后将算法软件和应用软件一起打包形成可执行 文件,两种软件实现无缝连接,用户看不到源程序,更不可能对 源程序进行修改。大大增加了算法程序的安全性和可靠性,也增 加了程序的保密性。
本发明的技术方案为基于Delphi软件实现神经网络算法的 方法,它是在建立一个Delphi应用程序和Matlab之间的ActiveX
3自动化连接后,在Delphi中执行Matlab的命令实现了用Matlab 调用有效数据库,对有效数据进行神经网络学习分析,并实时返 回算法结果到Delphi并成功运用于实际控制中;所述Delphi调用 神经网络算法过程为即在Delphi中执行Matlab命令的过程如下 注册ActiveX对象;产生和获得Matkb对象;Matlab读取专家数 据库;Matlab生成改进的Elman神经网络;-没置神经网络学习训 练参数;神经网络学习训练后计算输出并供Delphi程序使用。
所述注册ActiveX对象,是Matlab在Windows才喿作系统的 注册表中进行注册;形式执行下列命令mattlab/Regserver;产生 和获得Matlab对象的方法是在Delphi中使用下列语句 Matlab=Creatoleobject('Matlab.Application'); 在 Delphi 中冲丸行 Matlab对象的一个方法是使用Matlab.Execute(command)函凄t,其 中参数Command为要Matlab执行的命令字符串。
所述Delphi应用程序从Matlab ActiveX自动化对象中获取数 组的方法是GetFullMatrix,向Matlab ActiveX自动化对象中传递 数组的方法是PutFullMatrix。 Delphi是非常灵活的可^L化编程语 言,但是在数值处理分析和算法等方面效率太低。而Matlab在自 动控制、神经网络等方面有着成熟算法。在本专利中已经成功的 把Matlab神经网络的算法运用到Delphi的控制程序中,达到了 预期的控制效果。
在本专利用于动态的数据处理如自来水厂生产的自动控制系 统中,利用Delphi建立了完整的采集数据库,由神经网络对采集 的数据进行学习、分析并给出投矾控制量。由于数据量较大,如 果用Matlab直接对数据库中的大量数据直接进行操作(比如自动 删除无效数据),速度太慢,因为Matlab中for循环效率很低。 而Delphi有着运行效率很高的数据库接口 ,通过Delphi对数据库 中的有效数据进行整理后,建立一个Matlab专用的数据库,可以 大大提高Matlab的算法执行效率。
Delphi是支持Windows OLE控制端协议的,而Matlab是支 持Windows OLE服务器端协议的, 一旦它们之间的连接协议成功 建立,可以用Delphi来编写和执行任何Matlab命令。本专利中 通过在Delphi中执行Matlab的有关命令实现了用Matlab调用有 效数据库,对有效数据进行神经网络分析,并实时返回算法结果 到Delphi并成功运用于实际控制中。
4在智能投矾系统中,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的算法执行效率;同时解决了人工神经网络 算法程序与其他应用程序的无缝接口和统一打包问题,使神经网 络算法程序更具有可靠性,不可修改性和保密性,它使得整个应 用程序一体化程度提高,软件的可靠性大大提高,保密性增加, 软件执行的速度加快。
图1 Delphi调用神经网络算法框图。 图2改进Elman的网络结构示意图。 图3人工神经网络输出误差变化图。 图4 Elman神经网络学习训练框图。
具体实施例方式
如图1所示,ActiveX对象的建立Matlab作为服务器,Delphi 应用程序作为控制端,要想建立这一连接,首先要建立ActiveX 对象,也即Matlab在Windows操作系统的注册表中进行注册。 其方法是以命令行的形式执行下列命令
mattlab/Regserver
这个命令只要执行一次就可以,除非移动了 Matlab软件在硬 盘中的位置。Matlab软件在注册表中的ActiveX对象名为 "Matiab.Application",为了产生和获得Matlab对象,在Delphi
中使用下列语句即可Matlab=Creatoleobject('Matlab. Application') 在Delphi中执行Matlab命令
Matlab ActiveX 自动化对象的 一 个主要方法是4吏用 Matlab.Execute(command)函数,其中参婆丈Command为要Matlab 执行的命令字符串;运行结果以字符串返回,图形则以Matlab图 形窗口的形式显示。凡是在Matlab命令窗口可4建入的执行命令都 可用该函数调用。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,l], {'tansig,, 'purelin'};); %生成改进的Elman祌经网络
%以下设置神经网络训练参数 rstn= 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);); %神经网络训练完毕后计算输出 rsti':二 matlab.execute(E=T-A;); rstr:= matlab.execute(MSE=mse(E););
rstr:= matlab.execute(xc3二postmnmx(A,minxc3,maxxc3));
…… %在界面中显示运算结果
end; end.
改进动态Elman神经网络
考虑到投药系统是非线性、大滞后的动态系统,采用传统的 静态前向网络(如BP网络)其动态性能无法满足要求。本控制系统
6经多次实验,采取了一种改进的Elman动态网络,较好的提高了 逼近能力,加快了收敛速度。
Elman神经网络是一种典型的动态神经网络,自身含有动态 环节,无需使用较多的系统状态作为输入,从而减少了输入层单 元数。但基本Elman网络只对 一 阶系统能有效辨识,而水厂投石凡 系统是非线性高阶系统,为此我们采用改进的Elman网络来实现 对模型的控制及预测。如图2所示;该网络其输入层、隐含层和 输出层的连接类似于前馈网络,输入层的单元仅起信号传输作用, 输出层单元起线性加权作用。隐含层单元的传递函数采用非线性 函数,其输出为输入层信息和结构层信息的非线性叠加;结构层 用来保存隐含层单元和自身的前一时刻的输出值,叠加后返回给 隐层,可以认为是一个一步延时算子。该网络在基本Elman网络 的结构层增加了 一组自反馈因子,使网络具有更好的记忆特性, 更适用于动态模型的辨识。
设网络的输入层、输出层、隐层的个数分别为m、 n、 r, w,、 M,2、 w,分别为结构单元到隐层、输入层到隐层,以及隐层到输出 层的连接权矩阵,/(qi和g(qi分别为输出单元和隐层单元之激发函 数所组成的非线性向量函数。其非线性状态空间表达式为
("=/《w2',,"' (" + $ wl" c' W) (1)
f,(A) = x,(") + x"n) (2)
.v'W^l^,,,^)) (3)
上式中/(Q)可采用Sigmoid函数,即/(" = _^; g([])可采用
l + e
线性函l丈,即g(x)-zb:。
权值修正和误差递推算法可参阅BP算法的梯度下降法来修 正,算法实施步骤为
(1) 初始化模型和神经网络。离线初步训练神经网络,预置神 经网络初始权值和阈值;
(2) 检测实际输出y(",前向计算网络输出;/t)并计算预测误
差;
(3) 计算补偿输入分量A^和控制增量Aw;
7(4) 计算^(A: + l)和w(A: + l);
(5) 用递推最小二乘法学习网络权值及阈值一次;
(6) 令*小1,转入(2);
Elman神经网全各学习训练过程如图4所示。 该学习方法可参阅文献Cheng Y C, Qi W M, Cai W Y. Dynamic Properties of Elman and Modified Elman Neural Network[A]. Proc of the 1st Int Conf on Machine Learning and Cybe潔tics[C]. Beijing, 2002, 2 (2) : 637-640. 漆为Ui,程远楚,姬巧玲,蔡维由.PID型Elrnan网络及在动态系统辨识中的 应川研究[J].控制与决策,2005,20(10) :1197-1200. Gao X Z, Gao X M, 0caska S J". A Modified Elraan Neural Network Model with Application to Dynamical Systems Identification[A]. IEEE Int Conf on Systems, Man, and Cybernetics[C]. Beijing, 1996:1376-1381.
运行结果分析
应用Elman网络对自来水厂生产的过程中的数据进行训练, 经过1000次学习,误差输出小于0.03。采样数据每3分钟取一 次平均值,克服了扰动。输入量包括进水流量、进水浊度、温度、 滤前水浊度,共得到1200组数据,构成专家库以预测控制量。图 3是改进Elman神经网络的误差输出图。
经过自学习的改进Elman神经网络输出的预测值与实际操作 值比较。改进Elman网络的控制预测值,与工人实际控制值(代 表投矾量),两者大部分情况吻合,同时神经网络自动去除了实际 生产中的工人误操作信号,经分析,达到了更高的控制精度。
采样10000组数据,经2000次学习后得到的系统输出。虽然 流量(flux)在某时刻突然增大,或者进水浊度突然降低,但是神经 网络的输出依然保持较稳定的状态,和人工最佳操作类似。这表 明Eman神经网络具有智能去除输入信号中的杂波,自动求得最 佳控制方案的特性。第6000组数据附近工人操作的泵行程实际值 有较大变化,而神经网络输出则比较平稳,这是由于第5000组数 据时流量发生了突变,但人工操作时工人看到流量突然变化,可 能会频繁调节计量泵。经分析,投药反应时间具有滞后性,流量 的突变不会导致反应池中浊度发生突变,所以神经网络的控制输 出值是正确的,其控制效果大大优于人工控制,既保证了生产的安全,又达到节能降耗的目的。
神经网络的输出由专家系统进一步微调,专家库包括历史优 选数据库和三天实际才喿作数据库,人工神经网络每两个小时对这
两个数据库进行一次学习,大约耗时2分钟。然后每5分钟对实 测的参数进行 一 次输出参数推演,最后形成 一 个最终的控制值去 对计量泵进行控制。专家库中的数据初始置信度取0.5,若神经 网络学习后其输出满足要求,将匹配成功记录的置信度加0.01, 反之则减去0.01。经长期运行后,专家库中置信度小于平均置信 度5%的记录可以认为是不良数据,由自学习机构删除。
系统软件采用Dephi语言开发,运行速度符合现场实时要求。 数据库在Access平台下建立,界面友好,操作方便。系统安全性 能非常高,采用计算机、人工双控方式。 一般情况下均为计算机 自动控制投矾,仅在浊度、流量发生突变,与专家库中数据差别 太大以致神经网络无法学习时,将报警提示工作人员手工紧急动 作。
权利要求
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=CreatoIeobject('Matlab.Application,); 在 Delphi 中执行 Matlab 对象的 一 个方法是使用 Matlab.Execute(command)函数,其中参凄t Command为要Matlab 执行的命令字符串。
4、 如权利要求1所述基于Delphi软件实现神经网络算法的 方法,其特征在于所述Delphi应用程序从Matlab ActiveX自动化 对象中获耳又数组的方法是GetFullMatrix,向Matlab ActiveX自动 化对象中传递数组的方法是PutFullMatrix。
全文摘要
本发明公开了一种基于Delphi软件实现神经网络算法的方法,它是在建立一个Delphi应用程序和Matlab之间的ActiveX自动化连接后,在Delphi中执行Matlab的命令实现了用Matlab调用有效数据库,对有效数据进行神经网络学习分析,并实时返回算法结果到Delphi并成功运用于实际控制中。在本发明中已经成功的把Matlab神经网络的算法运用到Delphi的控制程序中,大大提高Matlab的算法执行效率;同时解决了人工神经网络算法程序与其他应用程序的无缝接口和统一打包问题,使神经网络算法程序更具有可靠性,不可修改性和保密性。
文档编号G06F9/44GK101504736SQ200910060880
公开日2009年8月12日 申请日期2009年2月27日 优先权日2009年2月27日
发明者杨晓林, 漆为民 申请人:江汉大学