Cykl życia planu trasy

Na tej stronie opisujemy cykl życia planu trasy przy użyciu interfejsu Route Optimization API, zaczynając od określenia potrzeb związanych z wyznaczaniem trasy, a kończąc na zintegrowanym planie trasy w systemie.

Postępując zgodnie z etapami planu, możesz osiągnąć te cele:

  • Mapowanie operacji floty: przełóż fizyczną flotę, złożone ograniczenia i cele biznesowe na kod interfejsu API.
  • Optymalizowanie planów tras pod kątem potrzeb firmy: dowiedz się, jak ulepszyć plan trasy, aby osiągnąć cele i usprawnić codzienne działania.
  • Wdrożenie w środowisku produkcyjnym: wdróż plan tras, uwzględniając go w codziennych działaniach.

Poniższy diagram przedstawia cykl życia planu trasy.

Schemat blokowy cyklu życia planu trasy opisany w tekście poniżej

Faza wdrażania planu trasy ma miejsce, gdy po raz pierwszy integrujesz interfejs API lub gdy Twoje wymagania biznesowe ulegają znacznej zmianie. Obejmuje etapy od 1 do 5.

Faza codziennych działań jest mniej wymagająca, a ulepszenia są minimalne. Obejmuje etapy od 2 do 4.

Etapy cyklu życia trasy:

  1. Określ zakres problemu: zanim zaczniesz korzystać z interfejsu API, określ i uporządkuj cele, zasoby, zadania i ograniczenia, aby mieć pełny obraz swoich działań.
  2. Mapowanie danych: przełóż realia biznesowe na parametry interfejsu API, aby plan trasy odzwierciedlał sposób działania floty.
  3. Utwórz żądanie i uzyskaj plan trasy: wpisz dane w interfejsie API i uzyskaj zoptymalizowany plan trasy.
  4. Dopracuj plan trasy: przetestuj plan trasy i wprowadź w nim zmiany, dostosowując ograniczenia i cele, aby mieć pewność, że spełnia on wszystkie Twoje potrzeby.
  5. Zintegruj plan trasy: połącz plan trasy z istniejącymi systemami, aby zapewnić przydatne wskazówki nawigacyjne.

Określanie zakresu problemu

Zanim zaczniesz korzystać z interfejsu API, musisz uporządkować szczegóły codziennych operacji w przejrzyste kategorie danych. Dzięki temu możesz rozpocząć proces wdrażania, mając jasność co do bieżących zasobów i zadań, ograniczeń oraz celów, które chcesz osiągnąć za pomocą floty.

Określanie zasobów i zadań

Ważnym krokiem podczas planowania trasy jest określenie zasobów i zadań, czyli pojazdów i przesyłek.

pojazdy, przesyłki,
  • Liczba: ile masz pojazdów?
  • Lokalizacje: gdzie pojazdy zaczynają i kończą trasę?
  • Czas: jakie są godziny pracy kierowców pojazdów?
  • Pojemność: jakie są limity Twoich pojazdów?
  • Koszty: jakie są koszty prowadzenia floty?
  • Lokalizacje: gdzie znajdują się punkty odbioru i dostawy?
  • Wymagania: jaka jest waga lub rozmiar paczek?
  • Ograniczenia: czy obowiązują określone przedziały czasowe dostawy?
  • Czas obsługi: ile czasu kierowca potrzebuje na zaparkowanie i rozładunek?
  • Wymagania: czy dostawa wymaga określonego typu pojazdu lub kierowcy?

Określanie ograniczeń

Ograniczenia to limity i restrykcje dotyczące sposobu korzystania z pojazdów i obsługi przesyłek. To one decydują o większości operacji i są kluczowe przy tworzeniu zoptymalizowanego planu trasy.

Ograniczenia dzielą się zwykle na 2 kategorie:

