- ייצוג JSON
- משלוח
- VisitRequest
- LatLng
- נקודת דרך
- מיקום
- TimeWindow
- רכב
- TravelMode
- UnloadingPolicy
- LoadLimit
- מרווח
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- שורה
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
מודל משלוח מכיל קבוצה של משלוחים שסט של כלי רכב צריכים לבצע, תוך צמצום העלות הכוללת, שהיא הסכום של:
- עלות הניתוב של כלי הרכב (סכום העלות הכוללת לזמן, העלות לזמן נסיעה ועלות קבועה של כל כלי הרכב).
- את הסנקציות על משלוח שלא בוצעו.
- עלות משך הזמן הגלובלי של המשלוחים
ייצוג JSON |
---|
{ "shipments": [ { object ( |
שדות | |
---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצת כלי רכב שיכולים לשמש לביצוע ביקורים. |
globalStartTime |
זמני התחלה וסיום גלובליים של המודל: שעות מחוץ לטווח הזה לא יכולות להיחשב כחוקיות. טווח הזמן של המודל חייב להיות קצר משנה. כלומר, הטווח של כשמשתמשים בשדות חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
globalEndTime |
אם המדיניות לא מוגדרת, ייעשה שימוש ב-00:00:00 UTC , 1 בינואר 1971 (כלומר שניות: 31536000, ננו: 0) כברירת מחדל. חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
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 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
endTime |
שעת הסיום של החלון הקופץ. אם לא צוין אחרת, הערך יוגדר ל- חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softStartTime |
שעת ההתחלה הרכה של חלון הזמן. חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softEndTime |
שעת הסיום הרכה של חלון הזמן. חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
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
הגדרת מגבלת עומס שחלה על כלי רכב, לדוגמה "משאית כזו יכולה לשאת עד 3500 ק"ג". 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
מגבלה שמגדירה מרחק מקסימלי שאפשר לעבור בו. היא יכולה להיות קשה או רכה.
אם מוגדרת מגבלת softmax, צריך להגדיר גם את 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 |
חובה. הגבול התחתון (כולל) בתחילת ההפסקה. חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
latestStartTime |
חובה. גבול עליון (כולל) בתחילת ההפסקה. חותמת זמן ב-RFC3339 UTC 'Zulu' בפורמט של רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
minDuration |
חובה. משך זמן מינימלי להפסקה. חייב להיות חיובי. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
FrequencyConstraint
אפשר להגביל עוד יותר את התדירות ואת משך ההפסקות שצוינו למעלה, על ידי אכיפה של תדירות מינימלית של הפסקות, למשל "חייבת להיות הפסקה של שעה לפחות בכל 12 שעות". בהנחה שאפשר לפרש את זה בתור "בכל חלון זמן הזזה של 12 שעות, חייבת להיות לפחות הפסקה אחת של שעה אחת לפחות", הדוגמה הבאה תתורגם לFrequencyConstraint
הבאה:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
התזמון ומשך הזמן של ההפסקות בפתרון יחולו על כל המגבלות האלה, בנוסף לחלונות הזמן ולמשכי הזמן המינימליים שצוינו ב-BreakRequest
.
בפועל, FrequencyConstraint
יכול לחול על הפסקות לא ברצף. לדוגמה, לוח הזמנים הבא חל על השעה 12:00 דוגמה:
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
מציינת חוסר תאימות בין משלוחים בהתאם לסוג המשלוח שלהם. ההצגה של משלוחים לא תואמים באותו מסלול מוגבלת בהתאם למצב חוסר התאימות.
ייצוג JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
שדות | |
---|---|
types[] |
רשימת סוגים לא תואמים. שני משלוחים עם |
incompatibilityMode |
המצב הוחל על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים את האופן שבו משלוחים לא תואמים מוגבלים לאותו מסלול.
טיפוסים בני מנייה (enum) | |
---|---|
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
מצבים שמגדירים את המראה של משלוחים תלויים במסלול.
טיפוסים בני מנייה (enum) | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
מצב הדרישה לא צוין. אין להשתמש בערך הזה אף פעם. |
PERFORMED_BY_SAME_VEHICLE |
במצב זה, כל הפריטים ה"תלויים" משלוחים צריכים לחלוק את אותו רכב כמו אחד לפחות מהשדות "חובה" משלוחים. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
במצב "תלוי" לכן, כדי לאסוף פרטי משלוח צריכים להיות אחד מהפרטים הבאים:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
כמו קודם, מלבד העמודה "תלויה" משלוחים צריכים לכלול את הערך 'חובה' משלוח לרכב שלהם בזמן המסירה. |
PrecedenceRule
כלל קדימות בין שני אירועים (כל אירוע הוא איסוף או משלוח של משלוח): ה'שנייה' האירוע צריך להתחיל offsetDuration
לפחות אחרי 'first' התחיל.
כמה קדימות יכולות להתייחס לאותם אירועים (או אירועים קשורים). למשל: "איסוף ב' מתבצע אחרי המסירה של" ו'איסוף C מתבצע אחרי איסוף של B'.
בנוסף, קדימות חלות רק כאשר מבצעים את שני המשלוחים ומתעלמים ממנה.
ייצוג JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
שדות | |
---|---|
firstIsDelivery |
מציין אם האירוע הוא משלוח. |
secondIsDelivery |
מציין אם האירוע הוא משלוח. |
offsetDuration |
ההבדל בין ו'שנייה' אירוע. היא יכולה להיות שלילית. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
firstIndex |
אינדקס המשלוחים של הראשון אירוע. צריך לציין את השדה הזה. |
secondIndex |
אינדקס המשלוח של ה'שנייה' אירוע. צריך לציין את השדה הזה. |