Cykl życia planu trasy

Na tej stronie opisujemy cykl życia planu trasy z użyciem interfejsu Route Optimization API, od określenia potrzeb związanych z wyznaczaniem tras po zintegrowanie planu trasy w systemie.

Realizując poszczególne etapy planu trasy, możesz osiągnąć te cele:

  • Mapowanie operacji floty: przełóż swoją flotę fizyczną, złożone ograniczenia i cele biznesowe na kod interfejsu API.
  • Optymalizuj plany tras dla swojej firmy: dowiedz się, jak ulepszyć plan trasy, aby osiągać cele i usprawniać codzienne działania.
  • Wdrożenie w środowisku produkcyjnym: wdróż plan trasy, uwzględniając go w codziennych działaniach.

Poniższy diagram przedstawia cykl życia planu trasy.

Schemat przepływu cyklu życia planu trasy objaśniony w tekście poniżej

Faza wdrażania planu trasy następuje, gdy po raz pierwszy integrujesz interfejs API lub gdy Twoje wymagania biznesowe ulegają znacznym zmianom. Obejmuje etapy od 1 do 5.

Faza codziennej eksploatacji jest mniej wymagająca, a dostosowywanie jest minimalne. Obejmuje on etapy 2–4.

Etapy życia trasy są następujące:

  1. Określ zakres problemu: zidentyfikuj i uporządkuj swoje cele, zasoby, zadania i ograniczenia, aby przed rozpoczęciem korzystania z interfejsu API uzyskać pełny obraz swoich działań.
  2. Mapowanie danych: przełóż sytuację biznesową na parametry interfejsu API, aby plan trasy odzwierciedlał sposób, w jaki ma działać Twoja flota.
  3. Utwórz żądanie i uzyskaj plan trasy: wprowadź dane do interfejsu API i uzyskaj zoptymalizowany plan trasy.
  4. Ulepszanie planu 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 dotychczasowymi systemami, aby zapewnić praktyczną nawigację.

Określ zakres 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 obecnych 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 pojazdów posiadasz?
  • Lokalizacje: gdzie pojazdy rozpoczynają i kończą przejazd?
  • Czas: w jakich godzinach pracują kierowcy pojazdów?
  • Pojemność: jakie są ograniczenia Twoich pojazdów?
  • Koszty: jakie są koszty utrzymania floty?
  • Lokalizacje: gdzie znajdują się punkty odbioru i dostawy?
  • Wymagania: jaka jest waga lub rozmiar paczek?
  • Ograniczenia: czy są określone przedziały czasowe dostawy?
  • Czas obsługi: jak długo kierowca musi parkować i rozładowywać towar?
  • Wymagania: czy przesyłka wymaga określonego typu pojazdu lub kierowcy?

Określ ograniczenia

Ograniczenia to limity i zasady dotyczące korzystania z pojazdów oraz sposobu obsługi przesyłek. Określają one większość Twoich działań i są niezbędne podczas tworzenia zoptymalizowanego planu trasy.

Ograniczenia zwykle dzielą się na 2 kategorie:

Ograniczenia bezwzględne Ograniczenia miękkie
Są to limity, których nie można przekroczyć. Na przykład ciężarówka nie może przewozić więcej towarów niż wynosi jej maksymalna ładowność, a kierowca nie może odebrać zamówienia po zamknięciu sklepu. Są to preferencje, które w razie potrzeby można naruszyć, zwykle za karę. Możesz na przykład woleć załadować ciężarówkę tylko w 80% lub dostarczyć towar przed wyznaczoną godziną, ale możesz też przekroczyć te limity, aby uzyskać lepszą trasę.

Typowe ograniczenia to:

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

Określanie celów biznesowych

Gdy określisz zasoby, zadania i ich ograniczenia, możesz przejść do ustalenia, które dane są najważniejsze dla Twojej firmy. Cele te są powiązane 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ć paliwo, 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ż nadać priorytet przybyciu o określonych godzinach, co może wydłużyć czas spędzony na trasie? Czy chcesz zminimalizować koszty operacyjne, takie jak płace i paliwo, czy też akceptujesz wyższe koszty, aby dotrzymać ścisłych terminów?

Mapowanie danych

Po zebraniu danych przypisz je do właściwości interfejsu API. Dzięki temu optymalizator będzie mieć wszystkie informacje potrzebne do zwrócenia planu trasy, który uwzględnia realia Twojej firmy.

Użyj parametrów z tabel poniżej, aby przypisać zasoby, zadania, ograniczenia i cele, które zostały przypisane w sekcji Określ zakres problemu.

Mapowanie zmiennych

