- ייצוג ב-JSON
- משלוח
- VisitRequest
- LatLng
- Waypoint
- מיקום
- TimeWindow
- Vehicle
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interval
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- יעד
- סוג
- DurationDistanceMatrix
- Row
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
מודל משלוח מכיל קבוצה של משלוחים שצריך לבצע באמצעות קבוצה של כלי רכב, תוך מזעור העלות הכוללת, שהיא סכום העלויות הבאות:
- העלות של ניתוב כלי הרכב (סכום העלות לכל הזמן הכולל, העלות לזמן הנסיעה והעלות הקבועה של כל כלי הרכב).
- הקנסות על משלוחים שלא בוצעו.
- העלות של משך המשלוח הכולל
| ייצוג ב-JSON |
|---|
{ "shipments": [ { object ( |
| שדות | |
|---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצה של כלי רכב שאפשר להשתמש בהם לביצוע ביקורים. |
objectives[] |
קבוצת היעדים של המודל הזה, שיהפכו לעלויות. אם המודל לא ריק, הוא צריך להיות ללא עלות. כדי לקבל את הבקשה ששונתה, צריך להשתמש ב- ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
globalStartTime |
שעת ההתחלה ושעת הסיום הגלובליות של המודל: אי אפשר להחשיב שעות מחוץ לטווח הזה כתקפות. טווח הזמן של המודל צריך להיות קצר משנה, כלומר ההפרש בין כשמשתמשים בשדות הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
globalEndTime |
אם לא מוגדר ערך, המערכת משתמשת בערך ברירת המחדל: 00:00:00 UTC, 1 בינואר 1971 (כלומר, שניות: 31536000, ננו-שניות: 0). הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
globalDurationCostPerHour |
'המשך הכולל' של התוכנית הוא ההפרש בין שעת ההתחלה המוקדמת ביותר לבין שעת הסיום המאוחרת ביותר של כל כלי הרכב. המשתמשים יכולים להקצות עלות לשעה לכמות הזו כדי לנסות לבצע אופטימיזציה להשלמת העבודה הכי מוקדם שאפשר, למשל. העלות הזו צריכה להיות באותה יחידה כמו |
durationDistanceMatrices[] |
מציין מטריצות של משך ומרחק שמשמשות במודל. אם השדה הזה ריק, המערכת תשתמש במפות Google או במרחקים גאודזיים במקום זאת, בהתאם לערך של השדה דוגמאות לשימוש:
|
durationDistanceMatrixSrcTags[] |
תגים שמגדירים את המקורות של מטריצות משך הזמן והמרחק; התגים תואמים ל- |
durationDistanceMatrixDstTags[] |
תגים שמגדירים את יעדי מטריצות משך הזמן והמרחק; התגים תואמים ל- |
transitionAttributes[] |
מאפייני מעבר נוספו למודל. |
shipmentTypeIncompatibilities[] |
קבוצות של ערכי shipment_type לא תואמים (ראו |
shipmentTypeRequirements[] |
קבוצות של דרישות |
precedenceRules[] |
קבוצה של כללי קדימות שצריך לאכוף במודל. חשוב: שימוש בכללי עדיפות מגביל את גודל הבעיה שאפשר לבצע אופטימיזציה שלה. יכול להיות שבקשות שמשתמשות בכללי עדיפות שכוללים משלוחים רבים יידחו. |
maxActiveVehicles |
מגביל את המספר המקסימלי של כלי רכב פעילים. רכב נחשב פעיל אם הוא מבצע לפחות משלוח אחד במסלול שלו. אפשר להשתמש בזה כדי להגביל את מספר המסלולים במקרים שבהם יש פחות נהגים מכלי רכב, וצי כלי הרכב הוא הטרוגני. לאחר מכן, המערכת תבחר את קבוצת המשנה הטובה ביותר של כלי רכב לשימוש. חייב להיות חיובי. |
משלוח
משלוח של פריט יחיד, מאחת מנקודות האיסוף שלו לאחת מנקודות המסירה שלו. כדי שהמשלוח ייחשב כמשלוח שבוצע, רכב ייחודי צריך לבקר באחת מנקודות האיסוף שלו (ולהפחית את הקיבולת הפנויה שלו בהתאם), ואז לבקר באחת מנקודות המסירה שלו (ולהגדיל את הקיבולת הפנויה שלו בהתאם).
| ייצוג ב-JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| שדות | |
|---|---|
displayName |
השם שהמשתמש נתן למשלוח. הוא יכול לכלול עד 63 תווים, ואפשר להשתמש בתווים בתקן UTF-8. |
pickups[] |
קבוצת חלופות לאיסוף שמשויכות למשלוח. אם לא מציינים מיקום, הרכב צריך להגיע רק למיקום שמתאים למשלוחים. |
deliveries[] |
קבוצה של חלופות משלוח שמשויכות למשלוח. אם לא מציינים את המיקום, הרכב צריך להגיע רק למיקום שמתאים לנקודות האיסוף. |
loadDemands |
דרישות העמסה של המשלוח (לדוגמה, משקל, נפח, מספר משטחים וכו'). המפתחות במיפוי צריכים להיות מזהים שמתארים את סוג העומס התואם, ורצוי לכלול גם את היחידות. לדוגמה: weight_kg, volume_gallons, pallet_count וכו'. אם מפתח מסוים לא מופיע במיפוי, המטען התואם נחשב כ-null. |
allowedVehicleIndices[] |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם לא מציינים ערך, כל כלי הרכב יכולים לבצע את הפעולה. הרכבים מופיעים לפי האינדקס שלהם ברשימה |
costsPerVehicle[] |
המאפיין הזה מציין את העלות שנוספת כשמשלוח מסוים מועבר על ידי כל רכב. אם מציינים את המאפיין הזה, צריך להזין בו את אחד מהערכים הבאים:
העלויות האלה צריכות להיות באותה יחידה כמו |
costsPerVehicleIndices[] |
מספרי האינדקס של כלי הרכב שעליהם חל |
pickupToDeliveryAbsoluteDetourLimit |
מציין את זמן העיקוף המקסימלי בהשוואה למסלול הקצר ביותר מנקודת האיסוף לנקודת המסירה. אם מציינים את המאפיין הזה, הערך שלו חייב להיות לא שלילי, והמשלוח חייב לכלול לפחות איסוף ומסירה. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי להגיע ישירות מנקודת האיסוף החלופית שנבחרה לנקודת המסירה החלופית שנבחרה. ההגדרה אם מציינים גם מגבלות יחסיות וגם מגבלות מוחלטות לאותו משלוח, המגבלה המחמירה יותר תשמש לכל צמד אפשרי של איסוף/מסירה. החל מ-2017/10, יש תמיכה בדרכי עקיפה רק אם משך הנסיעה לא תלוי ברכב. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
pickupToDeliveryTimeLimit |
מציין את משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המסירה של משלוח. אם מציינים את המאפיין הזה, הערך שלו חייב להיות לא שלילי, והמשלוח חייב לכלול לפחות איסוף ומסירה. החישוב לא תלוי בחלופות שנבחרו לאיסוף ולמשלוח, וגם לא במהירות הנסיעה של הרכב. אפשר לציין את זה לצד אילוצים של מעקפים מקסימליים: הפתרון יתחשב בשני המפרטים. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
shipmentType |
מחרוזת לא ריקה שמציינת את ה'סוג' של המשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין שונה מ |
label |
תווית למשלוח הזה. התווית הזו מדווחת בתגובה בשדה |
ignore |
אם הערך הוא True, המערכת מדלגת על המשלוח הזה, אבל לא מחילה עליו התעלמות ממשלוח גורמת לשגיאת אימות אם יש במודל מותר להתעלם ממשלוח שמתבצע ב- |
penaltyCost |
אם המשלוח לא הושלם, הקנס הזה מתווסף לעלות הכוללת של המסלולים. משלוח נחשב להשלמה אם בוצע איסוף או מסירה של אחת מהחלופות שלו. העלות יכולה להיות מבוטאת באותה יחידה שבה משתמשים בכל שאר השדות שקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס הזה, הוא נחשב לאינסופי, כלומר המשלוח חייב להסתיים. |
pickupToDeliveryRelativeDetourLimit |
מציין את זמן העיקוף היחסי המקסימלי בהשוואה למסלול הקצר ביותר מנקודת האיסוף לנקודת המסירה. אם מציינים את המאפיין הזה, הערך שלו חייב להיות לא שלילי, והמשלוח חייב לכלול לפחות איסוף ומסירה. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי להגיע ישירות מנקודת האיסוף החלופית שנבחרה לנקודת המסירה החלופית שנבחרה. ההגדרה אם מציינים גם מגבלות יחסיות וגם מגבלות מוחלטות לאותו משלוח, המגבלה המחמירה יותר תשמש לכל צמד אפשרי של איסוף/מסירה. החל מ-2017/10, יש תמיכה בדרכי עקיפה רק אם משך הנסיעה לא תלוי ברכב. |
VisitRequest
בקשה לביקור שאפשר לבצע באמצעות רכב: יש לה מיקום גיאוגרפי (או שניים, ראו בהמשך), שעות פתיחה וסגירה שמיוצגות על ידי חלונות זמן, ומשך זמן השירות (הזמן שהרכב מבלה במקום אחרי שהוא מגיע לאסוף או לפרוק סחורה).
| ייצוג ב-JSON |
|---|
{ "arrivalLocation": { object ( |
| שדות | |
|---|---|
arrivalLocation |
המיקום הגיאוגרפי שאליו מגיע הרכב כשמבצעים את הפעולה |
arrivalWaypoint |
ציון הדרך שאליו הרכב מגיע כשמבצעים את |
departureLocation |
המיקום הגיאוגרפי שממנו הרכב יוצא אחרי השלמת הפעולה הזו |
departureWaypoint |
נקודת הציון שבה הרכב יוצא אחרי השלמת |
tags[] |
מציין את התגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
timeWindows[] |
חלונות זמן שמגבילים את זמן ההגעה לביקור. שימו לב: יכול להיות שכלי רכב יצא מחוץ לחלון הזמן של ההגעה, כלומר, לא צריך שזמן ההגעה + משך הנסיעה יהיו בתוך חלון זמן. אם הרכב מגיע לפני אם לא מצוין חלונות הזמן צריכים להיות נפרדים, כלומר אסור שחלון זמן אחד יחפוף לחלון זמן אחר או יהיה צמוד אליו, והם צריכים להיות בסדר עולה. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שהרכב שהה במקום בין ההגעה ליציאה (הזמן הזה יתווסף לזמן ההמתנה האפשרי, ראו משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
cost |
העלות של הטיפול בבקשת הביקור הזו במסלול של רכב. אפשר להשתמש במאפיין הזה כדי לשלם עלויות שונות עבור כל חלופה לאיסוף או למשלוח של חבילה. העלות הזו צריכה להיות באותה יחידה כמו |
loadDemands |
טעינת דרישות הביקור הזה. השדה הזה זהה לשדה |
visitTypes[] |
מציין את סוגי הביקורים. יכול להיות שהמאפיין הזה ישמש להקצאת זמן נוסף שנדרש לרכב כדי להשלים את הביקור הזה (ראו כל סוג יכול להופיע רק פעם אחת. |
label |
מציינת תווית ל- |
avoidUTurns |
מציין אם צריך להימנע מביצוע פניות פרסה במסלולי נסיעה במיקום הזה. הימנעות מפרסה היא כמיטב יכולתנו, ואין הבטחה להימנעות מלאה. זוהי תכונה ניסיונית וההתנהגות שלה עשויה להשתנות. ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
LatLng
אובייקט שמייצג זוג של קווי רוחב ואורך. הערך הזה מבוטא כזוג מספרים ממשיים שמייצגים מעלות של קו רוחב ומעלות של קו אורך. אלא אם צוין אחרת, האובייקט הזה צריך להיות תואם ל תקן WGS84. הערכים צריכים להיות בטווחים מנורמלים.
| ייצוג ב-JSON |
|---|
{ "latitude": number, "longitude": number } |
| שדות | |
|---|---|
latitude |
קו הרוחב במעלות. הערך חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הערך חייב להיות בטווח [-180.0, +180.0]. |
נקודת ציון
מכיל ציון דרך. נקודות ציון מציינות את נקודות ההגעה והיציאה של בקשות לביקור, ואת נקודות ההתחלה והסיום של כלי רכב.
| ייצוג ב-JSON |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| שדות | |
|---|---|
sideOfRoad |
אופציונלי. המאפיין הזה מציין שהמיקום של נקודת הציון הזו מיועד להעדפה של עצירת הרכב בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו המיקום מוטה ממרכז הכביש. האפשרות הזו לא פועלת במצב הנסיעה 'הליכה'. |
vehicleStopover |
מציין שציון הדרך מיועד לכלי רכב לעצור בו, במטרה לאסוף או להוריד. האפשרות הזו פועלת רק במצב הנסיעה 'DRIVING' (נהיגה), וכשהערך של locationType הוא 'location' (מיקום). ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
שדה איחוד location_type. דרכים שונות לייצוג מיקום. הערך location_type יכול להיות רק אחד מהבאים: |
|
location |
נקודה שצוינה באמצעות קואורדינטות גיאוגרפיות, כולל כיוון אופציונלי. |
placeId |
מזהה המקום של נקודת העניין שמשויך לציון הדרך. כשמשתמשים במזהה מקום כדי לציין את מיקום ההגעה או היציאה של VisitRequest, צריך להשתמש במזהה מקום ספציפי מספיק כדי לקבוע מיקום LatLng לניווט למקום. לדוגמה, מזהה מקום שמייצג בניין מתאים, אבל מזהה מקום שמייצג כביש לא מומלץ. |
מיקום
האובייקט הזה מכיל מיקום (נקודה גיאוגרפית וכיוון אופציונלי).
| ייצוג ב-JSON |
|---|
{
"latLng": {
object ( |
| שדות | |
|---|---|
latLng |
הקואורדינטות הגיאוגרפיות של נקודת הציון. |
heading |
הכיוון במצפן שמשויך לכיוון זרימת התנועה. הערך הזה משמש כדי לציין את הצד של הכביש שבו צריך להשתמש לאיסוף ולהורדה. ערכי הכיוון ביחס לצפון יכולים להיות בין 0 ל-360, כאשר 0 מציין כיוון צפונה, 90 מציין כיוון מזרחה וכן הלאה. |
TimeWindow
חלונות זמן מגבילים את הזמן של אירוע מסוים, כמו זמן ההגעה לביקור או שעת ההתחלה ושעת הסיום של נסיעה ברכב.
הגבולות של חלון הזמן הקשיח, startTime ו-endTime, מגדירים את השעה המוקדמת ביותר והשעה המאוחרת ביותר של האירוע, כך ש-startTime <= event_time <=
endTime. הגבול התחתון של חלון הזמן הרך, softStartTime, מבטא העדפה שהאירוע יתרחש בזמן softStartTime או אחריו, על ידי חיוב בעלות שפרופורציונלית למשך הזמן שחלף לפני softStartTime שבו האירוע התרחש. הגבול העליון של חלון הזמן הרך, softEndTime, מבטא העדפה שהאירוע יתרחש במועד softEndTime או לפניו, על ידי חיוב בעלות שפרופורציונלית לפרק הזמן שחלף בין softEndTime לבין מועד האירוע. הערכים של startTime, endTime, softStartTime ו-softEndTime צריכים להיות במסגרת מגבלות הזמן הגלובליות (ראו ShipmentModel.global_start_time ו-ShipmentModel.global_end_time) ולעמוד בדרישות הבאות:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| ייצוג ב-JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| שדות | |
|---|---|
startTime |
שעת ההתחלה של חלון הזמן הקבוע. אם לא מציינים ערך, ברירת המחדל היא הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
endTime |
שעת הסיום של חלון הזמן הקשיח. אם לא מציינים ערך, ברירת המחדל היא הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
softStartTime |
שעת ההתחלה של חלון הזמן. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
softEndTime |
שעת הסיום הרכה של חלון הזמן. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
costPerHourBeforeSoftStartTime |
עלות לשעה שנוספת לעלויות אחרות במודל אם האירוע מתרחש לפני softStartTime, והיא מחושבת כך: העלות הזו חייבת להיות חיובית, ואפשר להגדיר את השדה רק אם השדה softStartTime הוגדר. |
costPerHourAfterSoftEndTime |
עלות לשעה שנוספת לעלויות אחרות במודל אם האירוע מתרחש אחרי העלות הזו חייבת להיות חיובית, ואפשר להגדיר את השדה רק אם הוגדר השדה |
כלי רכב
מודלים של רכב בבעיה במשלוח. פתרון בעיה במשלוח ייצור מסלול לרכב הזה שמתחיל ב-startLocation ומסתיים ב-endLocation. מסלול הוא רצף של ביקורים (ראו ShipmentRoute).
| ייצוג ב-JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| שדות | |
|---|---|
displayName |
השם לתצוגה שהמשתמש נתן לרכב. הוא יכול לכלול עד 63 תווים, ואפשר להשתמש בתווים בתקן UTF-8. |
travelMode |
אמצעי התחבורה שמשפיע על הכבישים שבהם אפשר לנסוע עם הרכב ועל המהירות שלו. מידע נוסף מופיע במאמר |
routeModifiers |
קבוצת תנאים שצריך לעמוד בהם, שמשפיעים על האופן שבו מחושבים המסלולים עבור הרכב הנתון. |
startLocation |
המיקום הגיאוגרפי שבו הרכב מתחיל את הנסיעה לפני איסוף משלוחים. אם לא מציינים, הרכב מתחיל בנקודת האיסוף הראשונה שלו. אם במודל המשלוח יש מטריצות של משך ומרחק, אסור לציין את המאפיין |
startWaypoint |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מתחיל את הנסיעה לפני איסוף משלוחים. אם לא מציינים את |
endLocation |
המיקום הגיאוגרפי שבו הרכב מסיים את הנסיעה אחרי שהוא משלים את |
endWaypoint |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מסיים את הנסיעה אחרי שהוא משלים את |
startTags[] |
מציין תגים שמצורפים לתחילת המסלול של הרכב. אסור להשתמש במחרוזות ריקות או כפולות. |
endTags[] |
מציין תגים שמצורפים לסוף המסלול של הרכב. אסור להשתמש במחרוזות ריקות או כפולות. |
startTimeWindows[] |
חלונות זמן שבהם הרכב יכול לצאת מנקודת המוצא שלו. הם צריכים להיות במסגרת מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר צריכים להיות נפרדים, כלומר, אף חלון זמן לא יכול לחפוף לחלון זמן אחר או להיות סמוך לו, והם צריכים להיות בסדר כרונולוגי. אפשר להגדיר את |
endTimeWindows[] |
חלונות זמן שבהם הרכב עשוי להגיע למיקום הסופי שלו. הם צריכים להיות במסגרת מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר צריכים להיות נפרדים, כלומר, אף חלון זמן לא יכול לחפוף לחלון זמן אחר או להיות סמוך לו, והם צריכים להיות בסדר כרונולוגי. אפשר להגדיר את |
unloadingPolicy |
מדיניות הפריקה נאכפת ברכב. |
loadLimits |
קיבולות הרכב (משקל, נפח, מספר משטחים לדוגמה). המפתחות במפה הם המזהים של סוג הטעינה, בהתאם למפתחות של השדה |
costPerHour |
עלויות הרכב: כל העלויות מצטברות וצריכות להיות באותה יחידה כמו העלות לשעה של מסלול הרכב. העלות הזו מתווספת לזמן הכולל של המסלול, והיא כוללת את זמן הנסיעה, זמן ההמתנה וזמן הביקור. שימוש ב- |
costPerTraveledHour |
העלות לכל שעת נסיעה במסלול של הרכב. העלות הזו רלוונטית רק לזמן הנסיעה במסלול (כלומר, לזמן שמדווח ב |
costPerKilometer |
העלות לקילומטר של מסלול הרכב. העלות הזו חלה על המרחק שמדווח ב- |
fixedCost |
עלות קבועה שחלה אם הרכב הזה משמש לטיפול במשלוח. |
usedIfRouteIsEmpty |
השדה הזה רלוונטי רק לרכבים שהמסלול שלהם לא משרת משלוחים. השדה מציין אם הרכב צריך להיחשב כמשומש במקרה הזה או לא. אם הערך הוא true, הרכב נוסע ממיקום ההתחלה למיקום הסיום שלו גם אם הוא לא משמש למשלוחים, והעלויות של הזמן והמרחק שנובעות מהנסיעה ממיקום ההתחלה למיקום הסיום נלקחות בחשבון. אחרת, הרכב לא נוסע ממיקום ההתחלה למיקום הסיום, ולא מתוכננים לרכב הזה |
routeDurationLimit |
המגבלה חלה על משך הזמן הכולל של המסלול של הרכב. ב |
travelDurationLimit |
ההגבלה חלה על משך הנסיעה במסלול של הרכב. ב |
routeDistanceLimit |
ההגבלה חלה על המרחק הכולל של מסלול הנסיעה של הרכב. במסלול נתון |
extraVisitDurationForVisitType |
מציין מפה ממחרוזות visitTypes למשכי זמן. משך הזמן הוא בנוסף לזמן שצוין ב אם בקשת הביקור כוללת כמה סוגים, יתווסף למפה משך זמן לכל סוג. |
breakRule |
מתאר את לוח הזמנים של ההפסקות שיוחלו על הרכב הזה. אם השדה ריק, לא יתוזמנו הפסקות לרכב הזה. |
label |
מציין תווית לרכב הזה. התווית הזו מדווחת בתשובה כ- |
ignore |
אם הערך הוא True, הערך של אם משלוח מבוצע על ידי כלי רכב שהמערכת מתעלמת ממנו ב- אם משלוח מבוצע על ידי רכב שהמערכת מתעלמת ממנו ב- |
travelDurationMultiple |
מציין גורם כפלי שניתן להשתמש בו כדי להגדיל או להקטין את זמני הנסיעה של הרכב הזה. לדוגמה, אם מגדירים את הערך הזה ל-2.0, הרכב הזה איטי יותר וזמני הנסיעה שלו ארוכים פי שניים מאלה של רכבים רגילים. הכפולה הזו לא משפיעה על משך הביקור. אם מציינים את אזהרה: זמני הנסיעה יעוגלו לשנייה הקרובה ביותר אחרי החלת הכפולה הזו, אבל לפני ביצוע פעולות מספריות כלשהן. לכן, כפולה קטנה עלולה לגרום לאובדן דיוק. מידע נוסף מופיע בהמשך המאמר |
TravelMode
אמצעי תחבורה שמתאימים לכלי רכב.
אלה צריכים להיות חלק ממצבי הנסיעה ב-Routes API של Google Maps Platform. מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
הערה: WALKING המסלולים נמצאים בגרסת בטא, ולפעמים יכול להיות שחסרים בהם מדרכות ברורות או נתיבים להולכי רגל. חובה להציג את האזהרה הזו למשתמשים בכל מסלולי ההליכה שמוצגים באפליקציה.
| טיפוסים בני מנייה (enum) | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
אמצעי תחבורה לא מוגדר, שווה ערך ל-DRIVING. |
DRIVING |
אמצעי התחבורה שמתאים להוראות נסיעה (מכונית, ...). |
WALKING |
אמצעי התחבורה שמתאים להוראות הגעה בהליכה. |
RouteModifiers
המאפיין הזה כולל קבוצה של תנאים אופציונליים שצריך לעמוד בהם כשמחשבים מסלולים לרכבים. זה דומה ל-RouteModifiers ב-API המועדף של מסלולים ב-Google Maps Platform. מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| ייצוג ב-JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| שדות | |
|---|---|
avoidTolls |
ההגדרה קובעת אם להימנע מכבישי אגרה במקרים שבהם זה הגיוני. תינתן עדיפות למסלולים שלא כוללים כבישי אגרה. ההגדרה רלוונטית רק למצבי נסיעה ממונעים. |
avoidHighways |
מציין אם יש להימנע מכבישים מהירים במקרים שבהם זה הגיוני. תינתן עדיפות למסלולים שלא כוללים כבישים מהירים. ההגדרה רלוונטית רק למצבי נסיעה ממונעים. |
avoidFerries |
ההגדרה הזו קובעת אם המערכת תנסה להימנע ממעבורות כשזה אפשרי. תינתן עדיפות למסלולים שלא כוללים נסיעה במעבורות. ההגדרה רלוונטית רק למצבי נסיעה ממונעים. |
avoidIndoor |
אופציונלי. ההגדרה קובעת אם להימנע מניווט בתוך מבנים כשזה אפשרי. תינתן עדיפות למסלולים שלא כוללים ניווט בתוך מבנים. ההגדרה חלה רק על מצב הנסיעה |
UnloadingPolicy
מדיניות בנושא פריקת רכב. ההגדרה הזו חלה רק על משלוחים שכוללים גם איסוף וגם מסירה.
משלוחים אחרים יכולים להתבצע בכל מקום במסלול, ללא קשר ל-unloadingPolicy.
| טיפוסים בני מנייה (enum) | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
מדיניות פריקה לא מוגדרת; המשלוחים צריכים להתבצע רק אחרי האיסופים התואמים. |
LAST_IN_FIRST_OUT |
המסירות צריכות להתבצע בסדר הפוך לסדר האיסופים |
FIRST_IN_FIRST_OUT |
המשלוחים חייבים להתבצע באותו סדר שבו מתבצעים האיסופים |
LoadLimit
המאפיין מגדיר מגבלת משקל שחלה על כלי רכב, למשל: "המשאית הזו יכולה לשאת משקל של עד 3,500 ק"ג". loadLimits.
| ייצוג ב-JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| שדות | |
|---|---|
softMaxLoad |
מגבלה רכה על הטעינה. |
costPerUnitAboveSoftMax |
אם העומס יעלה על |
startLoadInterval |
מרווח הטעינה המקובל של הרכב בתחילת המסלול. |
endLoadInterval |
מרווח העומס המקובל של הרכב בסוף המסלול. |
maxLoad |
כמות העומס המקסימלית שניתן לקבל. |
costPerKilometer |
העלות של העברת יחידת עומס אחת למרחק של קילומטר אחד ברכב הזה. אפשר להשתמש בערך הזה כפרוקסי לצריכת דלק: אם העומס הוא משקל (בניוטון), אז עומס כפול קילומטר הוא ממד של אנרגיה. בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
costPerTraveledHour |
העלות של נסיעה עם יחידת מטען למשך שעה ברכב הזה. בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
מרווח
מרווח של סכומים קבילים לטעינה.
| ייצוג ב-JSON |
|---|
{ "min": string, "max": string } |
| שדות | |
|---|---|
min |
עומס מינימלי קביל. הערך חייב להיות ≥ 0. אם מציינים את שניהם, הערך של |
max |
עומס מקסימלי קביל. הערך חייב להיות ≥ 0. אם לא מציינים ערך, אין הגבלה על העומס המקסימלי בהודעה הזו. אם מציינים את שניהם, הערך של |
LoadCost
העלות של העברת יחידת עומס אחת במהלך Transition. עבור טעינה נתונה, העלות היא סכום של שני חלקים:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
במקרה כזה, הפתרונות מעדיפים לספק קודם את הביקוש הגבוה, או לחלופין לאסוף את הביקוש הגבוה בסוף. לדוגמה, אם לרכב יש
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
והמסלול שלה הוא התחלה,איסוף,איסוף,מסירה,מסירה,סיום עם מעברים:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
אז העלות שנובעת מ-LoadCost היא (cost_below * load_below * kilometers + cost_above * load_above * kms)
- מעבר 0: 0.0
- מעבר 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- מעבר 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 4: 0.0
לכן, LoadCost במסלול הוא 120.0.
עם זאת, אם המסלול הוא התחלה,איסוף,מסירה,איסוף,מסירה,סיום עם מעברים:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
אז העלות שנוצרה על ידי LoadCost היא
- מעבר 0: 0.0
- מעבר 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 2: 0.0
- מעבר 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 4: 0.0
במקרה הזה, הערך של LoadCost במסלול הוא 40.0.
LoadCost מייקר את הפתרונות עם מעברים עמוסים.
בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| ייצוג ב-JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| שדות | |
|---|---|
loadThreshold |
הכמות המינימלית של העומס שמעליה העלות של העברת יחידת עומס משתנה מ-costPerUnitBelowThreshold ל-costPerUnitAboveThreshold. הערך חייב להיות גדול מ-0 או שווה לו. |
costPerUnitBelowThreshold |
העלות של העברת יחידת עומס, לכל יחידה בין 0 לבין ערך הסף. הערך חייב להיות סופי וגדול או שווה ל-0. |
costPerUnitAboveThreshold |
העלות של העברת יחידת עומס, לכל יחידה מעל הסף. במקרה המיוחד שבו ערך הסף = 0, זוהי עלות קבועה ליחידה. הערך חייב להיות סופי וגדול או שווה ל-0. |
DurationLimit
מגבלה שמגדירה את משך הזמן המקסימלי של מסלול הרכב. היא יכולה להיות קשה או רכה.
כשמגדירים שדה של מגבלה רכה, צריך להגדיר גם את סף המקסימום הרך וגם את העלות שמשויכת אליו.
| ייצוג ב-JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| שדות | |
|---|---|
maxDuration |
מגבלה קשיחה שמגבילה את משך הזמן ל-maxDuration לכל היותר. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
softMaxDuration |
מגבלה רכה שלא אוכפת מגבלת משך מקסימלית, אבל אם היא מופרת, המסלול כרוך בעלות. העלות הזו מצטרפת לעלויות אחרות שמוגדרות במודל, באותה יחידה. אם המאפיין מוגדר, הערך שלו משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
quadraticSoftMaxDuration |
מגבלה רכה שלא אוכפת מגבלת משך מקסימלית, אבל אם היא מופרת, המסלול כרוך בעלות, שהיא ריבועית ביחס למשך. העלות הזו מצטרפת לעלויות אחרות שמוגדרות במודל, באותה יחידה. אם השדה
משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
costPerHourAfterSoftMax |
העלות לשעה שתיגרם אם יחול חריגה מסף העלות לא יכולה להיות שלילית. |
costPerSquareHourAfterQuadraticSoftMax |
העלות לכל שעה בריבוע שנוצרה אם חרגתם מסף העלות הנוספת היא 0 אם משך הזמן קצר מסף החיוב, אחרת העלות תלויה במשך הזמן באופן הבא: העלות לא יכולה להיות שלילית. |
DistanceLimit
מגבלה שמגדירה את המרחק המקסימלי שאפשר לנסוע. היא יכולה להיות קשה או רכה.
אם מוגדרת מגבלה רכה, צריך להגדיר את softMaxMeters ואת costPerKilometerAboveSoftMax כערכים לא שליליים.
| ייצוג ב-JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| שדות | |
|---|---|
maxMeters |
מגבלה קשיחה שמגבילה את המרחק למקסימום של maxMeters. ההגבלה לא יכולה להיות שלילית. |
softMaxMeters |
מגבלה רכה שלא אוכפת מגבלת מרחק מקסימלית, אבל אם היא מופרת, נוצרת עלות שמצטברת עם עלויות אחרות שמוגדרות במודל, באותה יחידה. אם מגדירים את softMaxMeters, הוא חייב להיות קטן מ-maxMeters ולא יכול להיות שלילי. |
costPerKilometerBelowSoftMax |
העלות לקילומטר שנוצרה, עלייה של עד העלות הזו לא נתמכת ב- |
costPerKilometerAboveSoftMax |
העלות לקילומטר אם המרחק גבוה מהמגבלה העלות לא יכולה להיות שלילית. |
BreakRule
כללים ליצירת הפסקות בזמן עבור רכב (למשל, הפסקות לארוחת צהריים). הפסקה היא תקופה רצופה שבה הרכב נשאר במצב סרק במיקום הנוכחי שלו ולא יכול לבצע אף ביקור. יכול להיות שיהיה הפסקה:
- במהלך המעבר בין שני ביקורים (כולל הזמן שלפני או אחרי ביקור, אבל לא באמצע ביקור). במקרה כזה, הזמן הזה יתווסף לזמן ההובלה המתאים בין הביקורים.
- או לפני התנעת הרכב (יכול להיות שהרכב לא יתניע באמצע הפסקה), ובמקרה כזה זה לא ישפיע על זמן התנעת הרכב.
- או אחרי סיום השימוש ברכב (כנ"ל, עם שעת סיום השימוש ברכב).
| ייצוג ב-JSON |
|---|
{ "breakRequests": [ { object ( |
| שדות | |
|---|---|
breakRequests[] |
רצף של הפסקות פרסומות. הצגת ההודעה |
frequencyConstraints[] |
יכול להיות שיחולו כמה |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר, את המספר והסדר שלהן) שחלות על כל כלי רכב. האירועים החוזרים BreakRequest מגדירים את הרצף הזה, בסדר שבו הם צריכים להתרחש. חלונות הזמן שלהם (earliestStartTime / latestStartTime) יכולים להיות חופפים, אבל הם צריכים להיות תואמים להזמנה (הדבר הזה נבדק).
| ייצוג ב-JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| שדות | |
|---|---|
earliestStartTime |
חובה. הגבול התחתון (כולל) של תחילת ההפסקה. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
latestStartTime |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה בפורמט Z עם 0, 3, 6 או 9 ספרות אחרי הנקודה. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: |
minDuration |
חובה. משך הזמן המינימלי של ההפסקה. חייב להיות חיובי. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
FrequencyConstraint
אפשר להגביל עוד יותר את התדירות והמשך של ההפסקות שצוינו למעלה, על ידי הגדרת תדירות הפסקות מינימלית, למשל: "חייבת להיות הפסקה של שעה אחת לפחות כל 12 שעות". בהנחה שאפשר לפרש את זה כ "בכל חלון זמן מתגלגל של 12 שעות, חייבת להיות הפסקה אחת לפחות של שעה אחת לפחות", הדוגמה הזו תתורגם לFrequencyConstraint הבאה:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
התזמון והמשך של ההפסקות בפתרון יתחשבו בכל המגבלות האלה, בנוסף לחלונות הזמן ולמשכי הזמן המינימליים שכבר צוינו בBreakRequest.
בפועל, יכול להיות שFrequencyConstraint יחול על הפסקות לא רצופות. לדוגמה, לוח הזמנים הבא תואם לדוגמה 'שעה אחת כל 12 שעות':
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| ייצוג ב-JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| שדות | |
|---|---|
minBreakDuration |
חובה. משך ההפסקה המינימלי במסגרת המגבלה הזו. לא שלילי. הצגת התיאור של משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
maxInterBreakDuration |
חובה. משך הזמן המקסימלי המותר של כל מרווח זמן במסלול שלא כולל הפסקה של משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
מטרה
היעדים מחליפים לחלוטין את מודל העלויות, ולכן הם לא תואמים לעלויות קיימות. כל יעד ממופה למספר עלויות מוגדרות מראש, למשל עלויות של כלי רכב, משלוחים או מאפייני מעבר.
ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.
| ייצוג ב-JSON |
|---|
{
"type": enum ( |
| שדות | |
|---|---|
type |
סוג היעד. |
weight |
המשקל היחסי של היעד הזה בהשוואה ליעדים אחרים. אפשר לציין במאפיין הזה כל מספר לא שלילי, והמשקלים לא צריכים להסתכם ל-1. משקלים מוגדרים כברירת מחדל ל-1.0. |
סוג
סוג היעד שימופה לקבוצת עלויות.
| טיפוסים בני מנייה (enum) | |
|---|---|
DEFAULT |
כדי להבטיח פתרון סביר, נעשה שימוש בקבוצת ברירת מחדל של עלויות. הערה: אפשר להשתמש ביעד הזה לבד, אבל הוא תמיד יתווסף עם משקל של 1.0, כבסיס, ליעדים שצוינו על ידי המשתמש, אם הוא עדיין לא קיים. |
MIN_DISTANCE |
יעדים מסוג MIN. למזער את מרחק הנסיעה הכולל. |
MIN_WORKING_TIME |
לצמצם את זמן העבודה הכולל, שמחושב כסכום של כל כלי הרכב. |
MIN_TRAVEL_TIME |
כמו למעלה, אבל מתמקדים רק בזמן הנסיעה. |
MIN_NUM_VEHICLES |
לצמצם את מספר כלי הרכב שבהם נעשה שימוש. |
DurationDistanceMatrix
מציין מטריצת משך ומרחקים מנקודות ההתחלה של הביקור והרכב לנקודות הסיום של הביקור והרכב.
| ייצוג ב-JSON |
|---|
{
"rows": [
{
object ( |
| שדות | |
|---|---|
rows[] |
מציין את השורות של מטריצת משך הזמן ומטריצת המרחקים. הוא חייב להכיל את אותו מספר רכיבים כמו |
vehicleStartTag |
תג שמגדיר לאילו כלי רכב חלה מטריצת המרחקים ומשך הזמן הזו. אם לא תציינו ערך בשדה הזה, המועד האחרון לטיפול בהזמנות יחול על כל כלי הרכב, ותוכלו להגדיר רק מטריצה אחת. כל התחלה של נסיעה ברכב צריכה להתאים בדיוק למטריצה אחת, כלומר בדיוק אחד מהערכים בשדה לכל מטריצה צריך להיות |
שורה
מאפיין שמציין שורה במטריצת משך ומרחקים.
| ייצוג ב-JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| שדות | |
|---|---|
durations[] |
ערכי משך הזמן בשורה נתונה. הוא חייב להכיל את אותו מספר רכיבים כמו משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
meters[] |
ערכי המרחק בשורה נתונה. אם אין עלויות או אילוצים שמתייחסים למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, צריך שיהיו בו מספר אלמנטים כמו ב- |
TransitionAttributes
מציין מאפיינים של מעברים בין שני ביקורים עוקבים במסלול. יכול להיות שTransitionAttributes יחולו על אותו מעבר: במקרה כזה, כל העלויות הנוספות מצטברות וההגבלה או המגבלה המחמירה ביותר חלה (בהתאם לסמנטיקה הטבעית של 'וגם').
| ייצוג ב-JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| שדות | |
|---|---|
srcTag |
תגים שמגדירים את קבוצת המעברים (ממקור ליעד) שהמאפיינים האלה חלים עליהם. ביקור במקור או התנעה של רכב נחשבים להתאמה אם השדה |
excludedSrcTag |
|
dstTag |
ביקור ביעד או סיום נסיעה ברכב תואמים אם השדה |
excludedDstTag |
|
cost |
מציינים את העלות של ביצוע המעבר הזה. הערך הזה צריך להיות באותה יחידה כמו כל העלויות האחרות במודל, והוא לא יכול להיות שלילי. העלות הזו מתווספת לכל העלויות הקיימות האחרות. |
costPerKilometer |
מציינת עלות לקילומטר שחלה על המרחק שעוברים במהלך המעבר הזה. הוא מצטבר עם כל |
distanceLimit |
מציינת מגבלה על המרחק שנסע בזמן המעבר הזה. החל מיוני 2021, יש תמיכה רק במגבלות רכות. |
delay |
מציין את העיכוב שמתרחש כשמבצעים את המעבר הזה. העיכוב הזה תמיד מתרחש אחרי סיום הביקור במקור ולפני תחילת הביקור ביעד. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
ShipmentTypeIncompatibility
מציין חוסר התאמה בין משלוחים בהתאם לערך של shipmentType. ההגבלה על הופעת משלוחים לא תואמים באותו מסלול משתנה בהתאם למצב אי-התאימות.
| ייצוג ב-JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| שדות | |
|---|---|
types[] |
רשימה של סוגים לא תואמים. שתי משלוחים עם ערכים שונים של |
incompatibilityMode |
המצב שחל על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים איך המראה של משלוחים לא תואמים מוגבל באותו מסלול.
| טיפוסים בני מנייה (enum) | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב תאימות לא מוגדר. אסור להשתמש בערך הזה. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, אף פעם לא ניתן לשלוח שני משלוחים עם סוגים לא תואמים באותו רכב. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
במצב הזה, אף פעם לא יכולות להיות באותו רכב באותו זמן שתי משלוחים עם סוגים לא תואמים:
|
ShipmentTypeRequirement
מציין דרישות בין משלוחים על סמך shipmentType. הפרטים הספציפיים של הדרישה מוגדרים על ידי מצב הדרישה.
| ייצוג ב-JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| שדות | |
|---|---|
requiredShipmentTypeAlternatives[] |
רשימה של סוגי משלוח חלופיים שנדרשים על ידי |
dependentShipmentTypes[] |
לכל המשלוחים עם סוג בשדה הערה: אסור ליצור שרשראות של דרישות שבהן |
requirementMode |
המצב שמוחל על הדרישה. |
RequirementMode
מצבים שמגדירים את המראה של משלוחים תלויים במסלול.
| טיפוסים בני מנייה (enum) | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
מצב הדרישה לא צוין. אסור להשתמש בערך הזה. |
PERFORMED_BY_SAME_VEHICLE |
במצב הזה, כל המשלוחים ה'תלויים' צריכים להיות באותו כלי רכב לפחות עם אחד מהמשלוחים ה'נדרשים' שלהם. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
במצב לכן, באיסוף משלוח 'תלוי' צריך לציין:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
כמו קודם, רק שהמשלוחים 'התלויים' צריכים להיות על אותו כלי רכב עם משלוח 'נדרש' בזמן המסירה. |
PrecedenceRule
כלל קדימות בין שני אירועים (כל אירוע הוא איסוף או מסירה של משלוח): האירוע ה "שני" צריך להתחיל לפחות offsetDuration אחרי שהאירוע ה "ראשון" התחיל.
יכולות להיות כמה קדימויות שמתייחסות לאותם אירועים (או לאירועים קשורים), למשל: 'איסוף של B מתרחש אחרי מסירה של A' ו'איסוף של C מתרחש אחרי איסוף של B'.
בנוסף, העדיפויות חלות רק כששתי המשלוחים מתבצעים, אחרת המערכת מתעלמת מהן.
| ייצוג ב-JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| שדות | |
|---|---|
firstIsDelivery |
מציין אם האירוע 'first' הוא מסירה. |
secondIsDelivery |
מציין אם האירוע ה "שני" הוא מסירה. |
offsetDuration |
ההפרש בין האירוע ה'ראשון' לבין האירוע ה'שני'. הערך יכול להיות שלילי. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
firstIndex |
אינדקס המשלוח של האירוע 'first'. חובה לציין את השדה הזה. |
secondIndex |
האינדקס של המשלוח באירוע ה'שני'. חובה לציין את השדה הזה. |