אינדקס
RouteOptimization
(ממשק)AggregatedMetrics
(הודעה)BatchOptimizeToursMetadata
(הודעה)BatchOptimizeToursRequest
(הודעה)BatchOptimizeToursRequest.AsyncModelConfig
(הודעה)BatchOptimizeToursResponse
(הודעה)BreakRule
(הודעה)BreakRule.BreakRequest
(הודעה)BreakRule.FrequencyConstraint
(הודעה)DataFormat
(enum)DistanceLimit
(הודעה)GcsDestination
(הודעה)GcsSource
(הודעה)InjectedSolutionConstraint
(הודעה)InjectedSolutionConstraint.ConstraintRelaxation
(הודעה)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
(הודעה)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
(enum)InputConfig
(הודעה)Location
(הודעה)OptimizeToursRequest
(הודעה)OptimizeToursRequest.SearchMode
(enum)OptimizeToursRequest.SolvingMode
(enum)OptimizeToursResponse
(הודעה)OptimizeToursResponse.Metrics
(הודעה)OptimizeToursValidationError
(הודעה)OptimizeToursValidationError.FieldReference
(הודעה)OutputConfig
(הודעה)RouteModifiers
(הודעה)Shipment
(הודעה)Shipment.Load
(הודעה)Shipment.VisitRequest
(הודעה)ShipmentModel
(הודעה)ShipmentModel.DurationDistanceMatrix
(הודעה)ShipmentModel.DurationDistanceMatrix.Row
(הודעה)ShipmentModel.PrecedenceRule
(הודעה)ShipmentRoute
(הודעה)ShipmentRoute.Break
(הודעה)ShipmentRoute.EncodedPolyline
(הודעה)ShipmentRoute.Transition
(הודעה)ShipmentRoute.VehicleLoad
(הודעה)ShipmentRoute.Visit
(הודעה)ShipmentTypeIncompatibility
(הודעה)ShipmentTypeIncompatibility.IncompatibilityMode
(enum)ShipmentTypeRequirement
(הודעה)ShipmentTypeRequirement.RequirementMode
(enum)SkippedShipment
(הודעה)SkippedShipment.Reason
(הודעה)SkippedShipment.Reason.Code
(enum)TimeWindow
(הודעה)TransitionAttributes
(הודעה)Vehicle
(הודעה)Vehicle.DurationLimit
(הודעה)Vehicle.LoadLimit
(הודעה)Vehicle.LoadLimit.Interval
(הודעה)Vehicle.TravelMode
(enum)Vehicle.UnloadingPolicy
(enum)Waypoint
(הודעה)
RouteOptimization
שירות לאופטימיזציה של סיורים ברכב.
תוקף של סוגי שדות מסוימים:
google.protobuf.Timestamp
- השעות מוצגות לפי זמן יוניקס: שניות מאז 1970-01-01T00:00:00+00:00.
- השניות צריכות להיות בטווח [0, 253402300799], כלומר בטווח [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- צריך לבטל את ההגדרה של nanos או להגדיר אותה כ-0.
google.protobuf.Duration
- השניות צריכות להיות בטווח [0, 253402300799], כלומר בטווח [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- צריך לבטל את ההגדרה של nanos או להגדיר אותה כ-0.
google.type.LatLng
- קו הרוחב חייב להיות בטווח [-90.0, 90.0].
- קו האורך חייב להיות בטווח [-180.0, 180.0].
- לפחות אחד מהערכים של קו הרוחב או קו האורך חייב להיות שונה מאפס.
BatchOptimizeTours |
---|
אופטימיזציה של סיורים לכלי רכב עבור הודעה אחת או יותר מסוג השיטה הזו היא פעולה ממושכת (LRO). הקלט לצורך אופטימיזציה (הודעות המשתמש יכול לדגום את אם השדה אם השדה
|
OptimizeTours |
---|
הפונקציה שולחת מודל המטרה היא לספק הקצאה של
|
AggregatedMetrics
מדדים מצטברים של ShipmentRoute
(לחלופין, של OptimizeToursResponse
בכל הרכיבים מסוג Transition
ו/או Visit
(לחלופין, בכל הרכיבים מסוג ShipmentRoute
).
שדות | |
---|---|
performed_ |
מספר המשלוחים שבוצעו. חשוב לזכור שזוג של איסוף ומשלוח נספר רק פעם אחת. |
travel_ |
משך הנסיעה הכולל במסלול או בפתרון. |
wait_ |
משך ההמתנה הכולל למסלול או לפתרון. |
delay_ |
משך העיכוב הכולל במסלול או בפתרון. |
break_ |
משך ההפסקה הכולל במסלול או בפתרון. |
visit_ |
משך הביקור הכולל במסלול או בפתרון. |
total_ |
משך הזמן הכולל צריך להיות שווה לסכום של כל משכי הזמן שלמעלה. במסלולים, הוא תואם גם לפרטים הבאים:
|
travel_ |
מרחק הנסיעה הכולל במסלול או בפתרון. |
max_ |
העומס המקסימלי שהושג לאורך המסלול כולו (או הפתרון כולו), לכל אחת מהכמויות במסלול הזה (או בפתרון הזה), מחושב כערך המקסימלי מכל |
BatchOptimizeToursMetadata
אין שדות לסוג הזה.
מטא-נתונים של פעולות לשיחות BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
בקשה לביצוע אופטימיזציה של סיורים בכמות גדולה כפעולה אסינכרונית. כל קובץ קלט צריך להכיל OptimizeToursRequest
אחד, וכל קובץ פלט יכיל OptimizeToursResponse
אחד. הבקשה מכילה מידע לקריאה/כתיבה ולניתוח של הקבצים. כל קובצי הקלט והפלט צריכים להיות באותו פרויקט.
שדות | |
---|---|
parent |
חובה. בחירת הפרויקט והמיקום לקריאה. פורמט: * אם לא מציינים מיקום, המערכת בוחרת אזור באופן אוטומטי. |
model_ |
חובה. פרטי קלט/פלט של כל מודל רכישה, כמו נתיבי קבצים ופורמטים של נתונים. |
AsyncModelConfig
מידע לפתרון של מודל אופטימיזציה אחד באופן אסינכרוני.
שדות | |
---|---|
display_ |
זה שינוי אופציונלי. שם מודל שהוגדר על ידי משתמש. המשתמשים יכולים להשתמש בו ככינוי כדי לעקוב אחרי מודלים. |
input_ |
חובה. מידע על מודל הקלט. |
output_ |
חובה. פרטי המיקום של הפלט הרצוי. |
BatchOptimizeToursResponse
אין שדות לסוג הזה.
תגובה לBatchOptimizeToursRequest
. הערך הזה מוחזר בפעולה הממושכת אחרי שהפעולה מסתיימת.
BreakRule
כללים ליצירת הפסקות זמן לכלי רכב (למשל הפסקות צהריים). הפסקה היא תקופה רציפה של זמן שבמהלכה הרכב נשאר במצב מנוחה במיקום הנוכחי שלו ולא יכול לבצע ביקור כלשהו. הפסקה עשויה להתרחש:
- במהלך הנסיעה בין שני ביקורים (כולל הזמן שלפני הביקור או אחריו, אבל לא באמצע הביקור). במקרה כזה, זמן הנסיעה המתאים בין הביקורים יתארך.
- או לפני הפעלת הרכב (לא ניתן להפעיל את הרכב באמצע הפסקה), במקרה כזה הוא לא משפיע על מועד הפעלת הרכב.
- או אחרי סיום הנסיעה ברכב (אותו הדבר, עם זמן סיום הנסיעה ברכב).
שדות | |
---|---|
break_ |
רצף ההפסקות. הצגת ההודעה |
frequency_ |
יכול להיות שיחולו כמה |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר המספר והסדר שלהן) שחלות על כל רכב. הערכים החוזרים של BreakRequest
מגדירים את הרצף הזה, בסדר שבו הם חייבים להתרחש. חלונות הזמן שלהם (earliest_start_time
/ latest_start_time
) עשויים לחפוף, אבל הם חייבים להיות תואמים להזמנה (הבדיקה הזו מתבצעת).
שדות | |
---|---|
earliest_ |
חובה. גבול תחתון (כולל) לתחילת ההפסקה. |
latest_ |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. |
min_ |
חובה. משך הזמן המינימלי של ההפסקה. חייב להיות חיובי. |
FrequencyConstraint
אפשר להגביל עוד יותר את התדירות והמשך הזמן של ההפסקות שצוינו למעלה, על ידי אכיפת תדירות מינימלית של ההפסקות, למשל "חובה להוסיף הפסקה של שעה אחת לפחות בכל 12 שעות". בהנחה שאפשר לפרש את המשפט הזה כ "בכל חלון זמן נע באורך 12 שעות, חייבת להיות הפסקה אחת לפחות באורך שעה אחת לפחות", הדוגמה הזו תועבר ל-FrequencyConstraint
הבא:
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { 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
שדות | |
---|---|
min_ |
חובה. משך ההפסקה המינימלי של האילוץ הזה. מספר חיובי. ראו את התיאור של |
max_ |
חובה. התקופה המקסימלית המותרת של כל מרווח זמן במסלול שלא כולל לפחות חלק מההפסקה של |
DataFormat
פורמטים של נתונים לקובצי קלט ופלט.
טיפוסים בני מנייה (enum) | |
---|---|
DATA_FORMAT_UNSPECIFIED |
ערך לא חוקי, הפורמט לא יכול להיות UNSPECIFIED. |
JSON |
JavaScript Object Notation. |
PROTO_TEXT |
פורמט טקסט של מאגרי אחסון לפרוטוקולים. https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
מגבלה שמגדירה את המרחק המקסימלי שאפשר לנסוע. הוא יכול להיות קשה או רך.
אם מוגדרת מגבלה רכה, צריך להגדיר גם את soft_max_meters
וגם את cost_per_kilometer_above_soft_max
, והם לא יכולים להיות שליליים.
שדות | |
---|---|
max_ |
מגבלה קשיחה שמגבילה את המרחק ל-max_meters לכל היותר. המגבלה חייבת להיות לא שלילית. |
soft_ |
הגבלה רכה שלא אוכפת מגבלה מרחק מקסימלית, אבל אם היא מופרת, היא גורמת לעלות שמתווספת לעלויות אחרות שהוגדרו במודל, באותה יחידה. אם הערך של soft_max_meters מוגדר, הוא חייב להיות קטן מ-max_meters ולא שלילי. |
cost_ |
העלות לקילומטר שנצברה, ועולה עד
העלות הזו לא נתמכת ב- |
cost_ |
העלות לקילומטר תחויב אם המרחק חורג מהמגבלה
העלות חייבת להיות לא שלילית. |
GcsDestination
המיקום ב-Google Cloud Storage שאליו ייכתבו קובצי הפלט.
שדות | |
---|---|
uri |
חובה. URI של Google Cloud Storage. |
GcsSource
המיקום ב-Google Cloud Storage שממנו יקרא קובץ הקלט.
שדות | |
---|---|
uri |
חובה. URI של אובייקט ב-Google Cloud Storage בפורמט |
InjectedSolutionConstraint
פתרון שהוזרק לבקשה, כולל מידע על הביקורים שצריך להגביל ואיך צריך להגביל אותם.
שדות | |
---|---|
routes[] |
המסלולים של הפתרון להזרקה. יכול להיות שחלק מהמסלולים יוסרו מהפתרון המקורי. המסלולים והמשלוחים שהושמטו חייבים לעמוד בהנחות הבסיסיות לגבי תקינות שמפורטות עבור |
skipped_ |
משלוחים של הפתרון להזרקה שקודמו. יכול להיות שחלק מהם לא ייכללו בפתרון המקורי. מידע נוסף מפורט בשדה |
constraint_ |
לקבוצות אפס או יותר של כלי רכב, מציין מתי ואיך להקל על האילוצים. אם השדה הזה ריק, כל מסלולי כלי הרכב שאינם ריקים מוגבלים לחלוטין. |
ConstraintRelaxation
עבור קבוצה של כלי רכב, מציינים את ערכי הסף שבהם ההגבלות על הביקורים יתרופפו ואת רמת ההרפיה. משלוחים שמפורטים בשדה skipped_shipment
מוגבלים לדילוג, כלומר אי אפשר לבצע אותם.
שדות | |
---|---|
relaxations[] |
כל ההקלות על אילוצים של ביקורים שחלות על ביקורים במסלולים עם כלי רכב ב- |
vehicle_ |
מציין את אינדקסי כלי הרכב שאליהם חל האילוץ אם הערך של |
הירגעות
אם השדה relaxations
ריק, שעת ההתחלה והסדר של כל הביקורים ב-routes
מוגבלים לחלוטין, ואי אפשר להוסיף או להכניס ביקורים חדשים למסלולים האלה. בנוסף, שעת ההתחלה ושעת הסיום של הרכב ב-routes
מוגבלות לחלוטין, אלא אם הרכב ריק (כלומר, אין לו ביקורים והערך של used_if_route_is_empty
מוגדר כ-false במודל).
relaxations(i).level
מציין את רמת ההרפיה של האילוצים שחלה על ביקור מס' j שעומד בדרישות הבאות:
route.visits(j).start_time >= relaxations(i).threshold_time
וגםj + 1 >= relaxations(i).threshold_visit_count
באופן דומה, התנאי להתנעת הרכב משוחרר ל-relaxations(i).level
אם הוא עומד בתנאים הבאים:
vehicle_start_time >= relaxations(i).threshold_time
וגםrelaxations(i).threshold_visit_count == 0
והקצה של הרכב משוחרר ל-relaxations(i).level
אם הוא עומד בתנאים הבאים:vehicle_end_time >= relaxations(i).threshold_time
וגםroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
כדי להחיל רמת הפחתת עומס אם הביקור עומד בקריטריון threshold_visit_count
או בקריטריון threshold_time
, מוסיפים שני relaxations
עם אותו level
: אחד עם הגדרת threshold_visit_count
בלבד והשני עם הגדרת threshold_time
בלבד. אם ביקור עומד בתנאים של כמה relaxations
, המערכת מחילה את הרמה הכי פחות מחמירה. כתוצאה מכך, מרגע היציאה מהרכב ועד לסיום הנסיעה, רמת ההרפיה הולכת וגדלה: כלומר, רמת ההרפיה לא פוחתת ככל שהנסיעה מתקדמת.
התזמון והרצף של ביקורים במסלול שלא עומדים בתנאי הסף של אף relaxations
מוגבלים לחלוטין, ואי אפשר להוסיף ביקורים לרצפים האלה. כמו כן, אם התחלה או סיום של נסיעה ברכב לא עומדים בתנאי של כל הקלות, השעה קבועה, אלא אם הרכב ריק.
שדות | |
---|---|
level |
רמת ההרפיה של האילוצים שחלה כאשר התנאים מתקיימים ב- |
threshold_ |
המועד שבו ניתן להחיל את ההרפיה |
threshold_ |
מספר הביקורים שבהם ניתן להחיל את ההקלה אם הערך הוא |
רמה
מייצג את רמות ההרפיה השונות של האילוצים, שחלות על ביקור ועל הביקורים הבאים אחריו אם הוא עומד בתנאי הסף.
הרשימה הבאה מסודרת לפי רמת הרפיה גוברת.
טיפוסים בני מנייה (enum) | |
---|---|
LEVEL_UNSPECIFIED |
רמת ההרפיה המשתמעת שמוגדרת כברירת מחדל: לא מתבצעת הרפיה של אף אחת מהמגבלות, כלומר כל הביקורים מוגבלים באופן מלא. אסור להשתמש בערך הזה באופן מפורש ב- |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
לא תהיה הגבלה על שעות ההתחלה של הביקורים ועל שעות ההתחלה/הסיום של הרכב, אבל כל ביקור יישאר קשור לאותו רכב וצריך לציית לסדר הביקורים: אי אפשר להוסיף ביקור ביניהן או לפניהן. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
זהה ל-RELAX_VISIT_TIMES_AFTER_THRESHOLD , אבל גם רצף הביקורים משוחרר יותר: אפשר לבצע ביקורים רק ברכב הזה, אבל יכול להיות שהם לא יבוצעו. |
RELAX_ALL_AFTER_THRESHOLD |
זהה ל-RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , אבל הרכב גם משוחרר: הביקורים הם בחינם לחלוטין אחרי מועד הסף או במועד הסף, ויכול להיות שהם לא יבוצעו. |
InputConfig
מציינים קלט עבור [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
שדות | |
---|---|
data_ |
חובה. הפורמט של נתוני הקלט. |
שדה האיחוד source . חובה. הערך של source יכול להיות רק אחת מהאפשרויות הבאות: |
|
gcs_ |
מיקום ב-Google Cloud Storage. זה חייב להיות אובייקט יחיד (קובץ). |
מיקום
עטיפה של מיקום (נקודה גיאוגרפית וכותרת אופציונלית).
שדות | |
---|---|
lat_ |
הקואורדינטות הגיאוגרפיות של נקודת הציון. |
heading |
כיוון המצפן שמשויך לכיוון של זרימת התנועה. הערך הזה משמש לציון הצד של הכביש שבו יתבצע האיסוף וההחזרה. ערכי הכיוון יכולים להיות מ-0 עד 360, כאשר 0 מציין כיוון צפון, 90 מציין כיוון מזרח וכו'. |
OptimizeToursRequest
בקשה שניתנת לפתרון של אופטימיזציה של סיור, שמגדיר את מודל המשלוח לפתרון וגם את פרמטרים האופטימיזציה.
שדות | |
---|---|
parent |
חובה. בוחרים את הפרויקט או המיקום שאליהם רוצים להתקשר. פורמט: * אם לא מציינים מיקום, המערכת בוחרת אזור באופן אוטומטי. |
timeout |
אם מגדירים את הזמן הקצוב הזה, השרת מחזיר תשובה לפני שחלפו פרק הזמן הקצוב או לפני שחלף מועד היעד של השרת לבקשות סינכרוניות, המוקדם מביניהם. בבקשות אסינכררוניות, השרת ייצור פתרון (אם אפשר) לפני שפג תוקף הזמן הקצוב. |
model |
מודל המשלוח לפתרון. |
solving_ |
כברירת מחדל, מצב הפתרון הוא |
search_ |
מצב החיפוש ששימש לפתרון הבקשה. |
injected_ |
הנחיה של אלגוריתם האופטימיזציה למצוא פתרון ראשון שדומה לפתרון קודם. המודל מוגבל כשיוצרים את הפתרון הראשון. כל משלוחים שלא בוצעו במסלול מסוים יועברו אוטומטית לשלב הבא בפתרון, אבל יכול להיות שהם יבוצעו בפתרון הבא. הפתרון צריך לעמוד בהנחות בסיסיות לגבי תקינות:
אם הפתרון שהוזן לא מתאים, לא בהכרח תוחזר שגיאת אימות. יכול להיות שתוחזר שגיאה שמציינת את חוסר ההתאמה. |
injected_ |
להגביל את אלגוריתם האופטימיזציה כדי למצוא פתרון סופי שדומה לפתרון קודם. לדוגמה, אפשר להשתמש באפשרות הזו כדי להקפיא חלקים של מסלולים שכבר הושלמו או שעוד צריך להשלים, אבל אסור לשנות אותם. אם הפתרון שהוזן לא מתאים, לא בהכרח תוחזר שגיאת אימות. יכול להיות שתוחזר שגיאה שמציינת את חוסר ההתאמה. |
refresh_ |
אם הערך לא ריק, המסלולים הנתונים יתרעננו בלי לשנות את הרצף הבסיסי של הביקורים או זמני הנסיעה שלהם: רק פרטים אחרים יעודכנו. הפעולה הזו לא פותרת את הבעיה במודל. נכון ל-11 בנובמבר 2020, הפונקציה מאכלסת רק את הקווים הפוליגונליים של מסלולים שאינם ריקים, וצריך שהערך של יכול להיות שהשדות אסור להשתמש בשדה הזה יחד עם ל- |
interpret_ |
אם הערך הוא true:
הפרשנות הזו חלה על השדות אם הערך הוא True, תוויות בקטגוריות הבאות חייבות להופיע לכל היותר פעם אחת בקטגוריה שלהן:
אם הערך של הסרה של ביקורים במסלולים או של מסלולים שלמים מהפתרון שהוזן יכולה להשפיע על האילוצים המשתמעים, וכתוצאה מכך לגרום לשינוי בפתרון, לשגיאות אימות או לכך שהפתרון לא יהיה ריאלי. הערה: מבצע הקריאה החוזרת צריך לוודא שכל |
consider_ |
כדאי להביא בחשבון את אומדן התנועה בזמן החישוב של השדות |
populate_ |
אם הערך הוא true, קווים פוליגונליים יאוכלסו בתשובות |
populate_ |
אם הערך הוא True, קווים פוליגונליים ואסימונים של מסלולים יאוכלסו בתגובה |
allow_ |
אם ההגדרה הזו מוגדרת, לבקשה יכול להיות מועד יעד (מידע נוסף זמין בכתובת https://grpc.io/blog/deadlines) של עד 60 דקות. אחרת, מועד ההגשה האחרון הוא 30 דקות בלבד. חשוב לזכור שלבקשות לטווח ארוך יש סיכון גבוה יותר (אבל עדיין קטן) להפרעה. |
use_ |
אם הערך הוא true, מרחקי הנסיעה יחושבו לפי מרחקים גיאודזיים במקום מרחקים במפות Google, וזמני הנסיעה יחושבו לפי מרחקים גיאודזיים עם מהירות שמוגדרת על ידי |
label |
תווית שעשויה לשמש לזיהוי הבקשה הזו, שתדווח ב- |
geodesic_ |
כשהערך של |
max_ |
חיתוך מספר שגיאות האימות שמוחזרות. בדרך כלל השגיאות האלה מצורפות לעומס הנתונים של שגיאת INVALID_ARGUMENT כפרטי שגיאה של BadRequest (https://cloud.google.com/apis/design/errors#error_details), אלא אם הוגדר solving_mode=VALIDATE_ONLY: ראו את השדה |
SearchMode
מצב שמגדיר את התנהגות החיפוש, תוך התחשבות בזמן האחזור לעומת איכות הפתרון. בכל המצבים, מועד ההגשה האחרון של הבקשה ברמת החשבון הארגוני נאכף.
טיפוסים בני מנייה (enum) | |
---|---|
SEARCH_MODE_UNSPECIFIED |
מצב חיפוש לא צוין, שווה ל-RETURN_FAST . |
RETURN_FAST |
כדאי להפסיק את החיפוש אחרי שמוצאים את הפתרון הראשון שטוב. |
CONSUME_ALL_AVAILABLE_TIME |
כדאי להקדיש את כל הזמן הזמין לחיפוש פתרונות טובים יותר. |
SolvingMode
הגדרה של האופן שבו הפתרון צריך לטפל בבקשה. בכל המצבים מלבד VALIDATE_ONLY
, אם הבקשה לא חוקית, תתקבל הודעת השגיאה INVALID_REQUEST
. אפשר להיעזר במאמר max_validation_errors
כדי להגביל את מספר השגיאות שיוחזרו.
טיפוסים בני מנייה (enum) | |
---|---|
DEFAULT_SOLVE |
פותרים את המודל. יכול להיות שיופיעו אזהרות ב-[OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. |
VALIDATE_ONLY |
רק מאמת את המודל בלי לפתור אותו: מאכלס כמה שיותר OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
מאכלס רק את חשוב: לא כל המשלוחים שלא ניתן לבצע אותם מוחזרים כאן, אלא רק אלה שזוהו כבלתי אפשריים במהלך העיבוד המקדים. |
OptimizeToursResponse
תגובה לאחר פתרון בעיה באופטימיזציה של סיור, שמכילה את המסלולים שבהם כל רכב נוסע, את המשלוחים שנדחו ואת העלות הכוללת של הפתרון.
שדות | |
---|---|
routes[] |
מסלולים שחושבו לכל רכב. המסלול ה-i תואם לרכב ה-i במודל. |
request_ |
עותק של |
skipped_ |
רשימה של כל המשלוחים שנדחו. |
validation_ |
רשימה של כל שגיאות האימות שזיהינו באופן עצמאי. אפשר לעיין בהסבר לגבי 'שגיאות מרובות' לגבי ההודעה |
metrics |
מדדי משך זמן, מרחק ושימוש של הפתרון הזה. |
מדדים
מדדים כלליים, שמצטברים מכל המסלולים.
שדות | |
---|---|
aggregated_ |
נתון נצבר מכל הנתיבים. כל מדד הוא הסכום (או הערך המקסימלי, עבור עומסי עבודה) של כל שדות |
skipped_ |
מספר המשלוחים החובה שקודם להם עברה 'דילוג'. |
used_ |
מספר כלי הרכב שבהם נעשה שימוש. הערה: אם מסלול של רכב ריק ו- |
earliest_ |
שעת ההתחלה המוקדמת ביותר של רכב משומש, מחושבת כערך המינימלי של |
latest_ |
שעת הסיום האחרונה של רכב משומש, מחושבת כערך המקסימלי של |
costs |
עלות הפתרון, לפי פירוט של שדות הבקשה שקשורים לעלויות. המפתחות הם נתיבים של פרוטו, ביחס לקלט OptimizeToursRequest, למשל 'model.shipments.pickups.cost', והערכים הם העלות הכוללת שנוצרה על ידי שדה העלות התואם, שנצברה לאורך כל הפתרון. במילים אחרות, costs["model.shipments.pickups.cost"] הוא הסכום של כל עלויות האיסוף בפתרון. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות ל-TransitionAttributes שמדווחות רק באופן מצטבר החל מינואר 2022. |
total_ |
העלות הכוללת של הפתרון. הסכום של כל הערכים במפת העלויות. |
OptimizeToursValidationError
תיאור של שגיאה או אזהרה שנתקלו בהן במהלך אימות של OptimizeToursRequest
.
שדות | |
---|---|
code |
שגיאת אימות מוגדרת על ידי הצמד ( השדות שמופיעים אחרי הקטע הזה מספקים הקשר נוסף לגבי השגיאה. MULTIPLE ERRORS: כשיש כמה שגיאות, תהליך האימות מנסה להפיק כמה מהן. בדומה למה שמתרחש במהלך הידור, זהו תהליך לא מושלם. חלק משגיאות האימות יהיו 'קריטיות', כלומר הן יעצרו את כל תהליך האימות. זה המצב, בין היתר, בשגיאות מסוג יציבות: הערכים של |
display_ |
השם המוצג של השגיאה. |
fields[] |
הקשר של שגיאה יכול לכלול 0, 1 (בדרך כלל) או יותר שדות. לדוגמה, אפשר להפנות לכלי הרכב מס' 4 ולאיסוף הראשון של משלוח מס' 2 באופן הבא:
עם זאת, חשוב לזכור שהעוצמה של |
error_ |
מחרוזת לתיאור השגיאה, שאנשים יכולים לקרוא. יש מיפוי אחד-לאחד בין יציבות: לא יציבה: הודעת השגיאה שמשויכת ל- |
offending_ |
יכול להכיל את הערכים של השדות. האפשרות הזו לא תמיד זמינה. אין להסתמך עליו בשום אופן, וצריך להשתמש בו רק לניפוי באגים ידני של מודל. |
FieldReference
הקשר של שגיאת האימות. הערך FieldReference
תמיד מתייחס לשדה נתון בקובץ הזה, ופועל לפי אותו מבנה היררכי. לדוגמה, אפשר לציין את רכיב מס' 2 של start_time_windows
ברכב מס' 5 באמצעות:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
עם זאת, אנחנו משמיטים ישויות ברמה העליונה כמו OptimizeToursRequest
או ShipmentModel
כדי למנוע עומס בהודעה.
שדות | |
---|---|
name |
שם השדה, למשל "vehicles". |
sub_ |
שדה משנה בתצוגת עץ רפלקטיבית, אם יש צורך. |
שדה האיחוד הערך של |
|
index |
האינדקס של השדה אם הוא חוזר. |
key |
מפתח אם השדה הוא מפה. |
OutputConfig
מציינים יעד לתוצאות של [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
שדות | |
---|---|
data_ |
חובה. פורמט הנתונים של הפלט. |
שדה האיחוד destination . חובה. הערך של destination יכול להיות רק אחת מהאפשרויות הבאות: |
|
gcs_ |
המיקום ב-Google Cloud Storage שאליו רוצים לכתוב את הפלט. |
RouteModifiers
האובייקט הזה מכיל קבוצה של תנאים אופציונליים שצריך לעמוד בהם כשמחשבים מסלולים לכלי רכב. הערך הזה דומה ל-RouteModifiers
בממשק ה-API המועדף של מסלולים בפלטפורמה של מפות Google. מידע נוסף זמין בכתובת https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
שדות | |
---|---|
avoid_ |
מציין אם להימנע מכבישי אגרה במקרים סבירים. המערכת תעדיף מסלולים שלא כוללים כבישי אגרה. המאפיין הזה רלוונטי רק לאמצעי הגעה ממונעים. |
avoid_ |
מציין אם להימנע מכבישים מהירים במקרים סבירים. המערכת תעדיף מסלולים שלא כוללים כבישים מהירים. המאפיין הזה רלוונטי רק לאמצעי הגעה ממונעים. |
avoid_ |
קובעת אם להימנע ממעבורות במקרים סבירים. המערכת תעדיף מסלולים שלא כוללים נסיעה במעבורות. המאפיין הזה רלוונטי רק לאמצעי הגעה ממונעים. |
avoid_ |
זה שינוי אופציונלי. ההגדרה הזו קובעת אם להימנע מניהול ניווט בתוך מבנים, במקרים שבהם זה אפשרי. המערכת תעדיף מסלולים שלא כוללים ניווט בתוך מבנים. ההגדרה חלה רק על מצב הנסיעה |
משלוח
המשלוח של פריט אחד, מאחד המקומות שבהם הוא נאסף ועד לאחד המקומות שבהם הוא נמסר. כדי שהמשלוח ייחשב כמיושם, רכב ייחודי צריך לבקר באחד ממיקומי האיסוף שלו (ולצמצם את הקיבולת הפנויה שלו בהתאם), ולאחר מכן לבקר באחד ממיקומי המסירה שלו בשלב מאוחר יותר (ולכן להגדיל מחדש את הקיבולת הפנויה שלו בהתאם).
שדות | |
---|---|
display_ |
שם התצוגה שהוגדר על ידי המשתמש למשלוח. השם יכול להכיל עד 63 תווים, וניתן להשתמש בתווים של UTF-8. |
pickups[] |
קבוצה של חלופות לאיסוף המשוכות למשלוח. אם לא צוין מיקום, הרכב צריך להגיע רק למיקום שמתאים להעברות. |
deliveries[] |
קבוצה של חלופות משלוח שמשויכות למשלוח. אם לא צוין מיקום, הרכב צריך להגיע רק למיקום שמתאים לאיסוף. |
load_ |
דרישות הטעינה של המשלוח (למשל משקל, נפח, מספר משטחים וכו'). המפתחות במפה צריכים להיות מזהים שמתארים את סוג העומס התואם, רצוי שגם יחד עם היחידות. לדוגמה: weight_kg, volume_gallons, pallet_count וכו'. אם מפתח נתון לא מופיע במפה, העומס התואם נחשב כ-null. |
allowed_ |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם השדה ריק, כל כלי הרכב יכולים לבצע את הפעולה. הרכבים מוצגים לפי המדד שלהם ברשימה |
costs_ |
העלות שנצברת כשהמשלוח הזה נמסר על ידי כל רכב. אם מציינים את השדה, הוא חייב לכלול:
העלויות האלה חייבות להיות באותה יחידה כמו |
costs_ |
אינדקסים של כלי הרכב שאליהם |
pickup_ |
משך הזמן המרבי המוחלט של הסטייה מהמסלול בהשוואה לנתיב הקצר ביותר מהאיסוף אל המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, ההגדרה
אם צוינו מגבלות יחסיות ומוחלטות באותה משלוח, המערכת תשתמש במגבלה המחמירה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. |
pickup_ |
משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המסירה של המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. הזמן הזה לא תלוי בחלופות שנבחרו לאיסוף ולמשלוח, או במהירות הרכב. אפשר לציין את האפשרות הזו לצד אילוצים של עיקוף מקסימלי: הפתרון יתייחס לשתי המפרטים. |
shipment_ |
מחרוזת לא ריקה שצוינה בה 'סוג' למשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר אי-תאימות או דרישות בין שונה מ- |
label |
תווית של המשלוח. התווית הזו מדווחת בתגובה בשדה |
ignore |
אם הערך הוא True, המערכת תדלג על המשלוח הזה, אבל לא תחיל התעלמות משליחה גורמת לשגיאת אימות אם יש מותר להתעלם משליחה שמתבצעת ב- |
penalty_ |
אם המשלוח לא יושלם, העונש הזה יתווסף לעלות הכוללת של הנתיבים. משלוח נחשב כסגור אם מתבצעת ביקור באחת מהאפשרויות לאיסוף ולמסירה. העלות יכולה להיות מבוטאת באותה יחידה שבה נעשה שימוש בכל שאר השדות הקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס הזה, הוא נחשב כקנס ללא הגבלת זמן, כלומר חובה להשלים את המשלוח. |
pickup_ |
משך הזמן המקסימלי של הסטייה היחסית בהשוואה לנתיב הקצר ביותר מהאיסוף למסירה. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, ההגדרה
אם צוינו מגבלות יחסיות ומוחלטות באותה משלוח, המערכת תשתמש במגבלה המחמירה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. |
טען
כשמבצעים ביקור, סכום מוגדר מראש יכול להתווסף לעומס הרכב אם מדובר באיסוף עצמי, או להחסור ממנו אם מדובר במשלוח. הסכום הזה מוגדר בהודעה הזו. load_demands
.
שדות | |
---|---|
amount |
הסכום שלפיו העומס ברכב שבו מתבצע הביקור המתאים ישתנה. מכיוון שמדובר במספר שלם, מומלץ למשתמשים לבחור יחידה מתאימה כדי למנוע אובדן דיוק. הערך חייב להיות ≥ 0. |
VisitRequest
בקשה לביקור שאפשר לבצע ברכב: יש לה מיקום גיאוגרפי (או שניים, ראו בהמשך), שעות פתיחה וסגירה שמיוצגות על ידי חלונות זמן ומשך זמן השירות (הזמן שהרכב נמצא במקום לאחר שהוא הגיע לאיסוף או להעברת סחורות).
שדות | |
---|---|
arrival_ |
המיקום הגיאוגרפי שאליו מגיע הרכב במהלך ביצוע ה- |
arrival_ |
נקודת הדרך שבה הרכב מגיע כשמבצעים את ה- |
departure_ |
המיקום הגיאוגרפי שבו הרכב יוצא לאחר השלמת ה |
departure_ |
נקודת הציון שממנה הרכב יוצא אחרי השלמת |
tags[] |
מציין את התגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
time_ |
חלונות זמן שמגבילים את זמן ההגעה לביקור. לתשומת ליבכם, כלי רכב עשוי לצאת מחוץ לחלון הזמן של שעת ההגעה, כלומר שעת ההגעה + משך הנסיעה לא חייבים להיות בתוך חלון זמן. אם הרכב יגיע לפני אם השדה חלונות הזמן חייבים להיות נפרדים, כלומר חלון זמן אחד לא יכול לחופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר עולה. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שחלף מהגעת הרכב עד ליציאה שלו (צריך להוסיף את זמן ההמתנה האפשרי, ראו |
cost |
העלות של טיפול בבקשה הזו לביקור במסלול של כלי רכב. אפשר להשתמש באפשרות הזו כדי לשלם עלויות שונות לכל אחת מהאפשרויות החלופיות לאיסוף או למשלוח של משלוח. העלות הזו צריכה להיות באותה יחידה כמו |
load_ |
דרישות העומס של בקשת הביקור הזו. השדה הזה דומה לשדה |
visit_ |
מציין את סוגי הביקורים. אפשר להשתמש בנתון הזה כדי להקצות זמן נוסף שנדרש לרכב כדי להשלים את הביקור הזה (ראו סוג יכול להופיע רק פעם אחת. |
label |
תווית של |
ShipmentModel
מודל משלוח מכיל קבוצה של משלוחים שצריך לבצע באמצעות קבוצה של כלי רכב, תוך צמצום העלות הכוללת, שהיא הסכום של:
- העלות של ניתוב כלי הרכב (סכום העלות לכל משך זמן, העלות לכל זמן נסיעה והעלות הקבועה בכל כלי הרכב).
- את הקנסות על משלוחים שלא בוצעו.
- העלות של משך הזמן הכולל של המשלוחים
שדות | |
---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצה של כלי רכב שאפשר להשתמש בהם לביצוע ביקורים. |
global_ |
שעת ההתחלה ושעת הסיום הגלובלית של המודל: לא ניתן להתייחס לשעות מחוץ לטווח הזה כחוקיות. טווח הזמן של המודל צריך להיות פחות משנה, כלומר הערכים של כשמשתמשים בשדות |
global_ |
אם לא מגדירים ערך, המערכת משתמשת בערך ברירת המחדל 00:00:00 UTC, 1 בינואר 1971 (כלומר, שניות: 31536000, ננו-שניות: 0). |
global_ |
'משך הזמן הגלובלי' של התוכנית הכוללת הוא ההפרש בין שעת ההתחלה היעילה המוקדמת ביותר לשעת הסיום היעילה האחרונה של כל הרכבים. המשתמשים יכולים להקצות עלות לשעה לכמות הזו כדי לנסות לבצע אופטימיזציה להשגת השלמת המשימה המהירה ביותר, לדוגמה. העלות הזו צריכה להיות באותה יחידה כמו |
duration_ |
מציין את מטריצות משך הזמן והמרחקים שמשמשות במודל. אם השדה הזה ריק, המערכת תשתמש במקום זאת במפות Google או במרחקים גיאודזיים, בהתאם לערך של השדה דוגמאות לשימוש:
|
duration_ |
תגים שמגדירים את המקורות של מטריצות המרחק והמשך הזמן. הערך התגים תואמים ל- |
duration_ |
תגים שמגדירים את היעדים של מטריצות משך הזמן והמרחק. התגים תואמים ל- |
transition_ |
מאפייני המעבר נוספו למודל. |
shipment_ |
קבוצות של shipment_types לא תואמים (ראו |
shipment_ |
קבוצות של דרישות |
precedence_ |
קבוצת כללי עדיפות שצריך לאכוף במודל. |
max_ |
מגביל את המספר המקסימלי של כלי רכב פעילים. רכב נחשב לפעיל אם בוצעה בו לפחות משלוח אחד במסלול שלו. אפשר להשתמש באפשרות הזו כדי להגביל את מספר המסלולים במקרה שיש פחות נהגים מכלי רכב, וכי צי הרכבים הוא הטרוגני. לאחר מכן, המערכת תבצע אופטימיזציה כדי לבחור את קבוצת המשנה הטובה ביותר של כלי הרכב לשימוש. חייב להיות חיובי באופן מוחלט. |
DurationDistanceMatrix
מציין מטריצה של משך זמן ומרחק מנקודת ההתחלה של הביקור והרכב ועד לנקודת הסיום של הביקור והרכב.
שדות | |
---|---|
rows[] |
מציין את השורות של מטריצות משך הזמן והמרחק. הוא חייב להכיל את אותו מספר רכיבים כמו |
vehicle_ |
תג שמגדיר לאילו כלי רכב חלה מטריצת משך הזמן והמרחק הזו. אם השדה ריק, הוא חל על כל כלי הרכב, וניתן להשתמש רק במטריצה אחת. כל התחלה של כלי רכב חייבת להתאים למטריצה אחת בלבד, כלומר אחד מהשדות לכל המטריצות צריך להיות |
שורה
מציין שורה במטריצה של משך הזמן והמרחק.
שדות | |
---|---|
durations[] |
ערכי משך הזמן בשורה נתונה. הוא חייב להכיל את אותו מספר רכיבים כמו |
meters[] |
ערכי המרחק בשורה נתונה. אם אין עלויות או אילוצים שמפנים למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, צריך לכלול בו כמה אלמנטים כמו |
PrecedenceRule
כלל עדיפות בין שני אירועים (כל אירוע הוא איסוף או מסירה של משלוח): האירוע 'שני' צריך להתחיל לפחות offset_duration
אחרי שהאירוע 'ראשון' התחיל.
כמה סדרי עדיפויות יכולים להתייחס לאותו אירוע (או לאירועים קשורים), למשל: "האיסוף של B מתרחש אחרי המסירה של A" ו "האיסוף של C מתרחש אחרי האיסוף של B".
בנוסף, העדיפויות חלות רק כששתי ההעברות מתבצעות, אחרת הן מתעלמות.
שדות | |
---|---|
first_ |
מציין אם האירוע 'ראשון' הוא העברה. |
second_ |
מציין אם האירוע 'שני' הוא מסירה. |
offset_ |
ההיסט בין האירוע 'ראשון' לבין האירוע 'שני'. הערך יכול להיות שלילי. |
first_ |
אינדקס המשלוח של האירוע 'ראשון'. חובה לציין את השדה הזה. |
second_ |
אינדקס המשלוח של האירוע 'שני'. חובה לציין את השדה הזה. |
ShipmentRoute
אפשר לפרק את המסלול של רכב, לאורך ציר הזמן, באופן הבא (אנחנו מניחים שיש n ביקורים):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
חשוב לדעת שיש הבדל בין:
- 'אירועים מדויקים', כמו תחילת הנסיעה וסיום הנסיעה ותחילת הביקור וסיום הביקור (כלומר הגעה ויציאה). הם מתרחשים בשנייה נתונה.
- 'מרווחי זמן', כמו הביקורים עצמם והמעבר בין הביקורים. לפעמים מרווחי הזמן יכולים להיות באורך אפס, כלומר להתחיל ולהסתיים באותה שנייה, אבל לרוב הם באורך חיובי.
Invariants:
- אם יש n ביקורים, יש n+1 מעברים.
- ביקור תמיד מוקף במעבר לפניו (באותו אינדקס) ובמעבר אחריו (האינדקס + 1).
- אחרי התנעת הרכב תמיד מופיע המעבר מס' 0.
- תמיד מופיעה המעברה מס' n לפני סיום הרכב.
בהמשך, נסביר מה קורה במהלך Transition
ו-Visit
:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
לסיום, כך אפשר לסדר את האירועים 'נסיעה', 'הפסקות', 'עיכוב' ו'המתנה' במהלך מעבר.
- הן לא חופפות.
- הערך של DELAY הוא ייחודי וחייב להיות תקופה רציפה של זמן ממש לפני הביקור הבא (או סיום הנסיעה ברכב). לכן, מספיק לדעת את משך העיכוב כדי לדעת את שעת ההתחלה והסיום שלו.
- ההפסקות הן תקופות זמן רצופות ולא חופפות. התגובה מציינת את שעת ההתחלה ואת משך הזמן של כל הפסקה.
- האירועים TRAVEL ו-WAIT הם 'ניתנים לביטול': אפשר להפריע להם כמה פעמים במהלך המעבר הזה. הלקוחות יכולים להניח שהנסיעה תתבצע "בהקדם האפשרי", ושהזמן שנותר יתמלא ב'המתנה'.
דוגמה (מורכבת):
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
שדות | |
---|---|
vehicle_ |
הרכב שמבצע את המסלול, שמזוהה לפי האינדקס שלו במקור |
vehicle_ |
התווית של הרכב שמבצע את המסלול הזה, שווה ל- |
vehicle_ |
השעה שבה הרכב מתחיל את המסלול. |
vehicle_ |
השעה שבה הרכב מסיים את המסלול. |
visits[] |
רצף מסודר של ביקורים שמייצג מסלול. visits[i] הוא הביקור ה-i במסלול. אם השדה הזה ריק, הרכב נחשב ללא בשימוש. |
transitions[] |
רשימה מסודרת של מעברים במסלול. |
has_ |
כשהערך של
סביר להניח שהגעה ל-next_visit תתרחש מאוחר יותר מחלון הזמן הנוכחי שלה בגלל האומדן המוגדל של זמן הנסיעה |
route_ |
ייצוג הפוליגון המקודד של המסלול. השדה הזה מאוכלס רק אם השדה |
breaks[] |
ההפסקות שתוזמנו לרכב שמבצע את המסלול הזה. הרצף |
metrics |
מדדי משך הזמן, המרחק והעומס במסלול הזה. השדות של |
route_ |
העלות של המסלול, לפי פירוט בשדות הבקשה שקשורים לעלויות. המפתחות הם נתיבים של פרוטו, ביחס לקלט OptimizeToursRequest, למשל 'model.shipments.pickups.cost', והערכים הם העלות הכוללת שנוצרה על ידי שדה העלות התואם, שנצברה לאורך המסלול כולו. במילים אחרות, costs["model.shipments.pickups.cost"] הוא הסכום של כל עלויות האיסוף במסלול. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות ל-TransitionAttributes שמדווחות רק באופן מצטבר החל מינואר 2022. |
route_ |
העלות הכוללת של המסלול. הסכום של כל העלויות במפת העלויות. |
הפסקה
נתונים שמייצגים את הביצוע של הפסקה.
שדות | |
---|---|
start_ |
שעת ההתחלה של ההפסקה. |
duration |
משך ההפסקה. |
EncodedPolyline
הייצוג המקודד של קו מרובה. מידע נוסף על קידוד קווים פוליגונים זמין כאן: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
שדות | |
---|---|
points |
מחרוזת שמייצגת נקודות מקודדות של הקו המורכב. |
מעבר
מעבר בין שני אירועים במסלול. אפשר לעיין בתיאור של ShipmentRoute
.
אם לרכב אין start_location
ו/או end_location
, מדדי הנסיעה התואמים יהיו 0.
שדות | |
---|---|
travel_ |
משך הנסיעה במהלך המעבר. |
travel_ |
המרחק שעברתם במהלך המעבר. |
traffic_ |
כשמבקשים מידע על תנועה דרך |
delay_ |
סכום משך הזמן של העיכובים שחלים על המעבר הזה. אם יש עיכוב, הוא מתחיל בדיוק |
break_ |
סכום משך ההפסקות שהתרחשו במהלך המעבר הזה, אם היו כאלה. פרטים על שעת ההתחלה והמשך של כל הפסקה נשמרים ב- |
wait_ |
משך הזמן שהמתנתם במהלך המעבר. משך ההמתנה תואם לזמן ההמתנה ללא פעילות, ולא כולל את זמן ההפסקה. חשוב גם לזכור שזמן ההמתנה הזה עשוי להתחלק למספר מקטעים לא רציפים. |
total_ |
משך המעבר הכולל, לצורך נוחות. הוא שווה ל-:
|
start_ |
שעת ההתחלה של המעבר הזה. |
route_ |
ייצוג הקוד של הקו הפוליגוני של המסלול שבו נעשה שימוש במהלך המעבר. השדה הזה מאוכלס רק אם השדה |
route_ |
פלט בלבד. אסימון אטום שאפשר להעביר ל-Navigation SDK כדי לשחזר את המסלול במהלך הניווט, ובמקרה של שינוי מסלול, לשמור על הכוונה המקורית שלכם כשיצרתם את המסלול. מתייחסים לאסימון הזה כאל blob אטום. אין להשוות את הערך שלו בין בקשות שונות, כי הערך עשוי להשתנות גם אם השירות מחזיר את אותו מסלול בדיוק. השדה הזה מאוכלס רק אם השדה |
vehicle_ |
עומסי הרכב במהלך המעבר הזה, לכל סוג שמופיע ב- העומסים במהלך המעבר הראשון הם העומסים ההתחלתיים של מסלול הרכב. לאחר מכן, אחרי כל ביקור, הערכים של |
VehicleLoad
דיווח על העומס בפועל של הרכב בשלב כלשהו במסלול, לסוג נתון (ראו Transition.vehicle_loads
).
שדות | |
---|---|
amount |
עומס הרכב, לפי הסוג הנתון. בדרך כלל, סוג היחידה של העומס מצוין. |
כניסה
ביקור שבוצע במהלך מסלול. הביקור הזה תואם לאיסוף או למשלוח של Shipment
.
שדות | |
---|---|
shipment_ |
אינדקס השדה |
is_ |
אם הערך הוא True, הביקור תואם לאיסוף של |
visit_ |
האינדקס של |
start_ |
השעה שבה מתחיל הביקור. חשוב לדעת שהרכב עשוי להגיע למיקום הביקור לפני המועד הזה. השעות תואמות ל |
load_ |
הביקוש הכולל לטעינת ביקורים כסכום של המשלוח ובקשת הביקור |
detour |
זמן עיקוף נוסף עקב המשלוח שנבדק במסלול לפני הביקור ועקב זמן ההמתנה הפוטנציאלי שנגרם בגלל חלונות הזמן. אם הביקור הוא מסירה, הסטייה מחושבת מהביקור התואם לאיסוף והיא שווה ל:
אחרת, הוא מחושב מהרכב
|
shipment_ |
עותק של |
visit_ |
עותק של |
ShipmentTypeIncompatibility
מציין אי-תאימות בין משלוחים בהתאם ל-shipment_type שלהם. הצגת משלוחים לא תואמים באותו מסלול מוגבלת על סמך מצב אי-התאימות.
שדות | |
---|---|
types[] |
רשימה של סוגים לא תואמים. שתי משלוחים עם |
incompatibility_ |
המצב שחלה על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים את האופן שבו מוצגות משלוחים לא תואמים באותו מסלול.
טיפוסים בני מנייה (enum) | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב אי-תאימות לא מוגדר. אין להשתמש בערך הזה אף פעם. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, אף פעם לא ניתן לשתף את אותו רכב בין שתי משלוחים עם סוגים לא תואמים. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
בשתי משלוחים עם סוגים לא תואמים במצב אי-תאימות
|
ShipmentTypeRequirement
מציין את הדרישות בין משלוחים על סמך shipment_type שלהם. הפרטים הספציפיים של הדרישה מוגדרים לפי מצב הדרישה.
שדות | |
---|---|
required_ |
רשימה של סוגי משלוחים חלופיים הנדרשים על ידי |
dependent_ |
בכל המשלוחים עם סוג בשדה הערה: אסור ליצור שרשראות של דרישות שבהן |
requirement_ |
המצב שחלה על הדרישה. |
RequirementMode
מצבים שמגדירים את המראה של משלוחים תלויים במסלול.
טיפוסים בני מנייה (enum) | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
מצב דרישה לא מוגדר. אין להשתמש בערך הזה אף פעם. |
PERFORMED_BY_SAME_VEHICLE |
במצב הזה, כל המשלוחים 'התלויים' חייבים לשתף את אותו רכב עם לפחות אחד מהמשלוחים 'החובה' שלהם. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
במצב לכן, לאיסוף משלוח 'תלוי' צריך להיות:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
זהה לקודם, מלבד העובדה שבמשלוחים 'תלויים' צריך להיות משלוח 'נדרש' ברכב בזמן המסירה. |
SkippedShipment
פרטים על משלוחים שלא בוצעו בפתרון. במקרים טריוויאליים ו/או אם אנחנו מצליחים לזהות את הסיבה לדילוג, אנחנו מדווחים על הסיבה כאן.
שדות | |
---|---|
index |
האינדקס תואם לאינדקס של המשלוח במקור |
label |
עותק של |
reasons[] |
רשימה של סיבות שמסבירות למה המשלוח נדחה. עיינו בתגובה שלמעלה של |
סיבה
אם נוכל להסביר למה ההזמנה לא נשלחה, הסיבות יופיעו כאן. אם הסיבה לא זהה לכל כלי הרכב, ל-reason
יהיה יותר מרכיב אחד. לא ניתן לציין סיבות כפולות למשלוח שעבר דילוג, כלומר, אם כל השדות זהים מלבד השדה example_vehicle_index
. דוגמה:
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 1
example_exceeded_capacity_type: "Apples"
}
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 3
example_exceeded_capacity_type: "Pears"
}
reasons {
code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
example_vehicle_index: 1
}
המשלוח שהושמט לא תואם לכל הרכבים. הסיבות עשויות להיות שונות בכל רכב, אבל תהיה חריגה ממכסת ה'תפוזים' לפחות ברכב אחד (כולל רכב 1), תהיה חריגה ממכסת ה'אגסים' לפחות ברכב אחד (כולל רכב 3) ותהיה חריגה ממגבלת המרחק לפחות ברכב אחד (כולל רכב 1).
שדות | |
---|---|
code |
אפשר לעיין בהערות של Code. |
example_ |
אם קוד הסיבה הוא |
example_ |
אם הסיבה קשורה לכך שהרכב לא מתאים לשליחה, בשדה הזה יצוין המדד של רכב רלוונטי אחד. |
קוד
קוד שמזהה את סוג הסיבה. הסדר כאן לא רלוונטי. באופן ספציפי, הוא לא מציין אם סיבה מסוימת תופיע לפני סיבה אחרת בפתרון, אם שתיהן רלוונטיות.
טיפוסים בני מנייה (enum) | |
---|---|
CODE_UNSPECIFIED |
אין להשתמש באפשרות הזו אף פעם. |
NO_VEHICLE |
אין כלי רכב במודל, ולכן אי אפשר לבצע את כל המשלוחים. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
הביקוש להובלה חורג מהקיבולת של הרכב בחלק מסוגי הקיבולת, אחד מהם הוא example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
המרחק המינימלי הנדרש לביצוע המשלוח הזה, כלומר מה- שימו לב שבחישוב הזה אנחנו משתמשים במרחקים הגיאודזיים. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
הזמן המינימלי הנדרש לביצוע המשלוח הזה, כולל זמן הנסיעה, זמן ההמתנה וזמן הטיפול, חורג מ- הערה: זמן הנסיעה מחושב לפי התרחיש הטוב ביותר, כלומר המרחק הגיאודטי x 36 מ' לשנייה (כ-130 קמ' לשעה). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
כמו למעלה, אבל אנחנו משווים רק את זמן הנסיעה המינימלי ל-travel_duration_limit של הרכב. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
הרכב לא יכול לבצע את המשלוח הזה בתרחיש הטוב ביותר (לחישוב הזמן, אפשר לעיין בקטע CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT ) אם הוא יתחיל בשעת ההתחלה המוקדמת ביותר שלו: הזמן הכולל יגרום לרכב לסיים את המסירה אחרי שעת הסיום המאוחרת ביותר שלו. |
VEHICLE_NOT_ALLOWED |
השדה allowed_vehicle_indices של המשלוח לא ריק והרכב הזה לא שייך אליו. |
TimeWindow
חלונות זמן מגבילים את הזמן של אירוע, כמו שעת ההגעה לביקור או שעת ההתחלה והסיום של כלי רכב.
גבולות קשיחים של חלון הזמן, start_time
ו-end_time
, אוכפים את השעה המוקדמת ביותר ואת השעה המאוחרת ביותר של האירוע, כך ש-start_time <= event_time <=
end_time
. הערך התחתון של חלון הזמן הרך, soft_start_time
, מבטא העדפה שהאירוע יתרחש ב-soft_start_time
או אחריו, על ידי חיוב בעלות שפרופורציונלית לזמן שחולף לפני soft_start_time עד שהאירוע מתרחש. כדי להביע עדיפות שהאירוע יתרחש ב-soft_end_time
או לפני כן, המערכת מחייבת עלות שפרופורציונלית לזמן שחולף אחרי soft_end_time
עד שהאירוע מתרחש. הגבול העליון של חלון הזמן הרך, soft_end_time
, הוא הערך הזה. הערכים של start_time
, end_time
, soft_start_time
ו-soft_end_time
צריכים לעמוד במגבלות הזמן הגלובליות (ראו ShipmentModel.global_start_time
ו-ShipmentModel.global_end_time
) ולעמוד בדרישות הבאות:
0 <= `start_time` <= `end_time` and
0 <= `start_time` <= `soft_start_time` and
0 <= `soft_end_time` <= `end_time`.
שדות | |
---|---|
start_ |
שעת ההתחלה של חלון הזמן הקבוע. אם לא צוין ערך, הוא יוגדר כ- |
end_ |
שעת הסיום של חלון הזמנים הקפדני. אם לא צוין ערך, הוא יוגדר כ- |
soft_ |
שעת ההתחלה הרכה של חלון הזמן. |
soft_ |
שעת הסיום המשוערת של חלון הזמן. |
cost_ |
עלות לשעה שנוספת לעלויות אחרות במודל אם האירוע מתרחש לפני soft_start_time, מחושבת לפי הנוסחה הבאה:
העלות הזו חייבת להיות חיובית, וניתן להגדיר את השדה רק אם מוגדר soft_start_time. |
cost_ |
עלות לשעה שנוספת לעלויות אחרות במודל אם האירוע מתרחש אחרי
העלות הזו חייבת להיות חיובית, וניתן להגדיר את השדה רק אם |
TransitionAttributes
מציין מאפיינים של מעברים בין שני ביקורים רצופים במסלול. יכול להיות שיהיו כמה TransitionAttributes
שחלים על אותו מעבר: במקרה כזה, כל העלויות הנוספות מצטברות והגבלה או האילוץ המחמירים ביותר חלים (בהתאם לסמנטיקה הטבעית של 'וגם').
שדות | |
---|---|
src_ |
תגים שמגדירים את קבוצת המעברים (src->dst) שהמאפיינים האלה חלים עליהם. ביקור במקור או התחלת נסיעה ברכב תואמים אם השדה |
excluded_ |
|
dst_ |
ביקור ביעד או סיום נסיעה תואמים אם השדה |
excluded_ |
|
cost |
העלויות של ביצוע המעבר הזה. הערך הזה הוא באותה יחידה כמו כל שאר העלויות במודל, אסור שהוא יהיה שלילי. הוא מחויב בנוסף לכל העלויות הקיימות האחרות. |
cost_ |
קובע עלות לקילומטר שחלה על המרחק שנסע במהלך המעבר הזה. הוא מצטבר לכל |
distance_ |
מציין מגבלה על המרחק שנסע במהלך המעבר הזה. החל מיוני 2021, יש תמיכה רק במגבלות רכות. |
delay |
השדה הזה מציין את העיכוב שנוצר במהלך ביצוע המעבר הזה. העיכוב הזה מתרחש תמיד אחרי סיום הביקור במקור ולפני תחילת הביקור ביעד. |
כלי רכב
מודל של רכב בבעיה במשלוח. פתרון בעיה בשליחה יוצר מסלול עבור הרכב הזה שמתחיל ב-start_location
ומסתיים ב-end_location
. מסלול הוא רצף של ביקורים (מידע נוסף זמין במאמר ShipmentRoute
).
שדות | |
---|---|
display_ |
השם המוצג של הרכב שהוגדר על ידי המשתמש. השם יכול להכיל עד 63 תווים, וניתן להשתמש בתווים של UTF-8. |
travel_ |
מצב הנסיעה שמשפיע על הכבישים שבהם הרכב יכול לנסוע ועל המהירות שלו. מידע נוסף זמין במאמר |
route_ |
קבוצת תנאים שצריך לעמוד בהם, שמשפיעה על האופן שבו מחושבים המסלולים לרכב הנתון. |
start_ |
המיקום הגיאוגרפי שבו הרכב מתחיל לפני שהוא אוסף משלוחים. אם לא יצוין אחרת, הרכב יתחיל לפעול בנסיעה הראשונה. אם למודל המשלוח יש מטריצות של משך זמן ומרחק, אסור לציין את |
start_ |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מתחיל לפני שהוא אוסף משלוחים. אם לא צוין |
end_ |
המיקום הגיאוגרפי שבו הרכב מסתיים אחרי שהוא מסיים את |
end_ |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מסתיים אחרי שהוא משלים את |
start_ |
מציין תגים שמצורפים לתחילת המסלול של הרכב. אסור להשתמש במחרוזות ריקות או כפולות. |
end_ |
ציון תגים שמצורפים לסוף המסלול של הרכב. אסור להשתמש במחרוזות ריקות או כפולות. |
start_ |
חלונות זמן שבהם הרכב עשוי לצאת ממיקום ההתחלה. הם צריכים להיות בתוך מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים, כלומר אף חלון זמן לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
end_ |
חלונות זמן שבהם הרכב עשוי להגיע ליעד הסופי. הם צריכים להיות בתוך מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים, כלומר אף חלון זמן לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
unloading_ |
מדיניות פריקה שחלה על הרכב. |
load_ |
הקיבולת של הרכב (משקל, נפח, מספר פלטפורמות, לדוגמה). המפתחות במפה הם המזהים של סוג העומס, בהתאם למפתחות של השדה |
cost_ |
עלויות הרכב: כל העלויות צריכות להתווסף זו לזו, והן חייבות להיות באותה יחידה כמו העלות לשעה של מסלול הרכב. העלות הזו חלה על משך הזמן הכולל של המסלול, כולל זמן הנסיעה, זמן ההמתנה וזמן הביקור. שימוש ב- |
cost_ |
העלות לשעת נסיעה במסלול הרכב. העלות הזו חלה רק על זמן הנסיעה במסלול (כלומר, הזמן שמדווח ב- |
cost_ |
העלות לקילומטר במסלול הרכב. העלות הזו חלה על המרחק שמדווח ב- |
fixed_ |
עלות קבועה שחלה אם הרכב הזה משמש לטיפול במשלוח. |
used_ |
השדה הזה רלוונטי רק לכלי רכב כשהמסלול שלהם לא משמש למשלוח חבילות. השדה הזה מציין אם הרכב צריך להיחשב כמשומש או לא במקרה הזה. אם הערך הוא true, הרכב עובר ממיקום ההתחלה למיקום הסיום גם אם הוא לא משמש למשלוח חבילות, והעלויות של הזמן והמרחק שנובעות מהנסיעה מהתחלה לסיום נלקחות בחשבון. אחרת, הרכב לא נוסע ממיקום ההתחלה למיקום הסיום, ולא מתוזמנים לו |
route_ |
המגבלה חלה על משך הנסיעה הכולל של הרכב. ב- |
travel_ |
הגבלה שחלה על משך הנסיעה במסלול של הרכב. ב- |
route_ |
המגבלה חלה על המרחק הכולל של מסלול הרכב. ב- |
extra_ |
מציין מפה ממחרוזות של visit_types למשכי זמן. משך הזמן הוא הזמן שנוסף ל- אם לבקשת הביקור יש כמה סוגים, לכל סוג יתווסף משך זמן במפה. |
break_ |
תיאור לוח הזמנים של ההפסקות שייאכף ברכב הזה. אם השדה הזה ריק, לא יתוזמנו הפסקות ברכב הזה. |
label |
תווית לרכב. התווית הזו מדווחת בתגובה כ- |
ignore |
אם הערך הוא true, הערך של אם המשלוח מתבצע על ידי רכב שנדחה ב- אם משלוח מתבצע על ידי רכב שנדחה ב- |
travel_ |
גורם מכפיל שאפשר להשתמש בו כדי להגדיל או להקטין את זמני הנסיעה של הרכב הזה. לדוגמה, אם ההגדרה הזו תהיה 2.0, המשמעות היא שהרכב הזה איטי יותר ומשך הנסיעה שלו הוא פי שניים מזה של כלי רכב רגילים. המכפיל הזה לא משפיע על משכי הביקורים. אם מציינים את אזהרה: זמני הנסיעה יעוגלו לשנייה הקרובה ביותר אחרי החלת הכפולה הזו, אבל לפני ביצוע פעולות מספריות כלשהן. לכן, כפולה קטנה עלולה לגרום לאובדן דיוק. מידע נוסף זמין בקטע |
DurationLimit
מגבלה שמגדירה את משך הזמן המקסימלי של מסלול הרכב. הוא יכול להיות קשה או רך.
כשמגדירים שדה של מגבלה רכה, צריך להגדיר יחד גם את סף המגבלה הרכה וגם את העלות המשויכת אליה.
שדות | |
---|---|
max_ |
מגבלה קשיחה שמגבילה את משך הזמן ל-max_duration לכל היותר. |
soft_ |
מגבלה רכה שלא אוכפת מגבלת משך זמן מקסימלי, אבל אם היא מופרת, נצברת עלות במסלול. העלות הזו מצטברת לעלות של רכיבים אחרים שמוגדרים במודל, באותה יחידה. אם |
quadratic_ |
מגבלה רכה שלא אוכפת מגבלת משך זמן מקסימלי, אבל אם היא מופרת, היא גורמת לחיוב על המסלול, כתוצאה מהמשך הזמן הכפול של ההפרה. העלות הזו מצטברת לעלות של רכיבים אחרים שמוגדרים במודל, באותה יחידה. אם
|
cost_ |
העלות לשעה שנצברת אם מגיעים לסף
העלות חייבת להיות לא שלילית. |
cost_ |
העלות לשעה רבועה שנצברת אם מפר את הסף העלות הנוספת היא 0 אם משך הזמן נמוך מהסף. אחרת, העלות תלויה במשך הזמן באופן הבא:
העלות חייבת להיות לא שלילית. |
LoadLimit
הגדרת מגבלת עומס שחלה על רכב, למשל: "המשאית הזו יכולה לשאת עד 3,500 ק"ג". load_limits
.
שדות | |
---|---|
soft_ |
מגבלה רכה של העומס. |
cost_ |
אם העומס יהיה גבוה מ- |
start_ |
מרווח הזמן המקובל לטעינה של הרכב בתחילת המסלול. |
end_ |
מרווח הטעינה המקובל של הרכב בסוף המסלול. |
max_ |
עומס מקסימלי מקובל. |
מרווח
מרווח בין סכומי העומסים הקבילים.
שדות | |
---|---|
min |
עומס מינימלי מקובל. הערך חייב להיות ≥ 0. אם מציינים את שניהם, הערך של |
max |
עומס מקסימלי מקובל. הערך חייב להיות ≥ 0. אם לא צוין ערך, העומס המקסימלי לא מוגבל על ידי ההודעה הזו. אם מציינים את שניהם, הערך של |
TravelMode
אמצעי הגעה שאפשר להשתמש בהם ברכב.
אלה צריכים להיות קבוצת משנה של שיטות הנסיעה המועדפות ב-API של Routes בפלטפורמה של מפות Google. אפשר לקרוא על כך במאמר: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
טיפוסים בני מנייה (enum) | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
מצב נסיעה לא מוגדר, שווה ל-DRIVING . |
DRIVING |
אמצעי התחבורה שמתאים למסלול נסיעה (רכב, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
UnloadingPolicy
המדיניות בנושא אופן פריקה של רכב. האפשרות הזו רלוונטית רק לשליחויות עם איסוף ומשלוח.
משלוחים אחרים יכולים להתרחש בכל מקום במסלול, ללא קשר ל-unloading_policy
.
טיפוסים בני מנייה (enum) | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
מדיניות פריקה לא צוינה. המשלוח חייב להתבצע רק אחרי האיסוף המתאים. |
LAST_IN_FIRST_OUT |
המשלוחים צריכים להתבצע בסדר הפוך לאיסופים |
FIRST_IN_FIRST_OUT |
המשלוחים חייבים להתבצע באותו סדר שבו בוצעו האיסופים |
נקודת ציון
עטיפה של ציון דרך. נקודות ציון מסמנות את מיקומי הגעתו והיציאה של בקשות ביקור, ואת מיקומי ההתחלה והסיום של כלי רכב.
שדות | |
---|---|
side_ |
זה שינוי אופציונלי. מציין שהמיקום של נקודת הציון הזו מיועד להעדפה של כלי הרכב לעצור בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו המיקום מוטה ממרכז הכביש. האפשרות הזו לא פועלת במצב 'הליכה'. |
שדה האיחוד location_type . דרכים שונות לייצוג מיקום. הערך של location_type יכול להיות רק אחת מהאפשרויות הבאות: |
|
location |
נקודה שצוינה באמצעות קואורדינטות גיאוגרפיות, כולל כותרת אופציונלית. |
place_ |
מזהה המקום של נקודת העניין שמשויך לנקודת הציון. |