Pojęcie z życia Parametr interfejsu API Opis
Kierowca lub pojazd model.vehicles[] Reprezentuje pojedynczy pojazd we flocie.
Lokalizacje baz vehicles[].startWaypoint
vehicles[].endWaypoint
miejsce, w którym 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
Lokalizacja geograficzna, w której odbywa się zadanie.
Czas obsługi pickups[].duration
deliveries[].duration
Czas spędzony w lokalizacji na wykonaniu zadania (np. rozładunku), z wyłączeniem czasu podróży.

Mapowanie ograniczeń

Ograniczenie w świecie rzeczywistym Parametr interfejsu API Opis
Pojemność pojazdu vehicles[].loadLimits Ustawia limit twardy lub miękki pojemności pojazdu. Jeśli loadDemand przesyłki przekracza pozostały limit, nie jest ona przypisywana.
Rozmiar pakietu shipments[].loadDemands Ilość miejsca w pojeździe, jaką zajmuje przesyłka.
Ograniczenie dotyczące pojazdu shipments[].allowedVehicleIndices Ogranicza przesyłkę, tak aby mogła być 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 czasie, przesyłka jest pomijana.
Limit długości zmiany vehicles[].routeDurationLimit Ustawia limit czasu pracy konkretnego kierowcy (np. maksymalnie 8 godzin) niezależnie od globalnego czasu zakończenia.
Przerwy kierowcy vehicles[].breakRule Wymusza przestrzeganie określonych zasad dotyczących odpoczynku, np. obowiązkowych przerw 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 dopuszczonych do ruchu i określa prędkości używane do obliczania czasu podróży.

Mapowanie celów

