黃 旭
(中鐵第一勘察設(shè)計(jì)院集團(tuán)有限公司,西安 710000)
隨著全球?qū)Ш叫l(wèi)星系統(tǒng)的發(fā)展,衛(wèi)星定位的技術(shù)在軌道交通領(lǐng)域的應(yīng)用也日漸成熟。國(guó)外的RUNE[1]、GADEROS[2]和LOCOPROL[3];國(guó)內(nèi)的青藏鐵路增強(qiáng)型列車(chē)控制系統(tǒng)(ITCS)以及正在試驗(yàn)的新型列控系統(tǒng)均是將衛(wèi)星定位作為列車(chē)定位的重要手段。尤其隨著我國(guó)自主研發(fā)的北斗衛(wèi)星導(dǎo)航系統(tǒng)的不斷發(fā)展,將北斗衛(wèi)星定位應(yīng)用于鐵路各個(gè)領(lǐng)域的研究也日益增長(zhǎng)[4-7]。
基于軌道線路的電子地圖數(shù)據(jù)是實(shí)現(xiàn)列車(chē)衛(wèi)星定位的前提,不正確的電子地圖數(shù)據(jù)將會(huì)導(dǎo)致列車(chē)定位失效或錯(cuò)誤,甚至?xí)?dǎo)致系統(tǒng)輸出錯(cuò)誤或停車(chē)等事故,因此確保電子地圖數(shù)據(jù)的正確性至關(guān)重要。電子地圖數(shù)據(jù)的生成過(guò)程可概括為:前期設(shè)計(jì)、現(xiàn)場(chǎng)測(cè)繪、數(shù)據(jù)生成、驗(yàn)證與確認(rèn)。前期設(shè)計(jì)是生成電子地圖數(shù)據(jù)的第一步,將前期設(shè)計(jì)輸出的內(nèi)容暫且定義為電子地圖基礎(chǔ)數(shù)據(jù)(簡(jiǎn)稱(chēng)“基礎(chǔ)數(shù)據(jù)”)?;A(chǔ)數(shù)據(jù)是根據(jù)系統(tǒng)需求和相關(guān)規(guī)范進(jìn)行設(shè)計(jì),可供后續(xù)測(cè)繪和制作電子地圖數(shù)據(jù)文件使用,基礎(chǔ)數(shù)據(jù)是源頭,其正確與否直接關(guān)系到后續(xù)工作的正確性。為確保列車(chē)精確定位和系統(tǒng)安全運(yùn)行,需對(duì)電子地圖基礎(chǔ)數(shù)據(jù)進(jìn)行正確性驗(yàn)證。
當(dāng)前電子地圖基礎(chǔ)數(shù)據(jù)的驗(yàn)證方式主要為人工校驗(yàn),存在以下問(wèn)題:一是易出錯(cuò),校核過(guò)程個(gè)人的能力水平直接決定著校核質(zhì)量,易帶來(lái)錯(cuò)誤判斷或遺漏等問(wèn)題;二是效率低,人工判斷時(shí)間花費(fèi)較長(zhǎng),且因現(xiàn)場(chǎng)或試驗(yàn)結(jié)果,基礎(chǔ)數(shù)據(jù)的迭代頻次較高,這就導(dǎo)致人工核對(duì)效率無(wú)法滿足實(shí)際需求。因此探索一種高效、準(zhǔn)確的驗(yàn)證方法,對(duì)確保電子地圖的正確性有重要意義,也有助于實(shí)現(xiàn)列車(chē)精確定位。
當(dāng)前對(duì)軌道電子地圖數(shù)據(jù)的研究主要集中在地圖數(shù)據(jù)處理、約簡(jiǎn)和地圖匹配算法等方面。文獻(xiàn)[8]提出一套生成高精度軌道電子地圖的數(shù)據(jù)處理方法,分別采用卡爾曼濾波方法對(duì)采集數(shù)據(jù)進(jìn)行濾波,采用軌跡擬合方法對(duì)軌道曲線進(jìn)行歸一化處理,采用垂直距離判據(jù)數(shù)據(jù)約簡(jiǎn)算法去除冗余數(shù)據(jù),最終可生成高精度電子地圖數(shù)據(jù)。文獻(xiàn)[9]提出用線段近似法描述曲線軌道,可保證軌道精度又降低數(shù)據(jù)量。文獻(xiàn)[10]提出基于方位角的曲率方法對(duì)線路的平面線性進(jìn)行特征識(shí)別與分段擬合。文獻(xiàn)[11]對(duì)電子地圖數(shù)據(jù)進(jìn)行分析,開(kāi)發(fā)了電子地圖生成軟件。文獻(xiàn)[12-14]分別對(duì)電子地圖的匹配算法進(jìn)行了研究,通過(guò)仿真可證明匹配算法的準(zhǔn)確性。作為電子地圖數(shù)據(jù)驗(yàn)證中重要的環(huán)節(jié),電子地圖基礎(chǔ)數(shù)據(jù)的驗(yàn)證目前研究較少。
針對(duì)當(dāng)前現(xiàn)狀,本文首先對(duì)電子地圖基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和內(nèi)容進(jìn)行分析;深入分析基礎(chǔ)數(shù)據(jù),結(jié)合相關(guān)規(guī)范和領(lǐng)域?qū)<抑R(shí),提取出基礎(chǔ)數(shù)據(jù)驗(yàn)證規(guī)則;針對(duì)基礎(chǔ)數(shù)據(jù)內(nèi)容多、變更頻繁等特點(diǎn),提出一種電子地圖基礎(chǔ)數(shù)據(jù)建模與驗(yàn)證方法,用Prolog語(yǔ)言描述數(shù)據(jù)和驗(yàn)證規(guī)則,搭建其驗(yàn)證模型。最后以實(shí)際線路數(shù)據(jù)為例,搭建其數(shù)據(jù)驗(yàn)證模型,證明該驗(yàn)證方法的高效性和準(zhǔn)確性。這對(duì)提高電子地圖數(shù)據(jù)的正確性有著積極作用。
當(dāng)前不同列控系統(tǒng)對(duì)應(yīng)的電子地圖數(shù)據(jù)格式不盡相同,本文以其中一種列控系統(tǒng)對(duì)應(yīng)的數(shù)據(jù)為例展開(kāi)研究。電子地圖數(shù)據(jù)以車(chē)站為最小數(shù)據(jù)組織單位,區(qū)間數(shù)據(jù)按照劃分原則分別納入相鄰的車(chē)站數(shù)據(jù)組織。電子地圖數(shù)據(jù)包含軌道地理信息文件和固定應(yīng)用數(shù)據(jù)文件,軌道地理信息描述的是衛(wèi)星數(shù)據(jù)與軌道位置數(shù)據(jù)間的對(duì)應(yīng)關(guān)系,固定應(yīng)用數(shù)據(jù)文件描述了區(qū)間和站內(nèi)的關(guān)鍵設(shè)備及邊界所在的軌道和坐標(biāo)位置信息。地圖數(shù)據(jù)均是依據(jù)基礎(chǔ)數(shù)據(jù)加上測(cè)繪數(shù)據(jù)編制而成。
電子地圖基礎(chǔ)數(shù)據(jù)一般是由設(shè)計(jì)院輸出的一套Excel表格,描述了每個(gè)車(chē)站管轄范圍內(nèi)測(cè)繪的軌道、關(guān)鍵點(diǎn)的名稱(chēng)、類(lèi)型、所在軌道、里程等信息?;A(chǔ)數(shù)據(jù)包括車(chē)站信息表、軌道信息表、關(guān)鍵點(diǎn)信息表、應(yīng)答器信息表和道岔信息表,如線路里程存在里程轉(zhuǎn)換或斷鏈則還需要補(bǔ)充里程轉(zhuǎn)換信息表和斷鏈信息表。車(chē)站信息表描述了線路中車(chē)站名稱(chēng)、對(duì)應(yīng)的各級(jí)編號(hào)及車(chē)站所屬的中心設(shè)備序號(hào)。軌道信息表描述了線路劃分的軌道號(hào)、軌道的起始和結(jié)束邊界以及邊界對(duì)應(yīng)的里程和相對(duì)軌道起點(diǎn)的位置。關(guān)鍵點(diǎn)包括3種類(lèi)型:應(yīng)答器、道岔和數(shù)據(jù)邊界,關(guān)鍵點(diǎn)信息表分別描述了各種關(guān)鍵點(diǎn)的類(lèi)型、名稱(chēng)、里程、所在軌道、距軌道起始邊界的位置等信息。應(yīng)答器信息表和道岔信息表則根據(jù)關(guān)鍵點(diǎn)信息表進(jìn)行填寫(xiě),應(yīng)答器信息表中補(bǔ)充了應(yīng)答器編號(hào)、用途等內(nèi)容,道岔信息表中補(bǔ)充了開(kāi)岔開(kāi)向、定位開(kāi)向等信息。基礎(chǔ)數(shù)據(jù)中的位置數(shù)據(jù)均是基于線路運(yùn)營(yíng)里程計(jì)算所得,可供后續(xù)的測(cè)繪數(shù)據(jù)做一致性校驗(yàn)。對(duì)應(yīng)的數(shù)據(jù)組織關(guān)系如圖1所示。
圖1 軌道電子地圖基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)組織
電子地圖基礎(chǔ)數(shù)據(jù)驗(yàn)證規(guī)則來(lái)源可分為兩類(lèi):一是鐵總頒布的各類(lèi)行業(yè)規(guī)范文件;二是通過(guò)對(duì)基礎(chǔ)數(shù)據(jù)的深入分析和挖掘結(jié)合領(lǐng)域?qū)I(yè)知識(shí)提取所得?;A(chǔ)數(shù)據(jù)本身數(shù)據(jù)格式定義明確、數(shù)據(jù)間的關(guān)聯(lián)性較強(qiáng),因此根據(jù)其內(nèi)容特點(diǎn),可將規(guī)則概括為兩類(lèi):值域規(guī)則和邏輯規(guī)則。
基礎(chǔ)數(shù)據(jù)包含幾類(lèi)數(shù)據(jù)對(duì)象,每一類(lèi)數(shù)據(jù)對(duì)象所描述的信息均需滿足其對(duì)應(yīng)的值域規(guī)則,從數(shù)據(jù)類(lèi)型、格式、精度和取值范圍四方面對(duì)基礎(chǔ)數(shù)據(jù)的值域規(guī)則進(jìn)行描述。
2.1.1 數(shù)據(jù)類(lèi)型
不同的數(shù)據(jù)對(duì)象描述的內(nèi)容不同,每一項(xiàng)內(nèi)容屬性對(duì)應(yīng)的數(shù)據(jù)類(lèi)型不同?;A(chǔ)數(shù)據(jù)主要包含的數(shù)據(jù)類(lèi)型有:整型、字符串、布爾類(lèi)型、枚舉類(lèi)型。
2.1.2 數(shù)據(jù)格式
根據(jù)相關(guān)規(guī)范,基礎(chǔ)數(shù)據(jù)格式有明確要求,各項(xiàng)數(shù)據(jù)均有其對(duì)應(yīng)的命名或表示規(guī)則。如里程的格式應(yīng)為(KXXX+XXX);應(yīng)答器名稱(chēng)應(yīng)以B開(kāi)頭等。
2.1.3 數(shù)據(jù)精度
數(shù)據(jù)值應(yīng)與其對(duì)應(yīng)的單位精度匹配,如里程值精確到米;位置值精確到厘米。
2.1.4 取值范圍
每一項(xiàng)數(shù)據(jù)都有對(duì)應(yīng)的實(shí)際意義,根據(jù)相關(guān)規(guī)范和專(zhuān)業(yè)知識(shí),可總結(jié)得到某些數(shù)據(jù)對(duì)應(yīng)的取值范圍,如距軌道起點(diǎn)的位置值一定大于等于0;軌道號(hào)取值應(yīng)為正數(shù);根據(jù)區(qū)間長(zhǎng)度劃分原則可確定距軌道起點(diǎn)位置值的上限。
表1為提取得到的基礎(chǔ)數(shù)據(jù)值域規(guī)則具體內(nèi)容的部分示例。
表1 值域規(guī)則舉例
值域規(guī)則是對(duì)數(shù)據(jù)本身的值域、格式等方面的約束,邏輯規(guī)則是描述數(shù)據(jù)之間的約束關(guān)系。以下定義并列舉了部分電子地圖基礎(chǔ)數(shù)據(jù)的邏輯驗(yàn)證規(guī)則。
定義1:車(chē)站信息定義為
規(guī)則1:不可能存在編號(hào)相同的兩個(gè)車(chē)站。
(Regionnum,i,Partitionnum,i,Stationnum,i)≠
(Regionnum,j,Partitionnum,j,Stationnum,j)
定義2:若存在線路斷鏈,斷鏈數(shù)據(jù)定義為
定義3:軌道信息定義為
規(guī)則2:斷鏈長(zhǎng)度等于斷鏈起點(diǎn)和終點(diǎn)里程之差。
Dlength=|Dend-Dbegin|
規(guī)則3:軌道終點(diǎn)位置值與軌道終點(diǎn)里程、軌道起點(diǎn)里程以及是否包含斷鏈信息有關(guān)。若軌道起終點(diǎn)之間不存在斷鏈,則軌道終點(diǎn)位置等于終點(diǎn)里程與起點(diǎn)里程之差乘100;若存在斷鏈則需考慮斷鏈長(zhǎng)度。Di為斷鏈:
當(dāng)?Di∈D,Di?T,Tend_len=100*|Tend_loa-Tbegin_loa|;
當(dāng)?Di∈D,Di?T,Tend_len=100*(|Tend_loa-Tbegin_loa|±Dlength)。
式中,D為斷鏈合集,Di為斷鏈合集中的一個(gè)元素;T表示軌道合集。
規(guī)則4:同一車(chē)站內(nèi)軌道號(hào)唯一。
(Tstation,i,Tnum,i)=≠(Tstation,j,Tnum,j)
規(guī)則5:一般情況一條軌道長(zhǎng)度存在上限。
max{Tend_len,1,Tend_len,2, ,Tend_len,n} 定義4:應(yīng)答器信息定義為 規(guī)則6:當(dāng)且僅當(dāng)應(yīng)答器類(lèi)型是“虛擬”,對(duì)應(yīng)的用途為“XQ”。 Btype=“虛擬”<-->BUSE=“XQ” 規(guī)則7:應(yīng)答器組內(nèi)間距為5 m。 當(dāng)BGname,i=BGname,j且Gnum,j=Gnum,i+1時(shí),Bloa,j=Bloa,i±5。 規(guī)則8:應(yīng)答器距軌道起點(diǎn)的位置與應(yīng)答器里程、應(yīng)答器所在軌道起點(diǎn)里程以及是否包含斷鏈信息有關(guān)。 當(dāng)?Di∈D,Di?B,Blen=100*|Bloa-Tbegin_loa|; 當(dāng)?Di∈D,Di?B,Blen=100*(|Bloa-Tbegin_loa|±Dlength。 式中,D為斷鏈合集,Di為斷鏈合集中的一個(gè)元素;B表示應(yīng)答器與軌道起點(diǎn)之間數(shù)據(jù)合集。 規(guī)則9:應(yīng)答器所屬車(chē)站名稱(chēng)一定是車(chē)站信息表中的車(chē)站。 Bstation∈StationName 定義5:道岔信息定義為 規(guī)則10:一個(gè)車(chē)站內(nèi),同一條軌道上不存在岔尖里程相同的兩組道岔。 當(dāng)(Sstation,i=Sstation,j)∩(STtrack,i=STtrack,j)時(shí),Sloa,i≠Sloa,j 規(guī)則11:岔尖所屬軌道要不與定位所屬軌道一致,要不與反位所屬軌道一致。 (STtrack=SDtrack∩STtrack≠ SDtrack∩STtrack=SFtrack) 定義6:關(guān)鍵點(diǎn)信息定義為 規(guī)則12:關(guān)鍵點(diǎn)信息表中只描述組內(nèi)第一個(gè)應(yīng)答器信息。 當(dāng)(Gnum=1∪Gnum=null)∩(Ptype=“應(yīng)答器”)時(shí),P=B。 規(guī)則13:關(guān)鍵點(diǎn)信息表中應(yīng)包含道岔信息表中所有道岔。 當(dāng)(Ptype=“道岔”)時(shí),P=S。 規(guī)則14:關(guān)鍵點(diǎn)信息表中應(yīng)包含所有軌道邊界。 (Tbeginattr=“起始數(shù)據(jù)邊界”)∪Tbeginattr=“結(jié)束數(shù)據(jù)邊界”)∩(Ptype=“數(shù)據(jù)邊界”)時(shí),P=T。 其中:P表示關(guān)鍵點(diǎn)合集,B表示應(yīng)答器合集,S表示道岔合集,T表示軌道合集。 為實(shí)現(xiàn)電子地圖基礎(chǔ)數(shù)據(jù)的自動(dòng)驗(yàn)證,本文采用Prolog語(yǔ)言搭建基礎(chǔ)數(shù)據(jù)的驗(yàn)證模型,目的一是對(duì)驗(yàn)證規(guī)則進(jìn)行形式化描述,二是基于驗(yàn)證工具搜索出不滿足規(guī)則的數(shù)據(jù)反例,最終可實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)的自動(dòng)驗(yàn)證。 Prolog語(yǔ)言[15]是以一階謂詞邏輯為基礎(chǔ)的邏輯編程語(yǔ)言,采用陳述句式使用演繹推理進(jìn)行問(wèn)題求解,它利用已知事實(shí)和規(guī)則結(jié)合內(nèi)部搜索、匹配和回溯的推理機(jī)智自動(dòng)求解程序設(shè)定的目標(biāo),不需要在程序中列出詳細(xì)的求解步驟。Prolog語(yǔ)言僅具有事實(shí)、規(guī)則和目標(biāo)3種基本類(lèi)型[16]。Prolog語(yǔ)言在構(gòu)建專(zhuān)家系統(tǒng)[17-18]、智能檢索系統(tǒng)[19]、數(shù)據(jù)驗(yàn)證[20-21]等方面已有不少研究。 事實(shí)是用來(lái)描述已知的對(duì)象和他們之間的關(guān)系,事實(shí)由謂詞及對(duì)象組成,對(duì)象可以是一個(gè)或多個(gè)。謂詞和對(duì)象可由用戶自己定義。例如like(bill,dog),該事實(shí)描述的是bill喜歡cindy。 規(guī)則用來(lái)描述事實(shí)之間的依賴關(guān)系,由左邊表示結(jié)論的謂詞和右邊表示條件的謂詞組成,中間通過(guò)“:-”連接,以“.”結(jié)束。例如like(cindy,X):-like(bill,X)表示cindy喜歡bill喜歡的東西。 把事實(shí)和規(guī)則寫(xiě)進(jìn)Prolog語(yǔ)言描述后,可以其詢問(wèn)有關(guān)問(wèn)題的答案,問(wèn)題就是程序運(yùn)行的目標(biāo)。目標(biāo)可以是一個(gè)簡(jiǎn)單的謂詞,也可以是多個(gè)謂詞組合。例如?-like(cindy,dog)表示向程序詢問(wèn)“cindy是否喜歡狗?”。 本文用Prolog語(yǔ)言的事實(shí)描述電子基礎(chǔ)數(shù)據(jù),規(guī)則描述基礎(chǔ)數(shù)據(jù)應(yīng)滿足的驗(yàn)證規(guī)則,目標(biāo)則是遍歷數(shù)據(jù)是否滿足所有規(guī)則,并找出反例,即不符合驗(yàn)證規(guī)則的數(shù)據(jù)。 電子地圖基礎(chǔ)數(shù)據(jù)由車(chē)站信息表、軌道信息表、應(yīng)答器位置表、道岔信息表、關(guān)鍵點(diǎn)信息表組成,需要將excel表格中的每一行數(shù)據(jù)轉(zhuǎn)換為Prolog可識(shí)別的事實(shí)。各數(shù)據(jù)表的事實(shí)表示如下: 車(chē)站信息:station(Aid,Aname,Regionnum,Partitionnum,Stationnum,TSRS_Num,RBC_Num)。 軌道信息:track(Tid,Tstation,Tnum,Tbegin_attr,Tbegin_loa,Tbegin_len,Tend_attr,Tend_loa,Tend_len)。 應(yīng)答器信息:balise(Bid,BGname,BGnum,Gnum,Bloa,Btype,Buse,Bstation,Btrack,Blen)。 道岔信息:switch(Sid,Sstation,Snum,Sloa,Sdir,STtrack,STlen,SDtrack,SDlen,SDtrack,SDlen,SFtrack,SFlen)。 關(guān)鍵點(diǎn)信息:poi(Pid,Pstation,Ptype,Pname,Ptype2,Ptrack,Plen,Ploa)。 斷鏈信息:chain(Did,dtype,Dbegin,Dend,Dlength,Ddir)。 數(shù)據(jù)事實(shí)由對(duì)應(yīng)謂詞和參數(shù)組成,例如:track是軌道數(shù)據(jù)事實(shí)的謂詞,參數(shù)Tid序號(hào)、Tstation表示軌道所屬車(chē)站、Tnum表示軌道號(hào)、Tbegin_attr表示軌道起點(diǎn)屬性、Tbegin_loa表示起點(diǎn)里程、Tbegin_len表示起點(diǎn)位置、Tend_attr表示軌道終點(diǎn)屬性、Tend_loa表示終點(diǎn)里程、Tend_len表示終點(diǎn)位置。由此可將excel表中每一行數(shù)據(jù)轉(zhuǎn)換為事實(shí)。 此外,數(shù)據(jù)值域規(guī)則中枚舉屬性對(duì)應(yīng)的數(shù)據(jù)事實(shí)可用列表來(lái)表示。 軌道起點(diǎn)屬性Tbegin_attr對(duì)應(yīng)的數(shù)據(jù)事實(shí)為:track_begin_attr([‘起始數(shù)據(jù)邊界’,‘道岔’])。 軌道終點(diǎn)屬性Tend_attr對(duì)應(yīng)的數(shù)據(jù)事實(shí)為track_end_attr([‘結(jié)束數(shù)據(jù)邊界’,‘道岔’])。 道岔開(kāi)岔方向Sdir對(duì)應(yīng)數(shù)據(jù)事實(shí)為:switch_dir([0,1])。 關(guān)鍵點(diǎn)類(lèi)型Ptype對(duì)應(yīng)數(shù)據(jù)事實(shí)為:poi_type([‘應(yīng)答器’,’數(shù)據(jù)邊界’,’道岔’])。 將提取的基礎(chǔ)數(shù)據(jù)驗(yàn)證規(guī)則轉(zhuǎn)換為Prolog語(yǔ)言對(duì)應(yīng)的規(guī)則表述,構(gòu)建數(shù)據(jù)驗(yàn)證的規(guī)則模型。 3.3.1 值域規(guī)則模型 值域規(guī)則對(duì)應(yīng)的是數(shù)據(jù)類(lèi)型和取值的約束。簡(jiǎn)單的數(shù)據(jù)類(lèi)型約束可利用Prolog的內(nèi)部謂詞作為規(guī)則謂詞,如integer(A),float(A),number(A)等。其他特殊的格式約束需進(jìn)行自定義規(guī)則。 軌道信息事實(shí)中軌道起點(diǎn)屬性應(yīng)滿足固定幾種類(lèi)型,驗(yàn)證軌道屬性的規(guī)則可描述為: check_track_beginAttr(Tid):-track(Tid,_,_,_,_,Tbegin_attr,_,_,_,_,_),track_begin_attr(Track_begin_attr),/+member(T_begin_attr,Track_begin_attr)。 其中:Tid是軌道數(shù)據(jù)的序號(hào),member是Prolog的內(nèi)部謂詞,member(T_begin_attr,Track_begin_attr)描述變量T_begin_attr(軌道起點(diǎn)屬性值)是否是集合Track_begin_attr(軌道起點(diǎn)屬性值集合)的一個(gè)元素,“/+”是Prolog的內(nèi)部符號(hào),表示取反值。執(zhí)行check_track_attr(Tid)規(guī)則,可搜索出軌道起點(diǎn)屬性不滿足要求的軌道序號(hào)。 應(yīng)答器名稱(chēng)的第一個(gè)字符應(yīng)是字母“B”。對(duì)應(yīng)規(guī)則可描述為: check_blase_name(Bid):-balise(Bid,BGname,_,_,_,_,_,_,_,_),name(BGname,X),X=[X1|_],X1/=66。 其中:Bid是應(yīng)答器數(shù)據(jù)的序號(hào),BGname是應(yīng)答器組名稱(chēng),name是Prolog的內(nèi)部謂詞,name(BGname,X)是將BGname轉(zhuǎn)換為對(duì)應(yīng)ASCII碼列表,X1為BGnameASCII碼列表中的第一個(gè)元素。執(zhí)行check_blase_name(Bid)規(guī)則可輸出名稱(chēng)中第一個(gè)字符不是“B”的應(yīng)答器數(shù)據(jù)對(duì)應(yīng)的序號(hào),可供錯(cuò)誤定位及修改。 3.3.2 邏輯規(guī)則模型 規(guī)則1:不可能編號(hào)相同的兩個(gè)車(chē)站。 check_stationNum(Aid1,Aid2):-station(Aid1,_,Regionnum1,Partitionnum1,Stationnum1,_,_),station(Aid2,_,Regionnum2,Partitionnum2,Stationnum2,_,_),Aid1 執(zhí)行check_stationNum(Aid1,Aid2)規(guī)則可以輸出大區(qū)編號(hào)、分區(qū)編號(hào)和車(chē)站編號(hào)分別相同的車(chē)站數(shù)據(jù)序號(hào)。 規(guī)則2:斷鏈的長(zhǎng)度等于終點(diǎn)里程于起點(diǎn)里程之差,對(duì)應(yīng)規(guī)則可描述為: check_chainLen(Did):-chain(Did,_,Dbegin,Dend,Dlength,_),Dlength=/=abs(Dend-Dbegin)。 其中:Did是斷鏈序號(hào),abs是Prolog的內(nèi)部謂詞,表示求絕對(duì)值。執(zhí)行Check_chainLen(Did)規(guī)則可輸出不滿足長(zhǎng)度等于起終點(diǎn)里程差的斷鏈序號(hào)。 規(guī)則3:軌道長(zhǎng)度與起終點(diǎn)里程和是否存在斷鏈有關(guān),該條規(guī)則需多條規(guī)則組合描述。 check_ChainIn(Tid,Dtype,Dlength):-track(Tid,_,Tnum,Tbegin_loa,_,_,Tend_loa,_),chain(Did,Dtype,Dbegin,Dend,Dlength,Ddir),(Tbegin_loa check_T_endLen(Tid):-track(Tid,_,_,_,Tbegin_loa,_,_,Tend_loa,Tend_len), check_Chain_in(Tid,Dtype,Dlength),(Dtype=’長(zhǎng)鏈’,Tend_len/=100*(|Tbegin_loa-Tend_loa|+Dlength));(Dtype=’短鏈’,Tend_len/=100*(|Tbegin_loa-Tend_loa|-Dlength))。 check_T_endLen(Tid):-track(Tid,_,_,_,Tbegin_loa,_,_,Tend_loa,Tend_len),/+check_Chain_in(Tid),Dtype,Dlength),Tend_len/=100*(|Tbegin_loa-Tend_loa|)。 謂詞check_ChainIn是判斷序號(hào)為的軌道數(shù)據(jù)的起終點(diǎn)范圍內(nèi)是否包含斷鏈,并取得斷鏈的類(lèi)型和長(zhǎng)度。其中”,”代表邏輯關(guān)系中的“且”,”;”代表邏輯關(guān)系中的“或”。謂詞check_T_endLen由兩條規(guī)則組成,用多條規(guī)則可以定義同一個(gè)謂詞,分為軌道數(shù)據(jù)包含斷鏈和不包含斷鏈兩種情況,執(zhí)行check_T_endLen(Tid)可輸出軌道終點(diǎn)位置與里程不符合邏輯規(guī)則的軌道數(shù)據(jù)序號(hào)。 規(guī)則4:同一車(chē)站內(nèi)軌道號(hào)唯一。 is_uniq(X,Y_list):-member(X,Y_list),delete(Y_list,X,Last_l),length(Last_l,Len_last),length(Y_list,Len_Y),Len_Y is Len_last+1。 首先自定義is_uniq規(guī)則,其中member,delete和length均是內(nèi)部謂詞,執(zhí)行is_uniq(X,Y_list)可判斷變量X是否是列表Y_list中的非重復(fù)項(xiàng),如果是輸出FALSE,如果是非重復(fù)項(xiàng)則輸出TRUE。 Check_T_num(Tid):-track(Tid,Tstation,_,_,_,_,_,_,_),findall(Tnum,track(_,Tstation,Tnum,_,_,_,_,_,_),T_numList),findall(Tid,track(Tid,_,Tstation,_,_,_,_,_,_,_),T_IdList),findall(Tid,(is_uniq(T_num,T_numList),track(Tid,_,Tstation,T_num,_,_,_,_,_,_)),Uniq_id),member(Tid,T_IdList),/+member(Tid,Uniq_id)。 利用Prolog內(nèi)部謂詞findall首先找出軌道信息表中同一個(gè)車(chē)站內(nèi)所有軌道號(hào)和序號(hào)分別至變量T_num_list,Id_list中,在找出軌道號(hào)T_num是T_num_list中的非重復(fù)項(xiàng)的軌道數(shù)據(jù)對(duì)應(yīng)的序號(hào)至變量Uniq_id中,再判斷如果序號(hào)是Id_list中的元素,但不是Uniq_id中的元素,則說(shuō)明該序號(hào)對(duì)應(yīng)的軌道號(hào)是重復(fù)項(xiàng)。執(zhí)行Check_T_num(Tid)可輸出同一車(chē)站內(nèi)軌道號(hào)重復(fù)的數(shù)據(jù)對(duì)應(yīng)的序號(hào)。 規(guī)則5:一般情況一條軌道長(zhǎng)度存在上限 check_T_max(Tid):- track(Tid,_,_,_,_,_,_,_,Tend_len),/+(Tend_len<10000000)。 執(zhí)行check_T_max(Tid)可輸出軌道長(zhǎng)度不小于100 km的軌道數(shù)據(jù)序號(hào)。 規(guī)則6:當(dāng)且僅當(dāng)應(yīng)答器類(lèi)型是“虛擬”,對(duì)應(yīng)用途為“XQ”。 check_baliseUse(Bid):-balise(Bid,_,_,_,_,Btype,Buse,_,_,_),/+(Btype=’虛擬’->Buse=’XQ’,Buse=’XQ’->Btype=’虛擬’)。 3.3.3 錯(cuò)誤輸出模型 值域規(guī)則模型和邏輯規(guī)則模型可以驗(yàn)證數(shù)據(jù)事實(shí)是否滿足對(duì)應(yīng)規(guī)則,并輸出不滿足規(guī)則的數(shù)據(jù)序號(hào)。但每一條規(guī)則需在Prolog編譯器中逐條去詢問(wèn)后才會(huì)輸出驗(yàn)證結(jié)果,電子地圖基礎(chǔ)數(shù)據(jù)的值域規(guī)則和邏輯規(guī)則多達(dá)幾十至上百條,每次驗(yàn)證逐條詢問(wèn)規(guī)則效率太低。因此本文設(shè)計(jì)了錯(cuò)誤輸出模型,可將自動(dòng)輸出違反規(guī)則的數(shù)據(jù)信息至一個(gè)文檔,可供錯(cuò)誤修改。 第一步:將每條規(guī)則對(duì)應(yīng)的錯(cuò)誤數(shù)據(jù)信息添加至error事實(shí); 在每一條規(guī)則后添加”*-> assertz(error(message)).”,可將錯(cuò)誤數(shù)據(jù)信息添加至error事實(shí)中。 ”*->”是Prolog的內(nèi)部操作符,”A->B”等價(jià)于”if A then B”,assertz是Prolog內(nèi)部謂詞,是將插入當(dāng)前動(dòng)態(tài)數(shù)據(jù)庫(kù)中的同名謂詞的事實(shí)之后。例如: check_track_beginAttr(Tid):-track(Tid,_,_,_,_,Tbegin_attr,_,_,_,_,_),track_begin_attr(Track_begin_attr),/+member(T_begin_attr,Track_begin_attr),*-> assertz(error(Tid,T_begin_attr,'not in',Track_begin_attr))。 執(zhí)行check_track_beginAttr規(guī)則后,error(X)事實(shí)中會(huì)增加軌道起點(diǎn)屬性不滿足值域規(guī)則的數(shù)據(jù)信息。 第二步:設(shè)置一個(gè)總詢問(wèn)規(guī)則all_rule(_):-rule1(Tid);rule2(Bid); rule_n(Bid)。每次驗(yàn)證數(shù)據(jù)只需在編譯器詢問(wèn)一次all_rule(_),即可將所有規(guī)則對(duì)應(yīng)的錯(cuò)誤信息添加至error事實(shí)中。 第三步:將所有error事實(shí)輸出至文檔中。 save(FileName):-telling(Old),tell(FileName),listing(error),told,tell(Old)。 其中save,telling,tell,listing,told,tell均是Prolog的內(nèi)部謂詞,save謂詞可將當(dāng)前內(nèi)存中的事實(shí)存入文件“Filename”中,listing(error)列出謂詞error中的所有子句。 利用規(guī)則模型對(duì)實(shí)際線路電子地圖基礎(chǔ)數(shù)據(jù)進(jìn)行驗(yàn)證,本文采用GUN prolog解釋器作為驗(yàn)證工具,以某單線鐵路為例,線路全長(zhǎng)800多公里,共設(shè)有21個(gè)車(chē)站,電子地圖基礎(chǔ)數(shù)據(jù)共2 499條,提取的值域規(guī)則30條,邏輯規(guī)則54條。表2是數(shù)據(jù)驗(yàn)證結(jié)果。 表2 規(guī)則模型驗(yàn)證結(jié)果 驗(yàn)證結(jié)果可知,驗(yàn)證2 499條數(shù)據(jù),84條規(guī)則總耗時(shí)約2.6 s,相較于人工驗(yàn)證數(shù)據(jù),本文建立的驗(yàn)證模型及方法具有高效性。 錯(cuò)誤驗(yàn)證率是模型監(jiān)測(cè)出的錯(cuò)誤數(shù)量占數(shù)據(jù)真實(shí)的錯(cuò)誤數(shù)量的百分比,其中真實(shí)的錯(cuò)誤人工添加所得,是由非模型設(shè)計(jì)人員對(duì)已確認(rèn)正確的數(shù)據(jù)添加錯(cuò)誤。2 599條數(shù)據(jù)的錯(cuò)誤驗(yàn)證率達(dá)94%,可見(jiàn)該驗(yàn)證模型和方法具有較高的準(zhǔn)確性。 分析未被模型識(shí)別的錯(cuò)誤數(shù)據(jù),發(fā)現(xiàn)主要原因有兩方面:(1)數(shù)據(jù)邏輯關(guān)系獨(dú)立,例如車(chē)站信息表中TSRS設(shè)備序號(hào)與其他數(shù)據(jù)之間無(wú)規(guī)則約束,因此當(dāng)序號(hào)由“4”被錯(cuò)誤修改為“3”,規(guī)則模型無(wú)法檢測(cè)錯(cuò)誤;(2)多個(gè)錯(cuò)誤疊加,構(gòu)成數(shù)據(jù)巧合。例如同時(shí)修改軌道終點(diǎn)里程和位置值,使得修改后位置和里程之間的關(guān)系仍滿足規(guī)則。 針對(duì)電子地圖基礎(chǔ)數(shù)據(jù)校核當(dāng)前存在的問(wèn)題,提出基于Prolog的數(shù)據(jù)驗(yàn)證方法,深入分析基礎(chǔ)數(shù)據(jù)格式、內(nèi)容,通過(guò)相關(guān)規(guī)范以及領(lǐng)域?qū)I(yè)知識(shí),提取出基礎(chǔ)數(shù)據(jù)的驗(yàn)證規(guī)則,采用Prolog語(yǔ)言搭建數(shù)據(jù)事實(shí)和驗(yàn)證模型,以實(shí)際線路為例進(jìn)行試驗(yàn),證明了模型的可行性和有效性。3 建模與驗(yàn)證
3.1 Prolog語(yǔ)言
3.2 數(shù)據(jù)事實(shí)
3.3 規(guī)則模型
3.4 驗(yàn)證結(jié)果
4 結(jié)束語(yǔ)
——論胡好對(duì)邏輯謂詞的誤讀