מחזור החיים של תוכנית מסלול

בדף הזה מתואר מחזור החיים של תוכנית מסלול באמצעות Route Optimization API, החל מזיהוי צורכי הניתוב ועד לתוכנית מסלול משולבת במערכת שלכם.

כשפועלים לפי השלבים של תוכנית המסלול, אפשר להשיג את היעדים הבאים:

  • מיפוי פעולות צי הרכב: תרגום צי הרכב הפיזי, האילוצים המורכבים והיעדים העסקיים לקוד ל-API.
  • אופטימיזציה של תוכניות המסלולים לעסק: איך לשפר את תוכנית המסלולים כדי להשיג את היעדים ולשפר את הפעילות היומיומית.
  • פריסה בסביבת הייצור: הטמעת תוכנית המסלולים בפעילות היומיומית.

התרשים הבא מציג את מחזור החיים של תוכנית מסלול.

תרשים זרימה של מחזור החיים של תוכנית מסלול, שמוסבר בטקסט שבהמשך

שלב ההטמעה של תוכנית המסלול מתרחש כשמשלבים את ה-API בפעם הראשונה או כשהדרישות העסקיות משתנות באופן משמעותי. הוא כולל את שלבים 1 עד 5.

שלב הפעולות היומיומיות הוא קל יותר, והשיפורים הם מינימליים. הוא כולל את שלבים 2 עד 4.

אלה השלבים במחזור החיים של מסלול:

  1. הגדרת היקף הבעיה: לפני שמתחילים להשתמש ב-API, חשוב לזהות ולארגן את היעדים, המשאבים, המשימות והמגבלות כדי לקבל תמונה מלאה של הפעולות.
  2. מיפוי הנתונים: מתרגמים את המציאות העסקית לפרמטרים של API כדי שתוכנית המסלול תשקף את אופן הפעולה הרצוי של צי הרכבים.
  3. יצירת בקשה וקבלת תוכנית מסלול: מזינים את הנתונים ב-API ומקבלים תוכנית מסלול שעברה אופטימיזציה.
  4. שיפור תוכנית המסלול: בודקים את תוכנית המסלול ומשפרים אותה על ידי התאמת האילוצים והיעדים כדי לוודא שהיא עונה על כל הצרכים.
  5. שילוב תוכנית המסלול: מחברים את תוכנית המסלול למערכות הקיימות כדי לספק ניווט שניתן לפעול לפיו.

הגדרת הבעיה

לפני שמשתמשים ב-API, צריך לארגן את פרטי הפעולות היומיומיות בקטגוריות נתונים ברורות. כך תוכלו להתחיל את תהליך ההטמעה כשאתם יודעים בבירור מהם המשאבים והמשימות הנוכחיים שלכם, מה מגביל אותם ומהם היעדים שאתם רוצים להשיג באמצעות ה-Fleet.

זיהוי המשאבים והמשימות

שלב חשוב בתכנון המסלול הוא זיהוי המשאבים והמשימות, שהם כלי הרכב והמשלוחים.

כלי הרכב המשלוחים
  • מספר: כמה כלי רכב יש לכם?
  • מיקומים: איפה כלי הרכב מתחילים ומסיימים?
  • זמן: מהן שעות העבודה של נהגי הרכבים?
  • קיבולת: מהן המגבלות של כלי הרכב?
  • עלויות: מהן העלויות של הפעלת צי הרכבים?
  • מיקומים: איפה נמצאות נקודות האיסוף והמסירה?
  • דרישות: מה המשקל או הגודל של החבילות?
  • אילוצים: האם יש חלונות זמן ספציפיים למשלוח?
  • זמן שירות: כמה זמן הנהג צריך כדי לחנות ולפרוק?
  • דרישות: האם המשלוח דורש סוג כלי רכב או נהג ספציפי?

זיהוי האילוצים

האילוצים הם המגבלות וההגבלות על אופן השימוש בכלי הרכב ועל אופן הטיפול במשלוחים. הם מכתיבים את רוב הפעולות שלכם, והם חיוניים ליצירת תוכנית מסלול אופטימלית.

באופן כללי, יש שני סוגים של אילוצים:

