楊田芳 李孟凱 王叢
摘 要:動車組運用所是負責對動車進行檢修、養護等工作的場所,全國已有超過50個動車運用所。動車組的檢修根據行駛情況被劃分成不同檢修等級,不同等級對應不同的工序。在這里我們引用計算機進程中的PV操作,通過Python來實現,S在本題目中即為可提供檢修服務的車間資源數量。來解決并發進程間互斥和同步關系,調配資源之間的合理利用。當同一種維修資源被耗盡時,需要這種資源的工序不得不進入阻塞階段,此時,表示有些進程正在等待該資源,因此要喚醒一個阻塞狀態的進程,即直到有其他競爭對手釋放足夠的資源,此時工序才可以從阻塞中恢復,進入就緒階段。
關鍵詞:動車組檢修;PV操作;資源配置;Python
1 問題描述
如表1所示,不同類型的動車組每個工序需要花費的時間是不一樣的。請根據附件中附表一到達動車運用所的動車信息,計算維修完這些動車的總時間。
2 問題分析
車輛檢修資源有限,動車與動車之間構成了對于維修車間的競爭互斥關系,每輛動車,都擁有自己的檢修狀態,以及車輛型號,所以在檢修方案規劃時,情況復雜,常規方法難以解決。此時我們從問題中抽象出單個動車的自動狀態機,將每個動車狀態劃分為,就緒,維修(運行),與阻塞狀態,但是問題假設中,不考慮車輛交換時間,所以問題可以進一步轉化為,維修(運行)與阻塞兩個狀態。
此時提出信號量處理的PV操作方法,1962年,迪克斯特拉數學教授,設計與實現了一種具有多道程序運行能力的操作系統——THE。
在PV操作中,P代表資源占用,當有動車進入S維修工序之前,嘗試對S資源進行占用操作,因為本題中,車輛對于維修車間的占用關系比較簡單,任意車輛在某一時刻只會占用一個資源,所以當S≥1時,P操作占用資源成功,當S=0時,P操作失敗,該動車維修陷入阻塞狀態。此時在其他的動車維修進程中,某一個車輛完成了車輛的S檢修程序,對S資源進行V釋放操作,S資源加1,并解除等待隊列中的一個阻塞狀態。
PV操作與常規方法相比較有限在于,在一個特定系統中,如果同時運行的進程之間存在著相互制約的同步運行狀態,(例如相同時刻,不只有一個動車需要檢修),為了避免多個進程在同一時刻在一個臨界區域中同時請求不可分割的獨立資源時,(同一車間不能同時維修兩個車輛),此時根據迪克斯特拉提出的PV同步可以化解,進程與進程之間的復雜關系,從而轉化為進程與資源之間的相對簡單的占用釋放關系。
所以在此基礎上,我們只需要考慮,不同車輛對于某一個維修工序的排斥關系,在推廣至所有的維修工序,問題迎刃而解,當所有動車順序完成了所有的檢修工作,問題就得到了解決。我們只需要在每個資源中記錄下這個資源維修過的車輛,便可以還原出維修方案,同時在每個動車對象中,記錄最后一次維修的結束時間,就可以得到動車完成維修的時間,與動車到達時間做差,得到維修總時長。
3 條件假設
(1)假設第一輛動車組抵達動車運用所時,所有檢修車間都是空閑的,且車間之間的轉換時間忽略不計。
(2)假設執行PV操作時,沒有時間延誤;
(3)假設進程實現的是先到先服務的系統操作。
4 模型建立與求解
問題2提出不同類型的動車組每個工序需要花費的時間是不一樣的。請根據附件中附表一到達動車運用所的動車信息,計算維修完這些動車的總時間。此時我們將每個動車組的維修進程進行綁定,通過PV操作進行不同工序的開展工作,得到從第一輛動車組到達時間(0:16)到最后一輛動車組離開(9:17)所需要的總時間為541分鐘(9個小時零1分鐘),如表2所示:
5 結語
巧妙地利用計算機進程中的PV操作,擺脫了傳統排隊模型的影響,從問題中抽象出單個動車的自動狀態機,問題可以進一步轉化為,維修(運行)與阻塞兩個狀態這樣,我們只需要考慮,不同車輛對于某一個維修工序的排斥關系,在推廣至所有的維修工序,問題迎刃而解,當所有動車順序完成了所有的檢修工作,問題就得到了解決。資源中記錄下這個資源維修過的車輛,同時在每個動車對象中,記錄最后一次維修的結束時間,就可以得到動車完成維修的時間。
參考文獻:
[1]《計算方法》科學出版社-教材[M] .2011年7月
[2]清華大學《操作系統》學習筆記[M].
[3]《PV操作經典問題》簡書[Z].