朱宏震,于明帥,陳 浩,尹朝輝,梁 辰
(華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
石油作為一個(gè)國家最重要的戰(zhàn)略性資源,對(duì)國家的經(jīng)濟(jì)建設(shè),以及政治軍事安全起著至關(guān)重要的作用[1]。對(duì)于煉油企業(yè),原油作業(yè)過程是石油供應(yīng)鏈的重要組成環(huán)節(jié),包括原油采購、原油分配、原油運(yùn)輸、原油儲(chǔ)存和原油調(diào)合等多個(gè)環(huán)節(jié)。其中,原油運(yùn)輸涉及原油在碼頭罐區(qū)和廠內(nèi)罐區(qū)之間的管道輸送過程,是原油作業(yè)過程中至關(guān)重要的一個(gè)環(huán)節(jié)。合理的原油運(yùn)輸方案是煉廠上下游裝置連續(xù)平穩(wěn)運(yùn)行的前提,也是煉廠效益提升的重要保證。
原油運(yùn)輸?shù)闹饕蝿?wù)是將原油按照調(diào)合方案有序地輸送至調(diào)合區(qū),此外,還會(huì)執(zhí)行諸如倒灌、壓罐等內(nèi)部轉(zhuǎn)移原油的任務(wù)。在實(shí)際生產(chǎn)過程中,當(dāng)原油調(diào)合區(qū)的操作人員設(shè)計(jì)好原油調(diào)合方案后,會(huì)將方案提交至負(fù)責(zé)原油運(yùn)輸?shù)恼{(diào)度人員進(jìn)行實(shí)現(xiàn);調(diào)度人員會(huì)游覽相關(guān)設(shè)備(如罐區(qū)、泵房等)的工藝流程圖,人工地尋找一條符合要求的原油運(yùn)輸路徑,由此可見,當(dāng)前,原油在罐區(qū)的移動(dòng)路徑規(guī)劃高度依賴于調(diào)度人員的人工經(jīng)驗(yàn)[2]。然而,依靠人工進(jìn)行路徑規(guī)劃的方式不僅費(fèi)時(shí)費(fèi)力,而且還存在問題。
基于人工經(jīng)驗(yàn)的原油移動(dòng)路徑規(guī)劃方法不夠系統(tǒng)化和規(guī)范化,缺乏標(biāo)準(zhǔn)的規(guī)劃方法和指導(dǎo)原則,導(dǎo)致規(guī)劃結(jié)果良莠不齊,無法保證穩(wěn)定性[2]。
目前原油調(diào)度計(jì)劃中的路徑規(guī)劃缺乏對(duì)生產(chǎn)實(shí)際情況的精準(zhǔn)預(yù)測和響應(yīng),無法及時(shí)調(diào)整和優(yōu)化路徑,而人工規(guī)劃難以兼顧路徑長短和功耗等目標(biāo),導(dǎo)致調(diào)度計(jì)劃的精度不高,效率低下[3]。
目前原油移動(dòng)路徑規(guī)劃往往只考慮到單一的約束條件,如管道容量,而沒有充分考慮到其他約束條件,如設(shè)備狀況、安全性等,規(guī)劃方案常常沒有可執(zhí)行性[4]。
綜上所述,當(dāng)前基于人工經(jīng)驗(yàn)的原油移動(dòng)路徑規(guī)劃存在多種問題和挑戰(zhàn),需要借助新的優(yōu)化方法和技術(shù)進(jìn)行解決和優(yōu)化。鑒此,本文建立了原油運(yùn)輸管道數(shù)字化模型,提出了一種基于深度優(yōu)先搜索(Depth-firstsearch,DFS)的原油運(yùn)輸路徑規(guī)劃方法,并開發(fā)了原油運(yùn)輸路徑規(guī)劃可視化系統(tǒng),實(shí)現(xiàn)了原油運(yùn)輸路徑的智能化規(guī)劃,對(duì)煉油企業(yè)提高生產(chǎn)效率、降低生產(chǎn)成本、保障作業(yè)安全等具有重要意義[5]。
該系統(tǒng)需要實(shí)現(xiàn)的功能包括:根據(jù)原油運(yùn)輸任務(wù)(例如,A 罐以某種流量輸送原油至B 調(diào)合區(qū)),自動(dòng)給出一系列符合要求的原油運(yùn)輸路徑,這個(gè)原油運(yùn)輸路徑需要具體到閥門、管道、泵等實(shí)體,確保能夠明確指導(dǎo)現(xiàn)場調(diào)度人員的操作。該系統(tǒng)的設(shè)計(jì)具體包括3 部分研究內(nèi)容。
一是為原油運(yùn)輸?shù)墓艿肋M(jìn)行數(shù)字化建模。
二是設(shè)計(jì)一種搜索符合要求路徑的路徑搜索算法。
三是為了滿足實(shí)際應(yīng)用需要,系統(tǒng)應(yīng)具有可視化功能。
原油運(yùn)輸路徑規(guī)劃系統(tǒng)主要功能如圖1 所示。
根據(jù)上述研究內(nèi)容,首先,需將原油運(yùn)輸工藝流程圖轉(zhuǎn)換為一種計(jì)算機(jī)可以識(shí)別的數(shù)據(jù)格式,建立基于原油罐區(qū)之間管道運(yùn)輸?shù)臄?shù)字化模型;其次,針對(duì)數(shù)字化模型設(shè)計(jì)原油運(yùn)輸路徑搜索算法;最后,開發(fā)原油運(yùn)輸路徑規(guī)劃可視化系統(tǒng),實(shí)現(xiàn)最優(yōu)運(yùn)輸路徑的實(shí)時(shí)顯示。
由于計(jì)算機(jī)無法直接識(shí)別工藝流程圖或者設(shè)備實(shí)體,所以需要將其轉(zhuǎn)換為一種計(jì)算機(jī)可以識(shí)別的數(shù)據(jù)格式。本文使用JSON(一種輕量級(jí)的數(shù)據(jù)交換格式)作為數(shù)據(jù)載體,其格式可以認(rèn)為是可以無限互相嵌套的字典和列表。其具體結(jié)構(gòu)分為3 個(gè)大類:頂點(diǎn)、邊、實(shí)體。
其中,頂點(diǎn)和邊是圖的組成部分,是搜索路徑的基礎(chǔ)。然而,圖論和煉油工業(yè)對(duì)原油管道和實(shí)際設(shè)備的抽象方法有所差異,例如在圖2 中有4 條卸油線,這4 條卸油線在工藝流程圖中與多條管線有交點(diǎn),這與圖論中邊(即連接2 個(gè)頂點(diǎn)的線)的定義不同。
圖2 原油運(yùn)輸結(jié)構(gòu)圖
為了解決這個(gè)問題,本文采取的方案是按照搜索的需要定義頂點(diǎn)和邊,然后通過其屬性father關(guān)聯(lián)到實(shí)體設(shè)備上。該操作解決了數(shù)據(jù)解耦的問題,這是因?yàn)轫旤c(diǎn)和邊是相對(duì)不會(huì)擴(kuò)展屬性的部分,處理這一部分的代碼可以相對(duì)穩(wěn)定,而實(shí)體部分根據(jù)實(shí)際需求,需要經(jīng)常對(duì)屬性進(jìn)行擴(kuò)展。其具體結(jié)構(gòu)如圖3—圖5所示。
圖3 頂點(diǎn)結(jié)構(gòu)
圖4 邊結(jié)構(gòu)
圖5 實(shí)體結(jié)構(gòu)
2.1.1 頂點(diǎn)vertexs
1)name:名稱,是自定義的名稱,僅作為程序標(biāo)號(hào)。
2)father:父類,該點(diǎn)實(shí)體的名稱,比如一個(gè)油罐、泵等,可以為None(這通常意味著該頂點(diǎn)僅是一個(gè)交點(diǎn),并沒有實(shí)際實(shí)體,本文用“C+數(shù)字”表示)。
2.1.2 邊edges——連接2 個(gè)頂點(diǎn)的邊
1)name:名稱,是自定義的名稱,僅作為程序標(biāo)號(hào)。
2)nodes:[A,B] 中A、B 為路徑的2 點(diǎn),為節(jié)點(diǎn)的name。
3)direction:路徑的方向,由于部分管道只允許原油單項(xiàng)流過,所以圖必須是一個(gè)有向圖。
0:雙向。
1:A->B。
2:B->A。
2.1.3 實(shí)體substances——實(shí)際設(shè)備中的單元
1)name:實(shí)體的名稱,根據(jù)工藝流程圖命名。
2)class:具體類別,油罐、泵、閥門和管道等,可以根據(jù)實(shí)際情況靈活擴(kuò)充,也可以根據(jù)實(shí)際需求創(chuàng)建,例如子管道等并不存在于工藝流程圖的類別,可作為中介實(shí)現(xiàn)某些作用。
3)parameters:一個(gè)字典,根據(jù)該實(shí)體類別決定其中的參數(shù),例如管道上的泵、泵的揚(yáng)程和流量等。
算法部分,本文采用深度優(yōu)先搜索(Depth-firstsearch,DFS)算法和剪枝操作。DFS 屬于圖算法的一種,也是對(duì)一個(gè)連通圖進(jìn)行遍歷的算法。其思想是從一個(gè)頂點(diǎn)開始,沿著一條路線一直走到底,如果發(fā)現(xiàn)不能到達(dá)目標(biāo),即返回到走不通節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn),然后嘗試從另一條路開始走到底,每個(gè)節(jié)點(diǎn)只可以訪問一次。DFS 可以遍歷圖存儲(chǔ)結(jié)構(gòu),確保不會(huì)產(chǎn)生遺漏;剪枝則是停止針對(duì)不合條件的路徑進(jìn)行搜索,以減少程序運(yùn)行時(shí)間。
2.2.1 讀取數(shù)據(jù)
統(tǒng)籌推進(jìn),振興鄉(xiāng)村。在做好項(xiàng)目區(qū)建設(shè)的同時(shí),增加發(fā)展要素,努力推進(jìn)鄉(xiāng)村振興樣板區(qū)、綠色產(chǎn)業(yè)集聚區(qū)、生態(tài)文明示范區(qū)、美好生活共享區(qū)建設(shè)。
Python 可以很方便地讀取JSON 文件為字典和列表的嵌套。如圖6 所示。
圖6 讀取JSON 文件
2.2.2 生成圖
圖的表示方式有2 種:鄰接矩陣和鄰接表[6],前者適合存儲(chǔ)邊密度高的圖,后者適合存儲(chǔ)邊較少的圖??紤]到原油管道的特性,連接是比較稀疏的,所以選擇使用鄰接表。鄰接表結(jié)構(gòu)如圖7 所示。
圖7 鄰接表結(jié)構(gòu)
2.2.3 搜索算法
本次任務(wù)的搜索可以抽象為搜索2 個(gè)頂點(diǎn)之間的所有符合條件的路徑,并將該路徑進(jìn)行存儲(chǔ)。為此,本文選擇的算法是DFS,并通過剪枝提前刪除不符合限制條件的路徑,減少搜索量。搜索的進(jìn)程可以看作是從樹根出發(fā),遍歷一棵倒置樹(搜索樹)的過程。由于本次搜索路徑不僅要存儲(chǔ)頂點(diǎn),還要存儲(chǔ)邊,這為之后的代碼增加了一定的復(fù)雜度,因此,將遞歸形式轉(zhuǎn)換為循環(huán)形式,以增加內(nèi)存的使用效率。使用collections 模塊中的deque()生成棧,將頂點(diǎn)和邊一同推入,所以每次出棧次數(shù)都為2 次(除了首個(gè)頂點(diǎn))。在遍歷全部頂點(diǎn)時(shí),加入剪枝操作,使用break 退出本次搜索,從而繼續(xù)進(jìn)行下一次搜索。所謂剪枝,就是通過某些判斷,避免一些不必要的遍歷過程,形象地說,就是剪去搜索樹中的某些枝條[7]。本文所采用的剪枝主要是可行性剪枝,即停止搜索已不符合條件的路徑,從而繼續(xù)選擇別的路徑。限制條件包括:①不包含環(huán)路;②經(jīng)過的最大油罐數(shù)量;③經(jīng)過的最大泵數(shù)量。
其中,不包含環(huán)路這一點(diǎn)最為重要,若不加上則會(huì)導(dǎo)致死循環(huán),后2 個(gè)限制條件可以大量降低搜索路徑數(shù)量,避免一些明顯不合理的路徑,如圖8 所示。加上對(duì)路徑經(jīng)過的油泵和油罐數(shù)量限制后,路徑數(shù)量大大減少。最后將路徑用字符串表示,存入Paths 列表中。
圖8 2 種路徑數(shù)量結(jié)果
這樣,獲得了所有符合條件的路徑,然后使用min(Paths,key=len)函數(shù),將len 函數(shù)傳遞給key 參數(shù),最后根據(jù)路徑中每個(gè)單元運(yùn)輸耗時(shí),計(jì)算總耗時(shí),選取總耗時(shí)最短的路徑,即所求最優(yōu)路徑。
2.2.4 保存數(shù)據(jù)
使用update 語句將DFS 搜索得到的最優(yōu)結(jié)果保存到相應(yīng)的數(shù)據(jù)庫中。
設(shè)計(jì)具有可視化功能的原油運(yùn)輸路徑規(guī)劃系統(tǒng),使調(diào)度人員能夠直觀地搜索路徑。該系統(tǒng)主要包括以下功能。
一是為了符合工廠實(shí)際需求,必須是桌面端或者Web 端。
二是能圖形化地顯示管道結(jié)構(gòu)圖,并在上面顯示搜索到的路徑。
三是可以直接輸入原油運(yùn)輸任務(wù),然后在管道結(jié)構(gòu)圖上顯示搜索到的路徑。
本文采用Web 端系統(tǒng),并采用Node.js 環(huán)境、Express 框架、Ajax 等相關(guān)技術(shù)進(jìn)行可視化系統(tǒng)實(shí)現(xiàn)[8]。
2.3.1 界面設(shè)計(jì)
為使調(diào)度人員操作方便,原油任務(wù)起點(diǎn)與終點(diǎn)采用下拉列表的格式,通過
圖9 起點(diǎn)列表圖
圖10 終點(diǎn)列表
圖11 操作按鈕
考慮到原油運(yùn)輸管道的復(fù)雜性,調(diào)度人員會(huì)經(jīng)常對(duì)界面進(jìn)行縮放,為了在這個(gè)過程中不使圖形失真,本系統(tǒng)采用矢量圖而非位圖進(jìn)行設(shè)計(jì)。通過
圖12 原油運(yùn)輸管道
2.3.2 數(shù)據(jù)交互
Express 是基于內(nèi)置HTTP 模塊進(jìn)一步封裝的模塊,能夠極大提高開發(fā)效率。通過Express,可快速創(chuàng)建一個(gè)Web 網(wǎng)站的服務(wù)器,調(diào)用app.listen()方法在8080 端口啟動(dòng)服務(wù)器。再通過express.static()方法創(chuàng)建一個(gè)靜態(tài)資源服務(wù)器,將上文設(shè)計(jì)完成的HTML 文件對(duì)外開放訪問。
編寫GET 接口使服務(wù)器從客戶端獲取到調(diào)度人員發(fā)來的起點(diǎn)與終點(diǎn)數(shù)據(jù),同時(shí)把起點(diǎn)與終點(diǎn)2 個(gè)數(shù)據(jù)存入MySQL 數(shù)據(jù)庫的表格;編寫POST 接口將服務(wù)器從數(shù)據(jù)庫相關(guān)表格中獲得的搜索結(jié)果發(fā)送給客戶端。在服務(wù)器中加入bodyparser.urlencoded()來解析application/x-www-form-urlencoded 格式的表單數(shù)據(jù),加入bodyparser.json()來解析并返回JSON 格式的數(shù)據(jù)。在數(shù)據(jù)傳輸過程中,由于瀏覽器只允許和同一域名服務(wù)器通信[9],會(huì)出現(xiàn)不支持跨域請(qǐng)求的問題,因此,在本系統(tǒng)開發(fā)中導(dǎo)入cors 中間件來解決跨域的問題。
在前端,對(duì)數(shù)據(jù)提交和搜索結(jié)果按鈕綁定點(diǎn)擊事件,使用jQuery 中的Ajax 方法進(jìn)行異步傳輸、發(fā)送、接收數(shù)據(jù)。為了使搜索得到的結(jié)果顯示在Web 頁面中,在獲取數(shù)據(jù)按鈕請(qǐng)求成功地回調(diào)函數(shù)中使用text()將res.data.path 中數(shù)據(jù)渲染到前端頁面上。同時(shí)根據(jù)res.data.path 中路徑的信息遍歷原油運(yùn)輸管道,依據(jù)每個(gè)管道的class 屬性使用setAttribute()方法把對(duì)應(yīng)的路徑顏色改變。本文設(shè)計(jì)了一個(gè)刷新函數(shù),使已經(jīng)改變顏色的路徑恢復(fù)成原始顏色,通過在搜索路徑按鈕中調(diào)用該函數(shù),使之自動(dòng)刷新。這樣,調(diào)度人員在進(jìn)行多次作業(yè)時(shí),不需要手動(dòng)刷新,操作更加便捷。
2.3.3 Node.js 調(diào)用Python 腳本
在客戶端發(fā)送來數(shù)據(jù)之后,需要調(diào)用執(zhí)行Python腳本來進(jìn)行搜索,本系統(tǒng)使用Node.js 提供子進(jìn)程實(shí)現(xiàn)腳本的自動(dòng)運(yùn)行。具體使用child_process 子進(jìn)程執(zhí)行Python 程序,并將其放在POST 接口函數(shù)中,這樣每調(diào)用一次接口,就執(zhí)行一次,實(shí)現(xiàn)了路徑的自動(dòng)搜索。
在本章中,基于所開發(fā)的原油運(yùn)輸路徑規(guī)劃系統(tǒng)進(jìn)行測試和分析。
首先,測試從T51 罐向原油調(diào)合區(qū)A 進(jìn)行路徑搜索,結(jié)果如圖13 所示。由結(jié)果可知,文本結(jié)果與上文Python 運(yùn)行得到的結(jié)果一致,結(jié)合原油管道,突出顯示的正是文本中所給出的路徑,故結(jié)果正確且為最優(yōu)路徑。為避免測試結(jié)果的偶然性,再進(jìn)行一組測試,由T53 罐向#A 調(diào)合區(qū)B 進(jìn)行路徑搜索,結(jié)果如圖14 所示,經(jīng)過驗(yàn)證,發(fā)現(xiàn)結(jié)果正確且為最優(yōu)路徑。
圖13 第一次測試結(jié)果
圖14 第二次測試結(jié)果
本文針對(duì)煉油企業(yè)原油作業(yè)過程中原油運(yùn)輸路徑智能化規(guī)劃的實(shí)際需求,聚焦原油運(yùn)輸路徑規(guī)劃關(guān)鍵技術(shù)及系統(tǒng)開發(fā)。首先,本文采用JSON 作為數(shù)據(jù)載體,其具體結(jié)構(gòu)由頂點(diǎn)、邊、實(shí)體3 部分組成,實(shí)現(xiàn)了原油運(yùn)輸管道的數(shù)字化建模。其次,提出了一種基于DFS的原油運(yùn)輸路徑規(guī)劃方法,并引入剪枝策略,實(shí)現(xiàn)了對(duì)原油運(yùn)輸最優(yōu)路徑的高效搜索。最后,基于Node.js 環(huán)境、Express 框架、Ajax 等相關(guān)技術(shù)實(shí)現(xiàn)了基于Web 端的原油運(yùn)輸路徑規(guī)劃可視化系統(tǒng)開發(fā),經(jīng)測試,本系統(tǒng)能夠準(zhǔn)確地找到罐到原油調(diào)合區(qū)的最短路徑,極大地提升了調(diào)度人員的工作效率。