負載需求和限制

loadDemands 屬性定義於 ShipmentModel.shipments.Shipment 下,loadLimits 屬性則定義於 ShipmentModel.vehicles.Vehicle 下。

負載需求和限制是可用於管理容量的限制類型。這項限制會指定貨件的必要容量和車輛的最大容量,方便您根據這些限制條件,將路線指派作業最佳化。

負載需求和限制可支援下列目標:

  • 避免車輛超載。
  • 監控車輛負重在取貨和送貨時的變化。
  • 優先將重型車輛與重型貨物配對。

這些屬性會指定負載需求和限制:

結構

如圖所示,負載需求和限制的結構如下:

基本檢查清單

以下檢查清單說明可避免潛在載入相關錯誤的基本知識。這份清單有助於驗證要求和排解回應問題。

屬性

本節說明負載需求和限制的屬性,包括:

  • 載入類型:載入需求和限制之間的共用屬性。
  • Load 和 LoadLimit:分別是負載需求和負載限制中獨有的屬性。

負載類型

貨物類型是字串鍵,適用於貨物和車輛。單一負載類型適用於貨運的負載需求,以及車輛的負載限制。

載入類型會使用 Protocol Buffers 地圖類型語法。命名負載類型時,請使用描述負載類型及其單位的 ID。例如:weightKg、volume_gallons、palletcount 或 frequencyDaily。

Load和LoadLimit

Load 和 LoadLimit 物件包含特定屬性,可定義貨件和車輛的容量需求,下表說明這些屬性:

物件 父項 屬性 物業類型 房源說明
Load loadDemands amount 字串 (int64 格式) 定義指定類型的貨運容量需求。
LoadLimit loadLimits maxLoad 字串 (int64 格式) 定義車輛在指定類型中的最大載重能力。

範例

本節將介紹三種範例:

  • 程式碼範例,說明負載需求和限制屬性的結構。
  • 情境示例:說明如何在 API 要求中使用負載需求和限制。
  • 要求範例,其中包含在範例情境中設定的值。

程式碼範例

以下範例顯示載入需求的結構,您可以在其中將 loadDemands 類型設為字串,並將 amount 屬性設為 int64 格式的字串:

{
  "model": {
    "shipments": [ ...
      {
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [ ...
    ]
  }
}

以下範例顯示負載限制最基本的結構,您可以在其中將 loadLimits 類型設為字串,並將 maxLoad 屬性設為 int64 格式的字串:

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

範例情境

本節說明一個情境:您經營狗狗托育中心,並要規劃最佳路線,在車輛中運送幾隻狗狗,但車輛的籠子數量有限。

每趟運送代表一個停靠站,你可以在該站接送特定數量的狗狗。在這個例子中,每趟運送的取貨地點都不同 (即你照顧狗狗的住家),但送貨地點都相同 (即狗狗托育中心)。

以這個範例來說,要求中的屬性值如下:

父項 屬性 類型 值 情境
loadDemands 負載類型 字串 dogUnit 定義貨件的裝載類型。這個範例使用 dogUnit,其中每個 dogUnit 代表一隻狗。
loadDemands amount 數字 第 1 次出貨:1
第 2 次出貨:3
指定定義的負載類型數量。在這個範例中,您定義了兩批貨物,第一批要取回一隻狗,第二批要取回 3 隻狗。
loadLimits 負載類型 字串 dogUnit 定義套用至車輛的載重限制類型。這必須與貨件的裝載類型相符,限制才適用。
loadLimits maxLoad 數字 6 指定車輛可載運的負重類型數量上限。在本例中,您只有一輛車,最多可容納 6 個 dogUnit,每個 dogUnit 代表一個狗籠。

下圖說明車輛的負重限制、每批貨物的負重需求,以及每批貨物如何消耗車輛的負重限制:

車輛會以 6 個空白格開始路線,代表車輛的負重限制。第一批貨物需要一個狗籠的空間,第二批貨物則需要三個狗籠的空間。車輛的最終狀態是 6 個空間中有 4 個已佔用,剩下 2 個空間。

在本例中,每批貨物的負載需求和車輛的負載限制會產生下列影響:

  • 由於車輛最多可載 6 隻狗,而你只會接送 4 隻狗,因此最佳化工具不會有問題,可為車輛生成運送狗狗的路線。

  • 車輛的負重限制為 6 dogUnit,表示你只能在這輛車上再載兩隻狗。

  • 如果狗狗數量超過負重限制,最佳化工具會略過其中一項接送服務,或是指派合適的車輛。

請注意,沒有預先定義的類型組合。在這個例子中,你可以將負載類型從狗單位變更為重量單位,限制狗的重量,或是變更為線性測量單位,限制狗的寬度或高度。這種彈性可讓您根據特定需求調整負載需求和限制。

要求範例

以下範例顯示基本 optimizeTours 要求的結構,並納入範例情境值:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "One bernese mountain dog",
        "loadDemands": {
          "dogUnit": {
            "amount": "1"
          }
        }
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "Three chihuahuas",
        "loadDemands": {
          "dogUnit": {
            "amount": "3"
          }
        }
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "loadLimits": {
          "dogUnit": {
            "maxLoad": "6"
          }
        },
        "costPerKilometer": 1.0
      }
    ]
  }
}

請注意,與這個範例不同的是,出貨作業可能有多項裝載需求,車輛也可能有多項裝載限制,因此您可以提供複雜的限制條件,在規劃車隊路線時納入考量。

軟性載入限制

您可以透過在車輛的 loadLimits 上新增 softMaxLoad 和 costPerUnitAboveSoftMax,將載重限制設為軟性限制。這項設定可讓最佳化工具在有成本的情況下,超過車輛的最大負載,優先完成路線,而非嚴格遵守負載限制。

您可以同時使用 maxLoad 和 softMaxLoad,設定硬性與軟性負載限制。在此情況下,softMaxLoad 會設定可超過的負載,而 maxLoad 會設定不得超過的硬性限制。如果同時使用這兩項參數,maxLoad 必須大於 softMaxLoad。

屬性

下表說明負載需求和限制的軟性限制屬性。

父項 屬性名稱 物業類型 房源說明
loadLimits softMaxLoad 字串 (64 位元整數格式) 車輛的偏好最大負載。如果車輛的負載超過這個值,就會產生費用。
loadLimits costPerUnitAboveSoftMax 數字 超過 softMaxLoad 的每單位負載費用。使用 softMaxLoad 時,必須填寫這個欄位。如要進一步瞭解費用,請參閱「費用模式」基本概念。

程式碼範例

以下範例顯示 loadLimits 的軟性限制屬性結構:

{
   "loadLimits": {
        "LOAD_TYPE": {
          "softMaxLoad": "LOAD_AMOUNT",
          "costPerUnitAboveSoftMax": COST_PER_UNIT
        }
      }
}