孫陽君,趙 寧
(北京科技大學 機械工程學院,北京 100083)
多機器人存取系統(tǒng)(Robotic Mobile Fulfillment System, RMFS)能夠利用貨架存儲商品,通過自尋址機器人車(Autonomous Vehicle, AV)搬運貨架至工作站,工作人員無需進入儲區(qū),在工作站內(nèi)進行各種操作即可,完成操作后AV再將貨架搬運回儲區(qū)。相比傳統(tǒng)揀貨系統(tǒng),RMFS具有更高的揀貨效率、更好的系統(tǒng)可擴展性和柔性[1]。自2008年Kiva systems公司將其用于亞馬遜的倉儲作業(yè)以來[2],RMFS被廣泛用于各大電商企業(yè)。RMFS布局如圖1所示[3],中間的存儲區(qū)域擺放貨架,兩邊為工作站,承擔揀貨或補貨任務。為避免RMFS內(nèi)的AV相向沖突和死鎖,大部分系統(tǒng)內(nèi)的道路都是和圖1類似的單向道??蛰dAV按照道路方向運行,并可在貨架下穿行,負載AV只能按照道路方向運行。很多學者都針對RMFS內(nèi)的調(diào)度和優(yōu)化問題展開研究,包括訂單指派問題[4-5]、任務分配問題[6]、路徑規(guī)劃問題[7]、無沖突調(diào)度問題[8-9]、儲位優(yōu)化問題[10]等,或是多種問題的結(jié)合問題[11-13]。但以上研究多是針對靜態(tài)RMFS,而電商企業(yè)中的訂單是實時到達并要求立即響應的,對系統(tǒng)的實時性要求高。
針對實時RMFS,大部分研究都集中于任務分配、路徑規(guī)劃和無沖突調(diào)度等問題。MA等[14]將AV路徑規(guī)劃問題建模為以最小任務完成時間為目標的多代理路徑尋找問題,開發(fā)了令牌傳遞算法和帶有任務交換的令牌傳遞算法,通過實驗表明算法在實時調(diào)度系統(tǒng)中能夠快速規(guī)劃任務。YOSHITAKE等[15]以揀貨人員空閑時間為目標,建立了一種實時整體調(diào)度方法,AV同時搬運RMFS中的貨架和工作站中的揀貨架。LEE等[16]在RMFS中驗證了動態(tài)無沖突調(diào)度策略,對實時數(shù)據(jù)進行處理后得到當前AV狀態(tài),采用改進A*算法規(guī)劃路徑,利用離開、繞路和啟動前等待3種方式避開AV間的持續(xù)沖突、對頭沖突和交叉口沖突。KEUNG等[17]在LEE研究的基礎(chǔ)上,對多層多深度倉庫布局中的6種沖突進行處理,實現(xiàn)實時調(diào)度。GUNEY等[18]開發(fā)了一個基于優(yōu)先級的AV車輛運動協(xié)調(diào)算法解決單向網(wǎng)絡(luò)RMFS中的AV沖突問題,在實時調(diào)度中獲得了魯棒性更強的調(diào)度結(jié)果。以上研究多采用啟發(fā)式規(guī)則和智能算法實現(xiàn)任務分配,利用動態(tài)路徑規(guī)劃算法規(guī)劃AV的路徑,通過啟發(fā)式規(guī)則規(guī)避動態(tài)運行時AV間的沖突,調(diào)度結(jié)果表現(xiàn)很好。系統(tǒng)布局也不再局限于單向道,能夠較好地在實時環(huán)境中解決AV之間的沖突問題。
但在實際運行時,除了實時到達的訂單外,RMFS內(nèi)常會出現(xiàn)很多動態(tài)不確定事件,導致AV調(diào)度計劃與實際運行難以完全符合,甚至偏差過大導致系統(tǒng)停擺。因此,對RMFS內(nèi)的動態(tài)事件進行分析并及時處理就成為研究的關(guān)鍵,這些動態(tài)事件包括緊急訂單到達、AV故障、路塊不可用等。部分學者對RMFS內(nèi)的動態(tài)事件加以研究,GONG等[19]建立了多機器人存取系統(tǒng)的高維馬爾可夫模型,考慮到加急訂單的實時到達,探索了機器人速度、機器人數(shù)量和揀選站數(shù)量對系統(tǒng)吞吐量的影響。但是由于RMFS對實時性要求高,動態(tài)事件發(fā)生時系統(tǒng)情況復雜,加劇了系統(tǒng)內(nèi)AV的沖突。因此,現(xiàn)有研究對動態(tài)事件的考慮不足,很少考慮到AV故障、路塊不可用等事件以及對這類事件的處理。在其他類似的調(diào)度系統(tǒng)中,針對這類動態(tài)事件的處理方式可以被分為完全反應式調(diào)度、預反應式調(diào)度、預反應式魯棒調(diào)度和主動魯棒調(diào)度[20]。其中,預反應式調(diào)度是最常用的調(diào)度方法。
預反應式調(diào)度方法是首先生成一個預調(diào)度方案,發(fā)生動態(tài)事件時再觸發(fā)重調(diào)度。該方法現(xiàn)已被用于作業(yè)車間[21-22]、混合流水車間[23]、車輛路徑問題[24]等動態(tài)調(diào)度問題中,具有良好的表現(xiàn),保證了動態(tài)事件發(fā)生后能夠及時調(diào)整調(diào)度計劃,得到新的調(diào)度方案。預反應式調(diào)度方法分為預調(diào)度和重調(diào)度兩部分。預調(diào)度的方式和靜態(tài)調(diào)度類似,重調(diào)度方式包括右移重調(diào)度、部分重調(diào)度和完全重調(diào)度等[25]。在RMFS實際應用時,也多是通過類似的方法確保調(diào)度計劃順利進行,即先確定AV調(diào)度計劃,在運行中根據(jù)實際情況動態(tài)調(diào)整。但是,由于動態(tài)事件造成的后果復雜,受影響的AV和路塊又會發(fā)生連鎖反應,造成連環(huán)沖突和死鎖。工業(yè)界應用時只能用簡單的啟發(fā)式規(guī)則處理動態(tài)事件發(fā)生后的重調(diào)度問題,其所用規(guī)則的有效性有待驗證。如AV故障后,其他受影響的AV只有在即將進入故障路塊時才能確定當前路塊被占用,再進行重調(diào)度選擇其他路線,由于重調(diào)度反應時間長,可能會造成死鎖現(xiàn)象。本文針對實時RMFS系統(tǒng)建立了多機器人存取系統(tǒng)動態(tài)調(diào)度方法,提出動態(tài)調(diào)度算法進行實時到達訂單的任務分配、路徑選擇和無沖突調(diào)度以生成預調(diào)度方案,再根據(jù)系統(tǒng)內(nèi)出現(xiàn)的各類動態(tài)事件,通過分析動態(tài)事件的后果,確定不同事件的處理方式,確立重調(diào)度規(guī)則,最后通過實例驗證了動態(tài)調(diào)度方法的有效性。
RMFS的調(diào)度首先需要根據(jù)系統(tǒng)實時輸入的訂單,將一段時間的訂單到達后統(tǒng)一拆分成任務。即訂單是實時到達的,但待分配的任務是周期性到達的。然后,為每個可接取任務的AV確定當前情況下要執(zhí)行的任務,完成任務分配。再為接取任務的AV確定途經(jīng)的各個路塊,完成路徑規(guī)劃。最后,為AV確定各路塊的進入時間和離開時間,保證多輛AV間運行時互不干擾,完成無沖突調(diào)度。調(diào)度的目的是先確定到達的任務,哪些AV接取哪些任務,如何完成這些任務,保證完成任務時不產(chǎn)生碰撞和死鎖現(xiàn)象。當出現(xiàn)動態(tài)事件時,需要根據(jù)調(diào)度計劃和當前的動態(tài)事件進行重調(diào)度,以保證任務順利完成,繼而完成所有訂單。
在調(diào)度中,路徑規(guī)劃部分的路徑和AV接取的任務相關(guān)。如圖2所示,AV接取任務后,分3個階段完成任務:①從當前路塊到貨架所在路塊;②從貨架路塊到工作站;③從工作站返回儲區(qū)。AV完成任務需要對這3個階段的路徑進行規(guī)劃。由于任務的貨架所在路塊和工作站不會變動,即無論哪個AV接取任務都需要經(jīng)過這兩段路徑,則這兩段路徑規(guī)劃可以提前進行,即在任務到達后分配前進行規(guī)劃。為了提高計劃的柔性,在這兩個階段的路徑規(guī)劃時不只規(guī)劃單條路徑,而是規(guī)劃出路徑集。在后續(xù)調(diào)度中,對任務的第二階段和第三階段的路徑只在路徑集內(nèi)進行路徑選擇。通過提前規(guī)劃路徑集,減少不必要的路徑規(guī)劃時間,以提高調(diào)度的效率。此外,還能在系統(tǒng)中單個或幾個路塊無法通行時,為AV提供備選路徑。調(diào)度中的路徑規(guī)劃只包括在AV接取任務之后從當前路塊到貨架所在路塊這一段的路徑,這大大減少了實時調(diào)度中所需的時間。
在實際運行中,RMFS系統(tǒng)內(nèi)的對象眾多,會發(fā)生很多不確定的擾動事件。按照發(fā)生事件的因素是否位于系統(tǒng)內(nèi),可以分為外部因素和內(nèi)部因素兩類,每種因素都會發(fā)生不同的動態(tài)事件,這些事件導致的后果和對調(diào)度的影響也不同,具體描述如圖3所示。
(1)內(nèi)部因素 包括系統(tǒng)內(nèi)的路塊、貨架、AV、工作站等因素。不同因素發(fā)生動態(tài)事件時,可能產(chǎn)生相同的后果,例如路塊二維碼污損、貨架上貨物跌落和AV長時間故障都會導致路塊不可用。路塊和路徑規(guī)劃息息相關(guān),有不可用的路塊,意味著之前的路徑規(guī)劃受到影響,調(diào)度方案也需要因為路徑規(guī)劃的改動而改動。同樣的,某個因素的動態(tài)事件可能會導致多個后果,如AV長時間故障除了AV本身不可用之外,還會造成路塊不可用,影響到AV接取的任務,這些任務只能被分配給其他AV完成。AV故障時間長,甚至影響其他AV和其接取的任務,這些AV原本的調(diào)度方案因為前方路塊不可用而不得不選擇其他道路,路徑規(guī)劃和調(diào)度方案都要改動;若AV故障時間短,雖然影響路塊,但只是占用時間過長,不會造成路塊不可用,也不會讓AV本身已經(jīng)接取的任務受到太大影響。其他還需要經(jīng)過這個路塊的AV,最多只需要多等待一段時間,無需改變路徑規(guī)劃和調(diào)度方案。而AV無論是短時間故障還是長時間故障,都有可能產(chǎn)生新任務,因為故障后AV需要前往檢修區(qū),在檢修區(qū)進行檢查。工作站的情況又和AV故障不同,雖然都是短時間不可用或者長時間不可用,但兩者的影響完全不同。短時間不可用的工作站,只需要AV等待一段時間,即可恢復運行;長時間不可用的工作站,原本需要在工作站操作的任務只能取消,然后被分配到其他工作站,即產(chǎn)生了新任務。新任務需要重新分配,AV按照任務需求規(guī)劃路徑并在原有調(diào)度方案的基礎(chǔ)上生成新調(diào)度方案。
(2)外部因素 包括作為系統(tǒng)輸入的訂單和補貨貨物。這兩者主要影響系統(tǒng)內(nèi)的任務,例如訂單取消或者補貨貨物未按時到達會導致任務取消,緊急訂單會導致新任務到達且優(yōu)先級最高等。若任務取消,按照任務分配情況和當前任務狀態(tài),其造成影響的輕重程度不同。例如,當任務沒有分配時,對調(diào)度基本無影響;任務已經(jīng)分配但AV還沒有搬運貨架時,只需要取消AV接取的任務即可;如果AV已經(jīng)搬運貨架,必須將貨架放回才能進行之后的調(diào)度。新任務到達也包括了普通任務和緊急任務兩類,緊急任務優(yōu)先級最高,兩類任務都由AV接取完成。
通過分析動態(tài)事件,這些動態(tài)事件對系統(tǒng)內(nèi)部的影響按照因素不同可以歸類為路塊是可用或不可用的,AV是可用或不可用的,工作站是可用或不可用的,以及任務是取消、繼續(xù)執(zhí)行、還是換AV執(zhí)行,新到達的任務是緊急任務還是普通任務等。因為動態(tài)事件對系統(tǒng)內(nèi)部產(chǎn)生影響,同樣也會影響到系統(tǒng)的調(diào)度計劃,通過分析以上不同內(nèi)部和外部因素,對調(diào)度的影響可以歸結(jié)為3種情況:影響任務分配、影響路徑規(guī)劃、影響調(diào)度方案。雖然這3種情況中影響了任務分配就一定影響路徑規(guī)劃,影響了路徑規(guī)劃一定影響調(diào)度方案,但影響因素不同,對調(diào)度的影響程度不同。圖4針對這3種情況進行了詳細分析,確定了其對調(diào)度的影響程度。圖中將影響程度分為影響很輕、影響一般、影響較大。
(1)影響任務分配 包括刪除任務和接取新任務,如果任務因為某些原因需要更換目的貨架或工作站,則都可被刪去原任務后增加新任務。刪除任務也有幾種情況:任務未分配、任務已分配未開始和任務已分配已開始。未分配和已分配未開始的任務可以直接刪除,刪除這些任務對調(diào)度的影響程度都很輕。其中,已分配未開始的任務如果已經(jīng)有調(diào)度計劃,刪除調(diào)度計劃即可。但已分配已開始的任務,刪除后續(xù)調(diào)度計劃的同時,還需要考慮到AV是否接取貨架,如果接取貨架,AV需要將貨架搬運回原位,在刪除調(diào)度方案后可以接取新任務,但只有將貨架搬運回原位后AV才能前往新任務要求的貨架所在路塊,刪除已分配已開始的任務對調(diào)度影響一般。AV接取新任務對調(diào)度影響一般,可以按照任務類型分為普通任務和緊急任務,二者的任務優(yōu)先級不同,緊急任務需要盡快完成。
(2)影響路徑規(guī)劃 如果AV接取了新任務,一定會影響路徑規(guī)劃,因為AV需要按照任務要求規(guī)劃路徑。新路徑規(guī)劃導致后續(xù)需要在原有調(diào)度方案的基礎(chǔ)上,新增調(diào)度方案,對調(diào)度影響一般。此外,如果有路塊不可用,一些AV的后續(xù)又會按調(diào)度計劃經(jīng)過這個路塊,造成調(diào)度計劃不能順利完成,原有的調(diào)度方案不可避免地發(fā)生偏差,即影響到了已完成的路徑規(guī)劃,這時需要重新確定AV路徑,生成新的調(diào)度方案,此時對調(diào)度影響較大。
(3)影響調(diào)度方案 由于影響的因素不同,影響調(diào)度方案可被分為刪除部分方案、新增調(diào)度方案和修改部分方案。刪除部分方案是刪除部分AV的調(diào)度方案,或者刪除部分任務的調(diào)度方案,主要針對故障的AV或被取消的任務。故障AV的調(diào)度方案刪除后還需要進行后續(xù)處理,因此對調(diào)度影響一般。刪除被取消的任務調(diào)度方案后,造成的影響和影響任務分配中刪除任務類似,刪除未分配和已分配未開始的任務對調(diào)度影響很輕,刪除已分配已開始的任務對調(diào)度影響一般。新增調(diào)度方案是在原有調(diào)度方案上新增方案,主要針對新分配的任務,對調(diào)度影響一般。修改部分方案是在原有調(diào)度方案上進行改動,例如因為某個路塊上的時間改變而改動調(diào)度方案,只對調(diào)度影響一般。更改路徑規(guī)劃后,需要刪去舊路徑的調(diào)度方案并按照新路徑生成新的調(diào)度方案,與影響路徑規(guī)劃中的重規(guī)劃路徑類似,對調(diào)度影響較大。
由于這些動態(tài)事件對調(diào)度的影響程度不同,在處理時也需要采用不同的方式。針對動態(tài)事件進行處理的重調(diào)度包括:重分配任務、重規(guī)劃路徑和重生成調(diào)度方案3種。
符號定義見如表1所示。
表1 符號定義
續(xù)表1
為方便研究,提出以下假設(shè)條件:
(1)只發(fā)生訂單到達和AV故障這兩類動態(tài)事件;
(2)一波任務按照一定時間間隔到達;
(3)任務間互相獨立,沒有優(yōu)先級;
(4)AV在0時間準備就緒;
(5)路塊間的通行是雙向的;
(6)不考慮AV充電情況;
(7)貨架在工作站揀選完成后直接返回原儲位。
針對RMFS動態(tài)調(diào)度問題,建立了以最小的所有任務完成時間為目標的數(shù)學模型。
minT=maxTc,c∈[1,2,…,q]。
(1)
s.t.
(2)
(3)
(4)
?i∈[1,2,…,n],c∈[1,2,…,q],
p∈[1,2,…,u],
(5)
?i∈[1,2,…,n],
c∈[1,2,…,q],
p∈[1,2,…,u],
(6)
?i∈[1,2,…,n],c∈[1,2,…,q],
p∈[1,2,…,u],
(7)
i≠i′,c≠c′,
(8)
(9)
其中:式(2)表示系統(tǒng)內(nèi)所有任務完成情況和調(diào)度計劃無偏差,即輸入的任務結(jié)束時間等于任務運行的最后一個路塊的完成時間;式(3)表示所有任務的到達時間小于等于任務的開始時間,任務只有到達之后才能被調(diào)度;式(4)表示對于每個任務,只有一個AV接取,只用路徑集中的一條路徑,且AV運行的節(jié)點只包含一個路塊;式(5)計算路塊上的完成時間,為當前路塊的操作時間和上一路塊的完成時間之和;式(6)計算任務在路塊上的操作時間,由通過、啟停、升降、轉(zhuǎn)向和等待用時組成,在工作站路塊加入揀貨/補貨用時;式(7)確定每個任務的路徑內(nèi)路塊的情況,路徑內(nèi)初始路塊為AV所在路塊,其中需要依次經(jīng)過貨架所在路塊、工作站所在路塊和貨架所在路塊,AV空載和負載時可以通行的路徑不同;式(8)避免兩AV同時占用一個路塊;式(9)避免AV間發(fā)生相向沖突。
由于系統(tǒng)是動態(tài)的,為了實現(xiàn)最小化所有任務完成時間這一目標,在每次動態(tài)調(diào)度時以最小的當前調(diào)度完成時間為目標,利用式(10)求解最小的當前調(diào)度完成時間:
(10)
由于系統(tǒng)內(nèi)有動態(tài)事件發(fā)生,可能會造成路徑重規(guī)劃,通過式(11)計算重規(guī)劃路徑后新增的路徑長度,即對調(diào)度計劃的改動程度。重規(guī)劃后的路徑依然要滿足式(7),這些路徑還要根據(jù)當前調(diào)度計劃進行無沖突調(diào)度,調(diào)度結(jié)果和實際運行情況要滿足式(2)。
(11)
動態(tài)調(diào)度方法包括預調(diào)度和重調(diào)度兩部分。預調(diào)度不考慮動態(tài)事件,主要包括任務分配、路徑規(guī)劃和無沖突調(diào)度3部分;只有在動態(tài)事件如AV故障發(fā)生時才進行重調(diào)度,重調(diào)度時需要分析故障情況,選取合適的重調(diào)度規(guī)則,最后得到新的調(diào)度方案。動態(tài)調(diào)度方法流程如圖5所示。初始輸入包括初始任務數(shù)據(jù)和AV數(shù)據(jù);實時輸入包括新到達任務數(shù)據(jù)、離開工作站時間t1、任務完成時間t2、產(chǎn)生異常時間t3和異常情況。實時輸出的是當前時間調(diào)度方案。如果有緊急訂單到達,到達后立刻確定緊急任務的各項信息??紤]到調(diào)度方案的穩(wěn)定性,調(diào)度中將緊急任務的優(yōu)先級提高,在新一輪任務分配時和其他任務一起調(diào)度。動態(tài)調(diào)度方法的具體步驟如下:
步驟1開始,t=0。確定可開始任務的AV,如果所有任務都被完成,調(diào)度結(jié)束;否則,轉(zhuǎn)步驟2。
步驟2確定可接取任務的AV,判斷所有任務是否被分配,若是,則轉(zhuǎn)步驟3;否則,轉(zhuǎn)步驟4。其中,可接取任務的AV包括本身沒有任務的AV和本身任務執(zhí)行到第三階段的AV。
步驟3判斷是否有任務還在工作站等待工作人員完成操作,若任務還在工作站,即沒有第三階段的調(diào)度方案,則轉(zhuǎn)步驟5;否則,讓可接取任務的AV原地等待,轉(zhuǎn)步驟1,重新確定可開始任務。
步驟4有任務沒有分配,根據(jù)可開始任務和可接取任務的AV,利用禁忌搜索進行任務分配、路徑規(guī)劃和無沖突調(diào)度,生成當前時間的調(diào)度方案。若調(diào)度方案在執(zhí)行中無異常,則轉(zhuǎn)步驟5,否則,轉(zhuǎn)步驟7。
步驟5t1時有AV離開工作站,確定工作站操作完成的任務,當前時間t=t1;對離開工作站的AV進行無沖突調(diào)度,生成當前時間的調(diào)度方案。若調(diào)度方案在執(zhí)行中無異常,則轉(zhuǎn)步驟6,否則,轉(zhuǎn)步驟7。
步驟6t2時有AV完成任務,確定下次任務分配時間,當前時間t=t2,轉(zhuǎn)步驟1,重新確定可開始任務。
步驟7在調(diào)度中,時間t3時發(fā)生異常,先對動態(tài)事件進行評估,確定重調(diào)度方式,當前時間t=t3;利用重調(diào)度規(guī)則進行調(diào)整,生成當前時間的調(diào)度方案,調(diào)整后的調(diào)度方案執(zhí)行時,有AV先離開工作站,轉(zhuǎn)步驟5,否則,轉(zhuǎn)步驟6。
根據(jù)圖5的動態(tài)調(diào)度流程,在動態(tài)調(diào)度中,不考慮動態(tài)事件的預調(diào)度被分為兩步,即步驟4的禁忌搜索和步驟5的無沖突調(diào)度。這是由于RMFS是動態(tài)運行的,在工作站內(nèi)工作人員的操作時間是不固定的。因此,在第一步利用禁忌搜索完成任務分配、路徑規(guī)劃和AV的前兩階段的無沖突調(diào)度,生成調(diào)度方案。離開工作站后,確定AV的可開始時間后,再進行第3階段的無沖突調(diào)度,增加新的調(diào)度方案。即在調(diào)度中,根據(jù)離開工作站時間t1和任務完成時間t2兩種事件驅(qū)動調(diào)度機制,觸發(fā)動態(tài)調(diào)度方法并得到新的調(diào)度方案。此外,在動態(tài)調(diào)度中,發(fā)生故障后立即觸發(fā)動態(tài)調(diào)度方法得到新的調(diào)度方案。因此,觸發(fā)調(diào)度時間包括0時刻、揀貨完成時間、AV上所有任務完成時間、AV故障發(fā)生時間。
預調(diào)度的具體時間線如圖6所示。0時刻通過禁忌搜索,為AV1、AV2、AV3集中分配任務并完成路徑規(guī)劃,無沖突調(diào)度。由于任務到達之后,就已經(jīng)確定任務的第2階段和第3階段的可用路徑集。因此,在禁忌搜索中的路徑規(guī)劃是規(guī)劃第一階段的路徑,選擇第二階段的路徑。隨后,在AV1、AV2、AV3完成揀貨時分別進行第三階段的路徑選擇和無沖突調(diào)度。在AV1完成任務回到儲區(qū)后,再次集中分配任務,由于AV2和AV3已經(jīng)完成揀貨,在返回儲區(qū)的路上,被視為可分配任務的AV,和AV1一起進行集中分配任務。
由圖5的動態(tài)調(diào)度流程和圖6的預調(diào)度時間線可知,在動態(tài)調(diào)度中包括兩次預調(diào)度。第一次調(diào)度需要進行任務分配、路徑規(guī)劃和無沖突調(diào)度,生成當前時間的調(diào)度方案,完成任務的第一階段和第二階段;第二次調(diào)度只需要進行路徑選擇和無沖突調(diào)度,完成任務的第三階段。在第一次調(diào)度中,包括nfea個可接取任務的AV和qfea個可開始的任務,只為一輛AV分配一個任務,即任務分配的結(jié)果是某輛AV接取某個任務。在只有一個可開始任務或只有一個可接取任務AV的情況下,任務分配的結(jié)果只有max{nfea,qfea}種。由于任務分配結(jié)果有限,路徑集內(nèi)可用路徑數(shù)量ufea有限,無沖突調(diào)度時AV只需避讓前序調(diào)度情況,因此調(diào)度的可行解是有限個,數(shù)量為max{nfea,qfea}×ufea,可以采用窮舉的方式探討所有可能。在為任務選擇AV或為AV接取任務后,將路徑集內(nèi)所有路徑都進行無沖突調(diào)度,從中選擇完成時間最短的調(diào)度方案作為本次調(diào)度的新增調(diào)度方案。
對于多輛AV可接取任務且有多個任務可開始的情況,由于任務分配結(jié)果、可用路徑數(shù)量、避讓情況等組合數(shù)量眾多,利用禁忌搜索確定AV和任務之間的分配情況、任務選擇的路徑集和無沖突調(diào)度時的先后順序。禁忌搜索流程如圖7所示。在禁忌搜索時保留全局最優(yōu)解,在調(diào)度結(jié)束后,作為當前時間調(diào)度方案輸出。
(1)個體編碼 由AV碼、任務碼和路徑碼組成,分別代表AV接取任務順序、任務被接取順序和任務的路徑選擇。如[1 2 3 | 5 1 3 2 4 | 1 2 1 2 2]代表可接取任務的AV有[1 2 3]三輛,AV接取任務的順序就是AV碼順序;代號為1~5的任務可開始,任務被接取的順序參考任務碼的順序;路徑選擇是對應任務的路徑集內(nèi)可用路徑代號之一,若有任務在路徑集內(nèi)的路徑因為動態(tài)事件不可用,在個體編碼時不考慮這些不可用的路徑代號。
(2)禁忌表 利用兩張禁忌表,禁忌對象分別是AV選擇任務的代號和任務選擇的路徑代號。在評估個體時使用禁忌表1,在鄰域搜索時使用禁忌表2。禁忌表1是AV選擇任務的代號,在同一時間可開始AV數(shù)量為2,…,qfea,為了保證搜索到可行解,禁忌步長取1。禁忌表2是任務選擇的路徑代號,為了保證搜索到可行解,禁忌步長為u/2。在每代結(jié)束后更新禁忌表,既原禁忌表禁忌步長-1,最優(yōu)個體的任務選擇和路徑選擇加入兩張禁忌表。
(3)鄰域搜索 針對個體的三段編碼采用不同的鄰域搜索方式探尋解空間,其中AV碼和任務碼從交換、插入、反轉(zhuǎn)、位移中隨機選擇一種生成新的AV碼和任務碼,路徑碼采用單點變異的方式,為當前任務選擇另一個不在禁忌表中的其他可用路徑代號。
(4)個體評估 按照個體編碼進行評估,確定當前情況下的任務分配、選擇的路徑和AV調(diào)度信息。個體評估流程如圖8所示。因為緊急任務和普通任務一起調(diào)度,所以先考慮緊急任務,對最先到達的緊急任務分配距離最近的可用AV。若所有緊急任務都被分配完畢,再分配普通任務給所有可接取任務的AV。按照個體編碼確定AV先后順序,AV按照禁忌表情況、可開始任務的距離和個體編碼選擇任務。AV選擇不在禁忌表中,到達時間最小的任務中的,曼哈頓距離最近的任務。選擇好AV和任務后,以AV的當前路塊和任務的貨架所在路塊為起終點,利用改進的A*算法規(guī)劃路徑并選擇最短路徑。這是AV完成任務的第一階段的路徑,對于任務的第二階段的路徑,按照個體編碼中的路徑碼,選擇任務對應路徑集內(nèi)的路徑代號。根據(jù)任務分配和路徑規(guī)劃,利用無沖突調(diào)度方法生成調(diào)度方案。
(5)無沖突調(diào)度 根據(jù)當前時間的AV狀態(tài)和路徑規(guī)劃,利用甘特圖確定AV間是否發(fā)生沖突。如果發(fā)現(xiàn)沖突,通過后調(diào)度AV在上次停止的路塊主動等待的方式,調(diào)整甘特圖,最終生成無沖突的調(diào)度結(jié)果。無沖突調(diào)度的目的是確保AV按照調(diào)度方案運行時不發(fā)生沖突,不產(chǎn)生為了躲避其他AV運行的被動等待。
(6)改進A*算法 A*算法在RMFS的路徑規(guī)劃問題中應用廣泛[7-8,13,16]。在動態(tài)調(diào)度前,針對任務的第二階段和第三階段的路徑采用改進A*算法提前規(guī)劃路徑集,在調(diào)度時選擇可用路徑代號。在動態(tài)調(diào)度中,任務分配完成后,對任務第一階段的路徑進行規(guī)劃,但只選擇最短路徑作為AV的運行路徑。改進A*算法是多次運行A*算法,選擇下一路塊的方式包括曼哈頓距離最小的路塊、不轉(zhuǎn)彎的路塊、隨機選擇3種。獲得多次運行結(jié)果后,選取路徑運行時間最短的u條路徑組成路徑集,以供后續(xù)調(diào)度時選擇。通過改進A*算法生成的路徑集,能夠在調(diào)度中提供多種選擇,即使出現(xiàn)動態(tài)事件導致某些路徑不可用,路徑集內(nèi)還有其他備選路徑以供選擇。
除了緊急訂單到達外,其他動態(tài)事件發(fā)生時會造成調(diào)度計劃和實際運行結(jié)果不相符。為了保證調(diào)度的可持續(xù)性,需要對現(xiàn)有調(diào)度進行調(diào)整,即重調(diào)度。在3.1節(jié)中已經(jīng)確定動態(tài)事件對調(diào)度的影響可以歸結(jié)為影響任務分配、影響路徑規(guī)劃、影響調(diào)度方案3種情況。因此,當發(fā)生動態(tài)事件時,重調(diào)度規(guī)則包括任務重分配、路徑重規(guī)劃和生成重調(diào)度方案3種。本文考慮的AV故障這類動態(tài)事件,根據(jù)AV故障的情況不同,會涉及到多個重調(diào)度規(guī)則的使用。AV故障發(fā)生在任務的不同階段,對當前路塊、AV和其接取任務以及受影響的AV和任務等有不同影響,調(diào)整調(diào)度方案的重調(diào)度規(guī)則也不同。AV故障影響到的不同因素的分析和重調(diào)度規(guī)則如下:
(1)當前AV和其接取的任務
由于AV故障時間不確定,AV可能在執(zhí)行任務,也可能沒有任務處于閑置狀態(tài)。若處于閑置狀態(tài),AV只會停留在故障路塊,導致一個或多個路塊不可用,對其他AV造成影響。如果AV上接取了任務,根據(jù)接取任務的不同階段,重調(diào)度規(guī)則不同。具體情況如下:
1)第一階段 AV還未到達任務所在貨架路塊,任務還可以被其他AV接取。造成的其他后果和重調(diào)度規(guī)則包括:①AV故障所處的一個或者多個路塊不可用,其他任務提前規(guī)劃的路徑集可能受影響,導致部分路徑可能不可用;②當前AV不可用,后續(xù)調(diào)度計劃刪除;③由于AV只接取了當前任務,任務沒有完成,但可以被其他AV接取,在后續(xù)調(diào)度時將該任務加入可開始任務,重分配給其他AV,完成后續(xù)調(diào)度。
2)第二階段 AV在搬運任務貨架到工作站的途中,任務已經(jīng)不能被其他AV接取。造成的其他后果和重調(diào)度規(guī)則包括:①與第一階段調(diào)度①②一樣;②AV只接取了當前任務,任務雖然完成了一部分,但貨架在短時間內(nèi)無法進入工作站,因此取消當前任務;③按照訂單要求的貨物找到系統(tǒng)內(nèi)其他存儲該貨物的貨架,生成新任務,新任務的目標工作站與原工作站相同,以當前時間為任務到達時間,新任務的優(yōu)先級和其他任務一樣。同時為新任務進行路徑集規(guī)劃,確定任務的第二階段和第三階段的路徑集。
3)第三階段 AV在將貨架送回儲區(qū)的途中,任務已經(jīng)離開工作站,但貨架無法返回儲區(qū)。造成的其他后果和重調(diào)度規(guī)則包括:①與第一階段調(diào)度①②一樣。②由于任務已經(jīng)離開工作站,在從工作站到貨架所在路塊的中途出現(xiàn)問題,當前任務可以被視為已完成。貨架由于AV故障,暫時留在原地不動,等待后續(xù)處理。③AV在執(zhí)行任務的第三階段時,已經(jīng)被視為可接取任務的AV。若在調(diào)度計劃中接取了新任務,因為AV故障,新任務無法完成,所以這個接取的新任務需要重分配。在后續(xù)調(diào)度時將接取的新任務加入可開始任務即可。
(2)受影響AV和其接取的任務
除了影響當前AV和其接取的任務之外,由于故障AV在當前路塊停留,導致其他AV無法按照計劃通行。即按照原本調(diào)度方案,有些AV會在一定時間后經(jīng)過故障路塊,但由于故障路塊上有AV故障且短時間內(nèi)無法移動,這些AV的后續(xù)調(diào)度計劃已經(jīng)不能按時執(zhí)行,本文稱這些AV為“受影響AV”。有AV發(fā)生故障后,遍歷先前故障時間后所有AV的調(diào)度方案,若有AV在一段時間后經(jīng)過故障路塊,則被認定為“受影響AV”。受影響時間為這些“受影響AV”按照原本調(diào)度方案運行時經(jīng)過故障路塊的時間。故障時間和受影響時間不一定一致,受影響AV接取的任務所處的階段不同,對應的重調(diào)度規(guī)則不同。如表2所示,針對受影響AV在故障和受影響時的任務階段情況,根據(jù)對調(diào)度計劃、任務和AV的不同影響,設(shè)立不同的重調(diào)度規(guī)則。
表2 受影響AV重調(diào)度規(guī)則
續(xù)表2
(3)受影響的路徑集
由于AV故障所處的一個或者多個路塊不可用,其他任務提前規(guī)劃的路徑集可能受影響,導致部分路徑可能不可用。因此,在后續(xù)調(diào)度中,生成個體和尋找鄰域個體時,需要刪除不可用路徑的路徑代號,在可用路徑代號中搜索。例如,原路徑集路徑代號為[1 2 3 4 5],由于AV故障,受影響路徑代號為[2 3],則新路徑集路徑代號為[1 4 5],如果禁忌表禁忌路徑代號為1,則[4 5]是尋找鄰域個體時的搜索空間。由于部分路徑被放棄,導致搜索空間變小,尋優(yōu)能力下降,但路徑集可以減少調(diào)度的時間,則只有當路徑集內(nèi)所有路徑都不可用時,才通過改進A*算法重新進行路徑規(guī)劃。
實驗在Intel Core i7-5557、3.10 GHz CPU、4.00 G RAM、64位Windows 10操作系統(tǒng)和MATLAB 2016a編程環(huán)境下編譯運行。AV運行參數(shù)包括:Tst=0.5,Tturn=2.5,Tacross=0.5,Tlr=3。每次禁忌搜索參數(shù)包括:種群數(shù)量為5,代數(shù)為50。MERSCHFORMANN等[3]設(shè)計了圖1所示的系統(tǒng)布局,通過單行道的方式避免系統(tǒng)內(nèi)的相向沖突,但也造成了不必要的繞路。本文的數(shù)學模型可以用于任何道路方向,能夠處理AV間的相向沖突,因此在存儲區(qū)內(nèi)道路可以任意通行。對圖1的布局進行修改后,本文RMFS布局和道路方向如圖9所示,圖中箭頭表示道路方向,G為工作站。布局圖中間的存儲區(qū)域全部為雙向道,空載AV可以無障礙地穿行,負載AV在過道中運行。為避免工作站內(nèi)的死鎖,左右兩側(cè)工作站道路仍為單向道。8輛AV同時在系統(tǒng)內(nèi)運行,隨機給定AV初始位置,將一定時間內(nèi)的訂單拆分成任務,按照一定時間間隔作為任務輸入系統(tǒng)。任務分5波到達,隨機生成貨架點和工作站,共包括50個任務數(shù)據(jù)。
為驗證動態(tài)調(diào)度方法在實時系統(tǒng)的可行性和有效性,對比了本文提出的動態(tài)調(diào)度方法和傳統(tǒng)調(diào)度方法在解決訂單實時到達情況下的表現(xiàn)。傳統(tǒng)方法中,AV運行在圖1所示的單向道上,完成任務后再接取下一個任務,出現(xiàn)沖突后停車等待沖突結(jié)束。實驗包括3種任務情況:①無動態(tài)事件,實時調(diào)度只包括第3.1節(jié)中的預調(diào)度,所有任務間無優(yōu)先級,50個任務全部為普通任務;②5個緊急訂單到達,假設(shè)每波有1個緊急訂單,即原本的普通任務有1個為緊急任務,共5個緊急任務;③10個緊急訂單到達,假設(shè)每波有2個緊急訂單,即原本的普通任務有2個為緊急任務,共有10個緊急任務。實驗②和實驗③驗證了動態(tài)調(diào)度方法對不同數(shù)量緊急任務的調(diào)度情況。同樣,調(diào)度只包括第3.1節(jié)中的預調(diào)度,在實驗中不觸發(fā)重調(diào)度。
表3對比了本文方法和傳統(tǒng)方法在3種任務情況下重復30次實驗的調(diào)度結(jié)果??梢钥闯?,本文方法在多種不同任務情況下,多次實驗能獲得更小的完成時間,但3種任務情況下的平均完成時間和傳統(tǒng)方法相當。在多種不同任務情況下,本文方法的路徑長度更短,分別平均節(jié)約了9.3%、9.3%和8.9%的路徑長度。這就意味著AV接取的指令更少,在實際運行中,可以減少信息傳輸耗時。動態(tài)系統(tǒng)實時性要求高,在全為普通任務時,動態(tài)調(diào)度方法平均節(jié)約了44%的調(diào)度時間,有緊急任務后,調(diào)度所需時間增長,但實驗②和實驗③依然能平均節(jié)約31%和10.5%的調(diào)度時間。由于動態(tài)調(diào)度方法是在任務完成后集中分配,任務到達后平均等待時間多于傳統(tǒng)方法。但動態(tài)調(diào)度方法在緊急任務到達之后,很快接取并完成緊急任務,實驗②和實驗③中緊急任務的平均等待時間分別為傳統(tǒng)方法的51%和35.5%。
表3 本文方法和傳統(tǒng)方法在3種任務情況下的調(diào)度結(jié)果
對比3種任務情況下的結(jié)果,可以發(fā)現(xiàn)有緊急任務后,AV平均運行路徑更長,調(diào)度時間也相應變長。普通任務的等待時間更長,任務的平均完成時間略有增加。緊急任務的等待時間不到普通任務的四分之一,即緊急任務被優(yōu)先完成。增加緊急訂單后,考慮到緊急任務需要優(yōu)先調(diào)度,調(diào)度計劃的優(yōu)化程度不如全部任務為普通任務的情況,因此緊急任務的平均完成時間略高于所有任務的平均完成時間。當緊急任務增加時,緊急任務的平均完成時間減少,接近所有任務的平均完成時間。
在實驗③的基礎(chǔ)上,考慮AV故障這一動態(tài)事件。假設(shè)AV在某一隨機時間故障,通過分析故障AV和其任務、受影響的AV和其任務,以及受影響的路徑集,確定重調(diào)度規(guī)則,進行重調(diào)度,確保后續(xù)調(diào)度無誤。表4列舉了不同時間AV故障時,涉及到的重調(diào)度方法和對調(diào)度計劃的改動情況。從表4可以看出,無論故障發(fā)生時AV在任務的哪個階段,都可以通過重調(diào)度避免當前任務受影響,減少對其他AV原本調(diào)度計劃的影響。改進A*算法生成的路徑集內(nèi)雖然有路徑受到AV故障的影響導致不可用,但無任務路徑集需要重規(guī)劃,足以看出路徑集內(nèi)包含了多種可行路徑,為調(diào)度提供了足夠的選擇。在調(diào)度即將完成時發(fā)生故障(實例1),大部分任務都已經(jīng)完成,對總完成時間的影響很小。但在調(diào)度開始后不久就發(fā)生故障(實例3),此時還有很多任務未完成,由于AV數(shù)量減少,總完成時間的增加幅度較大,任務的平均完成時間也略有增加。從實例3可以看出,由于系統(tǒng)內(nèi)運行的AV數(shù)量減少,AV間沖突減少,重調(diào)度時,受影響的AV重調(diào)度后新調(diào)度方案的完成時間還有所減少。
表4 不同故障實例及重調(diào)度情況
續(xù)表4
在實例3中出現(xiàn)了受影響的AV和其接取的任務進行重調(diào)度時,重調(diào)度后完成時間更短的情況。在實際應用中,由于很難從全局角度進行調(diào)度優(yōu)化,AV的重調(diào)度多是在接近故障路塊時觸發(fā)重調(diào)度,以受影響路塊之前路塊為起點重規(guī)劃路徑。本文的重調(diào)度規(guī)則是在故障發(fā)生時間后立刻觸發(fā)重調(diào)度,以AV運行的下一個路塊為起點重規(guī)劃路徑。為了對比傳統(tǒng)方法中在故障路塊前重調(diào)度和本文提出的受影響時間后重調(diào)度兩種重調(diào)度時機的優(yōu)劣程度,設(shè)置了受影響任務重調(diào)度時機實驗。假設(shè)AV故障發(fā)生時間分別為[10,15,20,25,30,35]。在這些時間發(fā)生故障,受影響的任務基本處于(二,二)階段,需要重新進行路徑規(guī)劃。在不同故障發(fā)生時間下進行30次實驗,不同重調(diào)度時機的180組實驗的平均結(jié)果如表5所示。兩種重調(diào)度時機雖然都進行了180組實驗,但每次影響的AV不只有一輛,可能會有兩輛甚至更多AV被影響后進入重調(diào)度。因此,受影響AV重調(diào)度次數(shù)大于180。平均來看,在故障路塊前重調(diào)度,增加的當前階段任務完成時間遠多于在故障時間后重調(diào)度,增加的路徑長度略高于在故障時間后重調(diào)度。因此,當受影響任務的故障發(fā)生時間和受影響時間的任務階段處于(二,二)或(三,三)等需要重規(guī)劃路徑的階段時,AV的重調(diào)度時機選擇在故障時間后重調(diào)度更能減少重調(diào)度后增加的當前階段任務完成時間和路徑長度,更快完成當前任務,減少對AV原先指令的改動。
隨后,對不同的故障發(fā)生時間進行更詳細的比對。不同故障發(fā)生時間下進行的30組實驗中,重調(diào)度后平均增加的當前階段任務完成時間和平均增加的路徑長度如圖10所示。由圖10可以看出,相比在故障路塊前重調(diào)度,選擇在故障時間后立即重調(diào)度,能夠更快完成當前任務。無論故障發(fā)生在什么時間,選擇在故障時間后立即重調(diào)度,平均增加的當前階段任務完成時間都更少,甚至還能獲得更早完成當前任務的調(diào)度方案。如故障時間在30時,重調(diào)度后的調(diào)度時間平均減少了2.44。在大部分故障發(fā)生時間,在故障時間后立即重調(diào)度,平均增加的路徑長度都要少于在故障路塊前重調(diào)度。兩種重調(diào)度時機規(guī)則生成的重調(diào)度方案平均增加的路徑長度都會隨著故障發(fā)生時間的增加而減少,這是因為故障發(fā)生在早期時,AV離目的地的距離大于故障發(fā)生在晚期時。而重調(diào)度后平均增加的當前階段任務完成時間則和故障發(fā)生時間沒有明顯關(guān)聯(lián)。
不同動態(tài)事件可能對調(diào)度造成不同的影響。在2.1節(jié)的動態(tài)事件分析中,將影響分為影響任務分配、影響路徑規(guī)劃和影響調(diào)度方案3種。這3種影響不是并列關(guān)系,影響任務分配一定會影響路徑規(guī)劃,繼而影響調(diào)度方案。前文分析中將這些對調(diào)度的影響程度分為很輕、一般和較大3種。表6以50個任務全部為普通任務為基準,對比了緊急訂單到達、AV故障和緊急訂單到達的同時AV發(fā)生故障等動態(tài)事件對調(diào)度方案的完成時間、路徑長度和所有任務平均完成時間的影響情況,每一種影響原因都是30組實驗的平均結(jié)果。緊急訂單和之前的實驗一樣,分為每波1個緊急任務和每波2個緊急任務兩組,緊急任務優(yōu)先級最高。
表6 不同動態(tài)事件對調(diào)度的影響
平均來看,同樣是50個任務,相比全為普通任務,5個緊急任務和10個緊急任務分別增加了0.97%和0.24%的完成時間,0.08%和1.2%的路徑長度,0.68%和0.75%的所有任務平均完成時間。新任務除影響任務分配外,還需要實時規(guī)劃路徑,由平均增加的完成時間和路徑長度可以發(fā)現(xiàn),此時對調(diào)度影響一般。之后,考慮AV故障這一動態(tài)事件,假設(shè)AV1在0時刻故障,即系統(tǒng)內(nèi)只有7輛AV可用,AV的故障不影響其他AV的運行,只有AV1當前所在的路塊不可用,會對已經(jīng)規(guī)劃好的路徑集造成一定影響。和8輛AV接取的普通任務相比,因為完成任務的AV數(shù)量少了,完成時間增長了11.2%,但路徑長度和所有任務平均完成時間都因為系統(tǒng)內(nèi)沖突發(fā)生的頻率減少而減少,AV故障且不影響其他AV的運行時對調(diào)度影響一般,主要影響完成時間。假設(shè)緊急訂單和AV故障同時發(fā)生,沒有受影響AV時,僅當前AV需要重調(diào)度,有受影響AV時,受影響AV也需要重調(diào)度,就對當前調(diào)度方案影響較大。對比了兩種情況,沒有受影響AV,即10個緊急任務到達和AV1在0時刻故障的情況;有受影響AV,同樣有10個緊急任務到達,AV在35時故障且受影響AV需要在故障時間后更改路徑規(guī)劃的情況。沒有受影響AV時,相比無動態(tài)事件,完成時間增加了12.03%,完成所有任務的路徑長度和所有任務平均完成時間都減少了,主要影響完成時間。AV故障有受影響AV時,完成時間增加了16.25%,完成所有任務的路徑長度增加了2.65%,所有任務平均完成時間增加了0.89%,多于其他動態(tài)事件增加的完成時間和路徑長度,對調(diào)度影響較大。綜合來看,相比緊急訂單到達,AV故障對系統(tǒng)總完成時間的影響較大,因為AV數(shù)量減少導致系統(tǒng)內(nèi)沖突減少,路徑長度和所有任務平均完成時間都可能減少。在AV故障時,如果有受影響AV,則調(diào)度方案的平均完成時間和路徑長度都更長,所有任務的平均完成時間也更長,對調(diào)度的影響最大。
針對多機器人存取系統(tǒng)中存在的訂單實時到達、緊急訂單到達、AV故障等問題,本文提出了一種動態(tài)調(diào)度方法。首先分析了系統(tǒng)內(nèi)的不同動態(tài)事件并確定其對調(diào)度的影響,提出以最小完成時間為目標的多機器人存取系統(tǒng)動態(tài)調(diào)度模型。建立了實時系統(tǒng)的動態(tài)調(diào)度方法,利用動態(tài)調(diào)度算法實現(xiàn)系統(tǒng)內(nèi)的預調(diào)度和重調(diào)度。通過禁忌搜索、改進A*算法和無沖突調(diào)度方法解決任務分配、路徑規(guī)劃和無沖突調(diào)度問題。根據(jù)動態(tài)事件的不同影響,確立重調(diào)度規(guī)則。實例證明動態(tài)調(diào)度方法能夠解決訂單實時到達即任務分波次到達情況下的AV調(diào)度問題,保證系統(tǒng)內(nèi)的AV順利完成所有任務,且多輛AV運行時無沖突死鎖現(xiàn)象。相比傳統(tǒng)方法,動態(tài)調(diào)度方法獲得的調(diào)度方案完成時間更小,調(diào)度時間更短,緊急訂單到達時能夠確保緊急訂單優(yōu)先完成。當出現(xiàn)AV故障時,能夠順利完成重調(diào)度并保證當前任務受到的影響最小。對比不同故障時間重調(diào)度的觸發(fā)時機,相比傳統(tǒng)方法中在故障路塊前重調(diào)度,在故障時間后重調(diào)度任務的當前階段完成時間更小,重調(diào)度路徑長度更短,甚至能夠獲得比重調(diào)度前完成時間更短的調(diào)度方案。通過對比證實,若AV故障時有受影響AV,對調(diào)度的影響最大。本文目前的研究還集中于緊急訂單到達和AV故障兩種動態(tài)事件中,缺少對人員相關(guān)的動態(tài)事件的預測和重調(diào)度規(guī)則的研究,下一步將結(jié)合數(shù)字孿生技術(shù),針對人員暫停工作、人員突然進入系統(tǒng)內(nèi)等事件進行預測并研究相關(guān)重調(diào)度規(guī)則。