Żądania i limity obciążenia

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

Żądania i limity obciążenia to rodzaj ograniczenia, którego możesz używać do zarządzania pojemnością. To ograniczenie określa wymaganą pojemność dostawy i maksymalną pojemność 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 w miarę 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ślone w tych właściwościach:

  • loadDemands określa ilość pojemności, której wymaga dana dostawa.
  • loadLimits określa maksymalną pojemność danego pojazdu.

Struktura

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

Lista kontrolna podstawowych informacji

Ta lista kontrolna zawiera podstawowe informacje, które pomogą Ci uniknąć potencjalnych błędów związanych z obciążeniem. Może Ci pomóc w sprawdzeniu żądania i rozwiązaniu problemów 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 ciągu znaków, który stosujesz w równym stopniu do dostaw i pojazdów. Pojedynczy typ obciążenia dotyczy zarówno żądania obciążenia dostawy, jak i limitu obciążenia pojazdu.

Typy obciążenia używają składni typu mapy Protocol Buffers. 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ą konkretne właściwości, które określają wymagania dotyczące pojemności dostaw i pojazdów. W tabeli poniżej opisujemy te właściwości:

Obiekt Rodzic Właściwość Typ obiektu Opis właściwości
Load loadDemands amount ciąg znaków (format int64) Określa wymagania dotyczące pojemności dostawy w określonym typie.
LoadLimit loadLimits maxLoad ciąg znaków (format int64) Określa maksymalną pojemność ładunkową 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ładowe żądanie , które 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ładowy scenariusz

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

Każda dostawa reprezentuje przystanek, na którym odbierasz określoną liczbę psów. W tym przykładzie każda dostawa ma inne miejsce odbioru, czyli dom psów, którymi się opiekujesz, a wszystkie dostawy mają to samo miejsce docelowe – budynek Twojego przedszkola dla psów.

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

Rodzic Właściwość Typ Wartość Scenariusz
loadDemands typ obciążenia ciąg znaków dogUnit Określa typ obciążenia dostawy. W tym przykładzie używamy dogUnit, gdzie każdy dogUnit reprezentuje 1 psa.
loadDemands amount liczba 1. dostawa: 1
2. dostawa: 3
Określa ilość zdefiniowanego typu obciążenia. W tym przykładzie definiujesz 2 dostawy. W pierwszej odbierasz 1 psa, a w drugiej – 3 psy.
loadLimits typ obciążenia ciąg znaków dogUnit Określa typ limitu obciążenia stosowany do pojazdu. Aby limit był odpowiedni, musi on być zgodny z typem obciążenia dostawy.
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 pojemnoś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 dostawy oraz sposób, w jaki każda dostawa 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ą puste.

W tym przykładzie żądania obciążenia każdej dostawy i limity obciążenia pojazdu mają te 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 tym konkretnym pojazdem 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 konkretnych potrzeb.

Przykładowe żądanie

Poniższy przykład pokazuje strukturę podstawowego żądania optimizeTours zawierającego wartości 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 za opłatą, traktując priorytetowo ukończenie trasy, a nie ścisłe przestrzeganie limitu obciążenia.

Możesz używać razem 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 dla żądań i limitów obciążenia.

Rodzic 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 naliczona opłata.
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 opisie kluczowego pojęcia Model 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
        }
      }
}