路由解析器會使用稱為「維度」的物件來追蹤 沿車輛路線累積的累積數量,例如交通時間或 如果車輛提供上車和送貨服務,請提供車輛行駛總重量 ,直接在 Google Cloud 控制台實際操作。如果轉送問題涉及這類數量,無論是在限制條件或 目標函式,您必須定義維度才能指定這些維度。
本節將說明如何定義及使用維度。
維度範例
以下列舉幾個前述的維度範例。
VRPTW 範例會建立要追蹤的維度 各項車輛的累計交通時間。解題工具會使用維度 車輛只能在特定地點內的地點造訪 時間範圍
CVRP 範例會建立 需求 (例如重量或要領取的包裹數量),用於追蹤 車輛沿著路線行駛的累積負載 解題工具會使用尺寸來強制執行車輛負載限制 不得超過容量上限
下列範例使用
AddDimension
敬上
方法。
Python
routing.AddDimension( callback_index, slack_max, capacity, fix_start_cumul_to_zero, dimension_name)
C++
routing.AddDimension( callback_index, slack_max, capacity, fix_start_cumul_to_zero, dimension_name)
Java
routing.addDimension( callbackIndex, slackMax, capacity, fixStartCumulToZero, dimensionName)
C#
routing.AddDimension( callbackIndex, slackMax, capacity, fixStartCumulToZero, dimensionName)
AddDimension
方法具有下列輸入內容:
callback_index
:傳回數量的回呼索引。 是解題工具對回呼的內部參照,是由RegisterTransitCallback
或RegisterUnitaryTransitCallback
等方法。slack_max
:slack 的上限,用來代表等待的變數 實體店面的反應次數請參閱以下的片段變數,瞭解 詳細資料。 如果問題不會涉及等候時間,通常可以設定slack_max
設為 0。capacity
:各路線累計總數量的上限。 使用capacity
即可建立限制,例如 CVRP。如果您的問題 限制,您可以將capacity
設為夠大的值 對航線沒有限制,例如所有路線的總和 用來定義回呼的矩陣或陣列項目。fix_start_cumulative_to_zero
:布林值。如果為 true,則累計值 從 0 開始在大多數情況下,這應設為True
。 但如果是 VRPTW 或 資源限制,部分車輛 因為時間限制,必須在時間 0 之後開始,因此 將這些問題的fix_start_cumulative_to_zero
設為False
。dimension_name
:維度名稱的字串,例如'Distance'
。 方便您在程式其他位置存取變數。
CVRP 程式會使用
AddDimensionWithVehicleCapacity
敬上
方法。這個方法會擷取容量陣列,每輛車各有一個項目。
(相對地,AddDimension
會使用 capacity
的單一值,因此所有
假設車輛的容量相同)。
請參閱 RoutingModel
其他建立維度的方法的參考頁面。
章節 將解決方案時間範圍儲存至清單或陣列 提供的函式可在清單或陣列中儲存維度中的累計資料。
Slack 變數
以下方範例為例,說明題目的 Slicack 變數 交通時間。假設 車輛在路線的某個步驟中從位置 i 進入 j 位置,然後:
- 車輛在我停留的累計交通時間為 100 分鐘。
- 車輛在 J 處的累計交通時間為 200 分鐘。
- 從 i 到 j 的交通時間是 75 分鐘。
車輛無法於抵達後立即離開或累計位置 位置 j 的時間應為 175相反地,車輛必須等待 25 分鐘, 離境前的 i、%、換句話說,我位置的男子是 25 號
你必須在 VRPTW 中允許夾扣,因為車輛可能要等待一段時間
因時間限製而造訪特定地點。面對此類問題,請
slack_max
設為您想讓車輛在多久內等候的時間上限
再前往下一個地點。如果沒關係
等一下,只要將 slack_max
設為非常大的數字即可。
另一方面,以 CVRP 來說,累計載入量從 i
變更為
j
一律等於 i
的需求,因此不會有空位。對於以下之類的問題,
這種情況下,您可以將 slack_max
設為 0。
接下來,我們要說明對體的正式定義。在內部 與路徑上累積數量相關的兩種變數類型:
- 大眾運輸變數:各個步驟在預訂過程中數量的增減
特定路徑
如果
i -> j
是路線中的一個步驟,則大眾運輸變數為i
。 大眾運輸矩陣的j
項目 (用於大眾運輸回呼),或簡稱 回呼值 (如果回呼僅仰賴一個位置)。 - 累計變數:每個位置的累計數量。個人中心
如何存取位置中的累積變數
dimension_name.CumulVar(i)
。如需範例,請參閱 時間範圍限制 。
假設車輛在一個步驟中從 i
出發前往 j
地點,
slack 與這些變數相關,如下:
slack(i) = cumul(j) - cumul(i) - transit(i, j)
如要進一步瞭解維度,請參閲
RoutingDimension
敬上
請參閱參考資料部分