劉家興,劉金鋒,李 捷
(1.河南省實(shí)驗(yàn)中學(xué),河南 鄭州 450000;2.河南大學(xué),河南 開(kāi)封 475000)
近年來(lái),科學(xué)技術(shù)的迅猛發(fā)展,尤其是計(jì)算機(jī)技術(shù)的發(fā)展,極大便利了人們的工作及生活。再加上人們工作的需求及生活水平的提升,計(jì)算機(jī)用戶數(shù)量呈全球性的爆炸式增長(zhǎng),同時(shí)產(chǎn)生了大量數(shù)據(jù)信息有待處理。這就使得人們對(duì)計(jì)算機(jī)的計(jì)算能力需求不斷提高[1]。針對(duì)提高數(shù)據(jù)處理、數(shù)據(jù)操作、數(shù)據(jù)再加工的能力的問(wèn)題,文中對(duì)數(shù)據(jù)自動(dòng)化處理展開(kāi)研究。
自動(dòng)機(jī)理論是一種將離散數(shù)學(xué)系統(tǒng)的構(gòu)造、作用和關(guān)系作為研究對(duì)象的數(shù)學(xué)理論。自動(dòng)機(jī)是有限狀態(tài)機(jī)(FSM)的數(shù)學(xué)模型,F(xiàn)SM 是給定符號(hào)輸入,依據(jù)轉(zhuǎn)移函數(shù)“跳轉(zhuǎn)”過(guò)一系列狀態(tài)的一種機(jī)器,自動(dòng)機(jī)狀態(tài)有開(kāi)始狀態(tài)和結(jié)束狀態(tài)[2]。DFA在自動(dòng)化、智能化領(lǐng)域有著廣泛的應(yīng)用。例如,文獻(xiàn)[3]提出的漢字自動(dòng)機(jī)模型能刻畫(huà)出文字智能輸入、詞句輸入,為漢字的智能處理提供數(shù)據(jù)模型;文獻(xiàn)[4]利用自動(dòng)機(jī)的狀態(tài)轉(zhuǎn)換表實(shí)現(xiàn)串的快速自動(dòng)匹配;文獻(xiàn)[5]利用層次式時(shí)間自動(dòng)機(jī)模型自動(dòng)轉(zhuǎn)化為模型檢測(cè)工具UPPAAL的輸入;文獻(xiàn)[6]以時(shí)間自動(dòng)機(jī)為建模工具,分別為要檢測(cè)和控制的物理實(shí)體以及不同種類(lèi)的物聯(lián)網(wǎng)服務(wù)獨(dú)立建模,這些時(shí)間自動(dòng)機(jī)形成了一個(gè)網(wǎng)絡(luò),刻畫(huà)完整的物聯(lián)網(wǎng)服務(wù)通信并發(fā)過(guò)程;針對(duì)系統(tǒng)多層嵌套式結(jié)構(gòu)范疇模型的動(dòng)態(tài)行為描述和分析問(wèn)題,文獻(xiàn)[7]提出一種基于端口自動(dòng)機(jī)的行為表達(dá)方法;文獻(xiàn)[8]將節(jié)點(diǎn)調(diào)度問(wèn)題轉(zhuǎn)化為集合覆蓋問(wèn)題后,利用學(xué)習(xí)自動(dòng)機(jī)的特性自適應(yīng)地更新所選取感知方向的概率;文獻(xiàn)[9]將自動(dòng)機(jī)模型與遺傳算法相結(jié)合,使得遺傳算法的每一代遺傳因子自動(dòng)產(chǎn)生。文中研究的是數(shù)據(jù)自動(dòng)化、智能化處理問(wèn)題,與自動(dòng)機(jī)理論的本質(zhì)特征切合,所以基于自動(dòng)機(jī)理論構(gòu)建了一種數(shù)據(jù)自動(dòng)處理機(jī)器人模型。另外,設(shè)置了自動(dòng)機(jī)的啟動(dòng)條件即握手認(rèn)證,握手認(rèn)證模型基于笛卡爾集。笛卡爾集是指在數(shù)學(xué)中,兩個(gè)集合X和Y的笛卡尓集(Cartesian Set)表示為X × Y,第一個(gè)對(duì)象是X的成員,第二個(gè)對(duì)象是Y的所有可能有序?qū)Φ钠渲幸粋€(gè)成員[10]。
依據(jù)數(shù)據(jù)自動(dòng)處理機(jī)器人模型,文中設(shè)計(jì)和實(shí)現(xiàn)了某財(cái)政支付系統(tǒng)數(shù)據(jù)自動(dòng)錄入機(jī)器人。由于某財(cái)政支付系統(tǒng)和某財(cái)務(wù)系統(tǒng)是兩套獨(dú)立的軟件系統(tǒng),這就造成了在財(cái)政支付環(huán)節(jié)存在一個(gè)脫節(jié),即財(cái)政系統(tǒng)無(wú)法有效獲取并使用這些結(jié)算信息。目前采用人工方式實(shí)現(xiàn)結(jié)算信息逐條錄入,工作效率低下,已不能滿足未來(lái)工作的需要。而文中設(shè)計(jì)的財(cái)政支付數(shù)據(jù)自動(dòng)錄入機(jī)器人將會(huì)把財(cái)務(wù)系統(tǒng)中的結(jié)算信息搬運(yùn)到財(cái)政支付系統(tǒng),有效地解決這個(gè)“脫節(jié)”問(wèn)題,使得結(jié)算支付信息得到充分利用,極大地提高工作效率,使得財(cái)政支付流程更順暢。
確定有限狀態(tài)自動(dòng)機(jī)[11]Γ:由一個(gè)非空有限的狀態(tài)集合Ω,一個(gè)輸入字母表(非空有限的字符集合)Σ,一個(gè)轉(zhuǎn)移函數(shù)δ:Ω×Σ→Ω,一個(gè)開(kāi)始狀態(tài)s∈Ω,一個(gè)結(jié)束狀態(tài)的集合F?Ω所組成的5-元組,因此一個(gè)DFA可以寫(xiě)成這樣的形式:Γ=(Ω,Σ,δ,s,F)。
數(shù)據(jù)自動(dòng)操作模型構(gòu)建步驟如下:
(1)信息元集合U。
U={u1,u2,…,un},n∈N
(2)集合U劃分。
等價(jià)類(lèi)的劃分基于以下定理:設(shè)R是定義在集合A上的等價(jià)關(guān)系,那么R的等價(jià)類(lèi)構(gòu)成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)信息序列狀態(tài)集合。
信息元操作狀態(tài)因子集合為:
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反映了對(duì)某位置的某種操作。 (6)轉(zhuǎn)移函數(shù)δ。 f(QΑk,popt)={ f(QΑk,popt)定義了Ω集合的狀態(tài)轉(zhuǎn)移規(guī)則,讀入操作popt,跳轉(zhuǎn)的狀態(tài)不唯一,所以該函數(shù)定義的是一種不確定的有窮狀態(tài)自動(dòng)機(jī)(NFA)。 f(QΑSk,popt)=QΑSk+1,popt?ΡΟpt,popt≠?f(QΑSk,popt)定義了Ω集合的另一種狀態(tài)轉(zhuǎn)移規(guī)則,讀入操作popt,跳轉(zhuǎn)的狀態(tài)唯一,所以該函數(shù)定義的是一種確定的有窮狀態(tài)自動(dòng)機(jī)(DFΑ)。 (7)起始狀態(tài)與終止?fàn)顟B(tài)。 s= F= 綜述,基于FA理論,文中建立的自動(dòng)操作模型描述如下,非依次操作的自動(dòng)機(jī)模型AOM: ΑΟΜ={LQΑ,ΡΟpt,f(QAK,popt),s,F},ΑΟΜ是ΝF??; 依次操作的自動(dòng)機(jī)模型AOM-S: ΑΟΜ-S={LQΑS,ΡΟpt,f(QΑSk,popt),s,F},ΑΟΜ-S是DFΑ。 該模型的設(shè)計(jì)基于笛卡爾集理論,用于設(shè)計(jì)自動(dòng)機(jī)的啟動(dòng)條件,握手成功自動(dòng)機(jī)啟動(dòng),模型構(gòu)建步驟如下: (1)標(biāo)識(shí)因子集合。 T={t1,t2,…,ti,…,tn} (2)標(biāo)識(shí)因子關(guān)系。 R={R1,R2} (3)標(biāo)識(shí)因子劃分。 T1={x,y|xR1y,x∈T,y∈T} T2={x,y|xR2y,x∈T,y∈T} 其中T1、T2為不同類(lèi)別的標(biāo)識(shí)。 (4)握手認(rèn)證模型。 A={ B={ A×B={(a,b)|a∈A,b∈B,f(b1)∈U,g(a1)∈V} 其中b1、a1分別為元素(三元組)中的第1元數(shù)據(jù),A×B即為可握手認(rèn)證集合。 基于數(shù)據(jù)自動(dòng)操作模型和笛卡爾集握手認(rèn)證模型,設(shè)計(jì)財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人。該設(shè)計(jì)以一系列操作組合作為自動(dòng)機(jī)模型的輸入字母表,以數(shù)據(jù)操作后的狀態(tài)為有限狀態(tài)集合,開(kāi)始狀態(tài)定義為數(shù)據(jù)的原始狀態(tài),即未對(duì)數(shù)據(jù)進(jìn)行任何操作,結(jié)束狀態(tài)定義為數(shù)據(jù)的完全操作態(tài),即對(duì)數(shù)據(jù)的所有操作均已完成。該設(shè)計(jì)中操作的數(shù)據(jù)對(duì)象為批量財(cái)政結(jié)算數(shù)據(jù),包含賬號(hào)名稱(chēng)、賬戶賬號(hào)、開(kāi)戶行信息、摘要、金額等信息元;針對(duì)以上數(shù)據(jù)進(jìn)行的操作為在某位置的單擊、復(fù)制、粘貼等。初始狀態(tài)為數(shù)據(jù)的原始狀態(tài),結(jié)束狀態(tài)為數(shù)據(jù)的完成操作態(tài)。 財(cái)政數(shù)據(jù)錄入機(jī)器人定義為:ΑΟΜ-S={LQΑS,ΡΟpt,f(QΑSk,popt),s,F},其中,LQΑS={QΑSk},k≤Μ,Μ=5;QΑSk= 具體的: S1:賬戶名稱(chēng); S2:賬戶賬號(hào); S3:開(kāi)戶行信息; S4:摘要; S5:金額; A={已處理,未處理}。 Ρopt={p∧opt|p∈P,opt∈ΟΡt},其中: P={ Οpt={復(fù)制,單擊,粘貼}。 f(QΑSk,popt)=QΑSk+1,popt?ΡΟpt,popt≠?。 s= F= 其中ui∈Si,Si中i≤5。 啟動(dòng)財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人的程序定義為機(jī)器人喚醒系統(tǒng),握手認(rèn)證模型定義如下: A×B={(a,b)|a∈A,b∈B,f(b1)∈U,g(a1)∈V} A={ 其中,T1為機(jī)器人喚醒系統(tǒng)身份標(biāo)識(shí)集;T2為財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人身份標(biāo)識(shí)集;A為機(jī)器人喚醒系統(tǒng)集合;t為機(jī)器人喚醒系統(tǒng)身份標(biāo)識(shí);f為握手規(guī)則;U為f規(guī)則下符合條件的財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人身份標(biāo)識(shí)。 B={ 其中,B為財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人集合;s為財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人身份標(biāo)識(shí);g為握手規(guī)則;V為g規(guī)則下符合條件的機(jī)器人喚醒系統(tǒng)身份標(biāo)識(shí)。 f(b1)∈U,g(a1)∈V為笛卡爾集計(jì)算規(guī)則。 功能總體設(shè)計(jì):插入財(cái)政支付數(shù)據(jù)錄入機(jī)器人,主機(jī)機(jī)器人喚醒系統(tǒng)喚醒機(jī)器人程序,機(jī)器人啟動(dòng),載入數(shù)據(jù),完成財(cái)政支付信息的自動(dòng)錄入;拔出機(jī)器人,機(jī)器人進(jìn)程隨之關(guān)閉。 實(shí)現(xiàn)平臺(tái):.NET FrameWork 4.0[12]; 實(shí)現(xiàn)語(yǔ)言:C#[13]; 運(yùn)行環(huán)境:Windows XP、Win7及以上。 財(cái)政支付數(shù)據(jù)錄入機(jī)器人的設(shè)計(jì)包含兩部分程序:主機(jī)喚醒程序和機(jī)器人程序。主機(jī)喚醒程序通過(guò)握手認(rèn)證喚醒機(jī)器人。文中采用面向?qū)ο骩14]的思想對(duì)兩部分程序進(jìn)行實(shí)現(xiàn)。 主機(jī)喚醒程序用于通過(guò)握手認(rèn)證模型識(shí)別、啟動(dòng)財(cái)政支付數(shù)據(jù)錄入機(jī)器人,工作流程如圖1所示。 圖1 握手認(rèn)證流程 根據(jù)工作流程設(shè)計(jì)類(lèi)圖,如圖2所示。 圖2 主機(jī)喚醒程序類(lèi)圖 圖中,ComputerInfo類(lèi)用于獲取機(jī)器人喚醒系統(tǒng)身份標(biāo)識(shí);MonitorUpan類(lèi)用于檢測(cè)是否有機(jī)器人插入、與機(jī)器人握手認(rèn)證、啟動(dòng)機(jī)器人。其中isIdentification()方法實(shí)現(xiàn)認(rèn)證機(jī)器人功能;CallbackTask()方法是后臺(tái)線程[15]執(zhí)行函數(shù),根據(jù)認(rèn)證結(jié)果啟動(dòng)或關(guān)閉機(jī)器人;isStart()方法判斷是否機(jī)器人啟動(dòng);KillProcess()方法實(shí)現(xiàn)關(guān)閉機(jī)器人功能。 核心代碼如下: public bool isIdentification()//認(rèn)證 { bool flag=false; var scope=new ManagementScope(); var query=new SelectQuery("select * from win32_logicaldisk"); using(var searcher=new ManagementObjectSearcher(scope,query)) { //返回設(shè)備列表 var collection=searcher.Get(); foreach(var obj in collection) { foreach (var property in obj.Properties)//讀取機(jī)器人序列號(hào) { if(property.Value!=null)//讀取到了嗎 { //認(rèn)證機(jī)器人 if(property.Name=="VolumeSerialNumber" && property.Value.ToString()=="3C2382B3") { flag = true; } } } } } return flag; } public void CallbackTask(Object stateInfo)//機(jī)器人啟動(dòng)或關(guān)閉 { while(true) { if(isIdentification())//如果認(rèn)證成功 { //啟動(dòng)機(jī)器人 if(isStart()==false) { ProcessStartInfo startInfo=new ProcessStartInfo(@"Robot.exe"); ComputerInfo cmp=new ComputerInfo(); startInfo.Arguments=cmp.GetCpuInfo()+cmp.GetBoardInfo(); Process.Start(startInfo); } } else { //如果認(rèn)證失敗,關(guān)閉機(jī)器人 KillProcess("Robot"); } } } 主機(jī)喚醒程序建立后臺(tái)線程,后臺(tái)線程執(zhí)行CallbackTask()方法,即實(shí)現(xiàn)如下功能:與插入的機(jī)器人握手認(rèn)證,認(rèn)證成功,則啟動(dòng)機(jī)器人;如果認(rèn)證不成功,則關(guān)閉所有機(jī)器人進(jìn)程。 財(cái)政支付數(shù)據(jù)自動(dòng)錄入機(jī)器人功能如下:讀取數(shù)據(jù),對(duì)于每一條數(shù)據(jù)的信息元,找到操作位置,完成相應(yīng)操作,提交數(shù)據(jù),修改數(shù)據(jù)狀態(tài)為已處理,當(dāng)所有數(shù)據(jù)的狀態(tài)為已處理時(shí),機(jī)器人停止。 機(jī)器人核心類(lèi)圖如圖3所示。 圖3 機(jī)器人核心類(lèi)圖 圖中,ExcelHelper類(lèi)用于讀取數(shù)據(jù);InputAlphabet類(lèi)用于設(shè)置自動(dòng)機(jī)的輸入字母表,完成狀態(tài)跳轉(zhuǎn)。 機(jī)器人自動(dòng)錄入流程如圖4所示。 圖4 機(jī)器人自動(dòng)錄入流程 核心代碼如下: public void ConfigOpt() { if(totalTable!=null) { if(rowIndex { label2.Text=rowIndex.ToString()+"/"+(totalTable.Rows.Count-1); for(inti=0;i //選定第i個(gè)位置 { 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//復(fù)制操作 { Clipboard.Clear(); Clipboard.SetText(totalTable.Rows[rowIndex][i].ToString()); //第rowIndex條數(shù)據(jù)的第i個(gè)信息元 }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++; } } } 文中設(shè)計(jì)的財(cái)政支付機(jī)器人于2018年11月投入使用,2018年11月之前采用人工錄入,人工錄入安排2人,各占用1臺(tái)PC,PC配置如下:CPU為Intel(R) Core(TM) i3 CPU M350@2.27GHz;內(nèi)存為4 G;操作系統(tǒng)為Win7 旗艦版(32位)。 現(xiàn)有方式為機(jī)器人錄入,1臺(tái)機(jī)器人錄入需要一臺(tái)PC支撐,PC配置同上。表1是2017年度和2018年度12月份數(shù)據(jù)對(duì)比。 表1 數(shù)據(jù)對(duì)比 注:數(shù)據(jù)源自某大學(xué)財(cái)務(wù)系統(tǒng);8小時(shí)*75%為人工錄入有效用時(shí);準(zhǔn)確率來(lái)自對(duì)賬后的數(shù)據(jù)統(tǒng)計(jì)。 通過(guò)以上數(shù)據(jù)對(duì)比發(fā)現(xiàn),人工錄入速率約為2分鐘一條數(shù)據(jù),機(jī)器人錄入速率約為一分鐘6筆,機(jī)器人錄入效率遠(yuǎn)遠(yuǎn)大于人工錄入效率;人工錄入準(zhǔn)確率很難達(dá)到100%,而機(jī)器人錄入可以達(dá)到無(wú)差錯(cuò)錄入。 文中基于確定有限狀態(tài)自動(dòng)機(jī)(DFA)理論和笛卡爾集構(gòu)建了一種數(shù)據(jù)自動(dòng)處理機(jī)器人模型,依據(jù)該模型,設(shè)計(jì)了財(cái)政支付數(shù)據(jù)錄入機(jī)器人?;?NET FrameWork 4.0,對(duì)財(cái)政支付數(shù)據(jù)錄入機(jī)器人進(jìn)行了實(shí)現(xiàn)。通過(guò)這種機(jī)器人,2個(gè)員工一天的錄入工作量,可以用1個(gè)小時(shí)來(lái)完成,極大提高了工作效率。1.2 笛卡爾集握手認(rèn)證模型
|s∈T2,V∈T1}2 財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人設(shè)計(jì)
2.1 財(cái)政數(shù)據(jù)自動(dòng)錄入機(jī)器人
2.2 握手認(rèn)證設(shè)計(jì)
|s∈T2,V∈T1}3 方案實(shí)現(xiàn)
3.1 主機(jī)喚醒程序
3.2 機(jī)器人程序
4 實(shí)驗(yàn)對(duì)比
5 結(jié)束語(yǔ)