Celem interfejsu Route Optimization API jest planowanie tras dla floty pojazdów, które mają odwiedzić określone lokalizacje. Obiekt OptimizeToursRequest opisuje właściwości tych pojazdów i lokalizacji oraz jest podstawową strukturą treści żądania każdego punktu końcowego.
Podstawowa struktura obiektu OptimizeToursRequest wygląda tak:
- Pole
modelzawiera komunikatShipmentModel, który zawiera 2 pola klucza:
W tym dokumencie opisano te typy wiadomości:
ShipmentModel: zawiera listę przesyłek, dostępnych pojazdów i innych obiektów, które opisują ich relacje.Shipment: opisuje lokalizacje, które ma odwiedzić pojazd. Mogą reprezentować rzeczywiste paczki do odebrania i dostarczenia lub miejsca, w których kierowca pojazdu wykonuje usługę.Vehicle: opisuje środek transportu między lokalizacjami przesyłki. Każdy pojazd odpowiada rzeczywistemu pojazdowi lub osobie poruszającej się pieszo.
ShipmentModel
ShipmentModel zawiera elementy problemu optymalizacji trasy. Zawiera zestaw przesyłek, które mogą być realizowane przez zestaw pojazdów, przy uwzględnieniu ograniczeń i minimalizacji ogólnych kosztów.
W tabeli poniżej opisano niektóre istotne właściwości elementu ShipmentModel:
| Właściwości | Opis |
|---|---|
shipments i vehicles |
Wymagane obiekty, które zawierają szczegóły dotyczące co najmniej 1 przesyłki i pojazdu. |
globalStartTime i globalEndTime |
Wskazuje początek i koniec przedziału czasu, w którym wszystkie pojazdy muszą zrealizować wszystkie dostawy. Chociaż te właściwości nie są wymagane, zalecamy ich uwzględnienie, ponieważ optymalizator działa najlepiej, gdy przestrzega ograniczeń czasowych. |
Pełną listę właściwości w ShipmentModel znajdziesz w dokumentacji.
ShipmentModel – przykład
W tym przykładzie prowadzisz hotel dla psów i zaczynasz tworzyć żądanie. Przesyłki i pojazdy zdefiniujesz później, ale chcesz zacząć od ustawienia godzin otwarcia i godzinowego kosztu operacyjnego.
W tym przykładzie wartości właściwości ShipmentModel w żądaniu są następujące:
| Właściwość | Wartość | Opis |
|---|---|---|
globalStartTime |
2024-02-13T00:00:00.000Z | Data i godzina rozpoczęcia godzin otwarcia. |
globalEndTime |
2024-02-14T06:00:00.000Z | Data i godzina zakończenia godzin otwarcia. |
Poniżej znajdziesz przykładowy kod komunikatu ShipmentModel zawierający wartości z przykładowego scenariusza.
{ "model": { "shipments": [ ... ], "vehicles": [ ... ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }
Shipment
Typ wiadomości Shipment definiuje strukturę właściwości przesyłki, którą można dostarczyć, lub usługi, którą można wykonać na trasie.
Jak pokazano na diagramie:
- Wiadomość
Shipmentzawiera wszystkie informacje o rzeczywistej przesyłce lub usłudze. - Wszystkie komunikaty
Shipmentsą określone w polushipments. - Pole
shipmentszawiera co najmniej 1 komunikatShipment.
Komunikat Shipment wymaga co najmniej jednego obiektu pickups lub deliveries.
Definicje tych obiektów są następujące:
pickupsokreśla miejsce odbioru przesyłki.deliveriesokreśla lokalizację dostawy przesyłki.- Zarówno
pickups, jak ideliverieszawierają typ wiadomościVisitRequest, który definiuje lokalizacje i inne szczegóły.
W tabeli poniżej opisano różne scenariusze w zależności od konfiguracji pól pickups i deliveries w wiadomości Shipment.
| Scenariusz | Opis |
|---|---|
Tylko pickups |
Zakładamy, że tylko odbierasz przesyłkę. |
Tylko deliveries |
Zakładamy, że przesyłka została już wstępnie załadowana lub świadczysz usługę. |
pickups i deliveries |
Przypisany pojazd musi najpierw odebrać, a potem dostarczyć przesyłkę. Tylko pojazd, który odebrał przesyłkę, może ją dostarczyć. |
Wiele subskrypcji pickups lub deliveries |
Jeśli przesyłka zawiera kilka możliwości dla pickups lub deliveries, optymalizator wybiera jedną opcję odbioru i jedną opcję dostawy, aby zminimalizować koszty i spełnić ograniczenia. |
Pełną listę właściwości w Shipment znajdziesz w dokumentacji.
Shipment – przykład
W tym przykładzie prowadzisz świetlicę dla psów, odbierasz je z domu i przywozisz do świetlicy. Chcesz ustawić lokalizację odbioru 2 psów i ustawić lokalizację dostawy do Twojej firmy:
- Pierwszy pies mieszka w Coit Tower w San Francisco. Współrzędne tej lokalizacji to szerokość geograficzna 37,8024 i długość geograficzna -122,4058.
- Drugi pies mieszka w South Sunset Playground Park w San Francisco. Współrzędne tej lokalizacji to 37,7359 szerokości geograficznej i -122,5011 długości geograficznej.
- Twoja świetlica dla psów znajduje się w parku Mission Dolores w San Francisco. Współrzędne tej lokalizacji to 37.759773 (szerokość geograficzna) i -122.427063 (długość geograficzna).
Poniżej znajdziesz przykładowy kod wiadomości Shipment, w której obiekt shipments zawiera 2 typy wiadomości Shipment z przykładowymi współrzędnymi.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ ... ] } }
Vehicle
Typ wiadomości Vehicle definiuje strukturę właściwości pojazdu, który może wykonać przesyłkę na trasie.
Jak pokazano na diagramie:
- Komunikat
Vehiclezawiera wszystkie informacje o pojeździe w rzeczywistości. - Wszystkie komunikaty
Vehiclesą określone w poluvehicles. - Pole
vehicleszawiera wiele komunikatówVehicle.
W tabeli poniżej opisano niektóre istotne właściwości elementu Vehicle.
| Właściwości | Opis |
|---|---|
startLocation i endLocation |
lokalizację początkową i końcową pojazdów, które są częścią ostatecznej zoptymalizowanej trasy; Jeśli nie są zdefiniowane, domyślnie są to lokalizacje pierwszego odbioru i ostatniej dostawy przesyłki. |
costPerHour, costPerKilometer, costPerTraveledHour |
Parametry kosztów związane z pojazdami. Zalecamy, aby w żądaniu do interfejsu API podać co najmniej 1 parametr kosztu, aby interfejs API mógł zwrócić zoptymalizowaną trasę. Więcej informacji o kosztach znajdziesz w artykule o modelu kosztów. |
startTimeWindows i endTimeWindows |
Zdefiniuj przedziały czasu, w których pojazd może poruszać się po trasie. Muszą one mieścić się w przedziale czasu od globalStartTime do globalEndTime ustawionym w ShipmentModel. Chociaż ta właściwość nie jest wymagana, zalecamy jej uwzględnienie, ponieważ optymalizator działa najlepiej, gdy przestrzega ograniczeń czasowych. |
Vehicle – przykład
W tym przykładzie prowadzisz opiekę dzienną nad psami i chcesz określić lokalizację pojazdu na początku i na końcu dnia oraz ilość zużywanego paliwa. Nie musisz określać godzin pracy pojazdu, ponieważ są one zgodne z godzinami zdefiniowanymi we właściwościach globalStartTime i globalEndTime w obiekcie ShipmentModel.
W tym przykładzie wartości właściwości Vehicle w żądaniu są następujące:
| Właściwość | Wartość | Opis |
|---|---|---|
startLocation |
latitude: 37.759773, longitude: -122.427063 |
Współrzędne początkowe trasy pojazdu. Odpowiadają one lokalizacji Twojego hotelu dla psów, który znajduje się w Mission Dolores Park w San Francisco. |
endLocation |
latitude: 37.759773, longitude: -122.427063 |
Współrzędne końcowe trasy pojazdu. Odpowiadają one lokalizacji Twojego hotelu dla psów, który znajduje się w Mission Dolores Park w San Francisco. |
costPerHour |
27 | Ile płacisz kierowcy za prowadzenie pojazdu do przewozu psów. Płacisz kierowcy 27 USD za godzinę. |
Poniżej znajdziesz przykładowy kod komunikatu Vehicle zawierający wartości z przykładowego scenariusza.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
Pełną listę właściwości w Vehicle znajdziesz w dokumentacji.
Przykładowe pełne żądanie
Poniższy przykładowy kod zawiera kompletny przykład żądania, który łączy przykłady ShipmentModel, Shipment i Vehicle przedstawione w tym dokumencie.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }