張 杰
(中國(guó)鐵道科學(xué)研究院集團(tuán)有限公司通信信號(hào)研究所,北京 100081)
目前,國(guó)內(nèi)大部分計(jì)算機(jī)聯(lián)鎖軟件應(yīng)用層的設(shè)計(jì),采用程序和數(shù)據(jù)分離的思想[1]。其中,程序?qū)崿F(xiàn)了模塊化、定型化,而數(shù)據(jù)根據(jù)不同的站場(chǎng)進(jìn)行配置,這種方法實(shí)際上繼承了傳統(tǒng)6502電氣集中的設(shè)計(jì)思想[2]。
為了實(shí)現(xiàn)程序代碼的批量生產(chǎn),各研制單位分別開發(fā)了計(jì)算機(jī)輔助設(shè)計(jì)軟件(CAD),它依據(jù)平面圖,選取信號(hào)機(jī)、道岔、軌道區(qū)段等對(duì)象模塊,畫出站場(chǎng)圖形,根據(jù)站場(chǎng)圖形對(duì)象的上、下、左、右?guī)缀侮P(guān)系,初步生成對(duì)象的鏈接數(shù)據(jù),軟件人員根據(jù)聯(lián)鎖表、驅(qū)動(dòng)采集表、藍(lán)圖等設(shè)計(jì)文件,結(jié)合整體、局部的站場(chǎng)特征,設(shè)置各對(duì)象的屬性,填寫特殊的聯(lián)鎖條件,補(bǔ)充零散的代碼,最后,再由CAD軟件整合這些數(shù)據(jù),生成待編譯的聯(lián)鎖軟件。在此過程中,軟件關(guān)鍵的數(shù)據(jù)[3],如超限、信號(hào)顯示關(guān)系、帶動(dòng)防護(hù)、場(chǎng)聯(lián)、站聯(lián)等接口,以及特殊電路要求的特殊代碼,都必須由軟件人員通過縝密的思考,然后逐條、逐項(xiàng)地輸入。此過程容易出現(xiàn)筆誤,遺漏,甚至邏輯錯(cuò)誤;況且,軟件人員技術(shù)水平參差不齊,可能會(huì)造成軟件質(zhì)量不高[4],實(shí)現(xiàn)方式不統(tǒng)一的情況。而經(jīng)驗(yàn)豐富的專家,已積累了大量、可靠、經(jīng)過實(shí)踐檢驗(yàn)的知識(shí),并能遵循 “故障導(dǎo)向安全”原則進(jìn)行設(shè)計(jì)[5],因此,整合聯(lián)鎖軟件專家的經(jīng)驗(yàn),設(shè)計(jì)專家系統(tǒng)[6],使聯(lián)鎖數(shù)據(jù)實(shí)現(xiàn)自動(dòng)生成,進(jìn)一步提高生產(chǎn)的智能化,便成為計(jì)算機(jī)聯(lián)鎖軟件編制的實(shí)際需求。
聯(lián)鎖數(shù)據(jù)的編制,初始階段有兩步,一是讀圖,編寫需求,然后才是軟件人員編寫代碼。在前一個(gè)階段,結(jié)合設(shè)計(jì)人員,根據(jù)設(shè)計(jì)院提供的設(shè)計(jì)藍(lán)圖,把本車站的需求,以文件形式列出,軟件人員拿到需求,和設(shè)計(jì)藍(lán)圖進(jìn)行核對(duì),一方面為了核實(shí)用戶需求,另一方面,為了獲取軟件需要的詳細(xì)信息。
開發(fā)一個(gè)實(shí)現(xiàn)聯(lián)鎖數(shù)據(jù)編制的專家系統(tǒng),首先要解決的就是設(shè)計(jì)藍(lán)圖信息的輸入問題。
考慮到Excel簡(jiǎn)單、實(shí)用,并且功能十分強(qiáng)大[7],結(jié)合設(shè)計(jì)人員完全可以將“用戶需求”改為Excel格式,和專家系統(tǒng)用同一個(gè)文件,這樣,“用戶需求”從開始制作,到專家系統(tǒng)的讀取,試驗(yàn)階段的核對(duì),都采用同一份Excel文件,可以保證需求文件的一致性,因此,本文優(yōu)先推薦采用Excel格式文件。
聯(lián)鎖是嚴(yán)密的邏輯關(guān)系,在藍(lán)圖上往往以拓?fù)鋱D(如信號(hào)顯示關(guān)系、信號(hào)點(diǎn)燈電路)或表格形式(如聯(lián)鎖表)來表示[8],要將它們表示在Excel上,可利用Excel的表單控件,如表1所示。
表1 信號(hào)關(guān)系標(biāo)準(zhǔn)化示例
表1中,本架信號(hào)機(jī)與后架信號(hào)機(jī)之間的顯示關(guān)系用對(duì)應(yīng)的單元格數(shù)值關(guān)系來表示。其中,用了大量的表單控件,只用打鉤即可。類似的一些特殊電路,如點(diǎn)燈電路、自閉電路、場(chǎng)聯(lián)電路、半自動(dòng)電路、各種報(bào)警信息、防護(hù)及帶動(dòng)、推峰溜放、接近鎖閉、機(jī)務(wù)段聯(lián)系等[9],都可以建立相應(yīng)Excel表。結(jié)合設(shè)計(jì)人員及聯(lián)鎖軟件人員打勾或按格式填寫,形成統(tǒng)一、標(biāo)準(zhǔn)格式的數(shù)據(jù)。
專家系統(tǒng)屬于人工智能的課題,其內(nèi)部含有大量的某領(lǐng)域?qū)I(yè)知識(shí)和經(jīng)驗(yàn)[10],它能根據(jù)這些知識(shí)和經(jīng)驗(yàn),進(jìn)行推理和判斷,模擬人類專家,進(jìn)行決策,解決復(fù)雜的問題。
一般專家系統(tǒng)由5個(gè)部分組成。
(1)知識(shí)庫(kù)[11]。
(2)綜合數(shù)據(jù)庫(kù)。
(3)推理機(jī)。
(4)解釋器。
(5)接口。
結(jié)合計(jì)算機(jī)聯(lián)鎖軟件的制作,其輔助設(shè)計(jì)專家系統(tǒng)的結(jié)構(gòu)如圖1所示。
圖1 聯(lián)鎖軟件制作專家系統(tǒng)總體框圖
用戶界面模塊實(shí)現(xiàn)軟件人員向推理機(jī)輸入各種操作命令,同時(shí),也把流程控制及推理的解釋信息反饋給用戶。數(shù)據(jù)處理模塊實(shí)現(xiàn)推理機(jī)和外部數(shù)據(jù)、用戶信息及推理輸出數(shù)據(jù)的轉(zhuǎn)換。推理用的事實(shí)、實(shí)例,需要從Excel格式的需求文件、Txt格式的IO表、電子版的聯(lián)鎖表及CAD生成的初始對(duì)象數(shù)據(jù)中提取,推理輸出的各種聯(lián)鎖對(duì)象數(shù)據(jù)也往往是字符串形式,需要轉(zhuǎn)換后寫入對(duì)應(yīng)的聯(lián)鎖對(duì)象。因此,數(shù)據(jù)處理模塊完成數(shù)據(jù)中轉(zhuǎn)、變換功能。推理機(jī)可以選用由美國(guó)航空航天局開發(fā)的CLIPS[12],并采用Mark Tomlinson編制的動(dòng)態(tài)庫(kù)CLIPS.DLL,以及為該動(dòng)態(tài)庫(kù)編制的CLIPSWrap 包裝類。知識(shí)庫(kù)由經(jīng)驗(yàn)豐富的聯(lián)鎖軟件制作人員和專家系統(tǒng)開發(fā)者共同建立,知識(shí)庫(kù)是推理的重要基礎(chǔ)[13]。
專家系統(tǒng)的知識(shí)庫(kù)用于存儲(chǔ)領(lǐng)域的專門知識(shí),包括事實(shí)、操作規(guī)則等[14]。為了建立知識(shí)庫(kù),首先要解決知識(shí)表示問題。
按照聯(lián)鎖軟件制作的一般流程,先形成需求文件、I/O接口碼位表,軟件人員讀這些文件及藍(lán)圖資料,利用CAD工具,輸入帶有邏輯判斷的代碼及數(shù)據(jù)。專家系統(tǒng)要模擬人的工作,也需要輸入,這里的“輸入”就是知識(shí)的表示,聯(lián)鎖軟件制作專家系統(tǒng)中,采用事實(shí)和面向?qū)ο蟮谋硎痉椒?。例如,?shù)據(jù)處理模塊利用文本格式的I/O表文件,建立模板:
(deftemplate ioinfo "I/O table "
(slot ioname (type STRING)(default "null"));I/O名
(slot io-lsname (type SYMBOL)(default null));聯(lián)鎖軟件中的名字
(slot belong-obj (default null));隸屬哪個(gè)對(duì)象
(slot in_out (type STRING)(allowed-strings "INPUT" "OUTPUT"));類型是輸入還是輸出
(slot chassis (type INTEGER)(range 1 8));機(jī)籠號(hào)
(slot slotname (type INTEGER));槽號(hào)
(slot seq-number (type INTEGER);板號(hào)
(range 1 48))
(slot stano (type INTEGER);站場(chǎng)號(hào)
(range 0 2)(default 0)))
基于此模板,把IO表轉(zhuǎn)化為CLIPS事實(shí)文件。專家系統(tǒng)利用平面圖、CAD形成的各對(duì)象的初步數(shù)據(jù),轉(zhuǎn)化為面向?qū)ο蟮膶?shí)例表示,如進(jìn)站信號(hào)類,表示為:
(defclass HOME-SIG;
(is-a ILOCK-SIGNAL)
(role concrete) (pattern-match reactive)
(slot no-drive-zxj;不驅(qū)ZXJ
(type SYMBOL)
(create-accessor read-write);
(allowed-symbols true false)(default false))
(slot no-drive-txj;不驅(qū)TXJ
(type SYMBOL)
(create-accessor read-write);
(allowed-symbols true false)(default false))
(slot no-drive-luxj;不驅(qū)LUXJ
(type SYMBOL)
(create-accessor read-write);
(allowed-symbols true false)(default false)) (slot have-mwhite;有引導(dǎo)顯示
(type SYMBOL) (create-accessor read-write)
(allowed-symbols true false null)
(default null))
(slot have-Yellow2;有雙黃顯示
(type SYMBOL) (create-accessor read-write)
(allowed-symbols true false null)
(default null)))
各對(duì)象的特殊屬性,即事實(shí)及實(shí)例的slot值,來源為設(shè)計(jì)文件及Excel格式的需求文件,利用Excel強(qiáng)大的VBA編程,再由數(shù)據(jù)處理模塊讀入,修改實(shí)例的slot值。
CLIPS采用正向推理機(jī)制[15],支持產(chǎn)生式規(guī)則。產(chǎn)生式規(guī)則可用P→Q表示,P表示一組模式(或叫前提條件),Q是要執(zhí)行的若干動(dòng)作和結(jié)論。聯(lián)鎖關(guān)系涉及大量的規(guī)則,軟件數(shù)據(jù)的制作就是利用各種規(guī)則進(jìn)行分類判斷,如果分類的判定樹建立得不好[16],一方面會(huì)影響程序執(zhí)行的效率,另一方面,可能會(huì)造成CLIPS產(chǎn)生大量部分匹配,鑒于此,筆者嘗試采用ID3( Iterative Dichotomiser)算法[17]。ID3算法由Ross Quinlan提出,它是在判定樹每個(gè)節(jié)點(diǎn)處選取能獲得最高信息增益的分支屬性進(jìn)行分裂。
熵在信息論中被用來度量信息量,熵越大,所含的有用信息越多,其不確定性就越大,在決策樹中,用熵來表示樣本集的不純度,熵越大,越不確定,表示樣本集中的分類越多樣。
設(shè)S為數(shù)量為n的樣本集,其分類屬性有n個(gè)不同取值,用來定義m個(gè)不同分類Ci(i=1,2,…,m),則其熵的計(jì)算公式為
(1)
設(shè)屬性A有v個(gè)可能取值,即通過將屬性A設(shè)置為分支屬性,能夠?qū)颖炯疭劃分為v個(gè)子樣本集(S1,S2,….Sv),以A為分支屬性的信息增益為
(2)
下面舉例說明。以特殊的場(chǎng)聯(lián)口信號(hào)機(jī)處理為例,其站場(chǎng)特征為進(jìn)路內(nèi)方只有一個(gè)區(qū)段,并且為場(chǎng)聯(lián)軌。搜集典型的10個(gè)車站場(chǎng)聯(lián)口信號(hào)作為樣本,如表2所示。
表2 特殊場(chǎng)聯(lián)樣本集
表2中共有10個(gè)樣本,其中有襄陽(yáng)北V場(chǎng)D5105、喬司上到發(fā)XL21、僑城東車輛段D12B 、坡底下XZ 采用信號(hào)鏈左右換位的作法(其余采用虛按鈕作法)。由以上分析可得,最初判定前的熵為
0.970 951
“有并置”分類屬性的熵
Entropy(有并置)=
同理,無并置屬性的熵為:0.918 296。
因此,設(shè)“有并置”的屬性為Y,其作為分支屬性分裂后的信息增益為
Gain(Y)=Entropy(S)-Entropy(S|Y)=
0.005 803
同理,可以計(jì)算出,以“并置敵對(duì)”、“列調(diào)場(chǎng)聯(lián)”、“終端按鈕并置”的為分支屬性的信息增益分別為0.556 78,0.144 485,0.321 929,由此可知,“并置敵對(duì)”作為分支屬性時(shí),能獲得最大信息增益。所以此處選“并置敵對(duì)”為根節(jié)點(diǎn)進(jìn)行劃分。
繼續(xù)按照此方法,直至分類完成。
站場(chǎng)特征的識(shí)別,是建立規(guī)則庫(kù)的重要基礎(chǔ),而站場(chǎng)特征來自車站網(wǎng)絡(luò)結(jié)構(gòu)圖[18],因此,如何快速、簡(jiǎn)便地訪問網(wǎng)絡(luò)圖的各對(duì)象,便成為專家系統(tǒng)研究的另一內(nèi)容。
筆者曾用VC++實(shí)現(xiàn)站場(chǎng)網(wǎng)絡(luò)的遍歷,然后將識(shí)別結(jié)果發(fā)送給CLIPS;后來嘗試在CLIPS中,用面向?qū)ο蟮闹R(shí)表示,實(shí)現(xiàn)站場(chǎng)遍歷。以下就兩種算法進(jìn)行比較。
3.3.1 用二叉樹數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)遍歷
樹形結(jié)構(gòu)是結(jié)點(diǎn)之間有分支[19],并具有層次關(guān)系的結(jié)構(gòu)。二叉樹是樹形結(jié)構(gòu)的一個(gè)重要類型,它是n個(gè)結(jié)點(diǎn)的有限集,它或者是空集(n=0),或者由一個(gè)根結(jié)點(diǎn)及兩棵互不相交的,分別稱作這個(gè)根的左子樹和右子樹的二叉樹組成,左子樹及右子樹的根稱為根結(jié)點(diǎn)的左孩子和右孩子,這是個(gè)遞歸的定義。
圖2為簡(jiǎn)單示例站場(chǎng),其二叉樹模型如圖3所示(Ф為虛結(jié)點(diǎn))。
圖2 示例部分站場(chǎng)
圖3 示例站場(chǎng)的二叉樹模型
二叉樹的遍歷[20],是指沿某條路徑周游二叉樹,對(duì)樹中每個(gè)結(jié)點(diǎn)訪問一次且僅訪問一次。這里,采用前序遍歷算法,若二叉樹非空,則依次進(jìn)行如下操作。
(1)訪問根結(jié)點(diǎn)。
(2)遍歷左子樹。
(3)遍歷右子樹。
算法流程見圖4。
圖4 示例站場(chǎng)二叉樹遍歷算法流程
3.3.2 CLIPS中用自定義函數(shù)實(shí)現(xiàn)遍歷
如前所述,本專家系統(tǒng)采用面向?qū)ο蟮闹R(shí)表示方法,允許為道岔、信號(hào)、無岔等編寫自定義消息處理函數(shù)。由于自定義函數(shù)支持多字段變量作為參數(shù),站場(chǎng)遍歷的實(shí)現(xiàn)變得非常簡(jiǎn)便。
以下是道岔、信號(hào)機(jī)的消息函數(shù):
(defmessage-handler ILOCK-SWITCH
bianli( $?r);$?r為多字段變量作參數(shù)
(bind $?rinfo (create$ ?r))
(bind ?lastobj (nth$
(length$ $?rinfo) $?rinfo))
;?lastobj變量為消息的最后一個(gè)對(duì)象
(if (or (eq ?lastobj ?self:normal-link) (eq ?lastobj ?self:reverse-link))
;如果最后的對(duì)象是本道岔的定位或反位鏈
then
(send symbol-to-instance-name ?self:front-link) bianli (create$ ?r ?self:myname))
; 向本道岔的前鏈發(fā)送遍歷消息,并且多字段變量$?r增加本道岔的信息
else (if (eq ?lastobj ?self:front-link)
then
;如果是從岔前鏈來的消息,則給定位及反位鏈發(fā)送遍歷消息。
(send (symbol-to-instance-name ?self:normal-link) bianli (create$ ?r ?self:myname))
(send (symbol-to-instance-name ?self:reverse-link) bianli (create$ ?r ?self:myname)))))
(defmessage-handler OTHER-SIG bianli( $?r)
(send (symbol-to-instance-name ?self:right-link) bianli (create$ ?r ?self:myname)))
其邏輯非常簡(jiǎn)單,就是以多字段變量為參數(shù),從進(jìn)路的始端開始,按照進(jìn)路方向及對(duì)象的鏈接關(guān)系(前面數(shù)據(jù)處理模塊已建立),各對(duì)象分別處理自己的消息函數(shù),把需要的特征內(nèi)容,添加到傳遞的多字段變量,然后,把這個(gè)消息往前發(fā),直至進(jìn)路終端,如果滿足進(jìn)路終端的要求,則把多字段變量存儲(chǔ)為特征事實(shí)。
站場(chǎng)的遍歷在特征獲取、數(shù)據(jù)生成方面有著廣泛的應(yīng)用,如存儲(chǔ)溜放區(qū)敵對(duì)信號(hào)的識(shí)別、全站進(jìn)路信息的生成、長(zhǎng)調(diào)車進(jìn)路特征的計(jì)算等等。基于二叉樹的遍歷算法,在既有的計(jì)算機(jī)輔助設(shè)計(jì)軟件中已有應(yīng)用,但要用堆棧操作,聯(lián)鎖對(duì)象的邏輯判斷也比較復(fù)雜,而CLIPS消息函數(shù)的方法把遍歷功能分解為各個(gè)對(duì)象的消息處理,原理清晰,邏輯簡(jiǎn)單,更適合于本專家系統(tǒng)。
聯(lián)鎖軟件制作專家系統(tǒng)和用VC++編寫的輔助設(shè)計(jì)工具CAD互相配合,最終完成聯(lián)鎖軟件的生成。因此,涉及到CLIPS和VC++的交互問題[21]。
CLIPS由C語(yǔ)言設(shè)計(jì),因此,可以方便地嵌入到VC++。有兩種嵌入方式,一種是直接嵌入,一種是加載動(dòng)態(tài)鏈接庫(kù)。本系統(tǒng)采用動(dòng)態(tài)鏈接庫(kù),并使用包裝類CCLIPSWrap,CCLIPSWrap類符合VC++面向?qū)ο蟮脑O(shè)計(jì)風(fēng)格,更有條理,方便用戶使用。
CLIPS和VC++交互技術(shù),實(shí)質(zhì)是兩者如何方便地互傳數(shù)據(jù)。
本系統(tǒng)采用4種方法。
(1) 用戶定義函數(shù)。
例如向CLIPS傳字符串,在VC++中,聲明CString toclip;編寫全局函數(shù):
void* toclips()
{
void *returnValue;
returnValue=g_clips.CLIPSAddSymbol(toclip);
return (returnValue);
}
然后,調(diào)用CCLIPSWrap類的AddFunction,
g_clips.AddFunction("toclips",'w',PTIF toclips,"toclips","00"),即可以在CLIPS中調(diào)用toclips,方便地得到VC++傳來的字符串。
(2)用CLIPSAssert在CLIPS中建立控制事實(shí)。
(3)調(diào)用函數(shù)CLIPSNextFact()或CLIPSNext FactString搜索所有事實(shí),得到所要修改事實(shí)的指針factPtr,再用ReadFactSlot讀,或用WriteFactSlot寫指定的槽值。
(4)調(diào)用CCLIPSWrap類的CLIPSDirectPutSlot直接修改實(shí)例的槽值。
CLIPS的推理結(jié)果或返回的控制事實(shí)、實(shí)例的槽值,可通過內(nèi)存緩沖區(qū),方便地傳給VC++。
首先,指定路由,由CCLIPSWrap類的SetRoute Buffer(&arrStrFromclip,"tovc")實(shí)現(xiàn),arrStrFromclip是事先的定義字符串?dāng)?shù)組,tovc叫做邏輯名[22],可以任意指定,CLIPS常常用邏輯名代表文件、輸入輸出設(shè)備、緩沖區(qū)等。這樣,在CLIPS規(guī)則或函數(shù)中,就可以用printout函數(shù)將結(jié)果寫到字符串?dāng)?shù)組中,如(printout tovc "出站信號(hào),請(qǐng)核實(shí)!")。
無論是從VC++到CLIPS,還是從CLIPS到VC++,都可以先產(chǎn)生文本文件,再由對(duì)方加載。
例如,本系統(tǒng)在生成信號(hào)機(jī)、道岔、無岔區(qū)段等類的實(shí)例時(shí),先由VC++的WriteString函數(shù)將實(shí)例以字符串形式寫入文本文件,再由CCLIPSWrap類的CLIPSLoad函數(shù)加載此文本文件,生成對(duì)象實(shí)例。
從CLIPS寫文件也十分方便。比如,要往C盤“cad-data.txt”中寫文件,可以由以下規(guī)則實(shí)現(xiàn):
( defrule dd2
(not (star-write-cad-irregular))
;如果以只寫的方式且已經(jīng)打開文件
(test (open "C:\cad-data.txt" cad_data1 "w"))
=>
(close cad_data1);關(guān)閉該文件
(assert (star-write-cad-irregular))
(open "C:\cad-data.txt" cad_data1 "a")
);以添加方式打開文件
( defrule announce-irregular-info
(ioinfo (ioname ?io-name) (belong-obj irregular))
?n <-(star-write-cad-irregular)
=>
(printout cad_data1 "INPUT:" ?io-name crlf))
Open函數(shù)中的 cad_data1是邏輯名,"w"、"a"是文件的存取方式,"w"是只寫,"a"是添加。以上兩條規(guī)則可以實(shí)現(xiàn)往C盤“cad-data.txt”以追加方式寫,不會(huì)覆蓋以前的內(nèi)容。
本文首先介紹當(dāng)前計(jì)算機(jī)聯(lián)鎖軟件制作的過程,指出其中存在的問題,為減少人為判斷的失誤,提出輔助設(shè)計(jì)和專家系統(tǒng)相結(jié)合,重點(diǎn)論述了知識(shí)庫(kù)的建立,采用面向?qū)ο蟮闹R(shí)表示,選取典型的工程案例,詳細(xì)說明了ID3算法在建立判定樹的應(yīng)用,通過ID3計(jì)算,可以對(duì)分類的判定節(jié)點(diǎn)進(jìn)行優(yōu)化,提高規(guī)則的合法化及程序執(zhí)行的效率。在站場(chǎng)特征識(shí)別方面,重點(diǎn)討論了兩種站場(chǎng)遍歷的算法,第一種算法以二叉樹數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ),采用堆棧,實(shí)現(xiàn)站場(chǎng)的遍歷;第二種方法直接在CLIPS中用消息傳遞來實(shí)現(xiàn),不需要作數(shù)據(jù)轉(zhuǎn)換,邏輯明確,算法簡(jiǎn)單,具有相對(duì)的優(yōu)越性。在文章最后,總結(jié)了VC++和CLIPS的交互技術(shù),這些實(shí)用的技術(shù)使VC++和CLIPS傳遞信息更為方便。
經(jīng)實(shí)驗(yàn),聯(lián)鎖軟件制作專家系統(tǒng),可以初步達(dá)到設(shè)計(jì)預(yù)期的目標(biāo),即模擬專家的經(jīng)驗(yàn),在軟件制作過程中,有序可控,對(duì)聯(lián)鎖關(guān)系判斷正確,數(shù)據(jù)不遺漏,減少重復(fù)性的工作。需要指出的是,對(duì)特殊的站形、特殊的數(shù)據(jù),需要由系統(tǒng)開發(fā)人員和聯(lián)鎖專家人員共同協(xié)作,不斷完善知識(shí)庫(kù),以解決專家系統(tǒng)的學(xué)習(xí)問題。