- ייצוג ב-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[] |
קבוצת כלי הרכב שאפשר להשתמש בהם כדי לבצע את הביקורים. |
objectives[] |
קבוצת היעדים של המודל הזה, שאותם נהפוך לעלויות. אם הוא לא ריק, מודל הקלט צריך להיות ללא עלות. כדי לקבל את הבקשה ששונתה, צריך להשתמש ב- ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
globalStartTime |
שעת ההתחלה ושעת הסיום של המודל: שעות מחוץ לטווח הזה לא נחשבות חוקיות. טווח הזמן של המודל חייב להיות פחות משנה, כלומר ההפרש בין כשמשתמשים בשדות הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
globalEndTime |
אם לא מגדירים את השדה, ערך ברירת המחדל הוא 00:00:00 UTC, 1 בינואר 1971 (כלומר, שניות: 31536000, ננו-שניות: 0). הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
globalDurationCostPerHour |
"משך הזמן הגלובלי" של התוכנית הכוללת הוא ההפרש בין שעת ההתחלה האפקטיבית המוקדמת ביותר לבין שעת הסיום האפקטיבית המאוחרת ביותר של כל הרכבים. המשתמשים יכולים להקצות עלות לשעה לכמות הזו כדי לנסות לבצע אופטימיזציה להשלמת המשימה המוקדמת ביותר, למשל. העלות הזו צריכה להיות באותה יחידה כמו |
durationDistanceMatrices[] |
מציין את מטריצות משך הזמן ומטריצת המרחקים שבהן נעשה שימוש במודל. אם השדה הזה ריק, המערכת תשתמש במפות Google או במרחקים גיאודזיים, בהתאם לערך בשדה דוגמאות לשימוש:
|
durationDistanceMatrixSrcTags[] |
תגים שמגדירים את המקורות של מטריצות משך הזמן והמרחק. התגים תואמים ל- |
durationDistanceMatrixDstTags[] |
תגים שמגדירים את היעדים של מטריצות משך הזמן ומטריצות המרחקים; התגים תואמים ל- |
transitionAttributes[] |
מאפייני המעבר נוספו למודל. |
shipmentTypeIncompatibilities[] |
קבוצות של סוגי משלוחים (shipment_types) שלא תואמים (ראו |
shipmentTypeRequirements[] |
קבוצות של דרישות |
precedenceRules[] |
קבוצה של כללי קדימות שצריך לאכוף במודל. חשוב: השימוש בכללי קדימויות מגביל את גודל הבעיה שאפשר לבצע לה אופטימיזציה. יכול להיות שנדחה בקשות שכוללות כללי קדימות עם הרבה משלוחים. |
maxActiveVehicles |
מגביל את המספר המקסימלי של כלי רכב פעילים. רכב נחשב פעיל אם המסלול שלו כולל לפחות משלוח אחד. אפשר להשתמש בזה כדי להגביל את מספר המסלולים במקרים שבהם יש פחות נהגים מכלי רכב, וצי הרכבים הוא הטרוגני. לאחר מכן, האופטימיזציה תבחר את קבוצת המשנה הטובה ביותר של כלי הרכב לשימוש. הערך חייב להיות חיובי. |
משלוח
משלוח של פריט אחד, מנקודת איסוף אחת לנקודת מסירה אחת. כדי שהמשלוח ייחשב כמבוצע, רכב ייחודי צריך לבקר באחד ממיקומי האיסוף שלו (ולהקטין את הקיבולת הפנויה שלו בהתאם), ואז לבקר באחד ממיקומי המסירה שלו בשלב מאוחר יותר (ולכן להגדיל מחדש את הקיבולת הפנויה שלו בהתאם).
| ייצוג ב-JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| שדות | |
|---|---|
displayName |
השם המוצג של המשלוח, שמוגדר על ידי המשתמש. הוא יכול להכיל עד 63 תווים, כולל תווים בקידוד UTF-8. |
pickups[] |
קבוצה של אפשרויות איסוף שמשויכות למשלוח. אם לא מציינים את המיקום, הרכב צריך להגיע רק למיקום שתואם למשלוחים. |
deliveries[] |
קבוצה של אפשרויות משלוח שמשויכות למשלוח. אם לא מציינים את המיקום, הרכב צריך להגיע רק למיקום שתואם לאיסופים. |
loadDemands |
דרישות העומס של המשלוח (לדוגמה: משקל, נפח, מספר משטחים וכו'). המפתחות במפה צריכים להיות מזהים שמתארים את סוג העומס המתאים, ורצוי לכלול גם את היחידות. לדוגמה: "weight_kg", "volume_gallons", "pallet_count" וכו'. אם מפתח מסוים לא מופיע במפה, העומס התואם נחשב כ-null. |
allowedVehicleIndices[] |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם השדה ריק, כל כלי הרכב יכולים לבצע את המשימה. הרכבים מיוצגים על ידי האינדקס שלהם ברשימת |
costsPerVehicle[] |
מציין את העלות שנוצרת כשהמשלוח הזה נמסר על ידי כל רכב. אם מציינים את המאפיין, הוא חייב לכלול אחד מהשניים:
העלויות האלה צריכות להיות באותה יחידה כמו |
costsPerVehicleIndices[] |
אינדקסים של כלי הרכב שעליהם חל |
pickupToDeliveryAbsoluteDetourLimit |
מציינת את זמן העיקוף המוחלט המקסימלי בהשוואה למסלול הקצר ביותר מנקודת האיסוף ועד לנקודת המסירה. אם מציינים את המאפיין הזה, הערך שלו חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף אחד ומסירה אחת. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שלוקח להגיע מהחלופה שנבחרה לאיסוף ישירות לחלופה שנבחרה למסירה. ואז ההגדרה אם מגדירים גם מגבלות יחסיות וגם מגבלות מוחלטות לאותו משלוח, המערכת משתמשת במגבלה המחמירה יותר לכל זוג אפשרי של איסוף/מסירה. נכון לאוקטובר 2017, יש תמיכה בנסיעות עקיפות רק כשמשך הנסיעה לא תלוי בכלי הרכב. |
pickupToDeliveryTimeLimit |
מציין את משך הזמן המקסימלי מתחילת האיסוף ועד לתחילת המסירה של המשלוח. אם מציינים את המאפיין הזה, הערך שלו חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף אחד ומסירה אחת. הזמן הזה לא תלוי באפשרויות שנבחרו לאיסוף ולמסירה, וגם לא במהירות הרכב. אפשר לציין את זה לצד אילוצי סטייה מקסימלית: הפתרון יכבד את שני המפרטים. |
shipmentType |
מחרוזת לא ריקה שמציינת את סוג המשלוח. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין השדה הזה שונה מהשדה |
label |
מציין תווית למשלוח הזה. התווית הזו מדווחת בתגובה ב- |
ignore |
אם הערך הוא True, המערכת מדלגת על המשלוח הזה, אבל לא מחילה התעלמות ממשלוח גורמת לשגיאת אימות כשיש מותר להתעלם ממשלוח שמבוצע ב- |
penaltyCost |
אם המשלוח לא יושלם, הקנס הזה יתווסף לעלות הכוללת של המסלולים. משלוח נחשב כהושלם אם מבקרים באחת מהחלופות לאיסוף ולמסירה שלו. אפשר לבטא את העלות באותה יחידה שבה משתמשים בכל שאר השדות שקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס, הוא נחשב לאינסופי, כלומר חובה להשלים את המשלוח. |
pickupToDeliveryRelativeDetourLimit |
מציין את משך הזמן המקסימלי של עיקוף יחסי בהשוואה למסלול הקצר ביותר מנקודת האיסוף ועד לנקודת המסירה. אם מציינים את המאפיין הזה, הערך שלו חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף אחד ומסירה אחת. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שלוקח להגיע מהאפשרות שנבחרה לאיסוף ישירות לאפשרות שנבחרה למסירה. ואז ההגדרה אם מגדירים גם מגבלות יחסיות וגם מגבלות מוחלטות לאותו משלוח, המערכת משתמשת במגבלה המחמירה יותר לכל זוג אפשרי של איסוף/מסירה. נכון לאוקטובר 2017, יש תמיכה בנסיעות עקיפות רק כשמשך הנסיעה לא תלוי בכלי הרכב. |
VisitRequest
בקשה לביקור שאפשר לבצע באמצעות רכב: יש לה מיקום גיאוגרפי (או שניים, ראו בהמשך), שעות פתיחה וסגירה שמיוצגות על ידי חלונות זמן, ומשך זמן שירות (הזמן שהרכב מבלה מרגע שהגיע לאסוף או לפרוק סחורה).
| ייצוג ב-JSON |
|---|
{ "arrivalLocation": { object ( |
| שדות | |
|---|---|
arrivalLocation |
המיקום הגיאוגרפי שאליו הרכב מגיע כשמבצעים את ה |
arrivalWaypoint |
נקודת הדרך שאליה הרכב מגיע כשמבצעים את ה- |
departureLocation |
המיקום הגיאוגרפי שממנו הרכב יוצא אחרי השלמת |
departureWaypoint |
נקודת הציון שבה הרכב יוצא אחרי השלמת |
tags[] |
מציין תגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
timeWindows[] |
חלונות זמן שמגבילים את זמן ההגעה לביקור. שימו לב שכלי רכב יכול לצאת מחוץ לחלון זמן ההגעה, כלומר זמן ההגעה + משך הזמן לא צריכים להיות בתוך חלון זמן. אם הרכב יגיע לפני אם לא מצוין חלונות הזמן חייבים להיות נפרדים, כלומר אסור שחלון זמן אחד יחפוף לחלון זמן אחר או יהיה סמוך אליו, והם חייבים להיות בסדר עולה. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שהרכב נמצא במקום בין ההגעה לעזיבה (צריך להוסיף את זה לזמן ההמתנה האפשרי, ראו |
cost |
עלות הטיפול בבקשת הביקור הזו במסלול של רכב. אפשר להשתמש במאפיין הזה כדי לשלם עלויות שונות על כל אפשרות חלופית לאיסוף או למסירה של משלוח. העלות הזו צריכה להיות באותה יחידה כמו |
loadDemands |
העומס שנוצר בעקבות בקשת הביקור הזו. השדה הזה זהה לשדה |
visitTypes[] |
מציין את סוגי הביקורים. אפשר להשתמש בזה כדי להקצות זמן נוסף שנדרש לרכב כדי להשלים את הביקור (ראו כל סוג יכול להופיע רק פעם אחת. |
label |
מציינת תווית ל- |
avoidUTurns |
מציינת אם צריך להימנע מפניות פרסה במסלולי נסיעה במיקום הזה. הימנעות מפניות פרסה היא כמיטב יכולתנו, ואין הבטחה להימנעות מוחלטת. זו תכונה ניסיונית וההתנהגות שלה עשויה להשתנות. ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
LatLng
אובייקט שמייצג זוג של קו רוחב וקו אורך. המיקום מיוצג על ידי זוג ערכים מסוג double שמייצגים את המעלות של קו הרוחב וקו האורך. אם לא צוין אחרת, האובייקט הזה חייב לעמוד ב תקן WGS84. הערכים צריכים להיות בטווחים מנורמלים.
| ייצוג ב-JSON |
|---|
{ "latitude": number, "longitude": number } |
| שדות | |
|---|---|
latitude |
קו הרוחב במעלות. הוא חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הוא חייב להיות בטווח [-180.0, +180.0]. |
נקודת ציון
מכיל נקודת דרך. נקודות ציון מסמנות את מיקומי ההגעה והיציאה של VisitRequests, ואת מיקומי ההתחלה והסיום של כלי הרכב.
| ייצוג ב-JSON |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| שדות | |
|---|---|
sideOfRoad |
אופציונלי. מציין שהמיקום של נקודת הדרך הזו נועד להעדפה שהרכב יעצור בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול יעבור דרך המיקום כך שהרכב יוכל לעצור בצד הכביש שהמיקום נוטה אליו ממרכז הכביש. האפשרות הזו לא פועלת במצב הנסיעה WALKING. |
vehicleStopover |
מציינת שציון הדרך מיועד לעצירת כלי רכב, במטרה לאסוף או להוריד. האפשרות הזו פועלת רק במצב הנסיעה 'נהיגה', וכאשר הערך של locationType הוא location. ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
| דרכים שונות לייצג מיקום. ברשימה הבאה מופיעים שדות שמוציאים זה את זה. בתשובה יוגדר לכל היותר אחד מהשדות הבאים: | |
location |
נקודה שצוינה באמצעות קואורדינטות גיאוגרפיות, כולל כיוון אופציונלי. |
placeId |
מזהה המקום של נקודת העניין שמשויך לציון הדרך. כשמשתמשים במזהה מקום כדי לציין את מיקום ההגעה או היציאה של VisitRequest, צריך להשתמש במזהה מקום ספציפי מספיק כדי לקבוע מיקום LatLng לניווט למקום. לדוגמה, מזהה מקום שמייצג בניין מתאים, אבל לא מומלץ להשתמש במזהה מקום שמייצג כביש. |
| סוף השדות שמוציאים זה את זה. | |
מיקום
מכיל מיקום (נקודה גיאוגרפית וכיוון אופציונלי).
| ייצוג ב-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 |
שעת ההתחלה של חלון הזמן הקשיח. אם לא מציינים ערך, הוא מוגדר כ- הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
endTime |
שעת הסיום של חלון הזמן הקשיח. אם לא מציינים ערך, הוא מוגדר כ- הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
softStartTime |
שעת ההתחלה הגמישה של חלון הזמן. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
softEndTime |
שעת הסיום הגמישה של חלון הזמן. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
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
אמצעי תחבורה שמתאימים לכלי רכב.
אלה צריכים להיות קבוצת משנה של אמצעי ההגעה של Routes API ב-Google Maps Platform, ראו: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
הערה: מסלולי WALKING נמצאים בגרסת בטא, ולפעמים חסרות בהם מדרכות או דרכים להולכי רגל. חובה להציג את האזהרה הזו למשתמש בכל מסלולי ההליכה שמוצגים באפליקציה.
| טיפוסים בני מנייה (enum) | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
אמצעי הגעה לא מוגדר, שווה ערך ל-DRIVING. |
DRIVING |
אמצעי הגעה שתואם למסלול נסיעה (רכב, ...). |
WALKING |
אמצעי הגעה שתואם למסלול הליכה. |
TWO_WHEELER |
רכב דו-גלגלי ממונע. לדוגמה, אופנוע. חשוב לשים לב שהאפשרות הזו שונה מאמצעי ההגעה "רכיבה על אופניים", שכולל אמצעי הגעה שמופעלים על ידי בני אדם. |
RouteModifiers
מכיל קבוצה של תנאים אופציונליים שצריך לעמוד בהם כשמחשבים מסלולים של כלי רכב. השדה הזה דומה לשדה RouteModifiers ב-Routes Preferred 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 |
עלות ההעברה של יחידת מטען אחת לאורך קילומטר אחד ברכב הזה. אפשר להשתמש בזה כפרוקסי לצריכת דלק: אם העומס הוא משקל (בניוטונים), אז עומס*קילומטר הוא ממד של אנרגיה. ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
costPerTraveledHour |
עלות הנסיעה עם יחידת מטען במשך שעה אחת ברכב הזה. ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
מרווח
טווח של סכומי טעינה קבילים.
| ייצוג ב-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
}
}
}
והמסלול שלו הוא: התחלה, איסוף, איסוף, מסירה, מסירה, סיום, עם המעברים הבאים:
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)
- מעבר 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 מייקרת פתרונות עם מעברים עמוסים.
ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| ייצוג ב-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 |
חובה. הגבול התחתון (כולל) של תחילת ההפסקה. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
latestStartTime |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. הפורמט הוא RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות אחרי הנקודה העשרונית. אפשר להשתמש גם בהיסטים אחרים, לא רק ב-Z. לדוגמה: |
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 |
חובה. משך הזמן המקסימלי המותר לכל מרווח זמן במסלול שלא כולל הפסקה של |
מטרה
היעדים מחליפים את מודל העלות לחלוטין, ולכן הם לא תואמים לעלויות קיימות. כל מטרה ממופה למספר עלויות מוגדרות מראש, למשל, כלי רכב, משלוחים או מאפייני מעבר.
ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.
| ייצוג ב-JSON |
|---|
{
"type": enum ( |
| שדות | |
|---|---|
type |
סוג היעד. |
weight |
כמה היעד הזה צריך להיחשב ביחס ליעדים האחרים. אפשר להזין כל מספר לא שלילי, וסכום המשקלים לא חייב להיות 1. ברירת המחדל של המשקלים היא 1.0. |
סוג
סוג היעד שימופה לקבוצת עלויות.
| טיפוסים בני מנייה (enum) | |
|---|---|
DEFAULT |
כדי להבטיח פתרון סביר, המערכת תשתמש בקבוצת עלויות שמוגדרת כברירת מחדל. הערה: אפשר להשתמש ביעד הזה בפני עצמו, אבל הוא גם תמיד יתווסף עם משקל 1.0, כבסיס, ליעדים שהמשתמש ציין, אם הוא עדיין לא קיים. |
MIN_DISTANCE |
יעדי MIN. לצמצם את המרחק הכולל. |
MIN_WORKING_TIME |
צמצום זמן העבודה הכולל, בחישוב של כל הרכבים. |
MIN_TRAVEL_TIME |
כמו למעלה, אבל עם התמקדות בזמן הנסיעה בלבד. |
MIN_NUM_VEHICLES |
לצמצם את מספר כלי הרכב שבהם משתמשים. |
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 אחרי שהאירוע "הראשון" התחיל.
כמה קדימויות יכולות להתייחס לאותם אירועים (או לאירועים קשורים), למשל, "האיסוף של B מתרחש אחרי המסירה של A" ו "האיסוף של C מתרחש אחרי האיסוף של B".
בנוסף, קדימויות חלות רק כששני המשלוחים מבוצעים, ואחרת המערכת מתעלמת מהן.
| ייצוג ב-JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| שדות | |
|---|---|
firstIsDelivery |
מציין אם האירוע "הראשון" הוא מסירה. |
secondIsDelivery |
מציין אם האירוע "השני" הוא מסירה. |
offsetDuration |
ההפרש בין האירוע "הראשון" לאירוע "השני". הוא יכול להיות שלילי. |
firstIndex |
אינדקס המשלוח של האירוע "הראשון". חובה למלא את השדה הזה. |
secondIndex |
אינדקס המשלוח של האירוע "השני". חובה למלא את השדה הזה. |