夔國鳳,趙越,謝毅,高小永,潘軍,左信
(1 中國石油大學(北京)自動化系,北京 102249;2 中國石油大學(北京)安全與海洋工程學院,北京 102249;3 北京萬普隆能源技術有限公司,北京 100195)
油氣田的高效穩定生產離不開許多昂貴的設備和設施,隨著生產進程的推進,不可避免地會出現復雜多樣的維修任務。油氣設備和設施的管理與維護質量對油氣企業的生產質量和效率影響很大,一定程度上提高了企業的運行成本[1]。對人力資源制定調度優化方案,合理地安排維修技術員前往井場進行維修,可以有效地減少故障引起的產量損失,降低生產成本。
調度優化的應用非常廣泛,在聚氯乙烯[2-3]、醫療[4]、油氣生產[5-6]等領域,已有大量的研究和應用。近年來,維修調度研究方面也逐漸有了許多報道,大致可以分為模型描述和優化算法兩方面。在模型描述方面,通過綜合分析戰時維修調度問題,朱昱等建立了基于最大保障時間的維修任務靜態調度模型[7]和考慮維修流程的多單元維修任務調度模型[8]。王正元等[9]提出了一種動態維修任務調度方法,先將原問題分為靜態和動態問題,分別建立相應的數學模型,根據任務變化情況反復調用靜態模型,實現戰場搶修任務的動態調度。后來,他們還提出了一種考慮維修專業的動態維修任務調度方法[10]。呂學志等針對伴隨修理和定點修理兩種維修保障形式,分別提出了裝備作戰單元伴隨修理的仿真模型[11]和用于評估維修任務調度策略的定點修理過程仿真模型[12]。Achkar 等[13]提出了油氣井維修調度優化的基于離散時間的MILP 公式,解決了以最小化操作成本和生產損失為目標的維修人員調度問題。在優化算法方面,王浩[14]將蜂群算法引入裝備維修任務調度研究中,仿真結果表明,蜂群算法對動態隨機任務調度具有很強的優勢。呂學志等[15]建立了考慮維修的維修任務調度混合整數規劃模型,并提出了一種粒子群求解算法,實例證明了該算法的有效性。曾斌等[16]提出了一種基于退火進化的優化調度算法,實驗證明該算法能在較快的收斂速度下提高保障單元的利用率。昝翔等[17]為了快速準確地獲得裝備維修的調度結果,采用一種改進最大-最小螞蟻系統求解維修任務調度模型。針對陸上石油生產安排修井設備的調度優化問題,Aloise 等[18]提出了一種變領域搜索啟發式算法。Ribeiro等[19]對修井機調度問題的三種元啟發式算法進行了比較,其中自適應大鄰域搜索算法的效果最佳。另外,也有一些非常優秀的綜述。Nwadinobi等[20]對已發表的維修調度優化模型進行了調查總結和分類。陳春良等[21]在分析了裝備維修任務調度的需求和意義后,對裝備維修任務調度理論研究現狀進行了綜述。
綜上所述,現有的維修調度研究主要集中在裝備維修方面,對油氣田生產設備的維修調度研究還很少,更沒有考慮不同情況以及任務緊急程度的維修調度優化。本文分析了不同種類的維修任務后,提出了考慮不同情況的4種調度方案,包含定時調度、臨時調度、手動調度及緊急調度。利用C語言編寫調度軟件并進行了應用驗證,結果表明,所提出的調度方案可以實現對不同情況下維修任務的及時有效處理。
傳統的維修調度由人工完成,是定期派人去井場檢查設備的運行狀態,無論是否有故障發生,被派的維修人員必須按照指定的時間,挨個排查所分配的井口,這樣就造成人力資源浪費,工具、設備利用率低,從而導致生產成本大幅提高,不利于公司生產。
維修調度包括:①建立詳細全面的底層數據,如維修工具信息、人員技能信息、班次信息等,進一步建立人員信息、任務信息、日常排班信息等基礎信息;②通過人為設定規則,計算機分析計算得出最優人員和任務匹配方案、最優路線,進行任務分配即人員調度;③手機端收到任務,查看任務所需工具、維修路線,根據任務操作提示、驗收標準等進行維修,并最終反饋。在此過程中,前期基礎數據的建立可能會消耗一定的時間,但是系統一旦建立,就可以解決傳統巡井的盲目性,不再是按時間、按規定去巡井,而是按需求、按任務去巡井,大幅降低了人力資源,提高工具、設備利用率,從而降低生產成本,以達到提高生產效益的目的。
調度流程見圖1。首先,從上位機系統中獲取例如維修技術員、維修任務及維修井之間最短時間路徑信息,即完成基礎信息錄入、維修任務讀取模塊任務,并將這些信息作為調度優化模型生成模塊的輸入信息。其次,生成維修任務調度優化的數學模型描述,結合求解器,對數學模型進行優化求解。最后,借助優化結果自動整理、分析與發布模塊對優化求解結果實現分析、整理與回傳數據庫功能,經過調度員審閱后自動向維修員手機發布求解結果。若系統接收到突發情況的緊急任務申請,根據任務的緊急程度立刻或定時觸發再調度操作。

