本發(fā)明屬于系統(tǒng)科學(xué)與信息技術(shù)領(lǐng)域,涉及一種基于圖回溯法的礦井排水網(wǎng)絡(luò)流向解算的方法。
背景技術(shù):
地下礦產(chǎn)資源開(kāi)采過(guò)程中,井下采掘工作面、巷道低洼地段和儲(chǔ)水倉(cāng)等區(qū)域積聚了大量地下水,尤其在突水事件發(fā)生時(shí),該類積水迅速積聚蔓延,嚴(yán)重時(shí)甚至淹沒(méi)巷道,造成嚴(yán)重的人員生命危險(xiǎn)和財(cái)產(chǎn)損失。為了將水排出地面,人們?cè)诰虏渴鹆舜罅康呐潘O(shè)備,組成排水網(wǎng)絡(luò),隨著積水點(diǎn)的增多,排水工程師往往會(huì)將更多的排水設(shè)備接入,導(dǎo)致排水網(wǎng)絡(luò)越來(lái)越復(fù)雜,如,我國(guó)某大型地下煤礦排水網(wǎng)絡(luò)中的水泵數(shù)量達(dá)五百多個(gè),閘閥達(dá)一千多個(gè),各類管道總長(zhǎng)達(dá)兩萬(wàn)多米。于是人們面臨著兩個(gè)急需解決的問(wèn)題:(1)排水工程師在接入新的設(shè)備時(shí),確定已有的管道水流方向十分困難;(2)遠(yuǎn)程調(diào)度人員在進(jìn)行排水調(diào)度,尤其在礦井水災(zāi)應(yīng)急指揮中,幾乎無(wú)法根據(jù)排水網(wǎng)絡(luò)圖掌握排水系統(tǒng)中水流的來(lái)龍去脈。管道中水流“從哪里來(lái),到哪里去”的確定問(wèn)題成為迫切需要解決的問(wèn)題。有必要研究一種方法迅速解算排水網(wǎng)絡(luò)的水流方向,輔助人們決策。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種基于圖回溯法的礦井排水網(wǎng)絡(luò)流向解算方法,解決了現(xiàn)有礦井排水時(shí)存在的管道水流流向無(wú)法準(zhǔn)確確定等缺陷。
為了達(dá)到目的,本發(fā)明采用的技術(shù)方案具體如下:
本發(fā)明提供的一種基于圖回溯法的礦井排水網(wǎng)絡(luò)流向解算方法,首先將礦井排水網(wǎng)絡(luò)轉(zhuǎn)化為圖拓?fù)浣Y(jié)構(gòu),然后利用基于圖結(jié)構(gòu)的迷宮回溯法,探尋圖結(jié)構(gòu)中流體的所有路徑。
優(yōu)選地,所述礦井排水網(wǎng)絡(luò)轉(zhuǎn)化為圖拓?fù)浣Y(jié)構(gòu)的具體方法為:將礦井排水網(wǎng)絡(luò)中正在運(yùn)轉(zhuǎn)的水泵轉(zhuǎn)化為流向圖的驅(qū)動(dòng)節(jié)點(diǎn)vd、將停止運(yùn)轉(zhuǎn)的水泵轉(zhuǎn)化為閉節(jié)點(diǎn)vs、開(kāi)啟的閘閥轉(zhuǎn)化為通節(jié)點(diǎn)vo、關(guān)閉的閘閥轉(zhuǎn)化為閉節(jié)點(diǎn)vs、同時(shí),將排水網(wǎng)絡(luò)中的最終出口轉(zhuǎn)化為出口節(jié)點(diǎn)ve、將管道轉(zhuǎn)化為流向邊ef,最終得到流體的流向圖。
優(yōu)選地,上述所得到流體的流向圖為有向圖g,所述有向圖g的所有節(jié)點(diǎn)的集合v和所有邊的集合e,應(yīng)滿足以下條件:
g=(v,e)
v={v|v∈{vd,vo,vs,ve}}
e={<vi,vj>|p(vi,vj)∧<vi,vj>∈{ef}∧vi,vj∈v}
其中,p(vi,vj)表示存在邊;{ef}表示流向邊集合。
優(yōu)選地,基于圖結(jié)構(gòu)的迷宮回溯法,探尋圖結(jié)構(gòu)中的所有可行路徑的具體步驟如下:
第一步,設(shè)定所述流向圖中所有驅(qū)動(dòng)節(jié)點(diǎn)vd有且有唯一的相鄰?fù)ü?jié)點(diǎn),所有邊的流源和流目標(biāo)初始狀態(tài)為空集,同時(shí)對(duì)該流向圖中的每個(gè)節(jié)點(diǎn)進(jìn)行編號(hào);
第二步,找出未被流向解算過(guò)的驅(qū)動(dòng)節(jié)點(diǎn)vdx∈vd,其唯一的相鄰節(jié)點(diǎn)va∈vo,將該節(jié)點(diǎn)va入棧;
第三步,檢查棧內(nèi)是否存在節(jié)點(diǎn),如果沒(méi)有則探尋完畢,得出該驅(qū)動(dòng)節(jié)點(diǎn)所驅(qū)動(dòng)流體的所有可行路徑,該驅(qū)動(dòng)節(jié)點(diǎn)vdx的解算周期結(jié)束,轉(zhuǎn)第二步繼續(xù)執(zhí)行;若存在,設(shè)棧頂節(jié)點(diǎn)為vb,則進(jìn)行下一步:
第四步,將棧頂節(jié)點(diǎn)vb取出,判斷節(jié)點(diǎn)vb的節(jié)點(diǎn)類型,確定各流向邊流源和流目標(biāo);
第五步,若所有驅(qū)動(dòng)節(jié)點(diǎn)的解算周期完畢,則表示,找尋到所有的路徑,從而得出各邊的流源和流目標(biāo),算法結(jié)束。
優(yōu)選地,第四步中,當(dāng)棧頂節(jié)點(diǎn)vb為閉節(jié)點(diǎn)vs時(shí),表示該路徑不可行,則將該節(jié)點(diǎn)vb出棧,節(jié)點(diǎn)va為新的棧頂節(jié)點(diǎn),并將節(jié)點(diǎn)vb到節(jié)點(diǎn)va所形成的邊標(biāo)記為已訪問(wèn),轉(zhuǎn)第三步繼續(xù)檢查棧內(nèi)節(jié)點(diǎn)。
優(yōu)選地,第四步中,當(dāng)棧頂節(jié)點(diǎn)vb為通節(jié)點(diǎn)vo時(shí),且該棧頂節(jié)點(diǎn)vb除棧內(nèi)的相鄰節(jié)點(diǎn)和標(biāo)記過(guò)的邊外,有其他相鄰節(jié)點(diǎn),則從其他相鄰節(jié)點(diǎn)中找出任一節(jié)點(diǎn)vc,并將節(jié)點(diǎn)vc入棧,節(jié)點(diǎn)vc為新的棧頂節(jié)點(diǎn),同時(shí),轉(zhuǎn)到第三步繼續(xù)執(zhí)行。
優(yōu)選地,第四步中,當(dāng)棧頂節(jié)點(diǎn)vb為通節(jié)點(diǎn)vo時(shí),且該棧頂節(jié)點(diǎn)vb除棧內(nèi)的相鄰節(jié)點(diǎn)和標(biāo)記過(guò)的邊外,無(wú)其他相鄰節(jié)點(diǎn),則進(jìn)行回溯,即該節(jié)點(diǎn)vb出棧,將該節(jié)點(diǎn)vb的所有鄰邊標(biāo)記為未訪問(wèn),同時(shí),轉(zhuǎn)到第三步繼續(xù)執(zhí)行。
優(yōu)選地,第四步中,當(dāng)棧頂節(jié)點(diǎn)vb為出口節(jié)點(diǎn)ve時(shí),則表示已到達(dá)出口,此時(shí)從棧底到棧頂所形成的節(jié)點(diǎn)序列即為一條可行路徑,將其記錄,并在該方向上的所有邊的流源集合中加入該路徑上的驅(qū)動(dòng)節(jié)點(diǎn)vd編號(hào),所有邊的流目標(biāo)集合中加入該路徑上的出口節(jié)點(diǎn)ve編號(hào),將節(jié)點(diǎn)vb出棧,節(jié)點(diǎn)va為新的棧頂節(jié)點(diǎn),并將節(jié)點(diǎn)vb與節(jié)點(diǎn)va所形成的邊記為已標(biāo)記,同時(shí),轉(zhuǎn)到第三步繼續(xù)執(zhí)行。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明提供的一種基于圖回溯法的礦井排水網(wǎng)絡(luò)流向解算方法,首先將礦井排水網(wǎng)絡(luò)轉(zhuǎn)化為圖拓?fù)浣Y(jié)構(gòu),然后利用基于圖結(jié)構(gòu)的迷宮回溯法,探尋圖結(jié)構(gòu)中流體的所有路徑。本發(fā)明的流向圖結(jié)構(gòu)簡(jiǎn)單,構(gòu)建相對(duì)方便,本發(fā)明的流向解算方法嚴(yán)謹(jǐn)可靠,且其時(shí)間復(fù)雜度為o(n)-o(n!),執(zhí)行效率較高,可應(yīng)用于大多流體流向計(jì)算場(chǎng)合,如通風(fēng)、供排水、油汽和車流等。
附圖說(shuō)明
圖1是各節(jié)點(diǎn)的結(jié)構(gòu)圖,其中,圖1(a)為驅(qū)動(dòng)節(jié)點(diǎn)、圖1(b)為通節(jié)點(diǎn)、圖1(c)為閉節(jié)點(diǎn)、圖1(d)為出口節(jié)點(diǎn)、圖1(e)為流向邊;
圖2是流體的流向圖;
圖3是流體流向圖的應(yīng)用效果圖。
具體實(shí)施方式
下面結(jié)合附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。
本發(fā)明提供了一種基于圖回溯法的礦井排水網(wǎng)絡(luò)流向解算方法,基本思想是:將礦井排水管路網(wǎng)絡(luò)轉(zhuǎn)化為圖拓?fù)浣Y(jié)構(gòu),構(gòu)成流向圖,可借助基于圖結(jié)構(gòu)的迷宮回溯法,從驅(qū)動(dòng)節(jié)點(diǎn)出發(fā),探尋所有可行路徑,遇通節(jié)點(diǎn)則前行,遇閉節(jié)點(diǎn)則標(biāo)記閉合路徑并回退,遇出口則記為一條可行路徑,標(biāo)明相應(yīng)的水流流向,并逐級(jí)回退探尋下一可行路徑,直到所有路徑探尋完畢。
具體地,首先將礦井排水網(wǎng)絡(luò)轉(zhuǎn)化為流向圖:
其中,將礦井排水網(wǎng)絡(luò)中正在運(yùn)轉(zhuǎn)的水泵轉(zhuǎn)化為流向圖的驅(qū)動(dòng)節(jié)點(diǎn)vd、將停止運(yùn)轉(zhuǎn)的水泵轉(zhuǎn)化為閉節(jié)點(diǎn)vs、開(kāi)啟的閘閥轉(zhuǎn)化為通節(jié)點(diǎn)vo、關(guān)閉的閘閥轉(zhuǎn)化為閉節(jié)點(diǎn)vs、同時(shí),將排水網(wǎng)絡(luò)中的最終出口轉(zhuǎn)化為出口節(jié)點(diǎn)ve、將管道轉(zhuǎn)化為流向邊ef,最終得到流體的流向圖。
所得到流體的流向圖為有向圖g,所述有向圖g的所有節(jié)點(diǎn)的集合v和所有邊的集合e,應(yīng)滿足以下條件:
g=(v,e)
v={v|v∈{vd,vo,vs,ve}}
e={<vi,vj>|p(vi,vj)∧<vi,vj>∈{ef}∧vi,vj∈v}
其中,vd表示驅(qū)動(dòng)節(jié)點(diǎn),vo表示通節(jié)點(diǎn),vs表示閉節(jié)點(diǎn),ve表示出口節(jié)點(diǎn);p(vi,vj)表示存在邊;{ef}表示流向邊集合。
相關(guān)術(shù)語(yǔ)解釋如下:
驅(qū)動(dòng)節(jié)點(diǎn)vd:能夠促使流體從該類節(jié)點(diǎn)向遠(yuǎn)方邊流動(dòng),通常情況下驅(qū)動(dòng)節(jié)點(diǎn)vd處于葉子節(jié)點(diǎn)位置,表示法如圖1(a)所示。
通節(jié)點(diǎn)vo:流體可通過(guò)該節(jié)點(diǎn)流動(dòng),表示法如圖1(b)所示。
閉節(jié)點(diǎn)vs:阻塞流體流動(dòng)的節(jié)點(diǎn),表示法如圖1(c)所示。
出口節(jié)點(diǎn)ve:流體的最終出口節(jié)點(diǎn),表示法如圖1(d)所示。
流向邊ef:兩個(gè)節(jié)點(diǎn)之間流體流動(dòng)情況,包括兩個(gè)方向,通常地,若規(guī)定一個(gè)方向?yàn)檎?,則其反方向?yàn)槟媪?;每個(gè)方向上標(biāo)識(shí)了該方向上的流源(即流體來(lái)自于哪些驅(qū)動(dòng)節(jié)點(diǎn))和流目標(biāo)(即流體流向哪些出口節(jié)點(diǎn)),其語(yǔ)義為:{流源}:{流目標(biāo)},例如{9,13}:{12}可理解為該流向上的流體來(lái)自于9、13號(hào)驅(qū)動(dòng)節(jié)點(diǎn),將從12號(hào)出口節(jié)點(diǎn)流出。
本發(fā)明中流向圖的解算是指:根據(jù)節(jié)點(diǎn)類型,確定各流向邊流源和流目標(biāo)的全過(guò)程。具體地,每個(gè)驅(qū)動(dòng)節(jié)點(diǎn)需要一個(gè)解算周期,流體從驅(qū)動(dòng)節(jié)點(diǎn)出發(fā),找出所有可行路徑,此時(shí)記錄各邊的流源和流目標(biāo),并進(jìn)入下一個(gè)驅(qū)動(dòng)節(jié)點(diǎn)的流向解算周期,直到所有驅(qū)動(dòng)節(jié)點(diǎn)解算完成。在確定流向的過(guò)程中,不能簡(jiǎn)單地“見(jiàn)通則行”,當(dāng)遇到閉節(jié)點(diǎn)vs時(shí),導(dǎo)致從驅(qū)動(dòng)節(jié)點(diǎn)vd出發(fā)的流體經(jīng)閉節(jié)點(diǎn)vs時(shí)中斷,需要回溯探測(cè)。
所述流體的流向圖解算的具體步驟如下:
第一步,設(shè)定所述流向圖中所有驅(qū)動(dòng)節(jié)點(diǎn)有且有唯一的相鄰?fù)ü?jié)點(diǎn),所有邊的流源和流目標(biāo)初始狀態(tài)為空集,同時(shí)對(duì)該流向圖中的每個(gè)節(jié)點(diǎn)進(jìn)行編號(hào);
第二步,找出未被流向解算過(guò)的驅(qū)動(dòng)節(jié)點(diǎn)vdx∈vd,其唯一的相鄰節(jié)點(diǎn)va∈vo,將該節(jié)點(diǎn)va入棧;
第三步,檢查棧內(nèi)是否存在節(jié)點(diǎn),如果沒(méi)有則探尋完畢,得出該驅(qū)動(dòng)節(jié)點(diǎn)所驅(qū)動(dòng)流體的所有可行路徑,該驅(qū)動(dòng)節(jié)點(diǎn)vdx的解算周期結(jié)束,轉(zhuǎn)第二步繼續(xù)執(zhí)行;若存在,設(shè)棧頂節(jié)點(diǎn)為vb,則進(jìn)行下一步:
第四步,將棧頂節(jié)點(diǎn)vb取出,判斷vb的節(jié)點(diǎn)類型,
其中,若棧頂節(jié)點(diǎn)vb為閉節(jié)點(diǎn)vs時(shí),表示該路徑不可行,則將該節(jié)點(diǎn)vb出棧,節(jié)點(diǎn)va為新的棧頂節(jié)點(diǎn),并將節(jié)點(diǎn)vb到節(jié)點(diǎn)va所形成的邊標(biāo)記為已訪問(wèn),轉(zhuǎn)第三步繼續(xù)檢查棧內(nèi)節(jié)點(diǎn);
若棧頂節(jié)點(diǎn)vb為通節(jié)點(diǎn)vo時(shí),且該棧頂節(jié)點(diǎn)vb除棧內(nèi)的相鄰節(jié)點(diǎn)和標(biāo)記過(guò)的邊外,有其他相鄰節(jié)點(diǎn),則從其他相鄰節(jié)點(diǎn)中找出任一節(jié)點(diǎn)vc,并將節(jié)點(diǎn)vc入棧,節(jié)點(diǎn)vc為新的棧頂節(jié)點(diǎn),同時(shí),轉(zhuǎn)到第三步繼續(xù)執(zhí)行;
若棧頂節(jié)點(diǎn)vb為通節(jié)點(diǎn)vo時(shí),且該棧頂節(jié)點(diǎn)vb除棧內(nèi)的相鄰節(jié)點(diǎn)和標(biāo)記過(guò)的邊外,無(wú)其他相鄰節(jié)點(diǎn),則進(jìn)行回溯,即該節(jié)點(diǎn)vb出棧,將該節(jié)點(diǎn)vb的所有鄰邊標(biāo)記為未訪問(wèn),同時(shí),轉(zhuǎn)到第三步繼續(xù)執(zhí)行;
若棧頂節(jié)點(diǎn)vb為出口節(jié)點(diǎn)ve時(shí),則表示已到達(dá)出口,此時(shí)從棧底到棧頂所形成的節(jié)點(diǎn)序列即為一條可行路徑,將其記錄,并在該方向上的所有邊的流源集合中加入該路徑上的驅(qū)動(dòng)節(jié)點(diǎn)vd編號(hào),所有邊的流目標(biāo)集合中加入該路徑上的出口節(jié)點(diǎn)ve編號(hào),將節(jié)點(diǎn)vb出棧,節(jié)點(diǎn)va為新的棧頂節(jié)點(diǎn),并將節(jié)點(diǎn)vb與節(jié)點(diǎn)va所形成的邊記為已標(biāo)記,同時(shí),轉(zhuǎn)到第三步繼續(xù)執(zhí)行。
第五步,若所有驅(qū)動(dòng)節(jié)點(diǎn)的解算周期完畢,則表示,找尋到所有的路徑,從而得出各邊的流源和流目標(biāo),算法結(jié)束。
實(shí)施例
如圖2所示的流向圖解算過(guò)程。
首先將所有邊的流源和流目標(biāo)初始化為空集,為方便程序設(shè)計(jì),將探測(cè)前的節(jié)點(diǎn)1設(shè)置為通節(jié)點(diǎn),探測(cè)完畢后恢復(fù)為驅(qū)動(dòng)節(jié)點(diǎn):
1)將節(jié)點(diǎn)1壓入堆棧(即棧內(nèi):1);
2)取出棧頂節(jié)點(diǎn)1,找出1的任一相鄰節(jié)點(diǎn)2,將2入棧(即棧內(nèi):1、2)。
3)取出棧頂節(jié)點(diǎn)2,找出2的任一相鄰節(jié)點(diǎn)3,將3入棧(即棧內(nèi):1、2、3)。
4)取出棧頂節(jié)點(diǎn)3,找出3的任一相鄰節(jié)點(diǎn)4,將4入棧(即棧內(nèi):1、2、3、4)。
5)取出棧頂節(jié)點(diǎn)4,找出4的任一相鄰節(jié)點(diǎn)7,將7入棧(即棧內(nèi):1、2、3、4、7)
6)取出棧頂節(jié)點(diǎn)7,發(fā)現(xiàn)7為閉節(jié)點(diǎn),則將7出棧,同時(shí)將節(jié)點(diǎn)7到新的棧頂節(jié)點(diǎn)4標(biāo)記為已訪問(wèn)(即棧內(nèi):1、2、3、4)。
7)取出棧頂節(jié)點(diǎn)4,根據(jù)“非棧內(nèi)”和“未訪問(wèn)”等條件,找出4的任一相鄰節(jié)點(diǎn)5,并將5入棧(即棧內(nèi):1、2、3、4、5)。
8)取出棧頂節(jié)點(diǎn)5,找出5的任一相鄰節(jié)點(diǎn)8,并將8入棧(即棧內(nèi):1、2、3、4、5、8)。
9)取出棧頂節(jié)點(diǎn)8,發(fā)現(xiàn)8是出口節(jié)點(diǎn),已到達(dá)終點(diǎn),則棧內(nèi)節(jié)點(diǎn)序列(即站內(nèi):1-2-3-4-5-8)便為一條可行路徑,此時(shí)將1-2、2-3、3-4、4-5、5-8方向上的流源集合加入1號(hào)節(jié)點(diǎn),流目標(biāo)集合加入8號(hào)節(jié)點(diǎn),然后將8出棧,同時(shí)將8到新的頂節(jié)點(diǎn)5標(biāo)記為已訪問(wèn)。
10)取出棧頂節(jié)點(diǎn)5,根據(jù)條件找不到5的相鄰節(jié)點(diǎn),則進(jìn)行回溯,即將5到相鄰節(jié)點(diǎn)的邊全部標(biāo)記為未訪問(wèn),并將5出棧,然后將5和新的棧頂節(jié)點(diǎn)4所形成的邊標(biāo)記為已訪問(wèn)(即棧內(nèi):1、2、3、4)。
11)取出棧頂節(jié)點(diǎn)4,找不到4的相鄰節(jié)點(diǎn),恢復(fù)標(biāo)志,出棧,標(biāo)記(即棧內(nèi)1、2、3)。
12)取出棧頂節(jié)點(diǎn)3,根據(jù)條件找出3的任一相鄰節(jié)點(diǎn)6,將其入棧(即棧內(nèi):1、2、3、6),并找到新的可行路徑1-2-3-6。
13)同理,找到可行路徑1-2-5-4-3-6和1-2-5-8。
14)至此棧內(nèi)節(jié)點(diǎn)數(shù)量為0,尋出的所有路徑,從而得出各邊的流源和流目標(biāo),
本計(jì)算方法的應(yīng)用:
如圖3所示,我國(guó)某大型地下煤礦因地勢(shì)平坦開(kāi)闊,降水滲水補(bǔ)給充分,加之地表有眾多小型水庫(kù)等,礦井涌水量達(dá)3600m3/h,屬特大型涌水礦井。為保證礦井安全回采,該礦在回采前通過(guò)探放水等方案提前放水,并根據(jù)水文地質(zhì)資料和實(shí)際涌水量,科學(xué)設(shè)防、系統(tǒng)抽排,形成了5200方/小時(shí)的外排能力。并設(shè)置中央排水泵房4個(gè)、采區(qū)臨時(shí)泵房2個(gè),安設(shè)管路30余萬(wàn)米、出水點(diǎn)15處,水泵238個(gè),閘閥和蝶閥總計(jì)510個(gè),總排水能力9200m3/h。為了對(duì)該礦排水網(wǎng)絡(luò)進(jìn)行智能流向解算,研發(fā)了三維可視化智能解算系統(tǒng),可將排水系統(tǒng)中水泵、閘閥和接頭作為節(jié)點(diǎn),管道作為邊,構(gòu)建為圖結(jié)構(gòu),利用本發(fā)明的解算方法自動(dòng)解算,流度大于0的可標(biāo)注箭頭,應(yīng)用效果較好。
本文主要研究了針對(duì)復(fù)雜線路網(wǎng)絡(luò)中流體流向的智能計(jì)算算法及其應(yīng)用,主要結(jié)論總結(jié)如下:
(1)本發(fā)明的“流向圖”結(jié)構(gòu)簡(jiǎn)單,構(gòu)建相對(duì)方便,本發(fā)明的流向解算方法嚴(yán)謹(jǐn)可靠,且其時(shí)間復(fù)雜度為o(n)-o(n!),執(zhí)行效率較高,可應(yīng)用于大多流體流向計(jì)算場(chǎng)合,如通風(fēng)、供排水、油汽和車流等。
(2)考慮該方法的通用性,將該方法設(shè)計(jì)為通用且擴(kuò)展方便的的計(jì)算機(jī)程序接口,可供開(kāi)發(fā)人員調(diào)用。
(3)本發(fā)明在某煤礦礦井排水綜合應(yīng)急管理數(shù)字化交互平臺(tái)中發(fā)揮了重要的作用,實(shí)現(xiàn)了礦井排水水流流向的智能計(jì)算。