אילוצים קשיחים אילוצים גמישים
אלה מגבלות שאי אפשר לחרוג מהן. לדוגמה, משאית לא יכולה לשאת משקל שחורג מהקיבולת המקסימלית שלה, ונהג לא יכול לאסוף משלוח אחרי שהחנות נסגרה. אלה העדפות שאפשר להפר במידת הצורך, בדרך כלל בעלות של קנס. לדוגמה, יכול להיות שאתם מעדיפים להעמיס משאית רק עד 80% מהקיבולת שלה, או לבצע משלוח לפני שעת היעד, אבל אתם מוכנים לחרוג מהמגבלות האלה כדי לקבל מסלול טוב יותר.

אילוצים נפוצים כוללים:

  • מגבלות קיבולת: המשקל, הנפח או מספר הפריטים המקסימליים שכלי רכב יכול לשאת.
  • חלונות זמן: משבצות הזמן הספציפיות שבהן מיקום פתוח לביקור, או שעות המשמרת הספציפיות של נהג.
  • עלויות: העלות של הפעלת רכב או דילוג על משלוח. אחת מהמטרות העיקריות של ה-API היא ליצור תוכנית מסלול משתלמת.
  • הפסקות לנהגים: תקופות מנוחה לנהגים שבדרך כלל נדרשות על פי דיני העבודה אחרי מספר מסוים של שעות עבודה.

הגדרת היעדים העסקיים

אחרי שמגדירים את המשאבים, המשימות והמגבלות, צריך להגדיר אילו מדדים הכי חשובים לעסק. המטרות האלה קשורות לאילוצים, והן עוזרות לכם להחליט מה הכי חשוב כשמתכננים מסלול.

הנה כמה דוגמאות ליעדים עסקיים:

גודל הצי מרחק שעה עלות
האם אתם רוצים לצמצם את מספר הרכבים שבהם אתם משתמשים, או להשתמש בכל צי הרכבים כדי לסיים את יום העבודה מוקדם יותר? אתם רוצים את המסלול הכי קצר כדי לחסוך בדלק, או שאתם מעדיפים מסלול מהיר יותר שיכול להיות ארוך יותר בגלל שימוש בכבישים מהירים? האם אתם רוצים לצמצם את סך שעות העבודה, או לתת עדיפות להגעה בזמנים ספציפיים, מה שיכול להאריך את משך הזמן במסלול? האם אתם רוצים לצמצם את הוצאות התפעול, כמו שכר ודלק, או שאתם מוכנים לשלם יותר כדי לעמוד בלוחות זמנים נוקשים?

מיפוי הנתונים

אחרי שאוספים את הנתונים, ממפים אותם כך שיתאימו למאפיינים של ה-API. כך כלי האופטימיזציה מקבל את כל המידע שדרוש כדי להחזיר תוכנית מסלול שמביאה בחשבון את המציאות העסקית שלכם.

השתמשו בפרמטרים שבטבלאות הבאות כדי למפות את המשאבים, המשימות, האילוצים והיעדים שמיפיתם בקטע הגדרת הבעיה.

מיפוי משתנים

קונספט מהעולם האמיתי פרמטר API תיאור
נהג או רכב model.vehicles[] מייצג רכב אחד בצי שלכם.
מיקומי המחסנים vehicles[].startWaypoint
vehicles[].endWaypoint
המיקום שבו הרכב מתחיל ומסיים את המסלול שלו.
שעות הפעילות של העסק model.globalStartTime
model.globalEndTime
שעת ההתחלה המוקדמת ביותר ושעת הסיום המאוחרת ביותר של כל פעילות הצי.
משימה או חבילה model.shipments[] מייצג משימה. הערך יכול להיות pickup, delivery או שניהם.
מיקום המשימה pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
המיקום הגיאוגרפי שבו מתבצעת העבודה.
זמן השירות pickups[].duration
deliveries[].duration
הזמן שנדרש להשלמת המשימה במיקום (לדוגמה, פריקה), לא כולל זמן הנסיעה.

מיפוי אילוצים

