Żądania i limity obciążenia

Właściwość loadDemands jest zdefiniowana w ShipmentModel.shipments.Shipment, a właściwość loadLimits w ShipmentModel.vehicles.Vehicle.

Żądania i limity obciążenia to rodzaj ograniczenia, którego możesz używać do zarządzania zasobami. To ograniczenie określa wymagane zasoby przesyłki i maksymalne zasoby pojazdu, co pozwala optymalizować przypisania tras na podstawie tych ograniczeń.

Żądania i limity obciążenia mogą obsługiwać takie cele jak:

  • Zapobieganie przeładowaniu pojazdów.
  • Monitorowanie zmian obciążenia pojazdów podczas odbierania i dostarczania przesyłek.
  • Priorytetowe łączenie pojazdów o dużej ładowności z przesyłkami o dużej wadze.

Żądania i limity obciążenia są określane w tych właściwościach:

  • loadDemands określa ilość zasobów wymaganych przez daną przesyłkę.
  • loadLimits określa maksymalną ładowność danego pojazdu.

Struktura

Jak widać na diagramie, żądania i limity obciążenia mają taką strukturę:

Podstawowa lista kontrolna

Poniższa lista kontrolna zawiera podstawowe informacje, które pomogą Ci uniknąć potencjalnych błędów związanych z obciążeniem. Ta lista może pomóc Ci zweryfikować prośbę i rozwiązać problemy z odpowiedzią.

Właściwości

W tej sekcji opisujemy właściwości żądań i limitów obciążenia, czyli:

  • Typ obciążenia: wspólna właściwość żądań i limitów obciążenia.
  • Load i LoadLimit: unikalne właściwości występujące odpowiednio w żądaniach i limitach obciążenia.

Typ obciążenia

Typ obciążenia to klucz tekstowy, który stosujesz w równym stopniu do przesyłek i pojazdów. Pojedynczy typ obciążenia dotyczy zarówno żądania obciążenia przesyłki, jak i limitu obciążenia pojazdu.

Typy obciążenia używają składni typu mapy buforów protokołu. Podczas nazywania typu obciążenia używaj identyfikatorów opisujących typ obciążenia i jego jednostkę. Na przykład: weightKg, volume_gallons, palletcount lub frequencyDaily.

Load i LoadLimit

Obiekty Load i LoadLimit zawierają określone właściwości, które definiują wymagania dotyczące zasobów w przypadku przesyłek i pojazdów. W tabeli poniżej opisujemy te właściwości:

Obiekt Ma dzieci Właściwość Typ obiektu Opis właściwości
Load loadDemands amount ciąg znaków (format int64) Określa wymagania dotyczące zasobów przesyłki w określonym typie.
LoadLimit loadLimits maxLoad ciąg znaków (format int64) Określa maksymalną ładowność pojazdu w określonym typie.

Przykłady

W tej sekcji znajdziesz 3 rodzaje przykładów:

  • Przykłady kodu , które ilustrują strukturę właściwości żądań i limitów obciążenia.
  • Przykładowy scenariusz , który pokazuje jeden ze sposobów użycia żądań i limitów obciążenia w żądaniu do interfejsu API.
  • Przykład żądania , który zawiera wartości ustawione w przykładowym scenariuszu.

Przykłady kodu

Poniższy przykład pokazuje strukturę żądania obciążenia, w którym możesz ustawić typ loadDemands jako ciąg znaków, a właściwość amount jako ciąg znaków w formacie int64:

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

Poniższy przykład pokazuje najbardziej podstawową strukturę limitu obciążenia, w którym możesz ustawić typ loadLimits jako ciąg znaków, a właściwość maxLoad jako ciąg znaków w formacie int64:

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

Przykład

W tej sekcji opisujemy scenariusz, w którym prowadzisz przedszkole dla psów i optymalizujesz trasę przewozu kilku psów w pojeździe z ograniczoną liczbą klatek.

Każda przesyłka reprezentuje przystanek, na którym odbierasz określoną liczbę psów. W tym przykładzie każda przesyłka ma inną lokalizację odbioru, czyli dom psów, którymi się opiekujesz, a wszystkie przesyłki mają tę samą lokalizację dostawy – budynek Twojego przedszkola dla psów.

W tym przykładzie wartości właściwości w żądaniu są takie:

