Żą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:
loadDemandsokreśla ilość pojemności, której wymaga dana dostawa.loadLimitsokreśla maksymalną pojemność danego pojazdu.
Struktura
Jak pokazano na diagramie, żądania i limity obciążenia mają taką strukturę:
loadDemandsto właściwośćShipment. AShipmentmoże mieć wiele żądań obciążenia.loadLimitsto właściwośćVehicle. AVehiclemoże mieć wiele limitów obciążenia.
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.
LoadiLoadLimit: 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: 12. 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:

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
dogUnitoznacza 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 } } }