מגבלה בעולם האמיתי פרמטר API תיאור
קיבולת הרכב vehicles[].loadLimits הגדרת מגבלה קשיחה או רכה לקיבולת הרכב. אם ה-loadDemand של משלוח חורג מהמגבלה שנותרה, הוא לא מוקצה.
גודל החבילה shipments[].loadDemands כמה מקום המשלוח תופס ברכב.
הגבלת רכב shipments[].allowedVehicleIndices מגבילה משלוח כך שרק כלי רכב או נהגים ספציפיים יכולים לאסוף או למסור אותו.
שעות פעילות shipments[].pickups[].timeWindows או shipments[].deliveries[].timeWindows מגדיר את השעות שבהן אפשר לבקר במיקום. אם רכב לא יכול להגיע בטווח הזמן הזה, המשלוח לא יתבצע.
מגבלת אורך המשמרת vehicles[].routeDurationLimit מגדירה מגבלה קשיחה או גמישה על משך הזמן שבו נהג ספציפי יכול לעבוד (לדוגמה, עד 8 שעות), בלי קשר לשעת הסיום הגלובלית.
הפסקות לנהגים vehicles[].breakRule אכיפה של כללי מנוחה ספציפיים, כמו הפסקות חובה אחרי מספר מסוים של שעות עבודה.
הגבלות בכבישים vehicles[].travelMode מציין את אמצעי התחבורה (לדוגמה, DRIVE או BICYCLE). הפרמטר הזה מגביל את המסלול לכבישים חוקיים וקובע את המהירויות שמשמשות לחישוב זמני ההגעה.

מיפוי יעדים

יעד בעולם האמיתי פרמטר API תיאור
צמצום גודל צי הרכבים vehicles[].fixedCost החלת עלות חד-פעמית על שימוש ברכב. עלות קבועה גבוהה מאלצת את המסלול לתת עדיפות לשימוש בפחות כלי רכב על פני הגדלת המרחק הכולל או זמן העבודה.
צמצום המרחק vehicles[].costPerKilometer הגדרה של עלות לכל קילומטר נסיעה. הוא נותן עדיפות למסלולים קצרים יותר כדי לחסוך בדלק ובבלאי.
צמצום משך הזמן הכולל vehicles[].costPerHour הגדרה של עלות לכל שעה שבה הרכב פעיל (כולל זמן נסיעה וזמן המתנה). העדיפות היא להשלמה מהירה יותר.
צמצום זמן הנסיעה vehicles[].costPerTraveledHour הגדרה של עלות ספציפית לזמן הנסיעה. כך אפשר להבחין בין המתנה בפקק (יקר) לבין המתנה בתחנה(יכול להיות זול יותר).
תעדוף משימות מסוימות shipments[].penaltyCost החלת עלות אם מדלגים על משלוח ספציפי. הגדרה של ערך גבוה מבטיחה שהמערכת תתעדף משימות קריטיות על פני משימות אופציונליות.

יצירת הבקשה וקבלת תשובה

כדי ליצור תוכנית מסלול באמצעות Route Optimization API, צריך לבצע את השלבים הבאים:

  1. הגדרת הסביבה: מגדירים את פרויקט הענן ב-Google Cloud, מפעילים את ה-API ומגדירים את האימות. הוראות מפורטות מופיעות במאמר תחילת העבודה. צריך לבצע את השלב הזה רק פעם אחת.
  2. שליחת הבקשה: יוצרים את גוף הבקשה באמצעות מיפוי הנתונים שהוגדר בקטע הקודם. למידע על נקודות קצה, כותרות ופורמט של בקשות, קראו את המאמר שליחת בקשת API.
  3. הבנת התשובה: אחרי שמקבלים תשובה מה-API, צריך להבין את תוכנית המסלול ואת המשמעות של כל פרמטר. פירוש התשובה

שיפור תכנון המסלול

תרגום של לוגיסטיקה בעולם האמיתי לעלויות ולאילוצים של API הוא משימה מורכבת. יכול להיות שתוכנית המסלול הראשונית לא תתאים ליעדים העסקיים או לציפיות של הנהגים. כדי לשפר את תוכנית המסלול, צריך לבדוק את המסלולים שהוחזרו ולשנות את הפרמטרים עד שמוצאים הגדרה שמתאימה ליעדים שלכם.

שינוי היעדים והאילוצים

אם תוכנית המסלול שנוצרה לא מתאימה לצרכים שלכם, אתם יכולים לשנות פרמטרים מסוימים כדי לקבל תוצאות שונות. החמרה או הקלה של הפרמטרים משנה את האופן שבו המערכת פותרת יעדים סותרים בתוכנית המסלול, והקלה של הפרמטרים היא דרך יעילה לגלות את הפרמטרים שגורמים לשגיאות בתוכניות המסלול.

