- ייצוג JSON
- משלוח
- VisitRequest
- LatLng
- Waypoint
- מיקום
- TimeWindow
- רכב
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- מרווח זמן
- LoadCost
- 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[] |
קבוצות של סוגי משלוח לא תואמים (מידע נוסף זמין ב- |
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 |
משך הזמן המרבי המוחלט של הסטייה מהמסלול בהשוואה לנתיב הקצר ביותר מהאיסוף אל המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, צריך להזין את משך הזמן הקצר ביותר כדי לעבור מחלופה לאיסוף שנבחרה ישירות לחלופה שנבחרה. לאחר מכן, ההגדרה
אם ציינתם מגבלות יחסיות ומגבלות מוחלטות על אותו משלוח, המערכת תשתמש במגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
pickupToDeliveryTimeLimit |
משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המסירה של המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. האפשרויות האלה לא תלויות בחלופות שנבחרו לאיסוף ולמשלוח או במהירות הרכב. אפשר לציין את המגבלה הזו לצד מגבלות מקסימליות על עיקולים: הפתרון יתייחס לשתי המפרטים. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
shipmentType |
מחרוזת שאינה ריקה שמציינת "סוג" למשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין שונה מ- |
label |
תווית למשלוח הזה. התווית הזו מדווחת בתגובה בשדה |
ignore |
אם הערך הוא True, המערכת תדלג על המשלוח הזה, אבל לא תחיל התעלמות משליחה גורמת לשגיאת אימות אם יש מותר להתעלם ממשלוח שמבוצע ב |
penaltyCost |
אם המשלוח לא הושלם, הקנס הזה יתווסף לעלות הכוללת של המסלולים. משלוח נחשב כסגור אם מתבצעת ביקור באחת מהאפשרויות לאיסוף ולמסירה. העלות יכולה להיות מבוטאת באותה יחידה שבה נעשה שימוש בכל שאר השדות הקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם העונש הזה לא צוין, הוא נחשב ללא הגבלה, כלומר המשלוח צריך להיות הושלם. |
pickupToDeliveryRelativeDetourLimit |
משך הזמן המקסימלי של הסטייה היחסית בהשוואה לנתיב הקצר ביותר מהאיסוף למסירה. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, צריך להזין את משך הזמן הקצר ביותר כדי לעבור מחלופה לאיסוף שנבחרה ישירות לחלופה שנבחרה. לאחר מכן, אם מגדירים אכיפה של
אם צוינו מגבלות יחסיות ומוחלטות באותה משלוח, המערכת תשתמש במגבלה המחמירה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. |
VisitRequest
בקשה לביקור שאפשר לבצע ברכב: יש לה מיקום גיאוגרפי (או שניים, ראו בהמשך), שעות פתיחה וסגירה שמיוצגות על ידי חלונות זמן ומשך זמן השירות (הזמן שהרכב נמצא במקום לאחר שהוא הגיע לאיסוף או להעברת מוצרים).
ייצוג JSON |
---|
{ "arrivalLocation": { object ( |
שדות | |
---|---|
arrivalLocation |
המיקום הגיאוגרפי שאליו מגיע הרכב במהלך ביצוע ה- |
arrivalWaypoint |
נקודת הדרך שבה הרכב מגיע כשמבצעים את ה- |
departureLocation |
המיקום הגיאוגרפי שאליו הרכב יוצא אחרי השלמת |
departureWaypoint |
נקודת הציון שממנה הרכב יוצא אחרי השלמת ה- |
tags[] |
מציין את התגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
timeWindows[] |
חלונות זמן שמגבילים את שעת ההגעה לביקור. הערה: יכול להיות שהרכב יצא מחוץ לחלון הזמן להגעה ליעד. כלומר שעת ההגעה ומשך הטיסה לא חייבים להיות בתוך חלון זמן. כתוצאה מכך, יכול להיות שיהיה זמן המתנה אם הרכב יגיע לפני אם השדה חלונות זמן חייבים להיות נפרדים, כלומר, חלון זמן לא יכול להיות חופף לחלון אחר או להיות סמוך אליו, וחלון הזמן צריך להופיע בסדר הולך וגדל. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שחלף מהגעת הרכב עד ליציאה שלו (צריך להוסיף את זמן ההמתנה האפשרי, ראו משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
cost |
עלות השירות של בקשת הביקור הזו במסלול לרכב. כך אפשר לשלם עלויות שונות לכל אחת מהאפשרויות החלופיות לאיסוף או למשלוח של משלוח. העלות הזו חייבת להיות באותה יחידה של |
loadDemands |
דרישות העומס של בקשת הביקור הזו. השדה הזה דומה לשדה |
visitTypes[] |
מציין את סוגי הביקור. אפשר להשתמש בנתון הזה כדי להקצות זמן נוסף שנדרש לרכב כדי להשלים את הביקור הזה (ראו סוג מסוים יכול להופיע רק פעם אחת. |
label |
תווית של |
LatLng
אובייקט שמייצג צמד של קו רוחב/קו אורך. הוא מופיע כצמד של מספרים שלמים (double) שמייצגים מעלות של קו רוחב ומעלות של קו אורך. אלא אם צוין אחרת, האובייקט הזה חייב לעמוד בתקן WGS84. הערכים חייבים להיות בטווח נורמלי.
ייצוג ב-JSON |
---|
{ "latitude": number, "longitude": number } |
שדות | |
---|---|
latitude |
קו הרוחב במעלות. הוא חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הוא חייב להיות בטווח [-180.0, +180.0]. |
נקודת ציון
כולל ציון דרך. נקודות ציון מציינות את מיקומי ההגעה והיציאה של VisitRequests, ואת מיקומי ההתחלה והסיום של כלי הרכב.
ייצוג ב-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 |
שעת הסיום של החלון הקופץ. אם לא צוין ערך, הוא יוגדר ל- חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
softStartTime |
שעת ההתחלה הרכה של חלון הזמן. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
softEndTime |
שעת הסיום הרכה של חלון הזמן. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
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
אמצעי הגעה שאפשר להשתמש בהם ברכב.
הקבוצות האלה צריכות להיות קבוצת משנה של מצבי הנסיעה המועדפים ב-API של המסלולים בפלטפורמה של מפות 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 } |
שדות | |
---|---|
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 |
העלות של העברת יחידת עומס אחת ליותר מקילומטר אחד ברכב הזה. אפשר להשתמש בנתון הזה כמדד לצריכת דלק: אם העומס הוא משקל (בניוטונים), אז לערך load*kilometer יש את המאפיין של אנרגיה. |
costPerTraveledHour |
העלות של נסיעה עם יחידת עומס במשך שעה אחת ברכב הזה. |
מרווח
מרווח בין סכומי העומסים הקבילים.
ייצוג 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
}
}
}
והמסלול שלו הוא start,pickup,pickup,delivery,delivery,end עם מעברים:
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)
- transition 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
מייקר את הפתרונות עם מעברים עמוסים.
ייצוג ב-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 |
חובה. הגבול התחתון (כולל) בתחילת ההפסקה. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
latestStartTime |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
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, יש תמיכה רק במגבלות רכות. |
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
אחרי שהאירוע 'ראשון' התחיל.
כמה סדרי עדיפויות יכולים להתייחס לאותו אירוע (או לאירועים קשורים), למשל: 'איסוף ב' מתבצע אחרי מסירת פריט א' ו'איסוף של ב' מתבצע אחרי איסוף של ב'.
בנוסף, קדימות חלות רק כאשר מבצעים את שני המשלוחים ומתעלמים ממנה.
ייצוג JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
שדות | |
---|---|
firstIsDelivery |
מציין אם האירוע 'הראשון' הוא מסירה. |
secondIsDelivery |
מציין אם האירוע 'שני' הוא מסירה. |
offsetDuration |
ההיסט בין האירוע 'ראשון' לבין האירוע 'שני'. הערך יכול להיות שלילי. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
firstIndex |
אינדקס המשלוח של האירוע 'הראשון'. צריך לציין את השדה הזה. |
secondIndex |
אינדקס המשלוח של האירוע 'שני'. חובה לציין את השדה הזה. |