Ma dzieci Właściwość Typ Wartość Scenariusz
loadDemands typ obciążenia tekst dogUnit Określa typ obciążenia przesyłki. W tym przykładzie używamy dogUnit, gdzie każdy dogUnit reprezentuje 1 psa.
loadDemands amount liczba 1. przesyłka: 1
2. przesyłka: 3
Określa ilość zdefiniowanego typu obciążenia. W tym przykładzie definiujesz 2 przesyłki. W pierwszej odbierasz 1 psa, a w drugiej – 3 psy.
loadLimits typ obciążenia tekst dogUnit Określa typ limitu obciążenia stosowany do pojazdu. Aby limit był odpowiedni, musi on być zgodny z typem obciążenia przesyłki.
loadLimits maxLoad liczba 6 Określa maksymalną ilość typu obciążenia, jaką może przewieźć pojazd. W tym przykładzie masz tylko 1 pojazd o maksymalnej ładowności 6 dogUnit, gdzie każdy dogUnit reprezentuje 1 klatkę dla psa.

Poniższy diagram ilustruje limity obciążenia pojazdu, żądania obciążenia każdej przesyłki oraz sposób, w jaki każda przesyłka zużywa limity obciążenia pojazdu:

Pojazd rozpoczyna trasę z 6 pustymi miejscami, które reprezentują limity ładowności pojazdu. Pierwsza przesyłka wymaga miejsca dla 1 psa, a druga dla 3 psów. W efekcie 4 z 6 miejsc są zajęte, a 2 pozostałe są wolne.

W tym przykładzie żądania obciążenia każdej przesyłki i limity obciążenia pojazdu mają następujące skutki:

  • Optymalizator nie będzie miał problemu z wygenerowaniem trasy dla pojazdu, aby przewieźć psy, ponieważ pojazd może przewieźć do 6 psów, a Ty odbierasz tylko 4 psy.

  • Limit obciążenia pojazdu wynoszący 6 dogUnit oznacza też, że w tym konkretnym pojeździe możesz przewieźć tylko 2 dodatkowe psy.

  • Jeśli liczba psów byłaby większa niż limit obciążenia, optymalizator pominąłby jeden z odbiorów lub przypisałby go do odpowiedniego pojazdu.

Pamiętaj, że nie ma zestawu predefiniowanych typów. W tym przykładzie możesz zmienić typ obciążenia z jednostek psów na jednostki wagi, aby ograniczyć wagę psów, lub zmienić go na pomiary liniowe, aby ograniczyć ich szerokość lub wysokość. Ta elastyczność pozwala dostosować żądania i limity obciążenia do Twoich konkretnych potrzeb.

Przykład żądania

Poniższy przykład pokazuje strukturę podstawowego żądania optimizeTours zawierającego wartości z przykładowego scenariusza:

{
  "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
      }
    ]
  }
}

Pamiętaj, że w przeciwieństwie do tego przykładu przesyłka może mieć wiele żądań obciążenia, a pojazd może mieć wiele limitów obciążenia, co pozwala określić złożone ograniczenia, które należy uwzględnić podczas optymalizacji tras floty.

Limity obciążenia

Limity obciążenia możesz ustawić jako ograniczenia miękkie, dodając softMaxLoad i costPerUnitAboveSoftMax do loadLimits pojazdu. Dzięki temu optymalizator może przekroczyć maksymalne obciążenie pojazdu, ale wiąże się to z kosztem. Priorytetem jest ukończenie trasy, a nie ścisłe przestrzeganie limitu obciążenia.

Możesz używać jednocześnie maxLoad i softMaxLoad, aby ustawić zarówno twardy jak i miękki limit obciążenia. W takim przypadku softMaxLoad ustawia obciążenie, które można przekroczyć, a maxLoad ustawia twardy limit, którego nie można przekroczyć. Gdy używane są oba te parametry, maxLoad musi być większy niż softMaxLoad.

Właściwości

W tabeli poniżej opisujemy właściwości ograniczeń miękkich dotyczące żądań i limitów obciążenia.

Ma dzieci Nazwa usługi Typ obiektu Opis właściwości
loadLimits softMaxLoad ciąg znaków (format int64) Preferowane maksymalne obciążenie pojazdu. Jeśli obciążenie pojazdu przekroczy tę wartość, zostanie naliczony koszt.
loadLimits costPerUnitAboveSoftMax liczba Koszt jednostki obciążenia powyżej softMaxLoad. To pole jest wymagane, gdy używasz softMaxLoad. Więcej informacji o kosztach znajdziesz w artykule Kluczowe pojęcia dotyczące modelu kosztów.

Przykładowy kod

Poniższy przykład pokazuje strukturę właściwości ograniczeń miękkich loadLimits:

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