Ograniczenia bezwarunkowe Ograniczenia miękkie
Są to limity, których nie można przekroczyć. Na przykład ciężarówka nie może przewozić więcej ładunku, niż wynosi jej maksymalna ładowność, a kierowca nie może odebrać przesyłki po zamknięciu sklepu. Są to preferencje, które można w razie potrzeby naruszyć, zwykle za opłatą karną. Możesz na przykład preferować załadowanie ciężarówki tylko do 80% pojemności lub dostarczenie przesyłki przed czasem docelowym, ale możesz przekroczyć te limity, aby uzyskać lepszą trasę.

Typowe ograniczenia:

  • Limity pojemności: maksymalna waga, objętość lub liczba elementów, które pojazd może przewozić.
  • Okna czasowe: konkretne przedziały czasowe, w których lokalizacja jest otwarta dla odwiedzających, lub konkretne godziny pracy kierowcy.
  • Koszty: koszt przejazdu pojazdu lub pominięcia dostawy. Jednym z głównych celów interfejsu API jest generowanie opłacalnego planu trasy.
  • Przerwy kierowcy: okresy odpoczynku kierowcy, które są zwykle wymagane przez przepisy prawa pracy po określonej liczbie godzin pracy.

Określanie celów biznesowych

Gdy określisz zasoby i zadania oraz ich ograniczenia, nadejdzie czas na ustalenie, które dane są najważniejsze dla Twojej firmy. Te cele idą w parze z ograniczeniami i pomagają zdecydować, co jest najważniejsze podczas planowania trasy.

Oto kilka przykładów celów biznesowych:

Rozmiar floty Odległość Godzina Koszt
Czy chcesz zminimalizować liczbę używanych pojazdów, czy wykorzystać całą flotę, aby wcześniej zakończyć dzień pracy? Czy chcesz wybrać najkrótszą trasę, aby zaoszczędzić na paliwie, czy wolisz szybszą trasę, która może być dłuższa ze względu na korzystanie z autostrad? Czy chcesz zminimalizować łączną liczbę godzin pracy, czy też priorytetem jest przybycie o określonych godzinach, co może wydłużyć czas spędzony na trasie? Czy chcesz zminimalizować koszty operacyjne, takie jak wynagrodzenia i paliwo, czy też zaakceptować wyższe koszty, aby dotrzymać rygorystycznych terminów?

Mapowanie danych

Po zebraniu danych zmapuj je, aby pasowały do właściwości interfejsu API. Dzięki temu optymalizator ma wszystkie informacje potrzebne do zwrócenia planu trasy, który uwzględnia realia Twojej firmy.

Użyj parametrów z następnych tabel, aby zmapować zasoby, zadania, ograniczenia i cele zmapowane w sekcji Określanie zakresu problemu.

Mapowanie zmiennych

Pojęcie z życia codziennego Parametr interfejsu API Opis
Kierowca lub pojazd model.vehicles[] Reprezentuje pojedynczy pojazd we flocie.
Lokalizacje punktów odbioru vehicles[].startWaypoint
vehicles[].endWaypoint
Lokalizacja, w której pojazd rozpoczyna i kończy trasę.
Godziny otwarcia Twojej firmy model.globalStartTime
model.globalEndTime
Najwcześniejszy czas rozpoczęcia i najpóźniejszy czas zakończenia działania całej floty.
Zadanie lub pakiet model.shipments[] Reprezentuje zadanie. Może to być pickup, delivery lub jedno i drugie.
Lokalizacja zadania pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
Położenie geograficzne, w którym odbywa się praca.
Czas obsługi pickups[].duration
deliveries[].duration
Czas spędzony w lokalizacji na wykonaniu zadania (np. rozładunku), bez czasu podróży.

Mapowanie ograniczeń