圖1 調度流程
維修調度主要分為手動調度、系統調度和緊急調度。系統調度是指基于系統現有的數據基礎,如任務信息、維修技術員信息、技能等級等基礎信息,實現最少的車、最少的人,以最短的路徑或時間進行的巡檢任務分配。系統調度一般分為定時調度和臨時調度兩種情況。定時調度是指巡井開始前,由系統根據現有未調度任務情況和在值維修技術員情況,利用智能調度算法進行任務分配。定時調度每日調度時間固定,可根據不同時令自動區別,定時調度整體上要在巡井時間內進行任務分配。臨時調度是指在巡井開始后,新添任務需要監控人員或者其他相關人員進行手動操作的系統調度。臨時調度的調度時間不固定(一般情況在巡井時間內),需要充分考慮到維修技術員位置信息、任務完成情況、任務分配情況,更新指定維修技術員的任務列表。臨時調度原則上在巡井時間范圍內安排任務。
手動調度是指任務分派后,部分任務允許人為干預指定人員完成而進行的調度方式。手動調度需根據當前任務調度情況、維修技術員位置信息等相關約束,按照最優結果排序推薦,手動調度后,需要根據任務分配情況重新更新指定維修技術員的任務列表,原則上任務分配后時間不超過當日巡井時間。手動調度的任務需當日完成,任務為緊急時還需盡快安排。
緊急調度是指遇有突發情況,需要維修技術員盡快處理而產生的巡井任務。緊急調度時,結合維修技術員當前任務情況,自動推薦最佳的巡檢人員。緊急調度后,自動更新維修技術員任務列表。緊急調度需要考慮緊急調度需求時維修人員處于工作、休息等情況。緊急調度流程見圖2。
本文考慮上述4種調度方案,利用C語言編寫了調度軟件,結果表明,調度軟件可以實現4種不同情況下的維修調度。
針對不同的調度方案,本文建立了定時調度的MILP模型、臨時調度和手動調度的MILP模型以及緊急調度模型。
該部分建立的模型是由系統根據現有未調度任務的情況和在值維修技術員情況進行的任務分配模型。該模型考慮了維修任務類型的多樣性、維修技術員的技能水平和工作時間范圍、維修任務所處的物理位置、多維修任務在調度時間點并發產生等約束限制,以期在盡可能短的時間內完成最多的維修任務量,且維修技術員的行駛時間最短,最終決策出維修任務分配情況和執行順序,確定每個維修任務的開始和結束時間。
2.1.1 問題假設
所建立的模型需要滿足以下假設條件:①一個任務只需要一個維修技術員完成,各維修技術員獨立完成各自分配到的維修任務,且維修任務相互獨立,不存在相互支援的情況;②維修任務所在井、各維修技術員完成維修任務的時間、任務的重要度優先級、任務的技能等級需求、維修員技能等級等相關信息均已知;③任務之間相互獨立,沒有從屬關系;④僅考慮維修任務是否在維修技術員的修理能力范圍內,不考慮需要的設備器件等是否短缺;⑤前往任務所在位置均使用相同的交通工具且勻速行駛;⑥同一井存在多個維修任務,且任務的重要度由優先等級進行劃分,同井的任務優先級不唯一。
2.1.2 MILP模型
(1)時間順序約束 定義每位維修技術員時間軸上時間段的始末時間的先后關系。對于每位維修技術員,下一個事件點的開始時間必須滯后于前一個事件點的結束時間,見式(1)。且均不能超過調度周期范圍,見式(2)與式(3)。

(2)事件點持續時間約束 每個時間段的時間長度由該時間段歸屬的維修技術員和處理的維修任務確定,見式(4)和式(5)。

(3)任務分配約束 一個任務最多只能完成一次,見式(6)。每位維修員的每個時間段最多只能安排一個任務,見式(7)。優先級為1和2的任務必須被安排,見式(8)。

(4)事件與時間段匹配約束 前文提到,事件包含任務進行中和任務轉換中兩種類型,兩種類型任務在時間軸上是交替出現的,因此同一時間軸的相鄰時間段XSi,j,n和Xi,j,j′,n的取值只能是{0,1}或{1,0}。式(9)和式(10)保證了該規則,但由于兩式是兩個離散變量的乘積形式的非線性多項式,根據You 和Grossmann[22]提供的線性化思想,將這兩式線性化為式(11)~式(15)。

(5)中斷任務約束 保證每位維修技術員在中午休息時間回到維修中心站,休息結束后繼續完成剩下任務。式(16)保證每位維修員會分配到一個時間段休息,式(17)和式(18)確定休息時間的開始和結束時刻。由于式(17)和式(18)是屬于離散變量和連續變量乘積形式的非線性多項式,參考You 和Grossmann[22]提供的規則可依次線性化為式(19)~式(23)和式(24)~式(28)。


式(29)為該模型的目標函數,最小化成本和最大化任務量。為了描述方便,均統一為時間表示的成本問題。最終的目標函數包含四部分信息,第一項是一個軟約束,即在每個技術人員的任務列表中優先級為1 的任務必須優先完成,M1是優先級懲罰的時間歸一化系數;第二項是最大化安排任務數量,即在滿足約束條件的前提下,盡可能多地安排維修任務,M2表示任務量歸一化時間系數;第三項是最小化所有技術人員的路途行駛時間,M3確定總路途行駛時間的成本系數;第四項也是一個軟約束,即保證在任務量較少的情況下,盡可能早地結束維修工作,M4是該項的時間歸一化系數。

臨時調度是新添任務需要監控人員或者其他相關的人員進行安排;手動調度是任務分派之后,部分任務需要人為干預指定人員完成。所以,臨時調度模型和手動調度模型可以歸納為同一個數學模型,但是輸入參數不同。
2.2.1 問題假設
假設條件與定時調度相同。
2.2.2 MILP模型
調度專家根據現場的經驗以及原始數據的分析,對式(29)目標函數中的系數M1、M2、M3、M4進行賦值。接下來詳細介紹系數M1、M2、M3、M4的賦值過程。
根據式(8),優先級為1 和2 的任務必須被安排。目標函數第一項為在每個技術人員的任務列表中優先級為1的任務必須優先完成。為了達到目標函數的最小化,n也會取到盡可能小的值,來保證優先級為1的任務優先完成。目標函數第二項是最大化安排一般任務數量,即在滿足約束條件的前提下,盡可能多地安排一般任務。如果在優先級為1和2的任務被安排之后,調度周期內剩余時間不足以完成任何一個一般任務,此時第二項將不存在任何意義;如果在優先級為1 和2 的任務被安排之后,調度周期內剩余時間可以完成一般任務,此時為了保證時間的緊湊性,設置M1=M2=M,M為任意大于0的值。
在保證優先級為1的任務優先完成并且最大化完成一般任務量的前提下,目標函數中還設置了第三項與第四項。即同時保證最小化所有技術人員的路途行駛時間;而且保證在任務量較少的情況下盡可能早地結束維修工作,因此設置M3=M4=m,m為任意大于0的值。
M1、M2、M3、M4的取值主要包括三種情形,分別描述如下。
情形1:
最初的維修任務列表包含緊急任務、重要任務、一般任務時,系數M1、M2、M3、M4的取值見式(30)。

此時調度模型最主要的是滿足優先級為1的任務優先完成,一般任務盡可能多完成。同時,保證最小化所有技術人員的路途行駛時間并盡可能早地結束維修工作。
情形2:
最初的維修任務列表包含緊急任務、重要任務時,系數M1、M2、M3、M4的取值見式(31)。

此時調度模型最主要的是滿足優先級為1的任務優先完成。同時,保證最小化所有技術人員的路途行駛時間并盡可能早地結束維修工作。
情形3:
最初的維修任務列表包含重要任務、一般任務時,系數M1、M2、M3、M4的取值見式(32)。

此時調度模型最主要的是滿足一般任務盡可能最多完成。同時,保證最小化所有技術人員的路途行駛時間并盡可能早地結束維修工作。
緊急調度部分沒有具體的數學模型,該部分主要是對數據預處理和預判斷。
時間約束的優化處理與預判斷。
(1)如果所有緊急任務和重要任務的時間總和超過維修工時,則調度肯定無解,此種情況下以完成任務量最大為目標進行調度(既然完成任務量最大化,則路徑自然應該是最優,只有充分節約了井組間運動時間才可完成任務數最大化)。
(2)如果緊急任務和重要任務時間總和少于維修工時,則可能存在調度優化解,此時啟動正常優化求解(即在模型中以約束形式強制要求所有緊急和重要任務必須完成)。
緊急調度判斷與處理。
(1)如果非工作時間內出現緊急任務,則以時間最優為目標進行優化。
(2)如果工作時間內出現緊急任務,分上午和下午兩種情況進行優化求解:如果上午出現緊急調度,則模型中考慮維修技術員的中午午休約束;如果下午出現緊急調度,則模型中無需考慮午休約束問題。
建立了定時調度MILP 模型、臨時調度和手動調度MILP 模型以及緊急調度模型后,利用C 語言編寫了調度軟件。3.1 節中對定時調度案例結果做了詳細說明,3.2 節是四種調度方案的仿真案例的結果匯總。
3.1.1 測試用例
假定有維修技術員4 人,2 人為高級技術員,2人為中級技術員;一共有待維修任務74個,其中重要任務23 個,一般任務49 個,緊急任務2 個。在本例中通過大量的案例數據總結分析,在統計意義下給出一組相對合理、求解可靠的經驗值:M1=M2=M=10,M3=M4=m=0.01。調度結果見表1~表4。
表1~表4中,各個時間表中標紅色的為緊急任務、標橙色的為重要任務、標綠色的為午休、其他的則為一般任務。4位維修技術員(分別為951號、311 號、767 號和050 號)的調度結果甘特圖見圖3。圖3 中每個方框內的數字表示每一位維修技術員所維修的任務以及所花費的時間,例如ID 為951 的維修技術員第一個維修的任務編號為1171,花費41min。

