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