Ograniczenie w świecie rzeczywistym Parametr interfejsu API Opis
Ładowność pojazdu vehicles[].loadLimits Ustawia twardy lub miękki limit ładowności pojazdu. Jeśli loadDemand przesyłki przekracza pozostały limit, nie zostanie ona przypisana.
Rozmiar pakietu shipments[].loadDemands Ilość ładowności pojazdu, którą zajmuje przesyłka.
Ograniczenia dotyczące pojazdów shipments[].allowedVehicleIndices Ogranicza przesyłkę, tak aby mogła zostać odebrana lub dostarczona tylko przez określone pojazdy lub kierowców.
Godziny otwarcia shipments[].pickups[].timeWindows lub shipments[].deliveries[].timeWindows Ustawia godziny, w których można odwiedzić daną lokalizację. Jeśli pojazd nie może dotrzeć w tym przedziale czasowym, przesyłka jest pomijana.
Limit długości zmiany vehicles[].routeDurationLimit Ustawia twardy lub miękki limit czasu pracy konkretnego kierowcy (np. maksymalnie 8 godzin), niezależnie od globalnego czasu zakończenia.
Przerwy kierowcy vehicles[].breakRule Egzekwuje określone zasady dotyczące odpoczynku, takie jak obowiązkowe przerwy po określonej liczbie godzin pracy.
Ograniczenia na drodze vehicles[].travelMode Określa środek transportu (np. DRIVE lub BICYCLE). Ogranicza to trasę do dróg, po których można się poruszać, i określa prędkości używane do obliczania czasu podróży.

Mapowanie celów

Cel w świecie rzeczywistym Parametr interfejsu API Opis
Minimalizowanie rozmiaru floty vehicles[].fixedCost Stosuje jednorazowy koszt korzystania z pojazdu. Wysoki koszt stały wymusza na trasie priorytetowe traktowanie mniejszej liczby pojazdów, a nie zwiększanie łącznego dystansu lub czasu pracy.
Minimalizowanie odległości vehicles[].costPerKilometer Naliczanie kosztu za każdy przejechany kilometr. Priorytetem są krótsze trasy, co pozwala oszczędzać paliwo i zmniejszać zużycie pojazdu.
Zminimalizuj łączny czas vehicles[].costPerHour Stosuje koszt za każdą godzinę, przez którą pojazd jest aktywny (w tym czas podróży i czasy oczekiwania). Priorytetem jest szybsze ukończenie.
Zminimalizuj czas jazdy vehicles[].costPerTraveledHour Stosuje koszt związany z czasem spędzonym na przemieszczaniu się. Pozwala to odróżnić stanie w korku (kosztowne) od oczekiwania na przystanku(potencjalnie tańsze).
Nadawanie priorytetu określonym zadaniom shipments[].penaltyCost Naliczanie kosztu, jeśli określona dostawa zostanie pominięta. Ustawienie wysokiego priorytetu zapewnia, że zadania krytyczne będą traktowane priorytetowo w stosunku do zadań opcjonalnych.

Tworzenie żądania i uzyskiwanie odpowiedzi

Aby wygenerować plan trasy za pomocą interfejsu Route Optimization API, wykonaj te czynności:

  1. Skonfiguruj środowisko: skonfiguruj projekt Google Cloud, włącz interfejs API i skonfiguruj uwierzytelnianie. Instrukcje znajdziesz w sekcji Pierwsze kroki. Wystarczy wykonać ten krok tylko raz.
  2. Wyślij żądanie: utwórz treść żądania, korzystając z mapowania danych zdefiniowanego w poprzedniej sekcji. Informacje o punktach końcowych, nagłówkach i formatowaniu żądań znajdziesz w artykule Wysyłanie żądania do interfejsu API.
  3. Zrozumienie odpowiedzi: gdy otrzymasz odpowiedź z interfejsu API, zapoznaj się z planem trasy i znaczeniem poszczególnych parametrów. Zobacz Interpretowanie odpowiedzi.

Dostosowywanie planu trasy

Przełożenie rzeczywistej logistyki na koszty i ograniczenia interfejsu API jest złożonym zadaniem. Początkowy plan trasy może nie odpowiadać Twoim celom biznesowym lub oczekiwaniom kierowców. Dostosowywanie planu trasy to iteracyjny proces testowania zwróconych tras i dostosowywania parametrów, aż znajdziesz konfigurację, która pozwoli Ci osiągnąć cele.

Dostosowywanie celów i ograniczeń

Jeśli wygenerowany plan trasy nie spełnia Twoich potrzeb, możesz zmodyfikować niektóre parametry, aby uzyskać inne wyniki. Zaostrzenie lub złagodzenie parametrów zmienia sposób rozwiązywania sprzecznych celów w planie trasy, a złagodzenie parametrów jest skutecznym sposobem na wykrycie parametrów, które powodują błędy w planach tras.

