- ייצוג ב-JSON
- משלוח
- VisitRequest
- LatLng
- Waypoint
- מיקום
- TimeWindow
- רכב
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- מרווח
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- שורה
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
מודל משלוח מכיל קבוצה של משלוחים שצריך לבצע באמצעות קבוצה של כלי רכב, תוך צמצום העלות הכוללת, שהיא הסכום של:
- העלות של ניתוב כלי הרכב (סכום העלות לכל משך זמן, העלות לכל זמן נסיעה והעלות הקבועה בכל כלי הרכב).
- את הקנסות על משלוחים שלא בוצעו.
- העלות של משך הזמן הכולל של המשלוחים
ייצוג ב-JSON |
---|
{ "shipments": [ { object ( |
שדות | |
---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצה של כלי רכב שאפשר להשתמש בהם לביצוע ביקורים. |
global |
שעת ההתחלה ושעת הסיום הגלובלית של המודל: לא ניתן להתייחס לשעות מחוץ לטווח הזה כחוקיות. טווח הזמן של המודל צריך להיות פחות משנה, כלומר הערכים של כשמשתמשים בשדות חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
global |
אם לא מגדירים ערך, המערכת משתמשת בערך ברירת המחדל 00:00:00 UTC, 1 בינואר 1971 (כלומר, שניות: 31536000, ננו-שניות: 0). חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
global |
'משך הזמן הגלובלי' של התוכנית הכוללת הוא ההפרש בין שעת ההתחלה היעילה המוקדמת ביותר לשעת הסיום היעילה האחרונה של כל הרכבים. המשתמשים יכולים להקצות עלות לשעה לכמות הזו כדי לנסות לבצע אופטימיזציה להשגת השלמת המשימה המהירה ביותר, לדוגמה. העלות הזו צריכה להיות באותה יחידה כמו |
duration |
מציין את מטריצות משך הזמן והמרחקים שמשמשות במודל. אם השדה הזה ריק, המערכת תשתמש במקום זאת במפות Google או במרחקים גיאודזיים, בהתאם לערך של השדה דוגמאות לשימוש:
|
duration |
תגים שמגדירים את המקורות של מטריצות המרחק והמשך הזמן. הערך התגים תואמים ל- |
duration |
תגים שמגדירים את היעדים של מטריצות משך הזמן והמרחק. התגים תואמים ל- |
transition |
מאפייני המעבר נוספו למודל. |
shipment |
קבוצות של shipment_types לא תואמים (ראו |
shipment |
קבוצות של דרישות |
precedence |
קבוצת כללי עדיפות שצריך לאכוף במודל. |
max |
מגביל את המספר המקסימלי של כלי רכב פעילים. רכב נחשב לפעיל אם בוצעה בו לפחות משלוח אחד במסלול שלו. אפשר להשתמש באפשרות הזו כדי להגביל את מספר המסלולים במקרה שיש פחות נהגים מכלי רכב, וכי צי הרכבים הוא הטרוגני. לאחר מכן, המערכת תבצע אופטימיזציה כדי לבחור את קבוצת המשנה הטובה ביותר של כלי הרכב לשימוש. חייב להיות חיובי באופן מוחלט. |
משלוח
המשלוח של פריט אחד, מאחד המקומות שבהם הוא נאסף ועד לאחד המקומות שבהם הוא נמסר. כדי שהמשלוח ייחשב כמיושם, רכב ייחודי צריך לבקר באחד ממיקומי האיסוף שלו (ולצמצם את הקיבולת הפנויה שלו בהתאם), ולאחר מכן לבקר באחד ממיקומי המסירה שלו בשלב מאוחר יותר (ולכן להגדיל מחדש את הקיבולת הפנויה שלו בהתאם).
ייצוג ב-JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
שדות | |
---|---|
display |
שם התצוגה שהוגדר על ידי המשתמש למשלוח. השם יכול להכיל עד 63 תווים, וניתן להשתמש בתווים של UTF-8. |
pickups[] |
קבוצה של חלופות לאיסוף המשוכות למשלוח. אם לא צוין מיקום, הרכב צריך להגיע רק למיקום שמתאים להעברות. |
deliveries[] |
קבוצה של חלופות משלוח שמשויכות למשלוח. אם לא צוין מיקום, הרכב צריך להגיע רק למיקום שמתאים לאיסוף. |
load |
דרישות הטעינה של המשלוח (למשל משקל, נפח, מספר משטחים וכו'). המפתחות במפה צריכים להיות מזהים שמתארים את סוג העומס התואם, רצוי שגם יחד עם היחידות. לדוגמה: weight_kg, volume_gallons, pallet_count וכו'. אם מפתח נתון לא מופיע במפה, העומס התואם נחשב כ-null. |
allowed |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם השדה ריק, כל כלי הרכב יכולים לבצע את הפעולה. הרכבים מוצגים לפי המדד שלהם ברשימה |
costs |
העלות שנצברת כשהמשלוח הזה נמסר על ידי כל רכב. אם מציינים את השדה, הוא חייב לכלול:
העלויות האלה חייבות להיות באותה יחידה כמו |
costs |
אינדקסים של כלי הרכב שאליהם |
pickup |
משך הזמן המרבי המוחלט של הסטייה מהמסלול בהשוואה לנתיב הקצר ביותר מהאיסוף אל המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, ההגדרה
אם צוינו מגבלות יחסיות ומוחלטות באותה משלוח, המערכת תשתמש במגבלה המחמירה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
pickup |
משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המסירה של המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. הזמן הזה לא תלוי בחלופות שנבחרו לאיסוף ולמשלוח, או במהירות הרכב. אפשר לציין את האפשרות הזו לצד אילוצים של עיקוף מקסימלי: הפתרון יתייחס לשתי המפרטים. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
shipment |
מחרוזת לא ריקה שצוינה בה 'סוג' למשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר אי-תאימות או דרישות בין שונה מ- |
label |
תווית של המשלוח. התווית הזו מדווחת בתגובה בשדה |
ignore |
אם הערך הוא True, המערכת תדלג על המשלוח הזה, אבל לא תחיל התעלמות משליחה גורמת לשגיאת אימות אם יש מותר להתעלם משליחה שמתבצעת ב- |
penalty |
אם המשלוח לא יושלם, העונש הזה יתווסף לעלות הכוללת של הנתיבים. משלוח נחשב כסגור אם מתבצעת ביקור באחת מהאפשרויות לאיסוף ולמסירה. העלות יכולה להיות מבוטאת באותה יחידה שבה נעשה שימוש בכל שאר השדות הקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס הזה, הוא נחשב כקנס ללא הגבלת זמן, כלומר חובה להשלים את המשלוח. |
pickup |
משך הזמן המקסימלי של הסטייה היחסית בהשוואה לנתיב הקצר ביותר מהאיסוף למסירה. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, ההגדרה
אם צוינו מגבלות יחסיות ומוחלטות באותה משלוח, המערכת תשתמש במגבלה המחמירה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. |
VisitRequest
בקשה לביקור שאפשר לבצע ברכב: יש לה מיקום גיאוגרפי (או שניים, ראו בהמשך), שעות פתיחה וסגירה שמיוצגות על ידי חלונות זמן ומשך זמן השירות (הזמן שהרכב נמצא במקום לאחר שהוא הגיע לאיסוף או להעברת סחורות).
ייצוג ב-JSON |
---|
{ "arrivalLocation": { object ( |
שדות | |
---|---|
arrival |
המיקום הגיאוגרפי שאליו מגיע הרכב במהלך ביצוע ה- |
arrival |
נקודת הדרך שבה הרכב מגיע כשמבצעים את ה- |
departure |
המיקום הגיאוגרפי שבו הרכב יוצא לאחר השלמת ה |
departure |
נקודת הציון שממנה הרכב יוצא אחרי השלמת |
tags[] |
מציין את התגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
time |
חלונות זמן שמגבילים את זמן ההגעה לביקור. לתשומת ליבכם, כלי רכב עשוי לצאת מחוץ לחלון הזמן של שעת ההגעה, כלומר שעת ההגעה + משך הנסיעה לא חייבים להיות בתוך חלון זמן. אם הרכב יגיע לפני אם השדה חלונות הזמן חייבים להיות נפרדים, כלומר חלון זמן אחד לא יכול לחופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר עולה. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שחלף מהגעת הרכב עד ליציאה שלו (צריך להוסיף את זמן ההמתנה האפשרי, ראו משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
cost |
העלות של טיפול בבקשה הזו לביקור במסלול של כלי רכב. אפשר להשתמש באפשרות הזו כדי לשלם עלויות שונות לכל אחת מהאפשרויות החלופיות לאיסוף או למשלוח של משלוח. העלות הזו צריכה להיות באותה יחידה כמו |
load |
דרישות העומס של בקשת הביקור הזו. השדה הזה דומה לשדה |
visit |
מציין את סוגי הביקורים. אפשר להשתמש בנתון הזה כדי להקצות זמן נוסף שנדרש לרכב כדי להשלים את הביקור הזה (ראו סוג יכול להופיע רק פעם אחת. |
label |
תווית של |
LatLng
אובייקט שמייצג צמד קואורדינטות של רוחב וקו אורך. הוא מופיע כצמד של מספרים שלמים (double) שמייצגים מעלות של קו רוחב ומעלות של קו אורך. אלא אם צוין אחרת, האובייקט הזה חייב לעמוד ב תקן WGS84. הערכים חייבים להיות בטווח נורמלי.
ייצוג ב-JSON |
---|
{ "latitude": number, "longitude": number } |
שדות | |
---|---|
latitude |
קו הרוחב במעלות. הוא חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הוא חייב להיות בטווח [-180.0, +180.0]. |
נקודת ציון
עטיפה של ציון דרך. נקודות ציון מסמנות את מיקומי הגעתו והיציאה של בקשות ביקור, ואת מיקומי ההתחלה והסיום של כלי רכב.
ייצוג ב-JSON |
---|
{ "sideOfRoad": boolean, // Union field |
שדות | |
---|---|
side |
זה שינוי אופציונלי. מציין שהמיקום של נקודת הציון הזו מיועד להעדפה של כלי הרכב לעצור בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו המיקום מוטה ממרכז הכביש. האפשרות הזו לא פועלת במצב 'הליכה'. |
שדה האיחוד location_type . דרכים שונות לייצוג מיקום. הערך של location_type יכול להיות רק אחת מהאפשרויות הבאות: |
|
location |
נקודה שצוינה באמצעות קואורדינטות גיאוגרפיות, כולל כותרת אופציונלית. |
place |
מזהה המקום של נקודת העניין שמשויך לנקודת הציון. |
מיקום
עטיפה של מיקום (נקודה גיאוגרפית וכותרת אופציונלית).
ייצוג ב-JSON |
---|
{
"latLng": {
object ( |
שדות | |
---|---|
lat |
הקואורדינטות הגיאוגרפיות של נקודת הציון. |
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 } |
שדות | |
---|---|
start |
שעת ההתחלה של חלון הזמן הקבוע. אם לא צוין ערך, הוא יוגדר כ- חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
end |
שעת הסיום של חלון הזמנים הקפדני. אם לא צוין ערך, הוא יוגדר כ- חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
soft |
שעת ההתחלה הרכה של חלון הזמן. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
soft |
שעת הסיום המשוערת של חלון הזמן. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
cost |
עלות לשעה שנוספת לעלויות אחרות במודל אם האירוע מתרחש לפני softStartTime, מחושבת לפי הנוסחה הבאה:
העלות הזו חייבת להיות חיובית, וניתן להגדיר את השדה רק אם softStartTime הוגדר. |
cost |
עלות לשעה שנוספת לעלויות אחרות במודל אם האירוע מתרחש אחרי
העלות הזו חייבת להיות חיובית, וניתן להגדיר את השדה רק אם |
כלי רכב
מודל של רכב בבעיה במשלוח. פתרון בעיה בשליחה יוצר מסלול עבור הרכב הזה שמתחיל ב-startLocation
ומסתיים ב-endLocation
. מסלול הוא רצף של ביקורים (מידע נוסף זמין במאמר ShipmentRoute
).
ייצוג ב-JSON |
---|
{ "displayName": string, "travelMode": enum ( |
שדות | |
---|---|
display |
השם המוצג של הרכב שהוגדר על ידי המשתמש. השם יכול להכיל עד 63 תווים, וניתן להשתמש בתווים של UTF-8. |
travel |
מצב הנסיעה שמשפיע על הכבישים שבהם הרכב יכול לנסוע ועל המהירות שלו. מידע נוסף זמין במאמר |
route |
קבוצת תנאים שצריך לעמוד בהם, שמשפיעה על האופן שבו מחושבים המסלולים לרכב הנתון. |
start |
המיקום הגיאוגרפי שבו הרכב מתחיל לפני שהוא אוסף משלוחים. אם לא יצוין אחרת, הרכב יתחיל לפעול בנסיעה הראשונה. אם למודל המשלוח יש מטריצות של משך זמן ומרחק, אסור לציין את |
start |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מתחיל לפני שהוא אוסף משלוחים. אם לא צוין |
end |
המיקום הגיאוגרפי שבו הרכב מסתיים אחרי שהוא מסיים את |
end |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מסתיים אחרי שהוא משלים את |
start |
מציין תגים שמצורפים לתחילת המסלול של הרכב. אסור להשתמש במחרוזות ריקות או כפולות. |
end |
ציון תגים שמצורפים לסוף המסלול של הרכב. אסור להשתמש במחרוזות ריקות או כפולות. |
start |
חלונות זמן שבהם הרכב עשוי לצאת ממיקום ההתחלה. הם צריכים להיות בתוך מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים, כלומר אף חלון זמן לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
end |
חלונות זמן שבהם הרכב עשוי להגיע ליעד הסופי. הם צריכים להיות בתוך מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים, כלומר אף חלון זמן לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
unloading |
מדיניות פריקה שחלה על הרכב. |
load |
הקיבולת של הרכב (משקל, נפח, מספר פלטפורמות, לדוגמה). המפתחות במפה הם המזהים של סוג העומס, בהתאם למפתחות של השדה |
cost |
עלויות הרכב: כל העלויות צריכות להתווסף זו לזו, והן חייבות להיות באותה יחידה כמו העלות לשעה של מסלול הרכב. העלות הזו חלה על משך הזמן הכולל של המסלול, כולל זמן הנסיעה, זמן ההמתנה וזמן הביקור. שימוש ב- |
cost |
העלות לשעת נסיעה במסלול הרכב. העלות הזו חלה רק על זמן הנסיעה במסלול (כלומר, הזמן שמדווח ב- |
cost |
העלות לקילומטר במסלול הרכב. העלות הזו חלה על המרחק שמדווח ב- |
fixed |
עלות קבועה שחלה אם הרכב הזה משמש לטיפול במשלוח. |
used |
השדה הזה רלוונטי רק לכלי רכב כשהמסלול שלהם לא משמש למשלוח חבילות. השדה הזה מציין אם הרכב צריך להיחשב כמשומש או לא במקרה הזה. אם הערך הוא true, הרכב עובר ממיקום ההתחלה למיקום הסיום גם אם הוא לא משמש למשלוח חבילות, והעלויות של הזמן והמרחק שנובעות מהנסיעה מהתחלה לסיום נלקחות בחשבון. אחרת, הרכב לא נוסע ממיקום ההתחלה למיקום הסיום, ולא מתוזמנים לו |
route |
המגבלה חלה על משך הנסיעה הכולל של הרכב. ב- |
travel |
הגבלה שחלה על משך הנסיעה במסלול של הרכב. ב- |
route |
המגבלה חלה על המרחק הכולל של מסלול הרכב. ב- |
extra |
מציין מפה ממחרוזות של visitTypes לאורך זמן. משך הזמן הוא הזמן שנוסף ל- אם לבקשת הביקור יש כמה סוגים, לכל סוג יתווסף משך זמן במפה. |
break |
תיאור לוח הזמנים של ההפסקות שייאכף ברכב הזה. אם השדה הזה ריק, לא יתוזמנו הפסקות ברכב הזה. |
label |
תווית לרכב. התווית הזו מדווחת בתגובה כ- |
ignore |
אם הערך הוא true, הערך של אם המשלוח מתבצע על ידי רכב שנדחה ב- אם משלוח מתבצע על ידי רכב שנדחה ב- |
travel |
גורם מכפיל שאפשר להשתמש בו כדי להגדיל או להקטין את זמני הנסיעה של הרכב הזה. לדוגמה, אם ההגדרה הזו תהיה 2.0, המשמעות היא שהרכב הזה איטי יותר ומשך הנסיעה שלו הוא פי שניים מזה של כלי רכב רגילים. המכפיל הזה לא משפיע על משכי הביקורים. אם מציינים את אזהרה: זמני הנסיעה יעוגלו לשנייה הקרובה ביותר אחרי החלת הכפולה הזו, אבל לפני ביצוע פעולות מספריות כלשהן. לכן, כפולה קטנה עלולה לגרום לאובדן דיוק. מידע נוסף זמין בקטע |
TravelMode
אמצעי הגעה שאפשר להשתמש בהם ברכב.
אלה צריכים להיות קבוצת משנה של שיטות הנסיעה המועדפות ב-API של Routes בפלטפורמה של מפות Google. אפשר לקרוא על כך במאמר: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
טיפוסים בני מנייה (enum) | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
מצב נסיעה לא מוגדר, שווה ל-DRIVING . |
DRIVING |
אמצעי התחבורה שמתאים למסלול נסיעה (רכב, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
RouteModifiers
האובייקט הזה מכיל קבוצה של תנאים אופציונליים שצריך לעמוד בהם כשמחשבים מסלולים לכלי רכב. הערך הזה דומה ל-RouteModifiers
בממשק ה-API המועדף של מסלולים בפלטפורמה של מפות Google. מידע נוסף זמין בכתובת https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
ייצוג ב-JSON |
---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
שדות | |
---|---|
avoid |
מציין אם להימנע מכבישי אגרה במקרים סבירים. המערכת תעדיף מסלולים שלא כוללים כבישי אגרה. המאפיין הזה רלוונטי רק לאמצעי הגעה ממונעים. |
avoid |
מציין אם להימנע מכבישים מהירים במקרים סבירים. המערכת תעדיף מסלולים שלא כוללים כבישים מהירים. המאפיין הזה רלוונטי רק לאמצעי הגעה ממונעים. |
avoid |
קובעת אם להימנע ממעבורות במקרים סבירים. המערכת תעדיף מסלולים שלא כוללים נסיעה במעבורות. המאפיין הזה רלוונטי רק לאמצעי הגעה ממונעים. |
avoid |
זה שינוי אופציונלי. ההגדרה הזו קובעת אם להימנע מניהול ניווט בתוך מבנים, במקרים שבהם זה אפשרי. המערכת תעדיף מסלולים שלא כוללים ניווט בתוך מבנים. ההגדרה חלה רק על מצב הנסיעה |
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 ( |
שדות | |
---|---|
soft |
מגבלה רכה של העומס. |
cost |
אם העומס יהיה גבוה מ- |
start |
מרווח הזמן המקובל לטעינה של הרכב בתחילת המסלול. |
end |
מרווח הטעינה המקובל של הרכב בסוף המסלול. |
max |
עומס מקסימלי מקובל. |
מרווח
מרווח בין סכומי העומסים הקבילים.
ייצוג ב-JSON |
---|
{ "min": string, "max": string } |
שדות | |
---|---|
min |
עומס מינימלי מקובל. הערך חייב להיות ≥ 0. אם מציינים את שניהם, הערך של |
max |
עומס מקסימלי מקובל. הערך חייב להיות ≥ 0. אם לא צוין ערך, העומס המקסימלי לא מוגבל על ידי ההודעה הזו. אם מציינים את שניהם, הערך של |
DurationLimit
מגבלה שמגדירה את משך הזמן המקסימלי של מסלול הרכב. הוא יכול להיות קשה או רך.
כשמגדירים שדה של מגבלה רכה, צריך להגדיר יחד גם את סף המגבלה הרכה וגם את העלות המשויכת אליה.
ייצוג ב-JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
שדות | |
---|---|
max |
מגבלה קשיחה שמגבילה את משך הזמן ל-maxDuration לכל היותר. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
soft |
מגבלה רכה שלא אוכפת מגבלת משך זמן מקסימלי, אבל אם היא מופרת, נצברת עלות במסלול. העלות הזו מצטברת לעלות של רכיבים אחרים שמוגדרים במודל, באותה יחידה. אם משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
quadratic |
מגבלה רכה שלא אוכפת מגבלת משך זמן מקסימלי, אבל אם היא מופרת, היא גורמת לחיוב על המסלול, כתוצאה מהמשך הזמן הכפול של ההפרה. העלות הזו מצטברת לעלות של רכיבים אחרים שמוגדרים במודל, באותה יחידה. אם
משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
cost |
העלות לשעה שנצברת אם מגיעים לסף
העלות חייבת להיות לא שלילית. |
cost |
העלות לשעה רבועה שנצברת אם מפר את הסף העלות הנוספת היא 0 אם משך הזמן נמוך מהסף. אחרת, העלות תלויה במשך הזמן באופן הבא:
העלות חייבת להיות לא שלילית. |
DistanceLimit
מגבלה שמגדירה את המרחק המקסימלי שאפשר לנסוע. הוא יכול להיות קשה או רך.
אם מוגדרת מגבלה רכה, צריך להגדיר גם את softMaxMeters
וגם את costPerKilometerAboveSoftMax
, והם לא יכולים להיות שליליים.
ייצוג ב-JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
שדות | |
---|---|
max |
מגבלה קשיחה שמגבילה את המרחק ל-maxMeters לכל היותר. המגבלה חייבת להיות לא שלילית. |
soft |
הגבלה רכה שלא אוכפת מגבלה מרחק מקסימלית, אבל אם היא מופרת, היא גורמת לעלות שמתווספת לעלויות אחרות שהוגדרו במודל, באותה יחידה. אם softMaxMeters מוגדר, הערך שלו חייב להיות קטן מ-maxMeters ולא שלילי. |
cost |
העלות לקילומטר שנצברה, ועולה עד
העלות הזו לא נתמכת ב- |
cost |
העלות לקילומטר תחויב אם המרחק חורג מהמגבלה
העלות חייבת להיות לא שלילית. |
BreakRule
כללים ליצירת הפסקות זמן לכלי רכב (למשל הפסקות צהריים). הפסקה היא תקופה רציפה של זמן שבמהלכה הרכב נשאר במצב מנוחה במיקום הנוכחי שלו ולא יכול לבצע ביקור כלשהו. הפסקה עשויה להתרחש:
- במהלך הנסיעה בין שני ביקורים (כולל הזמן שלפני הביקור או אחריו, אבל לא באמצע הביקור). במקרה כזה, זמן הנסיעה המתאים בין הביקורים יתארך.
- או לפני הפעלת הרכב (לא ניתן להפעיל את הרכב באמצע הפסקה), במקרה כזה הוא לא משפיע על מועד הפעלת הרכב.
- או אחרי סיום הנסיעה ברכב (אותו הדבר, עם זמן סיום הנסיעה ברכב).
ייצוג ב-JSON |
---|
{ "breakRequests": [ { object ( |
שדות | |
---|---|
break |
רצף ההפסקות. הצגת ההודעה |
frequency |
יכול להיות שיחולו כמה |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר המספר והסדר שלהן) שחלות על כל רכב. הערכים החוזרים של BreakRequest
מגדירים את הרצף הזה, בסדר שבו הם חייבים להתרחש. חלונות הזמן שלהם (earliestStartTime
/ latestStartTime
) עשויים לחפוף, אבל הם חייבים להיות תואמים להזמנה (הבדיקה הזו מתבצעת).
ייצוג ב-JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
שדות | |
---|---|
earliest |
חובה. גבול תחתון (כולל) לתחילת ההפסקה. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
latest |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
min |
חובה. משך הזמן המינימלי של ההפסקה. חייב להיות חיובי. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
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 } |
שדות | |
---|---|
min |
חובה. משך ההפסקה המינימלי של האילוץ הזה. מספר חיובי. ראו את התיאור של משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
max |
חובה. התקופה המקסימלית המותרת של כל מרווח זמן במסלול שלא כולל לפחות חלק מההפסקה של משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
DurationDistanceMatrix
מציין מטריצה של משך זמן ומרחק מנקודת ההתחלה של הביקור והרכב ועד לנקודת הסיום של הביקור והרכב.
ייצוג ב-JSON |
---|
{
"rows": [
{
object ( |
שדות | |
---|---|
rows[] |
מציין את השורות של מטריצות משך הזמן והמרחק. הוא חייב להכיל את אותו מספר רכיבים כמו |
vehicle |
תג שמגדיר לאילו כלי רכב חלה מטריצת משך הזמן והמרחק הזו. אם השדה ריק, הוא חל על כל כלי הרכב, וניתן להשתמש רק במטריצה אחת. כל התחלה של כלי רכב חייבת להתאים למטריצה אחת בלבד, כלומר אחד מהשדות לכל המטריצות צריך להיות |
שורה
מציין שורה במטריצה של משך הזמן והמרחק.
ייצוג ב-JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
שדות | |
---|---|
durations[] |
ערכי משך הזמן בשורה נתונה. הוא חייב להכיל את אותו מספר רכיבים כמו משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
meters[] |
ערכי המרחק בשורה נתונה. אם אין עלויות או אילוצים שמפנים למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, צריך לכלול בו כמה אלמנטים כמו |
TransitionAttributes
מציין מאפיינים של מעברים בין שני ביקורים רצופים במסלול. יכול להיות שיהיו כמה TransitionAttributes
שחלים על אותו מעבר: במקרה כזה, כל העלויות הנוספות מצטברות והגבלה או האילוץ המחמירים ביותר חלים (בהתאם לסמנטיקה הטבעית של 'וגם').
ייצוג ב-JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
שדות | |
---|---|
src |
תגים שמגדירים את קבוצת המעברים (src->dst) שהמאפיינים האלה חלים עליהם. ביקור במקור או התחלת נסיעה ברכב תואמים אם השדה |
excluded |
|
dst |
ביקור ביעד או סיום נסיעה תואמים אם השדה |
excluded |
|
cost |
העלויות של ביצוע המעבר הזה. הערך הזה הוא באותה יחידה כמו כל שאר העלויות במודל, אסור שהוא יהיה שלילי. הוא מחויב בנוסף לכל העלויות הקיימות האחרות. |
cost |
קובע עלות לקילומטר שחלה על המרחק שנסע במהלך המעבר הזה. הוא מצטבר לכל |
distance |
מציין מגבלה על המרחק שנסע במהלך המעבר הזה. החל מיוני 2021, יש תמיכה רק במגבלות רכות. |
delay |
השדה הזה מציין את העיכוב שנוצר במהלך ביצוע המעבר הזה. העיכוב הזה מתרחש תמיד אחרי סיום הביקור במקור ולפני תחילת הביקור ביעד. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
ShipmentTypeIncompatibility
מציין אי-תאימות בין משלוחים בהתאם ל-shipmentType שלהם. הצגת משלוחים לא תואמים באותו מסלול מוגבלת על סמך מצב אי-התאימות.
ייצוג ב-JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
שדות | |
---|---|
types[] |
רשימה של סוגים לא תואמים. שתי משלוחים עם |
incompatibility |
המצב שחלה על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים את האופן שבו מוצגות משלוחים לא תואמים באותו מסלול.
טיפוסים בני מנייה (enum) | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב אי-תאימות לא מוגדר. אין להשתמש בערך הזה אף פעם. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, אף פעם לא ניתן לשתף את אותו רכב בין שתי משלוחים עם סוגים לא תואמים. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
בשתי משלוחים עם סוגים לא תואמים במצב אי-תאימות
|
ShipmentTypeRequirement
מציין את הדרישות בין משלוחים על סמך shipmentType שלהם. הפרטים הספציפיים של הדרישה מוגדרים לפי מצב הדרישה.
ייצוג ב-JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
שדות | |
---|---|
required |
רשימה של סוגי משלוחים חלופיים הנדרשים על ידי |
dependent |
בכל המשלוחים עם סוג בשדה הערה: אסור ליצור שרשראות של דרישות שבהן |
requirement |
המצב שחלה על הדרישה. |
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 } |
שדות | |
---|---|
first |
מציין אם האירוע 'ראשון' הוא העברה. |
second |
מציין אם האירוע 'שני' הוא מסירה. |
offset |
ההיסט בין האירוע 'ראשון' לבין האירוע 'שני'. הערך יכול להיות שלילי. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
first |
אינדקס המשלוח של האירוע 'ראשון'. חובה לציין את השדה הזה. |
second |
אינדקס המשלוח של האירוע 'שני'. חובה לציין את השדה הזה. |