Struktura podstawowa (model dostawy, dostawa i pojazd)

ShipmentModel ma 1 obiekt `shipments` z typem wiadomości `Shipment` i 1 obiekt `vehicles` z typem wiadomości `Vehicle`.

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:

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.

Rzeczywista dostawa odpowiada jednej wiadomości `Shipment`, która jest zawarta w obiekcie `shipments`.

Jak pokazano na diagramie:

  • Wiadomość Shipment zawiera wszystkie informacje o rzeczywistej przesyłce lub usłudze.
  • Wszystkie komunikaty Shipment są określone w polu shipments.
  • Pole shipments zawiera co najmniej 1 komunikat Shipment.

Komunikat Shipment wymaga co najmniej jednego obiektu pickups lub deliveries. Definicje tych obiektów są następujące:

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.

Pojazd w rzeczywistości odpowiada jednemu komunikatowi `Vehicle`, który jest zawarty w obiekcie `vehicles`.

Jak pokazano na diagramie:

  • Komunikat Vehicle zawiera wszystkie informacje o pojeździe w rzeczywistości.
  • Wszystkie komunikaty Vehicle są określone w polu vehicles.
  • Pole vehicles zawiera wiele komunikatów Vehicle.

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