W tabeli poniżej znajdziesz typowe problemy z kierowaniem i parametry, które możesz dostosować, aby je rozwiązać.

Scenariusz Parametr Korekta Opis
Ważna przesyłka została pominięta shipments[].penaltyCost Zwiększ jego wartość lub dodaj koszty karne do innych dostaw. Jeśli dostawa jest opcjonalna, zwiększ jej koszt kary, aby nadać jej priorytet. Jeśli dostawa jest obowiązkowa (nie ma kosztu kary), dodaj koszty kary do innych, mniej krytycznych dostaw. Dzięki temu są one opcjonalne, co pozwala zaoszczędzić czas i miejsce w pojeździe na ważne przesyłki.
Dostawa została pominięta ze względu na czas softStartTime/softEndTime Dodawanie elastycznych okien czasowych W przypadku sztywnych okien czasowych zadania, które są spóźnione nawet o minutę, są odrzucane. Elastyczne okna czasowe pozwalają kierowcy przyjechać nieco poza harmonogramem, co wiąże się z poniesieniem „kosztu”, a nie z niepowodzeniem zadania.
Dostawa została pominięta ze względu na wagę loadLimits[].softMaxLoad i costPerUnitAbove Dodaj wymagania dotyczące łagodnego obciążenia Umożliwia nieznaczne przekroczenie idealnej ładowności pojazdu (za karę) zamiast pozostawienia paczki.
Dostawa została pominięta z powodu przeciążenia floty model.vehicles[] lub shipments[].timeWindows Dodaj pojazdy lub wydłuż przedziały czasowe Jeśli jest zbyt wiele dostaw dla obecnej floty, zwłaszcza w godzinach największego zapotrzebowania, dodaj więcej pojazdów lub wydłuż okna dostawy, aby rozłożyć obciążenie.
Trasy są zbyt długie lub nieefektywne vehicles[].costPerKilometer/costPerHour Dodawanie kosztów lub zwiększanie ich wartości Informuje interfejs API, że podróż jest kosztowna, co zachęca go do pomijania odległych, odizolowanych przystanków w celu tworzenia bardziej zwartych tras dla floty.
Zmiany kierowców są zbyt długie vehicles[].routeDurationLimit lub model.vehicles[] Dodaj limity czasu trwania lub dodaj pojazdy i limity Wymusza bezwzględny limit (np. 8 godzin) łącznego czasu, jaki kierowca może spędzić na drodze. Samo dodanie pojazdów nie skróci tras, chyba że zastosujesz też limity czasu trwania, aby wymusić na solverze rozłożenie obciążenia na większą flotę.

Aktualizowanie planu trasy

Często trzeba zaktualizować plan trasy, zachowując tę samą bazę, np. dodając odbiór do harmonogramu aktywnego kierowcy. Aby to zrobić, użyj parametrów wstrzykiwania, które zapewniają interfejsowi API punkt początkowy na podstawie poprzedniego rozwiązania, co pozwala mu zmodyfikować istniejący plan, zamiast obliczać nowy od zera.

Oto różne sposoby aktualizowania planu trasy za pomocą parametrów wstrzykiwania:

  • Przekaż trasy z poprzedniej odpowiedzi do pola injectedFirstSolutionRoutes nowego żądania. Przyspiesza to wyszukiwanie optymalizacji i jest przydatne do ponownego planowania przed rozpoczęciem codziennych operacji, np. do uwzględnienia przesyłek dodanych w ostatniej chwili.
  • Kontroluj stopień zmiany za pomocą pola injectedSolutionConstraint. Jest to przydatne, gdy operacje są już w toku, ponieważ pozwala zachować bieżącą sekwencję kierowcy lub naprawić części planu, które zostały już wykonane.
  • Upewnij się, że zaktualizowana trasa pozostaje przypisana do prawidłowego pojazdu, ustawiając parametr interpretInjectedSolutionsUsingLabels na true. Jest to przydatne podczas eksperymentowania z dodawaniem lub usuwaniem przesyłek i pojazdów, ponieważ dopasowuje trasy za pomocą etykiet, a nie indeksów. Wymaga to, aby wszystkie etykiety pojazdów i przesyłek były unikalne.

