基于DFA和笛卡尔集的数据录入机器人设计与实现
2019-12-11刘家兴刘金锋
刘家兴,刘金锋,李 捷
(1.河南省实验中学,河南 郑州 450000;2.河南大学,河南 开封 475000)
0 引 言
近年来,科学技术的迅猛发展,尤其是计算机技术的发展,极大便利了人们的工作及生活。再加上人们工作的需求及生活水平的提升,计算机用户数量呈全球性的爆炸式增长,同时产生了大量数据信息有待处理。这就使得人们对计算机的计算能力需求不断提高[1]。针对提高数据处理、数据操作、数据再加工的能力的问题,文中对数据自动化处理展开研究。
自动机理论是一种将离散数学系统的构造、作用和关系作为研究对象的数学理论。自动机是有限状态机(FSM)的数学模型,FSM 是给定符号输入,依据转移函数“跳转”过一系列状态的一种机器,自动机状态有开始状态和结束状态[2]。DFA在自动化、智能化领域有着广泛的应用。例如,文献[3]提出的汉字自动机模型能刻画出文字智能输入、词句输入,为汉字的智能处理提供数据模型;文献[4]利用自动机的状态转换表实现串的快速自动匹配;文献[5]利用层次式时间自动机模型自动转化为模型检测工具UPPAAL的输入;文献[6]以时间自动机为建模工具,分别为要检测和控制的物理实体以及不同种类的物联网服务独立建模,这些时间自动机形成了一个网络,刻画完整的物联网服务通信并发过程;针对系统多层嵌套式结构范畴模型的动态行为描述和分析问题,文献[7]提出一种基于端口自动机的行为表达方法;文献[8]将节点调度问题转化为集合覆盖问题后,利用学习自动机的特性自适应地更新所选取感知方向的概率;文献[9]将自动机模型与遗传算法相结合,使得遗传算法的每一代遗传因子自动产生。文中研究的是数据自动化、智能化处理问题,与自动机理论的本质特征切合,所以基于自动机理论构建了一种数据自动处理机器人模型。另外,设置了自动机的启动条件即握手认证,握手认证模型基于笛卡尔集。笛卡尔集是指在数学中,两个集合X和Y的笛卡尓集(Cartesian Set)表示为X × Y,第一个对象是X的成员,第二个对象是Y的所有可能有序对的其中一个成员[10]。
依据数据自动处理机器人模型,文中设计和实现了某财政支付系统数据自动录入机器人。由于某财政支付系统和某财务系统是两套独立的软件系统,这就造成了在财政支付环节存在一个脱节,即财政系统无法有效获取并使用这些结算信息。目前采用人工方式实现结算信息逐条录入,工作效率低下,已不能满足未来工作的需要。而文中设计的财政支付数据自动录入机器人将会把财务系统中的结算信息搬运到财政支付系统,有效地解决这个“脱节”问题,使得结算支付信息得到充分利用,极大地提高工作效率,使得财政支付流程更顺畅。
1 机器人模型
1.1 数据自动操作模型
确定有限状态自动机[11]Γ:由一个非空有限的状态集合Ω,一个输入字母表(非空有限的字符集合)Σ,一个转移函数δ:Ω×Σ→Ω,一个开始状态s∈Ω,一个结束状态的集合F⊆Ω所组成的5-元组,因此一个DFA可以写成这样的形式:Γ=(Ω,Σ,δ,s,F)。
数据自动操作模型构建步骤如下:
(1)信息元集合U。
U={u1,u2,…,un},n∈N
(2)集合U划分。
等价类的划分基于以下定理:设R是定义在集合A上的等价关系,那么R的等价类构成S的划分。
R={r1,r2,…,rm},m∈N
Si={x,y|xriy,x∈U,y∈U,ri∈R},i≤m,i∈N
(3)信息序列集合LQ。
信息序列为M-元组记为Q:
Q=
信息序列集合LQ为:
LQ={
(4)信息序列状态集合。
信息元操作状态因子集合为:
A={a,-a}
带操作的信息序列QA为:
QΑ=
带操作的信息序列集合LQΑ为:
LQΑ={
可得:|LQΑ|=2M。
带依次操作的信息序列QΑSK为:
QASK= uM⊕aj> 带依次操作的信息序列集合LQAS为: LQΑS={QΑSk},k≤M 可得: |LQΑS|=M。 (5)操作集合ΡΟpt。 位置集合P: P={ 操作元集合ΟΡt为: OPt={OPt1,OPt2,…,OPti,…,OPtN} Ρopt={p∧opt|p∈R,opt∈ΟΡt} ΡΟpt反映了对某位置的某种操作。 (6)转移函数δ。 f(QΑk,popt)={ f(QΑk,popt)定义了Ω集合的状态转移规则,读入操作popt,跳转的状态不唯一,所以该函数定义的是一种不确定的有穷状态自动机(NFA)。 f(QΑSk,popt)=QΑSk+1,popt⊆ΡΟpt,popt≠∅f(QΑSk,popt)定义了Ω集合的另一种状态转移规则,读入操作popt,跳转的状态唯一,所以该函数定义的是一种确定的有穷状态自动机(DFΑ)。 (7)起始状态与终止状态。 s= F= 综述,基于FA理论,文中建立的自动操作模型描述如下,非依次操作的自动机模型AOM: ΑΟΜ={LQΑ,ΡΟpt,f(QAK,popt),s,F},ΑΟΜ是ΝFΑ; 依次操作的自动机模型AOM-S: ΑΟΜ-S={LQΑS,ΡΟpt,f(QΑSk,popt),s,F},ΑΟΜ-S是DFΑ。 该模型的设计基于笛卡尔集理论,用于设计自动机的启动条件,握手成功自动机启动,模型构建步骤如下: (1)标识因子集合。 T={t1,t2,…,ti,…,tn} (2)标识因子关系。 R={R1,R2} (3)标识因子划分。 T1={x,y|xR1y,x∈T,y∈T} T2={x,y|xR2y,x∈T,y∈T} 其中T1、T2为不同类别的标识。 (4)握手认证模型。 A={ B={ A×B={(a,b)|a∈A,b∈B,f(b1)∈U,g(a1)∈V} 其中b1、a1分别为元素(三元组)中的第1元数据,A×B即为可握手认证集合。 基于数据自动操作模型和笛卡尔集握手认证模型,设计财政数据自动录入机器人。该设计以一系列操作组合作为自动机模型的输入字母表,以数据操作后的状态为有限状态集合,开始状态定义为数据的原始状态,即未对数据进行任何操作,结束状态定义为数据的完全操作态,即对数据的所有操作均已完成。该设计中操作的数据对象为批量财政结算数据,包含账号名称、账户账号、开户行信息、摘要、金额等信息元;针对以上数据进行的操作为在某位置的单击、复制、粘贴等。初始状态为数据的原始状态,结束状态为数据的完成操作态。 财政数据录入机器人定义为:ΑΟΜ-S={LQΑS,ΡΟpt,f(QΑSk,popt),s,F},其中,LQΑS={QΑSk},k≤Μ,Μ=5;QΑSk= 具体的: S1:账户名称; S2:账户账号; S3:开户行信息; S4:摘要; S5:金额; A={已处理,未处理}。 Ρopt={p∧opt|p∈P,opt∈ΟΡt},其中: P={ Οpt={复制,单击,粘贴}。 f(QΑSk,popt)=QΑSk+1,popt⊆ΡΟpt,popt≠∅。 s= F= 其中ui∈Si,Si中i≤5。 启动财政数据自动录入机器人的程序定义为机器人唤醒系统,握手认证模型定义如下: A×B={(a,b)|a∈A,b∈B,f(b1)∈U,g(a1)∈V} A={ 其中,T1为机器人唤醒系统身份标识集;T2为财政数据自动录入机器人身份标识集;A为机器人唤醒系统集合;t为机器人唤醒系统身份标识;f为握手规则;U为f规则下符合条件的财政数据自动录入机器人身份标识。 B={ 其中,B为财政数据自动录入机器人集合;s为财政数据自动录入机器人身份标识;g为握手规则;V为g规则下符合条件的机器人唤醒系统身份标识。 f(b1)∈U,g(a1)∈V为笛卡尔集计算规则。 功能总体设计:插入财政支付数据录入机器人,主机机器人唤醒系统唤醒机器人程序,机器人启动,载入数据,完成财政支付信息的自动录入;拔出机器人,机器人进程随之关闭。 实现平台:.NET FrameWork 4.0[12]; 实现语言:C#[13]; 运行环境:Windows XP、Win7及以上。 财政支付数据录入机器人的设计包含两部分程序:主机唤醒程序和机器人程序。主机唤醒程序通过握手认证唤醒机器人。文中采用面向对象[14]的思想对两部分程序进行实现。 主机唤醒程序用于通过握手认证模型识别、启动财政支付数据录入机器人,工作流程如图1所示。 图1 握手认证流程 根据工作流程设计类图,如图2所示。 图2 主机唤醒程序类图 图中,ComputerInfo类用于获取机器人唤醒系统身份标识;MonitorUpan类用于检测是否有机器人插入、与机器人握手认证、启动机器人。其中isIdentification()方法实现认证机器人功能;CallbackTask()方法是后台线程[15]执行函数,根据认证结果启动或关闭机器人;isStart()方法判断是否机器人启动;KillProcess()方法实现关闭机器人功能。 核心代码如下: public bool isIdentification()//认证 { bool flag=false; var scope=new ManagementScope(); var query=new SelectQuery("select * from win32_logicaldisk"); using(var searcher=new ManagementObjectSearcher(scope,query)) { //返回设备列表 var collection=searcher.Get(); foreach(var obj in collection) { foreach (var property in obj.Properties)//读取机器人序列号 { if(property.Value!=null)//读取到了吗 { //认证机器人 if(property.Name=="VolumeSerialNumber" && property.Value.ToString()=="3C2382B3") { flag = true; } } } } } return flag; } public void CallbackTask(Object stateInfo)//机器人启动或关闭 { while(true) { if(isIdentification())//如果认证成功 { //启动机器人 if(isStart()==false) { ProcessStartInfo startInfo=new ProcessStartInfo(@"Robot.exe"); ComputerInfo cmp=new ComputerInfo(); startInfo.Arguments=cmp.GetCpuInfo()+cmp.GetBoardInfo(); Process.Start(startInfo); } } else { //如果认证失败,关闭机器人 KillProcess("Robot"); } } } 主机唤醒程序建立后台线程,后台线程执行CallbackTask()方法,即实现如下功能:与插入的机器人握手认证,认证成功,则启动机器人;如果认证不成功,则关闭所有机器人进程。 财政支付数据自动录入机器人功能如下:读取数据,对于每一条数据的信息元,找到操作位置,完成相应操作,提交数据,修改数据状态为已处理,当所有数据的状态为已处理时,机器人停止。 机器人核心类图如图3所示。 图3 机器人核心类图 图中,ExcelHelper类用于读取数据;InputAlphabet类用于设置自动机的输入字母表,完成状态跳转。 机器人自动录入流程如图4所示。 图4 机器人自动录入流程 核心代码如下: public void ConfigOpt() { if(totalTable!=null) { if(rowIndex { label2.Text=rowIndex.ToString()+"/"+(totalTable.Rows.Count-1); for(inti=0;i //选定第i个位置 { if(i==2) { this.DoMouseDoubleClick(arr[i][0],arr[i][1]);//双击操作 Thread.Sleep(50); } else { this.DoMouseClick(arr[i][0],arr[i][1]);//单击操作 Thread.Sleep(50); keybd_event(17,0,0,0); Thread.Sleep(50); keybd_event((byte)Keys.A,0,0,0); Thread.Sleep(50); keybd_event(17,0,2,0); Thread.Sleep(50); keybd_event((byte)Keys.A,0,2,0); //全选操作 keybd_event(46,0,0,0); Thread.Sleep(50); keybd_event(46,0,2,0); //删除操作 Thread.Sleep(50); } try//复制操作 { Clipboard.Clear(); Clipboard.SetText(totalTable.Rows[rowIndex][i].ToString()); //第rowIndex条数据的第i个信息元 }catch(Exception ee) { Application.DoEvents(); Clipboard.SetText(totalTable.Rows[rowIndex][i].ToString()); } Thread.Sleep(50); keybd_event(17,0,0,0); Thread.Sleep(50); keybd_event((byte)Keys.V,0,0,0); Thread.Sleep(50); keybd_event(17,0,2,0); Thread.Sleep(50); keybd_event((byte)Keys.V,0,2,0); //粘贴操作 Thread.Sleep(100); } rowIndex++; } if(rowIndex==totalTable.Rows.Count) { timer1.Enabled=false; rowIndex++; } } } 文中设计的财政支付机器人于2018年11月投入使用,2018年11月之前采用人工录入,人工录入安排2人,各占用1台PC,PC配置如下:CPU为Intel(R) Core(TM) i3 CPU M350@2.27GHz;内存为4 G;操作系统为Win7 旗舰版(32位)。 现有方式为机器人录入,1台机器人录入需要一台PC支撑,PC配置同上。表1是2017年度和2018年度12月份数据对比。 表1 数据对比 注:数据源自某大学财务系统;8小时*75%为人工录入有效用时;准确率来自对账后的数据统计。 通过以上数据对比发现,人工录入速率约为2分钟一条数据,机器人录入速率约为一分钟6笔,机器人录入效率远远大于人工录入效率;人工录入准确率很难达到100%,而机器人录入可以达到无差错录入。 文中基于确定有限状态自动机(DFA)理论和笛卡尔集构建了一种数据自动处理机器人模型,依据该模型,设计了财政支付数据录入机器人。基于.NET FrameWork 4.0,对财政支付数据录入机器人进行了实现。通过这种机器人,2个员工一天的录入工作量,可以用1个小时来完成,极大提高了工作效率。1.2 笛卡尔集握手认证模型
|s∈T2,V∈T1}2 财政数据自动录入机器人设计
2.1 财政数据自动录入机器人
2.2 握手认证设计
|s∈T2,V∈T1}3 方案实现
3.1 主机唤醒程序
3.2 机器人程序
4 实验对比
5 结束语