בטבלה הבאה מפורטות בעיות נפוצות בניתוב והפרמטרים שאפשר לשנות כדי לפתור אותן.

תרחיש פרמטר התאמה תיאור
משלוח חשוב לא נכלל shipments[].penaltyCost צריך להגדיל את הערך שלו או להוסיף עלויות קנס למשלוחים אחרים אם המשלוח אופציונלי, מגדילים את עלות הקנס כדי לתת לו עדיפות. אם המשלוח הוא חובה (אין לו עלות קנס), מוסיפים עלויות קנס למשלוחים אחרים, פחות קריטיים. כך הן הופכות לאופציונליות, והזמן והקיבולת של הרכב מתפנים למשלוח החשוב.
המשלוח בוטל בגלל התזמון softStartTime / softEndTime הוספת חלונות זמן גמישים בחלונות זמן קשיחים, משימות שמאחרות אפילו בדקה אחת נמחקות. חלונות רכים מאפשרים לנהג להגיע קצת באיחור, אבל במקום להיכשל במשימה, הוא משלם "עלות".
המשלוח לא בוצע בגלל המשקל loadLimits[].softMaxLoad וגם costPerUnitAbove הוספת דרישות עומס קלות מאפשר לרכב לחרוג מעט מהקיבולת האידיאלית שלו (במחיר של קנס) במקום להשאיר חבילה מאחור.
המשלוח בוטל בגלל עומס על צי הרכבים model.vehicles[] או shipments[].timeWindows הוספת רכבים או הרחבת חלונות הזמן אם יש יותר מדי משלוחים לצי הרכבים הנוכחי, במיוחד בשעות השיא, כדאי להוסיף עוד רכבים או להרחיב את חלונות הזמנים למשלוחים כדי לפזר את עומס העבודה.
המסלולים ארוכים או לא יעילים vehicles[].costPerKilometer / costPerHour הוספת עלויות או הגדלת הערך שלהן ההגדרה הזו מציינת ל-API שהנסיעה יקרה, ומעודדת אותו להשמיט עצירות מבודדות ומרוחקות כדי ליצור מסלולים צפופים יותר לצי הרכבים.
המשמרות של הנהגים ארוכות מדי vehicles[].routeDurationLimit או model.vehicles[] הוספת מגבלות על משך הזמן, או הוספת רכבים ומגבלות אוכפת מגבלה קשיחה (לדוגמה, 8 שעות) על משך הזמן הכולל שהנהג מבלה בדרכים. הוספת כלי רכב בלבד לא תקצר את המסלולים, אלא אם תפעילו גם מגבלות על משך הזמן כדי לאלץ את פותר הבעיות לחלק את עומס העבודה בין צי הרכבים הגדול יותר.

עדכון של תוכנית מסלול

לפעמים צריך לעדכן תוכנית מסלול בלי לשנות את הבסיס, למשל להוסיף איסוף ללוח הזמנים של נהג פעיל. כדי לעשות את זה, משתמשים בפרמטרים של הזרקה, שמספקים ל-API נקודת התחלה שמבוססת על הפתרון הקודם, וכך מאפשרים לו לשנות את התוכנית הקיימת במקום לחשב תוכנית חדשה מאפס.

אלה הדרכים השונות לעדכן תוכנית מסלול באמצעות פרמטרים של הזרקה:

  • מעבירים את המסלולים מתשובה קודמת לשדה injectedFirstSolutionRoutes של הבקשה החדשה. כך אפשר להאיץ את החיפוש של האופטימיזציה, וזה שימושי לתכנון מחדש לפני שמתחילות הפעולות היומיות, כמו שילוב של משלוחים ברגע האחרון.
  • שולטים במידת השינוי באמצעות השדה injectedSolutionConstraint. האפשרות הזו שימושית כשהפעולות כבר מתבצעות, ומאפשרת לשמור על הרצף הנוכחי של הנהג או לתקן חלקים מהתוכנית שכבר בוצעו.
  • כדי לוודא שהמסלול המעודכן נשאר מוקצה לרכב הנכון, מגדירים את interpretInjectedSolutionsUsingLabels לערך true. האפשרות הזו שימושית כשעורכים ניסויים ומוסיפים או מסירים משלוחים וכלי רכב, כי היא מתאימה מסלולים באמצעות תוויות במקום אינדקסים. לשם כך, כל תוויות הרכבים והמשלוחים צריכות להיות ייחודיות.

