尺寸

路由解析器會使用稱為「維度」的物件來追蹤 沿車輛路線累積的累積數量,例如交通時間或 如果車輛提供上車和送貨服務,請提供車輛行駛總重量 ,直接在 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:傳回數量的回呼索引。 是解題工具對回呼的內部參照,是由 RegisterTransitCallbackRegisterUnitaryTransitCallback 等方法。
  • slack_maxslack 的上限,用來代表等待的變數 實體店面的反應次數請參閱以下的片段變數,瞭解 詳細資料。 如果問題不會涉及等候時間,通常可以設定 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敬上 請參閱參考資料部分