המטרה של Route Optimization API היא לתכנן מסלולים לצי של כלי רכב כדי להגיע לקבוצה של מיקומים. אובייקט OptimizeToursRequest מתאר את המאפיינים של כלי הרכב והמיקומים האלה, והוא המבנה העיקרי של גוף הבקשה של כל נקודת קצה.
מבנה הבסיס של אובייקט OptimizeToursRequest הוא כזה:
- השדה
modelמכיל הודעה מסוגShipmentModelעם שני שדות מפתח:
במסמך הזה מתוארים סוגי ההודעות הבאים:
-
ShipmentModel: מכיל את רשימת המשלוחים, כלי הרכב הזמינים ואובייקטים אחרים שמתארים את הקשרים ביניהם. -
Shipment: תיאור של המיקומים שבהם הרכב צריך לבקר. הם יכולים לייצג חבילות אמיתיות לאיסוף ולמשלוח או מקומות שבהם נהג הרכב מספק שירות. -
Vehicle: תיאור של אמצעי התחבורה בין מיקומי המשלוח. כל רכב מתאים לרכב אמיתי או לאדם שנע ברגל.
ShipmentModel
ShipmentModel מכיל את האלמנטים של בעיית אופטימיזציית המסלולים. הוא מכיל קבוצה של משלוחים שאפשר לבצע באמצעות קבוצה של כלי רכב, תוך התחשבות באילוצים וצמצום העלות הכוללת.
בטבלה הבאה מתוארים כמה מאפיינים רלוונטיים של ShipmentModel:
| מאפיינים | תיאור |
|---|---|
shipments וגם vehicles |
אובייקטים נדרשים שמכילים את הפרטים של משלוחים וכלי רכב. |
globalStartTime וגם globalEndTime |
מציין את ההתחלה והסיום של חלון הזמן שבו כל כלי הרכב צריכים להשלים את כל המשלוחים. המאפיינים האלה לא נדרשים, אבל מומלץ לכלול אותם כי האופטימיזציה פועלת בצורה הטובה ביותר כשמקפידים על מגבלות זמן. |
רשימה מלאה של המאפיינים ב-ShipmentModel זמינה במאמרי העזרה.
ShipmentModel דוגמה
בדוגמה הזו, יש לכם שירות של משמורת יומית לכלבים ואתם מתחילים ליצור את הבקשה. אתם מגדירים משלוחים וכלי רכב בשלב מאוחר יותר, אבל אתם רוצים להתחיל בהגדרת שעות הפעילות והעלות התפעולית לשעה.
בדוגמה הזו, ערכי המאפיין ShipmentModel בבקשה הם:
| נכס | ערך | תיאור |
|---|---|---|
globalStartTime |
2024-02-13T00:00:00.000Z | התאריך ושעת ההתחלה של שעות הפעילות. |
globalEndTime |
2024-02-14T06:00:00.000Z | תאריך ושעת הסיום של שעות הפעילות. |
בדוגמה הבאה מוצג קוד של הודעת ShipmentModel שמשלבת את הערכים של התרחיש לדוגמה.
{ "model": { "shipments": [ ... ], "vehicles": [ ... ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }
Shipment
סוג ההודעה Shipment מגדיר את מבנה המאפיינים של משלוח שאפשר לספק או של שירות שאפשר לבצע במסלול.
כפי שמוצג בתרשים:
- הודעה של
Shipmentמכילה את כל המידע על משלוח או שירות אמיתי. - כל ההודעות של
Shipmentמצוינות בשדהshipments. - השדה
shipmentsמכיל הודעה אחת או יותר מסוגShipment.
הודעה מסוג Shipment צריכה לכלול לפחות אובייקט pickups או deliveries.
ההגדרות של האובייקטים האלה הן:
-
pickupsמגדיר את נקודת האיסוף של משלוח. -
deliveriesמגדיר את מיקום המשלוח של חבילה. - ההודעות
pickupsו-deliveriesמכילות את סוג ההודעהVisitRequestשבו מוגדרים מיקומים ופרטים אחרים.
בטבלה הבאה מתוארים תרחישים שונים על סמך ההגדרה של pickups ו-deliveries בהודעה של Shipment.
| תרחיש | תיאור |
|---|---|
pickups בלבד |
ההנחה היא שאתם רק אוספים את המשלוח. |
deliveries בלבד |
מניחים שהמשלוח נטען מראש או שמספקים שירות. |
גם pickups וגם deliveries |
הרכב שהוקצה צריך להשלים קודם את האיסוף ואז את המסירה. רק הרכב שביצע את האיסוף יכול לבצע את המסירה. |
כמה pickups או deliveries |
אם במשלוח מופיעות כמה אפשרויות לpickups או לdeliveries, הכלי לאופטימיזציה בוחר אפשרות אחת לאיסוף ואפשרות אחת למשלוח לשימוש, על סמך מזעור העלויות ועמידה במגבלות. |
רשימה מלאה של המאפיינים ב-Shipment זמינה במאמרי העזרה.
Shipment דוגמה
בדוגמה הזו, יש לכם שירות של משמורת יומית לכלבים שבו אתם אוספים כלבים מהבית שלהם ומסיעים אותם למשמורת. אתם רוצים להגדיר את מיקום האיסוף של שני כלבים, ואת מיקום המסירה לעסק שלכם:
- הבית של הכלב הראשון נמצא במגדל קויט בסן פרנסיסקו. הקואורדינטות של המיקום הזה הן קו רוחב 37.8024 וקו אורך -122.4058.
- הבית השני של הכלב נמצא בפארק סאות' סנסט פלייגראונד בסן פרנסיסקו. הקואורדינטות של המיקום הזה הן קו רוחב 37.7359 וקו אורך -122.5011.
- הגן לכלבים שלך נמצא בפארק מישן דולורס בסן פרנסיסקו. הקואורדינטות של המיקום הזה הן קו רוחב 37.759773 וקו אורך -122.427063.
בדוגמת הקוד הבאה מוצגת הודעת Shipment, שבה האובייקט shipments מכיל שני סוגי הודעות Shipment עם קואורדינטות לדוגמה.
{ "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
סוג ההודעה Vehicle מגדיר את מבנה המאפיינים של רכב שיכול לבצע משלוח במסלול.
כפי שמוצג בתרשים:
- הודעת
Vehicleכוללת את כל המידע על רכב אמיתי. - כל ההודעות של
Vehicleמצוינות בשדהvehicles. - השדה
vehiclesמכיל כמה הודעותVehicle.
בטבלה הבאה מתוארים כמה מאפיינים רלוונטיים של Vehicle.
| מאפיינים | תיאור |
|---|---|
startLocation וגם endLocation |
נקודות ההתחלה והסיום של כלי הרכב, שהן חלק מהמסלול הסופי שעבר אופטימיזציה. אם לא תגדירו אותם, ברירת המחדל תהיה מיקומי איסוף המשלוח הראשון ומסירת המשלוח האחרון. |
costPerHour, costPerKilometer, costPerTraveledHour |
פרמטרים של עלויות שספציפיים לרכב. מומלץ לכלול לפחות פרמטר עלות אחד בבקשה ל-API כדי שה-API יחזיר מסלול אופטימלי. מידע נוסף על עלויות זמין בקטע מודל עלויות. |
startTimeWindows וגם endTimeWindows |
הגדרת תקופות הזמן שבהן רכב יכול לפעול במסלול. התאריכים האלה צריכים להיות בטווח של חלון הזמן globalStartTime עד globalEndTime שהוגדר ב-ShipmentModel. המאפיין הזה לא נדרש, אבל מומלץ לכלול אותו כי האופטימיזציה פועלת בצורה הטובה ביותר כשהיא מתבצעת בהתאם למגבלות זמן. |
Vehicle דוגמה
בדוגמה הזו, יש לכם שירות לטיפול בכלבים ואתם רוצים להגדיר את המיקום של הרכב שלכם בתחילת היום ובסופו, ואת כמות הדלק שהוא צורך. אין צורך לציין את שעות הפעילות של הרכב כי הן זהות לשעות שהגדרתם במאפיינים globalStartTime ו-globalEndTime באובייקט ShipmentModel.
בדוגמה הזו, ערכי המאפיין Vehicle בבקשה הם:
| נכס | ערך | תיאור |
|---|---|---|
startLocation |
latitude: 37.759773, longitude: -122.427063 |
קואורדינטות ההתחלה של המסלול לרכב. המיקומים האלה תואמים למיקום של המעון לכלבים, שנמצא בפארק מישן דולורס בסן פרנסיסקו. |
endLocation |
latitude: 37.759773, longitude: -122.427063 |
קואורדינטות הסיום של המסלול לרכב. המיקומים האלה תואמים למיקום של המעון לכלבים, שנמצא בפארק מישן דולורס בסן פרנסיסקו. |
costPerHour |
27 | כמה אתם משלמים לנהג על נהיגה ברכב שלכם במעון לכלבים. אתם משלמים לנהג 27 דולר לשעה. |
בדוגמה הבאה מוצג קוד של הודעת Vehicle שמשלבת את הערכים של התרחיש לדוגמה.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
רשימה מלאה של המאפיינים ב-Vehicle זמינה במאמרי העזרה.
דוגמה לבקשה מלאה
בדוגמת הקוד הבאה מוצגת בקשה מלאה, שמשלבת את הדוגמאות ShipmentModel, Shipment ו-Vehicle שמופיעות במסמך הזה.
{ "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" } }