負載需求和限制

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

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

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

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

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

結構

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

基本檢查清單

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

屬性

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

  • 載入類型:載入需求和限制之間的共用屬性。
  • LoadLoadLimit分別存在於負載需求和負載限制中的獨特屬性。

負載類型

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

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

LoadLoadLimit

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

物件 父項 屬性 房源類型 房源說明
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 上新增 softMaxLoadcostPerUnitAboveSoftMax,將載重限制設為軟性限制。這可讓最佳化工具在有成本的情況下,超過車輛的最大負載,優先完成路線,而非嚴格遵守負載限制。

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

屬性

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

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

程式碼範例

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

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