Integracja planu trasy

Sfinalizowany plan trasy to obiekt danych reprezentujący zoptymalizowane zarządzanie zasobami i zadaniami przy jednoczesnym przestrzeganiu ograniczeń i celów. Zintegruj ten plan trasy ze swoim systemem, aby używać go w codziennej działalności. Zwykle obejmuje to wizualizację planu trasy dla menedżerów floty i wysyłanie kierowcom szczegółowych wskazówek dojazdu.

Wizualizacja

Aby umożliwić menedżerom floty weryfikowanie i monitorowanie planu trasy, możesz go wizualizować na te sposoby:

Aby umożliwić menedżerom floty weryfikowanie i monitorowanie planu trasy, możesz wyświetlić go na mapie w panelu. W zależności od bieżącego etapu rozwoju możesz wizualizować plan trasy na te sposoby:

  • Odkrywanie bez kodu: możesz użyć aplikacji Route Optimization typu open source, aby zobaczyć, jak interfejs API przekształca dane w fizyczne ścieżki na mapie. Ta aplikacja internetowa służy jako narzędzie do eksploracji, które umożliwia tworzenie scenariuszy, dostosowywanie parametrów ograniczeń i wizualne renderowanie wynikowych planów tras przed napisaniem kodu.
  • Wyświetlanie kolejności wizyt: możesz wyświetlić sekwencję wizyt jako ponumerowane punkty na mapie, aby ocenić optymalizację i plany wysyłki we własnym systemie. Aby to zrobić, znajdź tablicę visits w każdej trasie w odpowiedzi interfejsu API. Elementy w tej tablicy są uporządkowane dokładnie tak, jak kierowca powinien je realizować. Możesz przejrzeć tę listę, użyć shipmentIndex, aby pobrać współrzędne lokalizacji każdego przystanku, i użyć biblioteki mapowania, aby wyrenderować ponumerowane znaczniki na mapie na podstawie ich kolejności na liście.
  • Rysowanie trasy fizycznej: możesz zwizualizować dokładną zaplanowaną ścieżkę na mapie, aby zrozumieć, dlaczego optymalizator wybrał konkretną sekwencję. Ta linia łamana reprezentuje zamierzoną ścieżkę do planowania i oceny, a nie trasę kierowcy w czasie rzeczywistym. Ustaw populatePolylines: true w żądaniu, aby uzyskać pole encodedPolyline dla każdej trasy, i zdekoduj je za pomocą metody google.maps.geometry.encoding.decodePath() z Maps JavaScript API.

wysyłanie do kierowców,

Możesz zintegrować szczegółowe wskazówki dojazdu z aplikacją dla kierowców, korzystając z pakietu Navigation SDK, lub udostępnić precyzyjne linki do aplikacji Mapy Google dla konsumentów.

  • Navigation SDK: jeśli masz niestandardową aplikację dla kierowców, możesz zintegrować Navigation SDK na Androida lub iOS, aby udostępniać w aplikacji szczegółowe wskazówki dojazdu. Możesz zintegrować informacje o zadaniu z odpowiedzi interfejsu API ze swoim systemem i używać pakietu SDK do nawigacji. Aby przekazać trasy z odpowiedzi interfejsu API do pakietu SDK, ustaw w żądaniu parametr populateTransitionPolylines: true. Spowoduje to wygenerowanie routeToken dla każdego przejścia w odpowiedzi.
  • Fleet Engine: w celu zaawansowanego zarządzania flotą możesz zaimportować plan trasy wygenerowany przez interfejs API do Fleet Engine, aby monitorować realizację trasy w czasie rzeczywistym. Interfejs API udostępnia łamaną planowanej trasy do oceny, a Fleet Engine łączy zaplanowaną sekwencję wizyt ze śledzeniem pojazdu na żywo.