שילוב של תוכנית המסלול

תוכנית המסלול הסופית היא אובייקט נתונים שמייצג ניהול אופטימלי של המשאבים והמשימות, תוך עמידה במגבלות וביעדים. כדי להשתמש בתוכנית המסלול הזו בפעולות היומיומיות, משלבים אותה במערכת. בדרך כלל, זה כולל הצגה חזותית של תוכנית המסלול למנהלי צי הרכב ושליחת הוראות מפורטות לנהגים.

הצגה חזותית

כדי לאפשר למנהלי ציים לאמת את תוכנית המסלול ולעקוב אחריה, אתם יכולים להציג אותה בדרכים הבאות:

כדי לאפשר למנהלי ציים לאמת את תוכנית המסלול ולעקוב אחריה, אפשר להציג אותה במפה במרכז הבקרה. בהתאם לשלב הפיתוח הנוכחי, אתם יכולים להציג את תוכנית המסלול בדרכים הבאות:

  • בדיקה בלי קוד: אתם יכולים להשתמש באפליקציית אופטימיזציית המסלולים בקוד פתוח כדי לראות איך ה-API מתרגם את הנתונים שלכם לנתיבים פיזיים במפה. אפליקציית האינטרנט הזו משמשת ככלי לבדיקה שמאפשר לכם לבנות תרחישים, לשנות פרמטרים של אילוצים ולעבד באופן חזותי את תוכניות המסלול שנוצרו לפני שאתם כותבים קוד.
  • הצגת סדר הביקורים: אתם יכולים להציג את רצף הביקורים כנקודות ממוספרות במפה כדי להעריך את תוכניות האופטימיזציה והשליחה במערכת שלכם. כדי לעשות את זה, מאתרים את המערך visits בכל מסלול בתגובה מה-API. הפריטים במערך הזה מסודרים בדיוק לפי הסדר שבו הנהג צריך לבצע אותם. אתם יכולים לעבור על הרשימה הזו, להשתמש ב-shipmentIndex כדי לאחזר את הקואורדינטות של המיקום של כל תחנה, ולהשתמש בספריית המיפוי כדי להציג סמנים ממוספרים במפה לפי הסדר שלהם ברשימה.
  • שרטוט המסלול הפיזי: אפשר לראות את המסלול המדויק שמתוכנן במפה כדי להבין למה כלי האופטימיזציה בחר ברצף ספציפי. הקו הפוליגוני הזה מייצג את המסלול המיועד לתכנון ולהערכה, ולא את המסלול בזמן אמת שבו הנהג נוסע. מגדירים את populatePolylines: true בבקשה כדי לקבל שדה encodedPolyline לכל מסלול, ומפענחים אותו באמצעות השיטה google.maps.geometry.encoding.decodePath() מ-Maps JavaScript API.

שליחה לנהגים

אתם יכולים לשלב מסלול מפורט באפליקציה לנהגים באמצעות Navigation SDK, או לספק קישורי עומק לאפליקציית מפות Google למשתמשים.

  • ‫Navigation SDK: אם יש לכם אפליקציה מותאמת אישית לנהגים, אתם יכולים לשלב את Navigation SDK ל-Android או ל-iOS כדי לקבל הנחיות מסלול מפורט באפליקציה. אתם יכולים לשלב את פרטי המשימה מהתגובה מה-API במערכת שלכם ולהשתמש ב-SDK לניווט. כדי להעביר את המסלולים מהתגובה מה-API ל-SDK, צריך להגדיר את populateTransitionPolylines: true בבקשה. הפעולה הזו יוצרת routeToken לכל מעבר בתגובה.
  • ‫Fleet Engine: לניהול מתקדם של צי הרכבים, אתם יכולים לייבא ל-Fleet Engine את תוכנית המסלול שנוצרה על ידי ה-API כדי לעקוב אחרי ביצוע המסלול בזמן אמת. ה-API מספק קו פוליגוני של המסלול המיועד להערכה, אבל Fleet Engine משלב את רצף הביקורים המתוכנן עם מעקב אחר הרכב בזמן אמת.