- ייצוג 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 |
זמני ההתחלה והסיום הגלובליים של המודל: אף אחת מהשעות מחוץ לטווח הזה לא יכולה להיחשב תקינה. משך הזמן של המודל צריך להיות קצר משנה. כלומר, כשמשתמשים בשדות חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
globalEndTime |
אם המדיניות לא מוגדרת, המערכת תשתמש ב-00:00:00 UTC, 1 בינואר 1971 (כלומר שניות: 31536000, ננו: 0) כברירת מחדל. חותמת זמן בפורמט "זולו" 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[] |
מציין את העלות של שליחת המשלוח על ידי כל אחד מכלי הרכב. אם צוין, חייב להיות לו EITHER:
העלויות האלה חייבות להיות באותה יחידה כמו |
costsPerVehicleIndices[] |
אינדקסים של כלי הרכב שעליהם חל |
pickupToDeliveryAbsoluteDetourLimit |
מציין את זמן המעקף המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף עד למשלוח. אם מציינים אותו, הוא צריך להיות מספר שאינו שלילי והמשלוח צריך לכלול לפחות אפשרות לאיסוף ומסירה. לדוגמה, יש לציין את משך הזמן הקצר ביותר שלוקח לעבור מהחלופה שנבחרה ישירות לחלופה שנבחרה למשלוח. לאחר מכן הגדרה של
אם הגבלות יחסיות ומוחלטות על אותו משלוח מפורטות באותו משלוח, המערכת תשתמש בהגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. נכון ל-2017/10, יש תמיכה במעקף רק כשמשך הנסיעה לא תלוי בכלי רכב. משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |
pickupToDeliveryTimeLimit |
מאפיין זה מציין את משך הזמן המקסימלי מרגע האיסוף ועד לתחילת המשלוח. אם מציינים אותו, הוא צריך להיות מספר שאינו שלילי והמשלוח צריך לכלול לפחות אפשרות לאיסוף ומסירה. אין לכך השפעה על החלופות שנבחרו לאיסוף ולמשלוח, וגם לא על מהירות הרכב. אפשר לציין זאת לצד מגבלות מעקף מקסימליות: הפתרון יציית לשני המפרטים. משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |
shipmentType |
מחרוזת שאינה ריקה, שמציינת 'סוג' למשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין שונה מהערך |
label |
מציין תווית למשלוח. התווית הזו מדווחת בתגובה ב- |
ignore |
אם הערך הוא true, דלגו על המשלוח הזה, אבל אל תחילו התעלמות ממשלוח מובילה לשגיאת אימות כשיש מותר להתעלם ממשלוח שמבוצע ב- |
penaltyCost |
אם המשלוח לא יושלם, העונש הזה יתווסף לעלות הכוללת של המסלולים. אם מישהו משתמש באחת מהחלופות שלו לאיסוף ולמשלוח, הוא נחשב למשלוח שהושלם. העלות יכולה לבטא באותה יחידה שמשמשת את כל שאר השדות במודל, והיא חייבת להיות חיובית. חשוב: אם העונש הזה לא יצוין, העונש יהיה אינסופי, כלומר, תצטרכו להשלים את המשלוח. |
pickupToDeliveryRelativeDetourLimit |
מציין את זמן המעקף היחסי המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף עד למשלוח. אם מציינים אותו, הוא צריך להיות מספר שאינו שלילי והמשלוח צריך לכלול לפחות אפשרות לאיסוף ומסירה. לדוגמה, יש לציין את משך הזמן הקצר ביותר שלוקח לעבור מהחלופה שנבחרה ישירות לחלופה שנבחרה למשלוח. לאחר מכן הגדרה של
אם הגבלות יחסיות ומוחלטות על אותו משלוח מפורטות באותו משלוח, המערכת תשתמש בהגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. נכון ל-2017/10, יש תמיכה במעקף רק כשמשך הנסיעה לא תלוי בכלי רכב. |
VisitRequest
בקשות לביקור שניתן לבצע באמצעות רכב: יש לו מיקום גיאוגרפי (או שניים, פרטים נוספים בהמשך), זמני פתיחה וסגירה שמיוצגים באמצעות חלונות זמן ומשך זמן השירות (הזמן שהרכב באה מהרגע שהרכב הגיע לאיסוף או למסירה של מוצרים).
ייצוג JSON |
---|
{ "arrivalLocation": { object ( |
שדות | |
---|---|
arrivalLocation |
המיקום הגיאוגרפי שאליו הרכב מגיע במהלך ביצוע של |
arrivalWaypoint |
ציון הדרך שאליו הרכב מגיע במהלך ביצוע |
departureLocation |
המיקום הגיאוגרפי שבו הרכב יוצא אחרי השלמת |
departureWaypoint |
ציון הדרך שאליו יצא הרכב אחרי השלמת |
tags[] |
מציין את התגים המצורפים לבקשת הביקור. אי אפשר להשתמש במחרוזות ריקות או כפולות. |
timeWindows[] |
חלונות זמן שמגבילים את זמן ההגעה למבקרים. הערה: יכול להיות שכלי רכב ייצא מחוץ לחלון זמן ההגעה. כלומר, לא חייבים לציין את זמן ההגעה ואת משך הנסיעה בתוך חלון זמן מסוים. כתוצאה מכך, עלול להיווצר זמן המתנה אם הרכב יגיע לפני המשמעות של היעדר חלונות זמן חייבים להיות נפרדים, כלומר, חלונות זמן לא יכולים לחפוף או להיות קרובים לחלונות זמן אחרים, והם חייבים להיות בסדר גובר. אפשר להגדיר את |
duration |
משך הביקור, כלומר משך הזמן שהרכב הרכב היה בו בין ההגעה והיציאה (יתווסף לזמן ההמתנה האפשרי. מידע נוסף מופיע כאן: משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |
cost |
עלות הטיפול בבקשת הביקור הזו במסלול לרכב. אפשר להשתמש בו כדי לשלם עלויות שונות על כל איסוף או משלוח חלופי של משלוח. העלות הזו חייבת להיות באותה יחידה כמו |
loadDemands |
טעינת הדרישות של בקשת הביקור הזו. השדה הזה דומה לשדה אובייקט שמכיל רשימה של |
visitTypes[] |
מציין את סוגי הביקור. אפשר להשתמש בהגדרה הזו כדי להקצות את הזמן הנוסף הנדרש לרכב כדי להשלים את הביקור הזה (מידע נוסף: סוג מסוים יכול להופיע פעם אחת בלבד. |
label |
מציין תווית עבור |
LatLng
אובייקט שמייצג צמד של קו רוחב/אורך. מבוטא כצמד זוגות כדי לייצג מעלות קו רוחב ומעלות קו אורך. אם לא צוין אחרת, האובייקט חייב לעמוד ב תקן 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` <= `softStartTime` <= `endTime` and
0 <= `startTime` <= `softEndTime` <= `endTime`.
ייצוג JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
שדות | |
---|---|
startTime |
שעת ההתחלה של חלון הזמן הקשה. אם לא צוין, תוגדר הערך חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
endTime |
שעת הסיום של חלון הזמן הקשה. אם לא צוין, תוגדר הערך חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softStartTime |
שעת ההתחלה הרכה של חלון הזמן. חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softEndTime |
שעת הסיום הרכה של חלון הזמן. חותמת זמן בפורמט "זולו" 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
מצבי נסיעה שיכולים לשמש כלי רכב.
הקבוצות האלה צריכות להיות קבוצת משנה של אמצעי התחבורה שמוגדרים כ-Preferred API Routes API. ניתן למצוא מידע בכתובת https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
טיפוסים בני מנייה (enums) | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
אמצעי הגעה לא מוגדר, שווה ערך ל-DRIVING . |
DRIVING |
מצב נסיעה המתאים למסלול נסיעה (מכונית, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
UnloadingPolicy
המדיניות בנושא הסרת הנתונים מכלי הרכב. רלוונטי רק למשלוחים שיש בהם גם אפשרות לאיסוף וגם משלוח.
משלוחים אחרים זמינים בחינם בכל מקום במסלול, ללא קשר ל-unloadingPolicy
.
טיפוסים בני מנייה (enums) | |
---|---|
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
מגבלה שקובעת משך זמן מקסימלי של המסלול בכלי רכב. היא יכולה להיות קשה או רכה.
כשמוגדר שדה של מגבלה רכה, יש להגדיר יחד את הסף המקסימלי וגם את העלות המשויכת.
ייצוג 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 |
קיימת הגבלה קשיחה שמגבילה את המרחק למרחק של עד מטר מקסימלי. המגבלה חייבת להיות מספר שאינו שלילי. |
softMaxMeters |
מגבלה רכה שאינה אוכפת מגבלת מרחק מקסימלית, אבל אם היא מופרת, מתקבלת עלות שמסתכמת לעלויות אחרות שמוגדרות במודל, באותה יחידה. אם מוגדרים ערכי softMaxMeter, הערך של softMaxMeter חייב להיות לא שלילי. |
costPerKilometerAboveSoftMax |
העלות לקילומטר שנצברה אם המרחק חורג מהמגבלה של
העלות חייבת להיות לא שלילית. |
BreakRule
כללים ליצירת הפסקות זמן לרכב (למשל, הפסקות צהריים). הפסקה היא פרק זמן מתמשך שבמהלכו הרכב נשאר לא פעיל במיקום הנוכחי שלו ולא יכול לבצע ביקור. יכולה להיות הפסקה:
- במהלך הנסיעה בין שני ביקורים (שכולל את הזמן שממש לפני הביקור או מיד אחריו, אך לא באמצע הביקור), ובמקרה כזה הוא מאריך את זמן ההובלה המתאים בין הביקורים,
- או לפני ההתנעה של הרכב (יכול להיות שהרכב לא יתחיל באמצע ההפסקה), ובמקרה כזה אין לכך השפעה על שעת ההתחלה של הרכב.
- או אחרי סיום הרכב (כולל שעת הסיום של הרכב).
ייצוג JSON |
---|
{ "breakRequests": [ { object ( |
שדות | |
---|---|
breakRequests[] |
רצף של הפסקות. להצגת ההודעה: |
frequencyConstraints[] |
ייתכן שיחולו כמה |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר, המספר והסדר שלהן) שחלות על כל רכב. סימני ה-BreakRequest
החוזרים מגדירים את הרצף הזה, לפי הסדר שבו הם חייבים להתרחש. יכול להיות שחלונות הזמן שלהם (earliestStartTime
/ latestStartTime
) יהיו חופפים, אבל הם חייבים להיות תואמים להזמנה (האפשרות הזו מסומנת).
ייצוג JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
שדות | |
---|---|
earliestStartTime |
חובה. גבול תחתון (כולל) בתחילת ההפסקה. חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
latestStartTime |
חובה. גבול עליון (כולל) בתחילת ההפסקה. חותמת זמן בפורמט "זולו" RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
minDuration |
חובה. משך הזמן המינימלי של ההפסקה. חייב להיות חיובי. משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |
FrequencyConstraint
אפשר להגביל עוד יותר את התדירות ואת משך ההפסקות שצוינו למעלה על ידי אכיפה של תדירות מינימלית של הפסקה, כמו "חייבת להיות הפסקה של לפחות שעה אחת בכל 12 שעות". בהנחה שניתן לפרש זאת כ "בכל חלון זמן הזזה של 12 שעות, חייבת להיות הפסקה אחת לפחות של שעה אחת לפחות", הדוגמה הזו תתורגם לFrequencyConstraint
הבא:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
התזמון ומשך ההפסקות בפתרון יהיו תואמים לכל המגבלות האלה, בנוסף לחלונות הזמן ולמשכי הזמן המינימליים שכבר צוינו ב-BreakRequest
.
ייתכן שFrequencyConstraint
יחול גם על הפסקות שאינן רציפות. לדוגמה, לוח הזמנים הבא מותאם לדוגמה '1h כל 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 |
המדיניות הזו מציינת מגבלה על המרחק שהמעבר צריך לבצע. החל מ-6 ביוני 2021 יש תמיכה רק במגבלות רכות. |
delay |
מציין עיכוב במהלך ביצוע המעבר הזה. העיכוב הזה תמיד מתרחש אחרי שמסיימים את הביקור במקור ולפני שמתחילים את הביקור ביעד. משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |
ShipmentTypeIncompatibility
מציין חוסר תאימות בין משלוחים, בהתאם לסוג המשלוח שלהם. בגלל מצב חוסר התאימות, ההצגה של משלוחים לא תואמים באותו מסלול מוגבלת.
ייצוג JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
שדות | |
---|---|
types[] |
רשימת סוגים שאינם תואמים. שתי משלוחים עם |
incompatibilityMode |
המצב הוחל על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים איך המראה של משלוחים לא תואמים מוגבל באותו מסלול.
טיפוסים בני מנייה (enums) | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב חוסר תאימות לא מוגדר. לעולם אין להשתמש בערך הזה. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, אף פעם לא ניתן לחלוק את אותו כלי רכב בין שני משלוחים עם סוגים לא תואמים. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
לשני משלוחים עם סוגים שאינם תואמים למצב חוסר התאימות של
|
ShipmentTypeRequirement
מציין דרישות בין משלוחים על סמך סוג המשלוח שלהם. פרטי הדרישה מוגדרים במצב הדרישה.
ייצוג JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
שדות | |
---|---|
requiredShipmentTypeAlternatives[] |
רשימה של סוגי משלוחים חלופיים שנדרשים על ידי |
dependentShipmentTypes[] |
לכל משלוחים מהסוג הזה בשדה הערה: אסור לפרסם שרשרת של דרישות שתלויות ב |
requirementMode |
המצב הוחל על הדרישה. |
RequirementMode
מצבים שמגדירים את המראה של משלוחים תלויים במסלול.
טיפוסים בני מנייה (enums) | |
---|---|
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 |
אינדקס המשלוח של האירוע 'השני'. חובה לציין את השדה הזה. |