圖3 定時調度甘特圖

表1 951號維修技術員時間表

表2 311號維修技術員時間表

表3 767號維修技術員時間表
結合表1~表4 可以看出,4位維修技術員均在早上8:30出發,完成一天的維修工作后,在晚上18:00 之前回到維修站(TS0000)。中午12:00—14:00在維修站休息。兩個緊急任務1227 和1228 均被完成。調度結果表明,本文中所提出的調度方案合理有效。

表4 050號維修技術員時間表
3.1.2 測試結果
(1)任務安排飽滿:四個人任務均安排飽滿,共計做了74 個任務(已去除早上從維修站出發以及傍晚回維修站任務),四人分別所做任務數為20、17、19、18。
(2)緊急任務、重要任務均已完成(緊急任務1227、1228均已按照優先級安排)。
(3)所要求的任務做了74 個,時間飽滿,結果合理有效。
在本節中,對4種調度方案對應的仿真實驗的結果進行了統計,結果見表5。
需要說明的是,在臨時調度時,設置臨時任務出現在9:30;在手動調度時,需要指定待維修的任務和待安排的維修技術員;在緊急調度時,設置緊急任務出現的時間為10:30,即需要考慮中午休息的約束。
從表5 的結果可以看出,在4 種調度方案中,優先級為1 和2 的任務,即緊急任務和重要任務,在調度周期內,都安排了維修技術員前往處理。目標函數第三項為最大化完成一般任務的數量,因此臨時調度案例中的49 個待維修一般任務只完成了48 個。具體求解時間與人員、任務數量以及求解器性能息息相關。針對本文中給出的不同案例,優化求解收斂時間如表5所示。此外,目前大量運行案例的統計數據表明,調度優化求解時間為分鐘級。

表5 4種調度方案仿真實驗結果統計
油氣井的生產過程中,會出現各種各樣、復雜多變的維修任務,只有及時有效地解決這些維修任務,才能保證生產過程的安全平穩運行以及最大限度地減少故障引起的產量損失。本文考慮生產過程中出現的不同場景下的不同等級的維修任務,提出了4種調度方案:定時調度、臨時調度、手動調度和緊急調度。
針對不同的調度方案,建立相對應的調度模型,利用C 語言編寫調度軟件并進行了仿真實驗。應用結果表明,文章中所提出的不同場景下的維修調度模型與技術方案可以實現及時有效地對維修技術員進行調度任務優化安排,真正做到了工作效率的提升。
符號說明
AXSi,j,n,AXS1i,j,n,AXS2i,j,n,BXS1i,j,n,BXS2i,j,n—— 輔助變量
BL—— 中斷任務開始時間,取值240min
BU—— 中斷任務結束時間,取值330min
H—— 調度周期,取值600min
K1,K2,K3?K—— 待 維 修 任 務 編 號 的 集 合,{j|j=0,1,2,…,K},其中j=0表示維修技術員在維修站,j=1 表示維修技術員在午休,K1表示優先級為1 的任務,K2表示優先級為2 的任務,K3表示優先級為3的任務
N—— 事件點集合,N={n|n=0,1,2,…,Nmax}
Nmax—— 最大事件點
P—— 維修技術員編號的集合,P={i|i=1,2,…,P}
Tfi,n—— 維修技術員i事件點n結束時間
Tsi,n—— 維修技術員i事件點n開始時間
Ti,j—— 維修技術員i完成維修任務j所需時間
Tj,j′—— 由維修任務j轉移到維修任務j′所需的最短路徑時間
Xi,j,j′,n—— 決策變量,維修技術員i在時間間隔n由維修任務j前往維修任務j′時,取值1,其他取0
XSi,j,n—— 決策變量,維修技術員i在時間間隔n做維修任務j時,取值1,其他取0