Cel w rzeczywistości Parametr interfejsu API Opis
Minimalizowanie rozmiaru floty vehicles[].fixedCost Stosuje jednorazowy koszt korzystania z pojazdu. Wysoki koszt stały zmusza trasę do nadania priorytetu używaniu mniejszej liczby pojazdów zamiast zwiększania całkowitej odległości lub czasu pracy.
Minimalizuj odległość vehicles[].costPerKilometer Oblicza koszt za każdy przejechany kilometr. Priorytetem są krótsze trasy, aby oszczędzać paliwo i zmniejszać zużycie.
Zminimalizuj łączny czas vehicles[].costPerHour Obowiązuje opłata za każdą godzinę aktywności pojazdu (w tym czas przejazdu i 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 (droższe) od czekania na przystanku(potencjalnie tańsze).
Nadawanie priorytetów określonym zadaniom shipments[].penaltyCost Naliczanie kosztu w przypadku pominięcia konkretnej dostawy. Ustawienie wysokiego priorytetu zapewnia, że zadania krytyczne mają wyższy priorytet niż opcjonalne.

Tworzenie żądania i uzyskiwanie odpowiedzi

Generowanie planu trasy za pomocą interfejsu Route Optimization API obejmuje te czynności:

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

Ulepszanie planu trasy

Przekładanie rzeczywistych procesów logistycznych na koszty i ograniczenia interfejsu API to złożone zadanie. Początkowy plan trasy może nie być zgodny z celami biznesowymi ani oczekiwaniami kierowcy. Dopracowywanie 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 oczekiwań, możesz zmodyfikować niektóre parametry, aby uzyskać inne wyniki. Zacieśnianie lub rozluźnianie parametrów zmienia sposób rozwiązywania sprzecznych celów w planie trasy, a rozluźnianie parametrów to skuteczny sposób na wykrycie parametrów, które powodują błędy w planach trasy.

W tabeli poniżej znajdziesz listę typowych problemów z routingiem i parametrów, które możesz dostosować, aby je rozwiązać.

Scenariusz Parametr Korekta Opis
Ważna przesyłka została pominięta shipments[].penaltyCost zwiększyć jego wartość lub dodać koszty kary do innych przesyłek. Jeśli dostawa jest opcjonalna, zwiększ jej koszt kary, aby nadać jej wyższy priorytet. Jeśli dostawa jest obowiązkowa (nie ma kosztu kary), dodaj koszty kary do innych, mniej krytycznych dostaw. Dzięki temu stają się one opcjonalne, co zwalnia czas i pojemność pojazdu na potrzeby ważnej przesyłki.
Dostawa została pominięta z powodu czasu softStartTime/softEndTime Dodawanie elastycznych przedziałów czasu W przypadku ścisłych przedziałów czasowych zadania są odrzucane nawet wtedy, gdy spóźnienie wynosi 1 minutę. Elastyczne okna czasowe pozwalają kierowcy przyjechać nieco później, ponosząc „koszt”, zamiast nie wykonać zadania.
Dostawa została pominięta ze względu na wagę loadLimits[].softMaxLoadcostPerUnitAbove Dodawanie wymagań dotyczących miękkiego ładowania Umożliwia pojazdowi nieznaczne przekroczenie idealnej pojemności (za karę), zamiast pozostawiania paczki.
Dostawa została pominięta z powodu przeciążenia floty model.vehicles[] lub shipments[].timeWindows Dodawanie pojazdów lub przedziałów czasu na odpoczynek Jeśli liczba przesyłek jest zbyt duża w stosunku do aktualnej 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, odosobnionych przystanków, aby tworzyć krótsze trasy dla floty.
Zmiany kierowców są zbyt długie vehicles[].routeDurationLimit lub model.vehicles[] Dodawanie limitów czasu lub pojazdów i limitów Wymusza limit (np. 8 godzin) łącznego czasu spędzonego przez kierowcę na drodze. Samo dodanie pojazdów nie skróci tras, chyba że zastosujesz też limity czasu trwania, aby wymusić na rozwiązaniu rozłożenie obciążenia na większą flotę.

Aktualizowanie planu trasy

Często musisz zaktualizować plan trasy, zachowując tę samą bazę, np. dodać odbiór do aktywnego harmonogramu kierowcy. Aby to zrobić, użyj parametrów wstrzykiwania, które przekazują do interfejsu API punkt początkowy na podstawie poprzedniego rozwiązania, co umożliwia modyfikowanie istniejącego planu zamiast obliczania nowego od zera.

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

  • Przekaż trasy z poprzedniej odpowiedzi do pola injectedFirstSolutionRoutes w nowym żądaniu. Przyspiesza to wyszukiwanie optymalizacji i jest przydatne przy ponownym planowaniu przed rozpoczęciem codziennych operacji, np. przy uwzględnianiu przesyłek w ostatniej chwili.
  • Stopień zmiany możesz kontrolować 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 jest nadal przypisana do właściwego pojazdu, ustawiając wartość interpretInjectedSolutionsUsingLabels na true. Jest to przydatne w przypadku eksperymentów, gdy dodajesz lub usuwasz przesyłki i pojazdy, ponieważ dopasowuje trasy za pomocą etykiet zamiast indeksów. Wymaga to, aby wszystkie etykiety pojazdów i przesyłek były niepowtarzalne.

Integracja planu trasy

Ostateczny plan trasy to obiekt danych reprezentujący zoptymalizowane zarządzanie zasobami i zadaniami przy jednoczesnym uwzględnieniu ograniczeń i celów. Wykorzystaj ten plan trasy w codziennej pracy, integrując go z systemem. Zazwyczaj obejmuje to wizualizację planu trasy dla menedżerów flot i wysyłanie kierowcom szczegółowych instrukcji dojazdu.

Wizualizacja

Aby umożliwić menedżerom flot weryfikowanie i monitorowanie planu trasy, możesz wizualizować go w ten sposób:

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 obecnego etapu rozwoju możesz wizualizować plan trasy w ten sposób:

  • Eksploruj bez kodu: możesz użyć aplikacji Optymalizacja tras o otwartym kodzie źródłowym, aby zobaczyć, jak interfejs API przekształca Twoje dane w fizyczne ścieżki na mapie. Ta aplikacja internetowa służy jako narzędzie eksploracyjne, 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świetlać kolejność 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 sterownik powinien je wykonywać. Możesz iterować po tej liście, używać shipmentIndex, aby pobierać współrzędne lokalizacji każdego przystanku, i używać biblioteki mapowania, aby renderować na mapie ponumerowane znaczniki na podstawie ich kolejności na liście.
  • Narysuj trasę fizyczną: możesz wizualizować dokładną zaplanowaną ścieżkę na mapie, aby zrozumieć, dlaczego optymalizator wybrał określoną kolejność. Ta linia łamana przedstawia zamierzoną trasę do celów planowania i oceny, a nie trasę w czasie rzeczywistym pokonaną przez kierowcę. W żądaniu ustaw wartość populatePolylines: true, aby uzyskać pole encodedPolyline dla każdej trasy, i zdekoduj je za pomocą metody google.maps.geometry.encoding.decodePath()interfejsu Maps JavaScript API.

Wysyłanie do kierowców

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

  • Pakiet SDK do nawigacji: jeśli masz niestandardową aplikację dla kierowców, możesz zintegrować pakiet SDK do nawigacji na Androida lub iOS, aby w aplikacji wyświetlać wskazówki dojazdu krok po kroku. 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, w żądaniu ustaw wartość populateTransitionPolylines: true. Spowoduje to wygenerowanie routeToken dla każdego przejścia w odpowiedzi.
  • Fleet Engine: Aby korzystać z zaawansowanych funkcji zarządzania flotą, możesz zaimportować do Fleet Engine plan trasy wygenerowany przez interfejs API i monitorować realizację trasy w czasie rzeczywistym. Interfejs API udostępnia linię łamaną z planowaną trasą do oceny, a Fleet Engine łączy zaplanowaną kolejność wizyt z bieżącym śledzeniem pojazdu.