- ייצוג ב-JSON
- משלוח
- VisitRequest
- LatLng
- Waypoint
- מיקום
- TimeWindow
- רכב
- TravelMode
- UnloadingPolicy
- LoadLimit
- מרווח
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- שורה
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
מודל משלוח מכיל קבוצה של משלוחים שסט של כלי רכב צריכים לבצע, תוך צמצום העלות הכוללת, שהיא הסכום של:
- עלות הניתוב של כלי הרכב (סכום העלות הכוללת לזמן, העלות לזמן נסיעה ועלות קבועה של כל כלי הרכב).
- את הסנקציות על משלוח שלא בוצעו.
- העלות של משך הזמן הכולל של המשלוחים
ייצוג JSON |
---|
{ "shipments": [ { object ( |
שדות | |
---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצת כלי רכב שיכולים לשמש לביצוע ביקורים. |
globalStartTime |
זמני התחלה וסיום גלובליים של המודל: שעות מחוץ לטווח הזה לא יכולות להיחשב כחוקיות. טווח הזמן של המודל חייב להיות קצר משנה. כלומר, הטווח של כשמשתמשים בשדות חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
globalEndTime |
אם לא מגדירים ערך, המערכת תשתמש בערך ברירת המחדל 00:00:00 UTC, 1 בינואר 1971 (כלומר, שניות: 31536000, ננו-שניות: 0). חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
globalDurationCostPerHour |
'משך הזמן הגלובלי' של התוכנית הכוללת הוא ההפרש בין שעת ההתחלה היעילה המוקדמת ביותר לשעת הסיום היעילה האחרונה של כל הרכבים. לדוגמה, משתמשים יכולים להקצות עלות לשעה לכמות הזו, כדי לנסות לבצע אופטימיזציה להשגת היעד המוקדם ביותר. העלות הזו צריכה להיות באותה יחידה כמו |
durationDistanceMatrices[] |
מציינת את המטריצות של משך הזמן והמרחק שבהן נעשה שימוש במודל. אם השדה הזה ריק, המערכת תשתמש במקום זאת במפות Google או במרחקים גיאודזיים, בהתאם לערך של השדה דוגמאות לשימוש:
|
durationDistanceMatrixSrcTags[] |
תגים המגדירים את המקורות של מטריצות משך הזמן והמרחק; התגים תואמים ל- |
durationDistanceMatrixDstTags[] |
תגים שמגדירים את היעדים של מטריצות משך הזמן והמרחק. התגים תואמים ל- |
transitionAttributes[] |
מאפייני מעבר שנוספו למודל. |
shipmentTypeIncompatibilities[] |
קבוצות של shipment_types לא תואמים (ראו |
shipmentTypeRequirements[] |
מערכי של דרישות |
precedenceRules[] |
קבוצת כללים של קדימות שיש לאכיפה במודל. |
maxActiveVehicles |
מגבילה את המספר המקסימלי של כלי רכב פעילים. רכב פעיל אם המסלול שלו מספק לפחות משלוח אחד. אפשר להשתמש באפשרות הזו כדי להגביל את מספר המסלולים במקרה שיש פחות נהגים מכלי רכב, ושצי כלי הרכב הם הטרוגני. לאחר מכן, המערכת תבצע אופטימיזציה כדי לבחור את קבוצת המשנה הטובה ביותר של כלי הרכב לשימוש. חייב להיות חיובי באופן מוחלט. |
משלוח
המשלוח של פריט בודד, מאחד מהאיסוףים ועד לאחד מהמשלוחים. כדי שהמשלוח ייחשב כמיושם, רכב ייחודי צריך לבקר באחד ממיקומי האיסוף שלו (ולצמצם את הקיבולת הפנויה שלו בהתאם), ולאחר מכן לבקר באחד ממיקומי המסירה שלו מאוחר יותר (ולכן להגדיל מחדש את הקיבולת הפנויה שלו בהתאם).
ייצוג JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
שדות | |
---|---|
displayName |
שם התצוגה שהמשתמש הגדיר למשלוח. הוא יכול להכיל עד 63 תווים ויכול להשתמש בתווי UTF-8. |
pickups[] |
קבוצה של אפשרויות לאיסוף עצמיות שמשויכות למשלוח. אם לא צוין מיקום, הרכב צריך להגיע רק למיקום שמתאים להעברות. |
deliveries[] |
קבוצה של אפשרויות משלוח חלופיות שקשורות למשלוח. אם לא מציינים זאת, הרכב צריך לבקר רק במיקום שתואם לאיסוף עצמי. |
loadDemands |
יש לטעון את הדרישות של המשלוח (לדוגמה, משקל, נפח, מספר המשטחים וכו'). המפתחות במפה צריכים להיות מזהים שמתארים את סוג העומס המתאים, רצוי שגם יחד עם היחידות. לדוגמה: 'weight_kg', 'volume_gallons', 'pallet_count' וכו'. אם מפתח מסוים לא מופיע במפה, העומס התואם נחשב כ-null. אובייקט שמכיל רשימה של |
allowedVehicleIndices[] |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם היא ריקה, היא עשויה לפעול בכל כלי הרכב. הרכבים נכללים באינדקס שלהם ברשימה |
costsPerVehicle[] |
מציינת את העלות שתחול כשהמשלוח נמסר על ידי כל רכב. אם צוין, הוא צריך להכיל EITHER:
העלויות האלה חייבות להיות באותה יחידה של |
costsPerVehicleIndices[] |
מדדים של כלי הרכב שעליהם חל |
pickupToDeliveryAbsoluteDetourLimit |
מציינת את זמן המעקף המוחלט המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף ועד למשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, צריך להזין את משך הזמן הקצר ביותר כדי לעבור מחלופה לאיסוף שנבחרה ישירות לחלופה שנבחרה. לאחר מכן, ההגדרה
אם ציינתם מגבלות יחסיות ומגבלות מוחלטות על אותו משלוח, המערכת תשתמש במגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
pickupToDeliveryTimeLimit |
מציינת את משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המשלוח של משלוח. אם צוין ערך, הערך לא יכול להיות שלילי, והמשלוח צריך לכלול לפחות אפשרויות איסוף ומשלוח. הזמן הזה לא תלוי בחלופות שנבחרו לאיסוף ולמשלוח, או במהירות הרכב. אפשר לציין את המגבלה הזו לצד מגבלות מקסימליות על עיקולים: הפתרון יתייחס לשתי המפרטים. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
shipmentType |
מחרוזת לא ריקה שצוינה בה 'סוג' של המשלוח. אפשר להשתמש בתכונה הזו כדי להגדיר אי-תאימות או דרישות בין שונה מ- |
label |
תווית למשלוח הזה. התווית הזו מדווחת בתגובה בשדה |
ignore |
אם הערך הוא True, אפשר לדלג על המשלוח הזה, אבל לא להחיל התעלמות משליחה גורמת לשגיאת אימות אם יש מותר להתעלם משליחה שמתבצעת ב- |
penaltyCost |
אם המשלוח לא יושלם, העונש הזה יתווסף לעלות הכוללת של הנתיבים. משלוח נחשב כסגור אם מתבצעת ביקור באחת מהאפשרויות לאיסוף ולמסירה. העלות עשויה לבוא לידי ביטוי באותה יחידה שמשמשת את כל השדות האחרים הקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס הזה, הוא נחשב כקנס ללא הגבלת זמן, כלומר חובה להשלים את המשלוח. |
pickupToDeliveryRelativeDetourLimit |
מציינת את זמן המעקף היחסי המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף ועד למשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, ההגדרה
אם ציינתם מגבלות יחסיות ומגבלות מוחלטות על אותו משלוח, המערכת תשתמש במגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. |
VisitRequest
בקשת ביקור יכולה להתבצע על ידי רכב: יש מיקום גיאוגרפי (או שניים, מידע נוסף, ראו בהמשך). שעות הפתיחה והסגירה מיוצגות על ידי חלונות זמן ומשך השירות (משך הזמן שהרכב צריך להגיע לאיסוף או להורדה).
ייצוג ב-JSON |
---|
{ "arrivalLocation": { object ( |
שדות | |
---|---|
arrivalLocation |
המיקום הגיאוגרפי שאליו מגיע הרכב במהלך ביצוע ה- |
arrivalWaypoint |
ציון הדרך שאליו הרכב מגיע במהלך ביצוע |
departureLocation |
המיקום הגיאוגרפי שאליו הרכב יוצא אחרי השלמת |
departureWaypoint |
נקודת הציון שממנה הרכב יוצא אחרי השלמת ה- |
tags[] |
מציין את התגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
timeWindows[] |
חלונות זמן שמגבילים את שעת ההגעה לביקור. הערה: יכול להיות שהרכב יצא מחוץ לחלון הזמן להגעה ליעד. כלומר שעת ההגעה ומשך הטיסה לא חייבים להיות בתוך חלון זמן. אם הרכב יגיע לפני כאשר חסר חלונות הזמן חייבים להיות נפרדים, כלומר חלון זמן אחד לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר עולה. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שחלף מהגעת הרכב עד ליציאה שלו (צריך להוסיף את זמן ההמתנה האפשרי, ראו משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
cost |
עלות השירות של בקשת הביקור הזו במסלול לרכב. כך אפשר לשלם עלויות שונות לכל אחת מהאפשרויות החלופיות לאיסוף או למשלוח של משלוח. העלות הזו חייבת להיות באותה יחידה של |
loadDemands |
טעינת הדרישות של בקשת הביקור הזו. זה בדיוק כמו השדה אובייקט שמכיל רשימה של |
visitTypes[] |
מציין את סוגי הביקור. ייתכן שהפעולה הזו תקצה את הזמן הנוסף שנדרש לרכב כדי להשלים את הביקור הזה (ראו סוג יכול להופיע רק פעם אחת. |
label |
תווית של |
avoidUTurns |
ההגדרה קובעת אם יש להימנע מפניות פרסה במסלולי נהיגה במיקום הזה. הימנעות מסיבובי פרסה היא האפשרות הטובה ביותר ולא מובטחת הימנעות מלאה. התכונה הזו ניסיונית וההתנהגות עשויה להשתנות. |
LatLng
אובייקט שמייצג צמד קואורדינטות של רוחב וקו אורך. הוא מופיע כצמד של מספרים שלמים (double) שמייצגים מעלות של קו רוחב ומעלות של קו אורך. האובייקט חייב לעמוד ב תקן WGS84, אלא אם צוין אחרת. הערכים חייבים להיות בטווח נורמלי.
ייצוג ב-JSON |
---|
{ "latitude": number, "longitude": number } |
שדות | |
---|---|
latitude |
קו הרוחב במעלות. הוא חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הוא חייב להיות בטווח [-180.0, +180.0]. |
נקודת ציון
תיבת נתונים שמכילה ציון דרך. נקודות ציון מסמנות את מיקומי הגעתו והיציאה של בקשות ביקור, ואת מיקומי ההתחלה והסיום של כלי רכב.
ייצוג ב-JSON |
---|
{ "sideOfRoad": boolean, // Union field |
שדות | |
---|---|
sideOfRoad |
זה שינוי אופציונלי. מציין שהמיקום של נקודת הציון הזו מיועד להעדפה של כלי הרכב לעצור בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו נוטה המיקום ממרכז הכביש. האפשרות הזו לא פועלת במצב הנסיעה 'הליכה'. |
שדה איחוד location_type . דרכים שונות לייצוג מיקום. location_type יכול להיות רק אחת מהאפשרויות הבאות: |
|
location |
נקודה שמצוינת באמצעות קואורדינטות גיאוגרפיות, כולל כותרת אופציונלית. |
placeId |
מזהה המקום של נקודת העניין המשויך לציון הדרך. |
מיקום
כולל מיקום (נקודה גיאוגרפית וכותרת אופציונלית).
ייצוג 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 |
שעת ההתחלה של חלון הזמן הקבוע. אם לא צוין ערך, הוא יוגדר ל- חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
endTime |
שעת הסיום של החלון הקופץ. אם לא צוין ערך, הוא יוגדר ל- חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softStartTime |
שעת ההתחלה הרכה של חלון הזמן. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
softEndTime |
שעת הסיום הרכה של חלון הזמן. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
costPerHourBeforeSoftStartTime |
עלות לשעה שתתווסף לעלויות אחרות במודל אם האירוע מתרחש לפני האירוע softStartTime, שמחושבת כך:
העלות הזו חייבת להיות חיובית, ואפשר להגדיר את השדה רק אם הוגדר ערך softStartTime. |
costPerHourAfterSoftEndTime |
עלות לשעה שתתווסף לעלויות אחרות במודל אם האירוע מתרחש אחרי
העלות הזו חייבת להיות חיובית, וניתן להגדיר את השדה רק אם |
כלי רכב
זו דוגמה של רכב בבעיה במשלוח. כדי לפתור בעיית משלוח, המערכת תיצור מסלול החל מ-startLocation
ומסתיים ב-endLocation
לרכב הזה. מסלול הוא רצף של ביקורים (מידע נוסף זמין במאמר ShipmentRoute
).
ייצוג JSON |
---|
{ "displayName": string, "travelMode": enum ( |
שדות | |
---|---|
displayName |
שם הרכב שהוגדר על ידי המשתמש. השם יכול להכיל עד 63 תווים, וניתן להשתמש בתווים בתקן UTF-8. |
travelMode |
מצב הנסיעה שמשפיע על הכבישים שבהם הרכב יכול לנסוע ועל המהירות שלו. מידע נוסף זמין במאמר |
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
אמצעי הגעה שאפשר להשתמש בהם ברכב.
הקבוצות האלה צריכות להיות קבוצת משנה של מצבי הנסיעה המועדפים ב-API של המסלולים בפלטפורמה של מפות Google, מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
טיפוסים בני מנייה (enum) | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
מצב נסיעה לא מוגדר, שווה ערך ל-DRIVING . |
DRIVING |
אמצעי התחבורה שמתאים למסלול נסיעה (רכב, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
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 |
כמות הטעינה המקסימלית הקבילה. |
מרווח
מרווח בין סכומי העומסים הקבילים.
ייצוג ב-JSON |
---|
{ "min": string, "max": string } |
שדות | |
---|---|
min |
עומס מינימלי מקובל. מספר זה חייב להיות 0 ומעלה. אם מציינים את שניהם, הערך של |
max |
עומס מקסימלי מקובל. הערך חייב להיות ≥ 0. אם לא צוין ערך, העומס המקסימלי לא מוגבל על ידי ההודעה הזו. אם מציינים את שניהם, הערך של |
DurationLimit
מגבלה שמגדירה את משך הזמן המקסימלי של מסלול של כלי רכב. היא יכולה להיות קשה או רכה.
כשמוגדר שדה של רף softmax, יש להגדיר יחד גם את הסף המקסימלי הרך וגם את העלות שמשויכת אליו.
ייצוג ב-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, "costPerKilometerAboveSoftMax": number } |
שדות | |
---|---|
maxMeters |
מגבלה קשיחה שמגבילה את המרחק ל-maxMeters לכל היותר. המגבלה חייבת להיות לא שלילית. |
softMaxMeters |
מגבלה רכה שלא אוכפת מגבלת מרחק מקסימלית, אבל מופרת אותה, תוביל לעלות שנוספת לעלויות אחרות שמוגדרות במודל, עם אותה יחידה. אם softMaxMeters מוגדר, הערך שלו חייב להיות קטן מ-maxMeters ולא שלילי. |
costPerKilometerAboveSoftMax |
העלות לקילומטר תחויב אם המרחק חורג מהמגבלה
העלות חייבת להיות לא שלילית. |
BreakRule
כללים ליצירת הפסקות זמן לרכב (למשל, הפסקות צהריים). הפסקה היא תקופה רציפה של זמן שבמהלכה הרכב נשאר במצב מנוחה במיקום הנוכחי שלו ולא יכול לבצע ביקור כלשהו. הפסקה עשויה להתרחש:
- במהלך הנסיעה בין שני ביקורים (כולל את הזמן לפני או מיד אחרי הביקור, אבל לא באמצע הביקור), ובמקרה כזה הוא יאריך את זמן ההובלה התואם בין הביקורים.
- או לפני הפעלת הרכב (לא ניתן להפעיל את הרכב באמצע הפסקה), במקרה כזה הוא לא משפיע על מועד הפעלת הרכב.
- או אחרי סיום הנסיעה (כלומר, עם שעת הסיום של הרכב).
ייצוג ב-JSON |
---|
{ "breakRequests": [ { object ( |
שדות | |
---|---|
breakRequests[] |
רצף של הפסקות. הצגת ההודעה |
frequencyConstraints[] |
בכפוף ל |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר, המספר והסדר שלהן) שחלים על כל רכב. הערכים החוזרים של BreakRequest
מגדירים את הרצף הזה, בסדר שבו הם חייבים להתרחש. חלונות הזמן שלהם (earliestStartTime
/ latestStartTime
) עשויים להיות חופפים, אבל הם צריכים להיות תואמים להזמנה (אפשרות זו מסומנת).
ייצוג ב-JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
שדות | |
---|---|
earliestStartTime |
חובה. גבול תחתון (כולל) לתחילת ההפסקה. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
latestStartTime |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
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 |
חובה. פרק הזמן המקסימלי המותר בכל מרווח זמן במסלול שלא כולל לפחות הפסקה חלקית של משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
DurationDistanceMatrix
מציינת מטריצת משך הזמן והמרחק ממיקומי היעד ונקודות ההתחלה של הרכבים לביקור ובמיקומי היעד של הרכבים.
ייצוג ב-JSON |
---|
{
"rows": [
{
object ( |
שדות | |
---|---|
rows[] |
מציין את השורות של מטריצות משך הזמן והמרחק. הוא צריך לכלול מספר רכיבים כמו |
vehicleStartTag |
תג שמגדיר לאילו כלי רכב חלה מטריצת משך הזמן והמרחק הזו. אם השדה ריק, הוא חל על כל כלי הרכב, וניתן להשתמש רק במטריצה אחת. כל התחלה של כלי רכב חייבת להתאים למטריצה אחת בלבד, כלומר, אחד מהשדות בכל המטריצות צריך להיות |
שורה
מציין שורה במטריצה של משך הזמן והמרחק.
ייצוג ב-JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
שדות | |
---|---|
durations[] |
הערכים של משך הזמן בשורה נתונה. הוא צריך לכלול מספר רכיבים כמו משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
meters[] |
ערכי המרחק בשורה נתונה. אם אין עלויות או אילוצים שמפנים למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, הוא חייב לכלול כמה אלמנטים כמו |
TransitionAttributes
מציין מאפיינים של מעברים בין שני ביקורים רצופים במסלול. כמה TransitionAttributes
עשויים לחול על אותו מעבר: במקרה כזה, כל העלויות הנוספות מצטברות, והאילוץ או המגבלה המחמירים ביותר חלים (לפי הסמנטיקה הטבעית "AND").
ייצוג ב-JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
שדות | |
---|---|
srcTag |
תגים שמגדירים את קבוצת המעברים (src->dst) שעליהם המאפיינים האלה חלים. ביקור במקור או התחלת נסיעה ברכב תואמים אם השדה |
excludedSrcTag |
|
dstTag |
ביקור ביעד או סיום נסיעה תואמים אם השדה |
excludedDstTag |
|
cost |
העלויות של ביצוע המעבר הזה. הערך הזה הוא באותה יחידה כמו כל שאר העלויות במודל, אסור שהוא יהיה שלילי. הוא מוחל בנוסף לכל העלויות הקיימות. |
costPerKilometer |
מציינת עלות לקילומטר שחלה על מרחק הנסיעה בזמן ביצוע המעבר. הוא מצטבר לכל |
distanceLimit |
מציינת מגבלה על המרחק שהמשתמש עובר במהלך ביצוע המעבר הזה. נכון ל-2021/06, אפשר להשתמש רק במגבלות רכות. |
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 |
מציין אם האירוע 'ראשון' הוא העברה. |
secondIsDelivery |
מציין אם האירוע 'השני' הוא מסירה. |
offsetDuration |
ההיסט בין האירוע 'ראשון' לבין האירוע 'שני'. היא יכולה להיות שלילית. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
firstIndex |
אינדקס המשלוח של האירוע 'ראשון'. חובה לציין את השדה הזה. |
secondIndex |
אינדקס המשלוח של האירוע 'Second' (שני). חובה לציין את השדה הזה. |