אינדקס
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
(הודעה)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].
- צריך לא להגדיר את הננו או להגדיר אותו ל-0.
google.protobuf.Duration
- השניות חייבות להיות ב-[0, 253402300799], כלומר בתוך [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- צריך לא להגדיר את הננו או להגדיר אותו ל-0.
google.type.LatLng
- קו הרוחב חייב להיות [-90.0, 90.0].
- קו האורך חייב להיות [-180.0, 180.0].
- לפחות אחד מקווי הרוחב והאורך לא יכול להיות אפס.
BatchOptimizeTours |
---|
אופטימיזציה של סיורים ברכב בהודעה אחת או יותר של השיטה הזו היא פעולה ממושכת (LRO). הקלט של האופטימיזציה (
|
OptimizeTours |
---|
הפונקציה שולחת מודל המטרה היא להקצות ערכי
|
AggregatedMetrics
מדדים נצברים עבור ShipmentRoute
(רזולוציה עבור OptimizeToursResponse
בכל הרכיבים של Transition
ו/או Visit
(רזולוציה בכל ShipmentRoute
).
שדות | |
---|---|
performed_shipment_count |
מספר המשלוחים שבוצעו. לתשומת ליבכם: כשמגדירים צמד איסוף ומשלוח, נספרת רק פעם אחת. |
travel_duration |
משך הנסיעה הכולל במסלול או בפתרון. |
wait_duration |
משך ההמתנה הכולל למסלול או לפתרון. |
delay_duration |
משך ההשהיה הכולל במסלול או בפתרון. |
break_duration |
משך ההפסקה הכולל של מסלול או פתרון. |
visit_duration |
משך הביקור הכולל במסלול או בפתרון. |
total_duration |
משך הזמן הכולל צריך להיות שווה לסכום של כל משכי הזמן שלמעלה. עבור נתיבים, הכתובת תואמת גם:
|
travel_distance_meters |
מרחק הנסיעה הכולל של מסלול או פתרון. |
max_loads |
העומס המקסימלי שהושג לאורך המסלול כולו (פתרון תגובה), עבור כל אחת מהכמויות במסלול זה (תמיסת תגובה), מחושב כמקסימלית על כל ה- |
BatchOptimizeToursMetadata
אין שדות בסוג הזה.
מטא-נתונים של פעולות לגבי BatchOptimizeToursRequest
שיחות.
BatchOptimizeToursRequest
בקשה לביצוע אופטימיזציה באצווה של סיורים כפעולה אסינכרונית. כל קובץ קלט צריך להכיל OptimizeToursRequest
אחד, וכל קובץ פלט יכיל OptimizeToursResponse
אחד. הבקשה מכילה מידע לקריאה/כתיבה ולניתוח של הקבצים. כל קובצי הקלט והפלט צריכים להיות באותו פרויקט.
שדות | |
---|---|
parent |
חובה. כדי לבצע שיחה, צריך לטרגט את הפרויקט והמיקום. פורמט: * אם לא יצוין מיקום, האזור ייבחר באופן אוטומטי. |
model_configs[] |
חובה. נתוני קלט/פלט של כל מודל רכישה, כמו נתיבי קבצים ופורמטים של נתונים. |
AsyncModelConfig
מידע לפתרון מודל אופטימיזציה אחד באופן אסינכרוני.
שדות | |
---|---|
display_name |
זה שינוי אופציונלי. שם מודל בהגדרת משתמש, יכול לשמש ככינוי עבור משתמשים כדי לעקוב אחר מודלים. |
input_config |
חובה. מידע על מודל הקלט. |
output_config |
חובה. המידע הרצוי על מיקום הפלט. |
BatchOptimizeToursResponse
אין שדות בסוג הזה.
תשובה לBatchOptimizeToursRequest
. הערך הזה מוחזר בפעולה ממושכת אחרי שהפעולה מסתיימת.
BreakRule
כללים ליצירת הפסקות זמן לרכב (למשל, הפסקות צהריים). הפסקה היא פרק זמן מתמשך שבמהלכו הרכב נשאר לא פעיל במיקום הנוכחי שלו ולא יכול לבצע ביקור. יכולה להיות הפסקה:
- במהלך הנסיעה בין שני ביקורים (שכולל את הזמן שממש לפני הביקור או מיד אחריו, אך לא באמצע הביקור), ובמקרה כזה הוא מאריך את זמן ההובלה המתאים בין הביקורים,
- או לפני ההתנעה של הרכב (יכול להיות שהרכב לא יתחיל באמצע ההפסקה), ובמקרה כזה אין לכך השפעה על שעת ההתחלה של הרכב.
- או אחרי סיום הרכב (כולל שעת הסיום של הרכב).
שדות | |
---|---|
break_requests[] |
רצף של הפסקות. להצגת ההודעה: |
frequency_constraints[] |
ייתכן שיחולו כמה |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר, המספר והסדר שלהן) שחלות על כל רכב. סימני ה-BreakRequest
החוזרים מגדירים את הרצף הזה, לפי הסדר שבו הם חייבים להתרחש. יכול להיות שחלונות הזמן שלהם (earliest_start_time
/ latest_start_time
) יהיו חופפים, אבל הם חייבים להיות תואמים להזמנה (האפשרות הזו מסומנת).
שדות | |
---|---|
earliest_start_time |
חובה. גבול תחתון (כולל) בתחילת ההפסקה. |
latest_start_time |
חובה. גבול עליון (כולל) בתחילת ההפסקה. |
min_duration |
חובה. משך הזמן המינימלי של ההפסקה. חייב להיות חיובי. |
FrequencyConstraint
אפשר להגביל עוד יותר את התדירות ואת משך ההפסקות שצוינו למעלה על ידי אכיפה של תדירות מינימלית של הפסקה, כמו "חייבת להיות הפסקה של לפחות שעה אחת בכל 12 שעות". בהנחה שניתן לפרש זאת כ "בכל חלון זמן הזזה של 12 שעות, חייבת להיות הפסקה אחת לפחות של שעה אחת לפחות", הדוגמה הזו תתורגם לFrequencyConstraint
הבא:
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
התזמון ומשך ההפסקות בפתרון יהיו תואמים לכל המגבלות האלה, בנוסף לחלונות הזמן ולמשכי הזמן המינימליים שכבר צוינו ב-BreakRequest
.
ייתכן שFrequencyConstraint
יחול גם על הפסקות שאינן רציפות. לדוגמה, לוח הזמנים הבא מותאם לדוגמה '1h כל 12 שעות':
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
שדות | |
---|---|
min_break_duration |
חובה. משך ההפסקה המינימלי לאילוץ הזה. לא שלילי. הצגת התיאור של |
max_inter_break_duration |
חובה. הטווח המרבי המותר של כל מרווח זמן במסלול לא כולל לפחות הפסקה חלקית של |
DataFormat
פורמטים של נתונים לקובצי קלט ופלט.
טיפוסים בני מנייה (enums) | |
---|---|
DATA_FORMAT_UNSPECIFIED |
ערך לא חוקי, הפורמט לא יכול להיות UNSPECIFIED. |
JSON |
סימון אובייקט JavaScript. |
PROTO_TEXT |
פורמט טקסט של מאגרי פרוטוקולים. פרטים נוספים זמינים בכתובת https://protobuf.dev/reference/protobuf/textformat-spec/. |
DistanceLimit
מגבלה שקובעת מרחק מקסימלי שאפשר לעבור. היא יכולה להיות קשה או רכה.
אם הוגדרה מגבלת "הגבלה", גם soft_max_meters
וגם cost_per_kilometer_above_soft_max
חייבים להיות מוגדרים ולהיות לא שליליים.
שדות | |
---|---|
max_meters |
קיימת הגבלה קשיחה שמגבילה את המרחק ל-max_meters. המגבלה חייבת להיות מספר שאינו שלילי. |
soft_max_meters |
מגבלה רכה שאינה אוכפת מגבלת מרחק מקסימלית, אבל אם היא מופרת, מתקבלת עלות שמסתכמת לעלויות אחרות שמוגדרות במודל, באותה יחידה. אם מגדירים ערך של soft_max_meters, הערך צריך להיות קטן מ-max_meters וחייב להיות מספר לא שלילי. |
cost_per_kilometer_above_soft_max |
העלות לקילומטר שנצברה אם המרחק חורג מהמגבלה של
העלות חייבת להיות לא שלילית. |
GcsDestination
המיקום של Google Cloud Storage שבו ייכתבו קובצי הפלט.
שדות | |
---|---|
uri |
חובה. URI של Google Cloud Storage. |
GcsSource
המיקום של Google Cloud Storage שממנו יוקרא קובץ הקלט.
שדות | |
---|---|
uri |
חובה. URI של אובייקט Google Cloud Storage בפורמט |
InjectedSolutionConstraint
פתרון שיוזן בבקשה, כולל מידע על אילו ביקורים יש להגביל ועל האופן שבו יש להגביל אותם.
שדות | |
---|---|
routes[] |
מסלולים של התמיסה שיש להחדיר. ייתכן שחלק מהמסלולים יושמטו מהפתרון המקורי. המסלולים והמשלוחים שעליהם דילגו חייבים לעמוד בהנחות התקינות הבסיסיות שמפורטות עבור |
skipped_shipments[] |
דילגת על משלוחים של התמיסה שיש להחדיר. ייתכן שחלק מהם יושמטו מהפתרון המקורי. פרטים נוספים זמינים בשדה |
constraint_relaxations[] |
לגבי אפס קבוצות של כלי רכב או יותר, יש לציין מתי ובכמה יש להנמיך את האילוצים. אם השדה הזה ריק, כל המסלולים לכלי רכב שאינם ריקים מוגבלים לחלוטין. |
ConstraintRelaxation
כשמדובר בקבוצה של רכבים, ההגדרה קובעת באילו סכומי סף הביקורים יחולו על הביקורים ובאיזו רמה. ניתן לדלג על משלוחים שמצוינים בשדה skipped_shipment
. כלומר, לא ניתן לבצע אותם.
שדות | |
---|---|
relaxations[] |
כל ההקלות במגבלות הביקורים שיחולו על ביקורים במסלולים עם כלי רכב ב |
vehicle_indices[] |
מציין את האינדקסים של הרכבים שעליהם חל אילוץ הביקור אינדקס רכב ממופה באופן זהה ל- |
הירגעות
אם השדה 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_time |
השעה שבה או לאחר מכן תחול ההקלות |
threshold_visit_count |
מספר הביקורים שעליהם תחול ההקלות אם הוא |
רמה
מבטא את רמות ההקלות השונות באילוץ, שחלות על ביקור ועל אלה שיתרחשו לאחר עמידה בתנאי הסף.
המספור למטה הוא לפי הסדר של הגברת הרגיעה.
טיפוסים בני מנייה (enums) | |
---|---|
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_format |
חובה. פורמט נתוני הקלט. |
שדה איחוד source . חובה. source יכול להיות רק אחד מהבאים: |
|
gcs_source |
מיקום של Google Cloud Storage. עליו להיות אובייקט יחיד (קובץ). |
מיקום
כולל מיקום (נקודה גיאוגרפית, וכותרת אופציונלית).
שדות | |
---|---|
lat_lng |
הקואורדינטות הגיאוגרפיות של ציון הדרך. |
heading |
כיוון המצפן שמשויך לכיוון זרימת התנועה. הערך הזה משמש לציון צד הדרך לשימוש לאיסוף ולהורדה. ערכי הכותרת יכולים להיות בין 0 ל-360, כאשר 0 מציין כותרת לצפון, 90 מציין כותרת לכיוון מזרח וכן הלאה. |
OptimizeToursRequest
בקשה שתוענק לפותר אופטימיזציה של סיורים, שמגדיר את מודל המשלוח שצריך לפתור וגם פרמטרים של אופטימיזציה.
שדות | |
---|---|
parent |
חובה. כדי לבצע שיחה, צריך לטרגט את הפרויקט או את המיקום. פורמט: * אם לא יצוין מיקום, האזור ייבחר באופן אוטומטי. |
timeout |
אם זמן קצוב זה מוגדר, השרת מחזיר תגובה לפני שעבר פרק הזמן הקצוב לתפוגה או לפני המועד האחרון של השרת לבקשות סינכרוניות, המוקדם מביניהם. עבור בקשות אסינכרוניות, השרת ייצור פתרון (אם הדבר אפשרי) לפני שיחלוף הזמן הקצוב לתפוגה. |
model |
מודל המשלוח שצריך לפתור. |
solving_mode |
כברירת מחדל, מצב הפתרון הוא |
search_mode |
מצב החיפוש ששימש לפתרון הבקשה. |
injected_first_solution_routes[] |
להנחות את אלגוריתם האופטימיזציה במציאת פתרון ראשון שדומה לפתרון קודם. המודל מוגבל במהלך היצירה של הפתרון הראשון. על משלוחים שלא מבוצעים במסלול כלשהו, המערכת מדלגת באופן מרומז בפתרון הראשון, אבל ניתן לבצע אותם בפתרונות עוקבים. הפתרון חייב לעמוד בכמה הנחות תקפות בסיסיות:
אם הפתרון שהוחדר לא ניתן לביצוע, לא בהכרח תוחזר שגיאת אימות, ובמקום זאת תוחזר שגיאה שמציינת את אי-הישימות. |
injected_solution_constraint |
להגביל את אלגוריתם האופטימיזציה כדי למצוא פתרון סופי שדומה לפתרון קודם. לדוגמה, אפשר להשתמש במשתנה הזה כדי להקפיא חלקים ממסלולים שכבר הושלמו, או קטעים שעוד לא הושלמו, אבל אין לשנות אותם. אם הפתרון שהוחדר לא ניתן לביצוע, לא בהכרח תוחזר שגיאת אימות, ובמקום זאת תוחזר שגיאה שמציינת את אי-הישימות. |
refresh_details_routes[] |
אם השדות אינם ריקים, יתבצע רענון של המסלולים הנתונים מבלי לשנות את רצף הביקורים או זמני הנסיעה הבסיסיים שלהם: רק פרטים אחרים יעודכנו. אי אפשר לפתור את הבעיה במודל. החל מ-11 במרץ 2020, השדה הזה מאכלס רק את הקווים הפוליגוניים של מסלולים שאינם ריקים ומחייב את הערך יכול להיות שהשדות אין להשתמש בשדה הזה יחד עם לאפליקציות |
interpret_injected_solutions_using_labels |
אם הערך הוא נכון:
הפרשנות הזו חלה על השדות אם הערך הוא True, התוויות בקטגוריות הבאות חייבות להופיע לכל היותר פעם אחת בקטגוריה שלהן:
אם הסרה של ביקורים במסלול או מסלולים שלמים מפתרון שהוחדר עשויה להשפיע על האילוצים המשתמעים, דבר שעלול להוביל לשינוי בפתרון, לשגיאות אימות או לחוסר היתכנות. הערה: המתקשר חייב לוודא שכל |
consider_road_traffic |
מומלץ לשקול את הערכת התנועה בעת חישוב שדות |
populate_polylines |
אם הערך הוא True, קווים פוליגוניים יאוכלסו בתשובה מסוג |
populate_transition_polylines |
אם הערך הוא True, קווים פוליגוניים יאוכלסו בתשובה |
allow_large_deadline_despite_interruption_risk |
אם מגדירים את האפשרות הזו, תאריך היעד של הבקשה (מידע נוסף זמין בכתובת https://grpc.io/blog/deadlines) יכול להיות עד 60 דקות. אחרת, תאריך היעד המקסימלי הוא 30 דקות בלבד. שימו לב שהסיכון להפרעות בשליחת בקשות לאורך זמן ארוך משמעותית (אבל עדיין נמוך). |
use_geodesic_distances |
אם הערך הוא true, מרחקים יחושבו באמצעות מרחקים גיאודזיים במקום מרחקים של מפות Google, וזמני הנסיעה יחושבו באמצעות מרחקים גיאודזיים עם מהירות המוגדרת על ידי |
label |
התווית שייתכן שתשמש לזיהוי הבקשה הזו, תדווח בחזרה ב- |
geodesic_meters_per_second |
אם הערך של |
max_validation_errors |
חיתוך מספר שגיאות האימות שהוחזרו. השגיאות האלה מצורפות בדרך כלל למטען ייעודי (payload) של שגיאות INVALID_ARGUMENT כפרטי שגיאה של BadRequest (https://cloud.google.com/apis/design/errors#error_details), אלא אם הבעיה resolve_mode=LEGALATE_ONLY: יש לעיין בשדה |
SearchMode
מצב הגדרת התנהגות החיפוש, תוך החלפה של זמן האחזור לעומת איכות הפתרון. בכל הסוגים, נאכף התאריך האחרון לשליחת בקשות.
טיפוסים בני מנייה (enums) | |
---|---|
SEARCH_MODE_UNSPECIFIED |
מצב חיפוש לא מוגדר, שווה ערך ל-RETURN_FAST . |
RETURN_FAST |
מפסיקים את החיפוש אחרי שמוצאים את הפתרון הטוב הראשון. |
CONSUME_ALL_AVAILABLE_TIME |
הקדישו את כל הזמן הזמין לחיפוש פתרונות טובים יותר. |
SolvingMode
המדיניות הזו מגדירה איך הפותר צריך לטפל בבקשה. בכל המצבים מלבד VALIDATE_ONLY
, אם הבקשה לא חוקית, תתקבל הודעת השגיאה INVALID_REQUEST
. אפשר לעיין בmax_validation_errors
כדי להגביל את מספר השגיאות שהוחזרו.
טיפוסים בני מנייה (enums) | |
---|---|
DEFAULT_SOLVE |
פותרים את המודל. |
VALIDATE_ONLY |
מאמת את המודל רק בלי לפתור אותו: מאכלס כמה שיותר OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
תאכלס רק חשוב: לא כל המשלוחים שאינם ניתנים לביצוע מוחזרים כאן, אלא רק אלה שזוהו כלא ניתנים לביצוע במהלך העיבוד מראש. |
OptimizeToursResponse
התקבלה תשובה אחרי פתרון של בעיית אופטימיזציה של סיור, שכוללת את המסלולים ולאחר מכן כל רכב, את המשלוחים שדילגתם עליהם ואת העלות הכוללת של הפתרון.
שדות | |
---|---|
routes[] |
נתיבים המחושבים עבור כל רכב. המסלול ה-i תואם לרכב ה-i שבמודל. |
request_label |
עותק של |
skipped_shipments[] |
רשימת כל המשלוחים דילגה. |
validation_errors[] |
רשימה של כל שגיאות האימות שהצלחנו לזהות בנפרד. כדאי לעיין בהסבר 'מספר שגיאות' לגבי ההודעה |
metrics |
מדדי משך הזמן, המרחק והשימוש בפתרון הזה. |
מדדים
המדדים הכוללים שנצברו מכל המסלולים.
שדות | |
---|---|
aggregated_route_metrics |
הנתון הזה נצבר במסלולים. כל מדד הוא הסכום (או המקסימלי, של טעינות) של כל השדות |
skipped_mandatory_shipment_count |
מספר המשלוחי החובה שדילגת עליהם. |
used_vehicle_count |
מספר כלי הרכב שהיו בשימוש. הערה: אם מסלול הרכב ריק והמאפיין |
earliest_vehicle_start_time |
שעת ההתחלה המוקדמת ביותר של רכב משומש, מחושבת כמהירות המינימלית לכל כלי הרכב המשומשים ב- |
latest_vehicle_end_time |
שעת הסיום העדכנית ביותר של רכב משומש, מחושבת כשעת הסיום המקסימלית בכל כלי הרכב המשומשים של |
costs |
עלות הפתרון, בחלוקה לפי שדות בקשה הקשורים לעלות. המפתחות הם נתיבים של תבניות אב, ביחס לקלט OptimizeToursRequest, למשל "model.shipments.pickups.cost". הערכים הם העלות הכוללת שנוצרה על-ידי שדה העלות המתאים, שנצברת על פני הפתרון כולו. במילים אחרות, העלויות ["model.shipments.pickups.cost"] הן הסכום של כל עלויות האיסוף ביחס לפתרון. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, חוץ מהעלויות שקשורות למאפייני מעבר, שמדווחות רק באופן מצטבר החל מ-1 בינואר 2022. |
total_cost |
העלות הכוללת של הפתרון. סכום כל הערכים במפת העלויות. |
OptimizeToursValidationError
מתאר שגיאה שאירעה במהלך אימות OptimizeToursRequest
.
שדות | |
---|---|
code |
שגיאת אימות מוגדרת על ידי הצמד ( שדות אחרים (בהמשך) מספקים הקשר נוסף לגבי השגיאה. שגיאות מרובות: כשיש מספר שגיאות, תהליך האימות מנסה להפיק כמה מהן כפלט. תהליך זה, בדומה למהדר, אינו מושלם. חלק משגיאות האימות יהיו "קטלניות", כלומר, הן יפסיקו את תהליך האימות כולו. אותו הדבר נכון לגבי יציבות: הפניה: רשימה של כל הצמדים (קוד, שם):
|
display_name |
השם המוצג של השגיאה. |
fields[] |
הקשר של שגיאה עשוי לכלול שדות של 0, 1 (ברוב המקרים) או יותר. לדוגמה, אם מדובר ברכב מס' 4 ובאיסוף הראשון של משלוח מס' 2, אפשר לבצע את הפעולות הבאות:
עם זאת, חשוב לשים לב שהעוצמה של |
error_message |
מחרוזת לתיאור השגיאה, שאנשים יכולים לקרוא. קיים מיפוי ביחס של 1:1 בין יציבות: לא יציבה: הודעת השגיאה המשויכת ל- |
offending_values |
עשוי להכיל את הערכים של השדות. האפשרות הזו לא תמיד זמינה. אין להסתמך על התכונה הזו ולהשתמש בה רק לניפוי באגים ידני במודל. |
FieldReference
מציין את ההקשר של שגיאת האימות. השדה FieldReference
תמיד מתייחס לשדה נתון בקובץ הזה, לפי אותו מבנה היררכי. לדוגמה, אפשר לציין את רכיב מס' 2 מתוך start_time_windows
של רכב מס' 5 באמצעות:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
עם זאת, אנחנו משמיטים ישויות ברמה העליונה כמו OptimizeToursRequest
או ShipmentModel
כדי למנוע עומס על ההודעה.
שדות | |
---|---|
name |
שם השדה, למשל 'כלי רכב'. |
sub_field |
שדה משנה מקונן באופן רקורסיבי, אם יש צורך. |
שדה איחוד
|
|
index |
אינדקס השדה, אם הוא חוזר. |
key |
מקש אם השדה הוא מפה. |
OutputConfig
ציון יעד לתוצאות של [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
שדות | |
---|---|
data_format |
חובה. הפורמט של נתוני הפלט. |
שדה איחוד destination . חובה. destination יכול להיות רק אחד מהבאים: |
|
gcs_destination |
המיקום של Google Cloud Storage שבו צריך לכתוב את הפלט. |
משלוח
משלוח של פריט בודד, מהאיסוף שלו אל אחד מהמשלוחים שלו. כדי שהמשלוח ייחשב כמבוצע, כלי רכב ייחודי צריך לבקר באחד ממיקומי האיסוף שלו (ולהקטין את הקיבולת הנותרת שלו בהתאם), ואז לבקר באחד ממיקומי המשלוח בהמשך (ולכן להגדיל מחדש את הקיבולת שלו).
שדות | |
---|---|
display_name |
השם המוצג של המשלוח בהגדרת המשתמש. היא יכולה להכיל עד 63 תווים והיא יכולה לכלול תווי UTF-8. |
pickups[] |
קבוצה של שיטות איסוף חלופיות שמשויכות למשלוח. אם המדיניות לא מוגדרת, הרכב צריך לבקר רק במיקום שמתאים למשלוחים. |
deliveries[] |
קבוצה של תחליפי משלוח המשויכים למשלוח. אם לא מציינים את המאפיין הזה, הרכב צריך לבקר רק במיקום שתואם לאיסוף. |
load_demands |
טעינת הביקושים של המשלוח (לדוגמה: משקל, נפח, מספר משטחים וכו'). המפתחות במפה צריכים להיות מזהים שמתארים את סוג העומס המתאים, ורצוי לכלול גם את היחידות. לדוגמה: "weight_kg", "volume_gallons", "pallet_count" וכו'. אם מפתח נתון לא מופיע במפה, הטעינה המתאימה נחשבת כ-null. |
allowed_vehicle_indices[] |
קבוצת כלי הרכב שעשויים לבצע את המשלוח הזה. אם השדה ריק, כל כלי הרכב עשויים להפעיל אותו. כלי הרכב מוצגים לפי האינדקס שלהם ברשימת |
costs_per_vehicle[] |
מציין את העלות של שליחת המשלוח על ידי כל אחד מכלי הרכב. אם צוין, חייב להיות לו EITHER:
העלויות האלה חייבות להיות באותה יחידה כמו |
costs_per_vehicle_indices[] |
אינדקסים של כלי הרכב שעליהם חל |
pickup_to_delivery_absolute_detour_limit |
מציין את זמן המעקף המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף עד למשלוח. אם מציינים אותו, הוא צריך להיות מספר שאינו שלילי והמשלוח צריך לכלול לפחות אפשרות לאיסוף ומסירה. לדוגמה, יש לציין את משך הזמן הקצר ביותר שלוקח לעבור מהחלופה שנבחרה ישירות לחלופה שנבחרה למשלוח. לאחר מכן הגדרה של
אם הגבלות יחסיות ומוחלטות על אותו משלוח מפורטות באותו משלוח, המערכת תשתמש בהגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. נכון ל-2017/10, יש תמיכה במעקף רק כשמשך הנסיעה לא תלוי בכלי רכב. |
pickup_to_delivery_time_limit |
מאפיין זה מציין את משך הזמן המקסימלי מרגע האיסוף ועד לתחילת המשלוח. אם מציינים אותו, הוא צריך להיות מספר שאינו שלילי והמשלוח צריך לכלול לפחות אפשרות לאיסוף ומסירה. אין לכך השפעה על החלופות שנבחרו לאיסוף ולמשלוח, וגם לא על מהירות הרכב. אפשר לציין זאת לצד מגבלות מעקף מקסימליות: הפתרון יציית לשני המפרטים. |
shipment_type |
מחרוזת שאינה ריקה, שמציינת 'סוג' למשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין שונה מהערך |
label |
מציין תווית למשלוח. התווית הזו מדווחת בתגובה ב- |
ignore |
אם הערך הוא true, דלגו על המשלוח הזה, אבל אל תחילו התעלמות ממשלוח מובילה לשגיאת אימות כשיש מותר להתעלם ממשלוח שמבוצע ב- |
penalty_cost |
אם המשלוח לא יושלם, העונש הזה יתווסף לעלות הכוללת של המסלולים. אם מישהו משתמש באחת מהחלופות שלו לאיסוף ולמשלוח, הוא נחשב למשלוח שהושלם. העלות יכולה לבטא באותה יחידה שמשמשת את כל שאר השדות במודל, והיא חייבת להיות חיובית. חשוב: אם העונש הזה לא יצוין, העונש יהיה אינסופי, כלומר, תצטרכו להשלים את המשלוח. |
pickup_to_delivery_relative_detour_limit |
מציין את זמן המעקף היחסי המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף עד למשלוח. אם מציינים אותו, הוא צריך להיות מספר שאינו שלילי והמשלוח צריך לכלול לפחות אפשרות לאיסוף ומסירה. לדוגמה, יש לציין את משך הזמן הקצר ביותר שלוקח לעבור מהחלופה שנבחרה ישירות לחלופה שנבחרה למשלוח. לאחר מכן הגדרה של
אם הגבלות יחסיות ומוחלטות על אותו משלוח מפורטות באותו משלוח, המערכת תשתמש בהגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. נכון ל-2017/10, יש תמיכה במעקף רק כשמשך הנסיעה לא תלוי בכלי רכב. |
טען
כשמבצעים ביקור, אפשר להוסיף סכום מוגדר מראש לעומס הרכב אם מדובר באיסוף, או בניכוי אם מדובר במשלוח. בהודעה הזו מוגדר סכום כזה. load_demands
.
שדות | |
---|---|
amount |
היקף העומס על כלי הרכב שמבצע את הביקור המתאים ישתנה. מכיוון שמדובר במספר שלם, מומלץ למשתמשים לבחור יחידה מתאימה כדי למנוע אובדן דיוק. חייב להיות 0 או יותר. |
VisitRequest
בקשות לביקור שניתן לבצע באמצעות רכב: יש לו מיקום גיאוגרפי (או שניים, פרטים נוספים בהמשך), זמני פתיחה וסגירה שמיוצגים באמצעות חלונות זמן ומשך זמן השירות (הזמן שהרכב באה מהרגע שהרכב הגיע לאיסוף או למסירה של מוצרים).
שדות | |
---|---|
arrival_location |
המיקום הגיאוגרפי שאליו הרכב מגיע במהלך ביצוע של |
arrival_waypoint |
ציון הדרך שאליו הרכב מגיע במהלך ביצוע |
departure_location |
המיקום הגיאוגרפי שבו הרכב יוצא אחרי השלמת |
departure_waypoint |
ציון הדרך שאליו יצא הרכב אחרי השלמת |
tags[] |
מציין את התגים המצורפים לבקשת הביקור. אי אפשר להשתמש במחרוזות ריקות או כפולות. |
time_windows[] |
חלונות זמן שמגבילים את זמן ההגעה למבקרים. הערה: יכול להיות שכלי רכב ייצא מחוץ לחלון זמן ההגעה. כלומר, לא חייבים לציין את זמן ההגעה ואת משך הנסיעה בתוך חלון זמן מסוים. כתוצאה מכך, עלול להיווצר זמן המתנה אם הרכב יגיע לפני המשמעות של היעדר חלונות זמן חייבים להיות נפרדים, כלומר, חלונות זמן לא יכולים לחפוף או להיות קרובים לחלונות זמן אחרים, והם חייבים להיות בסדר גובר. אפשר להגדיר את |
duration |
משך הביקור, כלומר משך הזמן שהרכב הרכב היה בו בין ההגעה והיציאה (יתווסף לזמן ההמתנה האפשרי. מידע נוסף מופיע כאן: |
cost |
עלות הטיפול בבקשת הביקור הזו במסלול לרכב. אפשר להשתמש בו כדי לשלם עלויות שונות על כל איסוף או משלוח חלופי של משלוח. העלות הזו חייבת להיות באותה יחידה כמו |
load_demands |
טעינת הדרישות של בקשת הביקור הזו. השדה הזה דומה לשדה |
visit_types[] |
מציין את סוגי הביקור. אפשר להשתמש בהגדרה הזו כדי להקצות את הזמן הנוסף הנדרש לרכב כדי להשלים את הביקור הזה (מידע נוסף: סוג מסוים יכול להופיע פעם אחת בלבד. |
label |
מציין תווית עבור |
ShipmentModel
מודל המשלוח מכיל קבוצה של משלוחים שחייבים להתבצע על ידי קבוצת כלי רכב תוך מזעור העלות הכוללת, כלומר הסכום של:
- העלות של ניתוב כלי הרכב (סכום העלות לזמן כולל, עלות לזמן נסיעה ועלות קבועה של כל כלי הרכב).
- הסנקציות על משלוח שלא בוצעו.
- העלות של משך הזמן הגלובלי של המשלוחים
שדות | |
---|---|
shipments[] |
קבוצת משלוחים שחייבים לבצע במודל. |
vehicles[] |
קבוצת כלי רכב שניתן להשתמש בהם לצורך ביקור. |
global_start_time |
זמני ההתחלה והסיום הגלובליים של המודל: אף אחת מהשעות מחוץ לטווח הזה לא יכולה להיחשב תקינה. משך הזמן של המודל צריך להיות קצר משנה. כלומר, כשמשתמשים בשדות |
global_end_time |
אם המדיניות לא מוגדרת, המערכת תשתמש ב-00:00:00 UTC, 1 בינואר 1971 (כלומר שניות: 31536000, ננו: 0) כברירת מחדל. |
global_duration_cost_per_hour |
'משך הזמן הגלובלי' של התוכנית הכוללת הוא ההפרש בין שעת ההתחלה המוקדמת ביותר שאפקטיבית לבין שעת הסיום המאוחרת ביותר של כל כלי הרכב. משתמשים יכולים להקצות עלות לשעה לכמות הזו כדי לנסות לבצע אופטימיזציה להשלמה מוקדמת של משימות, לדוגמה. העלות הזו חייבת להיות באותה יחידה כמו |
duration_distance_matrices[] |
מציין את מטריצות משך הזמן והמרחק שנעשה בהן שימוש במודל. אם השדה הזה ריק, המערכת תשתמש במרחקים הגאודזיים או במפות Google, בהתאם לערך בשדה דוגמאות לשימוש:
|
duration_distance_matrix_src_tags[] |
תגים המגדירים את המקורות של מטריצות משך הזמן והמרחק; התגים תואמים ל- |
duration_distance_matrix_dst_tags[] |
תגים המגדירים את היעדים של מטריצות משך הזמן והמרחק; התגים תואמים ל- |
transition_attributes[] |
תכונות מעבר נוספו למודל. |
shipment_type_incompatibilities[] |
קבוצות של סוגי משלוח שאינם תואמים (מידע נוסף זמין בקטע |
shipment_type_requirements[] |
קבוצות של דרישות |
precedence_rules[] |
קבוצת כללי קדימות שצריך לאכוף במודל. |
max_active_vehicles |
המדיניות הזו מגבילה את המספר המקסימלי של כלי רכב פעילים. רכב נחשב פעיל אם המסלול שלו מבצע לפחות משלוח אחד. אפשר להשתמש באפשרות הזו כדי להגביל את מספר המסלולים במקרים שבהם יש פחות נהגים מאשר כלי רכב, וצי הרכבים הטרוגני. לאחר מכן האופטימיזציה תבחר את קבוצת המשנה של כלי הרכב המתאימה ביותר לשימוש. חייב להיות חיובי בלבד. |
DurationDistanceMatrix
ההגדרה מציינת את משך הזמן ואת המטריצה של המרחק ממיקומי הביקורים ונקודת ההתחלה של הרכבים שאליהם רוצים להגיע ואת מיקומי הסיום של הרכבים.
שדות | |
---|---|
rows[] |
מציין את השורות של מטריצת משך הזמן והמרחק. היא חייבת לכלול כל כך הרבה רכיבים כמו |
vehicle_start_tag |
תג שמגדיר על אילו כלי רכב רלוונטיים משך הזמן ומטריצת המרחק הזו. אם השדה ריק, הערך חל על כל כלי הרכב, ויכולה להיות רק מטריצה אחת. כל התחלת רכב צריכה להתאים בדיוק למטריצה אחת, כלומר, רק מטריצה אחת מתוך השדה כל המטריצות צריכות לכלול |
שורה
מציין שורה של משך ומטריצת המרחק.
שדות | |
---|---|
durations[] |
ערכי משך הזמן של שורה נתונה. היא חייבת לכלול כל כך הרבה רכיבים כמו |
meters[] |
ערכי המרחק של שורה נתונה. אם אין עלויות או מגבלות שקשורות למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, הוא צריך לכלול את אותה כמות רכיבים כמו |
PrecedenceRule
כלל קדימות בין שני אירועים (כל אירוע הוא איסוף או מסירה של משלוח): האירוע ה "שני" צריך להתחיל לפחות offset_duration
אחרי תחילת הערך "ראשון".
כמה קדימות יכולות להתייחס לאותם אירועים (או לאירועים קשורים), למשל "איסוף של פריט ב' קורה אחרי המסירה של א'" ו"איסוף של מוצר ג' קורה אחרי האיסוף של מוצר ב'.
בנוסף, הקדימות חלה רק כאשר שתי ההעברות מתבצעות והמערכת מתעלמת מהן.
שדות | |
---|---|
first_is_delivery |
מציין אם האירוע "הראשון" הוא מסירה. |
second_is_delivery |
מציין אם האירוע ה'שני' הוא מסירה. |
offset_duration |
הסטייה בין האירוע ה "ראשון" לאירוע ה "שני". הוא יכול להיות שלילי. |
first_index |
אינדקס המשלוח של האירוע 'הראשון'. חובה לציין את השדה הזה. |
second_index |
אינדקס המשלוח של האירוע 'השני'. חובה לציין את השדה הזה. |
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
לידיעתכם, אנחנו מבחינים בין הנתונים הבאים:
- 'אירועים נקודתיים', כמו ההתחלה והסיום של הרכב וההתחלה והסיום של כל ביקור (כלומר הגעה ויציאה). הם מתרחשים בשנייה נתונה.
- 'מרווחי זמן', כמו הביקורים עצמם והמעבר בין הביקורים. אמנם לפעמים משך הזמן של מרווחי זמן הוא אפס, כלומר התחלה וסיום באותה שנייה, אבל לעיתים קרובות משך הזמן שלהם חיובי.
משתנים:
- אם יש 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
לסיום, כך ניתן לארגן את הנסיעות, ההפסקות, ה-Shift וה-WAIT במהלך מעבר.
- אין חפיפה ביניהן.
- ה-OAuth הוא ייחודי וחייב להיות פרק זמן מתמשך שממש לפני הביקור הבא (או לפני הסיום של הרכב). לכן מספיק לדעת את משך ההשהיה כדי לדעת מהן שעות ההתחלה והסיום.
- ה-breakS הם תקופות זמן רציפות שאינן חופפות. התשובה מציינת את שעת ההתחלה ואת משך הזמן של כל הפסקה.
- נסיעות ו-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_index |
רכב שמבצע את המסלול, מזוהה לפי האינדקס שלו במקור |
vehicle_label |
תווית של כלי הרכב שמבצע את המסלול הזה, שווה ל- |
vehicle_start_time |
השעה שבה הרכב מתחיל את המסלול. |
vehicle_end_time |
השעה שבה הרכב מסיים את המסלול. |
visits[] |
רצף ביקורים מסודר שמייצג מסלול. ביקורים[i] הוא הביקור ה-i במסלול. אם השדה הזה ריק, הרכב ייחשב כרכב שלא בשימוש. |
transitions[] |
רשימה מסודרת של המעברים במסלול. |
has_traffic_infeasibilities |
כשהערך של
סביר להניח שההגעה אל next_visit תתבצע מאוחר יותר מחלון הזמן הנוכחי, בגלל העלייה המשוערת בזמן הנסיעה |
route_polyline |
ייצוג הקו הפוליגוני המקודד של המסלול. השדה הזה יאוכלס רק אם המדיניות |
breaks[] |
נקבעו הפסקות לרכב שמבצע את המסלול הזה. הרצף |
metrics |
מדדים של משך הזמן, המרחק והטעינה במסלול הזה. סיכום השדות של |
route_costs |
עלות המסלול, בחלוקה לפי שדות בקשה הקשורים לעלות. המפתחות הם נתיבים של תבניות אב, ביחס לקלט OptimizeToursRequest, למשל "model.shipments.pickups.cost". הערכים הם העלות הכוללת שנוצרה על ידי שדה העלות המתאים, שנצבר לאורך כל המסלול. במילים אחרות, העלויות ["model.shipments.pickups.cost"] הן הסכום של כל עלויות האיסוף לאורך המסלול. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, חוץ מהעלויות שקשורות למאפייני מעבר, שמדווחות רק באופן מצטבר החל מ-1 בינואר 2022. |
route_total_cost |
העלות הכוללת של המסלול. סכום כל העלויות במפת העלויות. |
הפסקה
נתונים שמייצגים את ביצוע ההפסקה.
שדות | |
---|---|
start_time |
שעת ההתחלה של ההפסקה. |
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_duration |
משך הנסיעה בתקופת המעבר. |
travel_distance_meters |
המרחק שעברת במהלך המעבר. |
traffic_info_unavailable |
כשיש בקשה לקבלה של תנועת גולשים דרך |
delay_duration |
סך משכי השהייה שחלו על המעבר הזה. אם רלוונטי, ההשהיה תתחיל בדיוק |
break_duration |
משך הזמן של ההפסקות שהתרחשו במהלך המעבר, אם יש כאלה. הפרטים לגבי שעת ההתחלה ומשך הזמן של כל הפסקה נשמרים ב- |
wait_duration |
משך ההמתנה למעבר הזה. משך ההמתנה תואם לזמן ללא פעילות והוא לא כולל את זמן ההפסקה. כמו כן, חשוב לזכור שזמן ההמתנה הזה עשוי להתפצל לכמה פרקי זמן שאינם עוקבים. |
total_duration |
משך הזמן הכולל של המעבר, לנוחותך. הוא שווה ל:
|
start_time |
שעת ההתחלה של המעבר. |
route_polyline |
ייצוג הקו הפוליגוני המקודד של המסלול שעבר במהלך המעבר. השדה הזה יאוכלס רק אם המדיניות |
vehicle_loads |
ניתן לטעון את הרכב במהלך המעבר הזה לכל סוג שמופיע ברכב הזה מסוג הטעינות במהלך המעבר הראשון הן הטעינות ההתחלתיות של מסלול הרכב. לאחר מכן, אחרי כל ביקור, המערכת מוסיפה או מחסירה את הערך של |
VehicleLoad
מדווח על עומס הרכב בפועל בשלב כלשהו לאורך המסלול, לפי סוג נתון (פרטים בTransition.vehicle_loads
).
שדות | |
---|---|
amount |
כמות העומס על הרכב, לסוג הנתון. יחידת העומס בדרך כלל מצוינת על ידי סוג. |
כניסה
ביקור שבוצע במהלך מסלול. הביקור הזה מתייחס לאיסוף או למשלוח של Shipment
.
שדות | |
---|---|
shipment_index |
אינדקס השדה |
is_pickup |
אם הערך הוא true, הביקור תואם לאיסוף של |
visit_request_index |
אינדקס של |
start_time |
השעה שבה הביקור מתחיל. חשוב לדעת שהרכב עשוי להגיע מוקדם יותר למיקום הביקור. השעות תואמות ל |
load_demands |
הביקוש הכולל לעומס על הביקורים, כסך המשלוח ובקשת הביקור |
detour |
זמן עוקף נוסף עקב המשלוחים שבהם ביקרו במסלול לפני הביקור וזמני ההמתנה האפשריים עקב חלונות זמן. אם הביקור הוא משלוח, המעקף מחושב לפי הביקור התואם לאיסוף והוא שווה ל:
אחרת, הוא מחושב מהרכב
|
shipment_label |
עותק של |
visit_label |
עותק של |
ShipmentTypeIncompatibility
מציין אי-תאימות בין משלוחים בהתאם ל-delivery_type שלהם. בגלל מצב חוסר התאימות, ההצגה של משלוחים לא תואמים באותו מסלול מוגבלת.
שדות | |
---|---|
types[] |
רשימת סוגים שאינם תואמים. שתי משלוחים עם |
incompatibility_mode |
המצב הוחל על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים איך המראה של משלוחים לא תואמים מוגבל באותו מסלול.
טיפוסים בני מנייה (enums) | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב חוסר תאימות לא מוגדר. לעולם אין להשתמש בערך הזה. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, אף פעם לא ניתן לחלוק את אותו כלי רכב בין שני משלוחים עם סוגים לא תואמים. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
לשני משלוחים עם סוגים שאינם תואמים למצב חוסר התאימות של
|
ShipmentTypeRequirement
מציין דרישות בין משלוחים על סמך סוג המשלוח שלהם. פרטי הדרישה מוגדרים במצב הדרישה.
שדות | |
---|---|
required_shipment_type_alternatives[] |
רשימה של סוגי משלוחים חלופיים שנדרשים על ידי |
dependent_shipment_types[] |
לכל משלוחים מהסוג הזה בשדה הערה: אסור לפרסם שרשרת של דרישות שתלויות ב |
requirement_mode |
המצב הוחל על הדרישה. |
RequirementMode
מצבים שמגדירים את המראה של משלוחים תלויים במסלול.
טיפוסים בני מנייה (enums) | |
---|---|
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_exceeded_capacity_type |
אם קוד הסיבה הוא |
example_vehicle_index |
אם הסיבה קשורה לאי-תאימות של כלי רכב מסוימים, בשדה הזה מופיע האינדקס של רכב רלוונטי אחד. |
קוד
קוד שמזהה את סוג הסיבה. ההזמנה הזו חסרת משמעות. באופן ספציפי, המערכת לא מורה אם סיבה נתונה תופיע לפני הסיבה השנייה בפתרון, אם שתיהן רלוונטיות.
טיפוסים בני מנייה (enums) | |
---|---|
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` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
שדות | |
---|---|
start_time |
שעת ההתחלה של חלון הזמן הקשה. אם לא צוין, תוגדר הערך |
end_time |
שעת הסיום של חלון הזמן הקשה. אם לא צוין, תוגדר הערך |
soft_start_time |
שעת ההתחלה הרכה של חלון הזמן. |
soft_end_time |
שעת הסיום הרכה של חלון הזמן. |
cost_per_hour_before_soft_start_time |
עלות לשעה נוספת לעלויות אחרות במודל אם האירוע מתרחש לפני soft_start_time, מחושב באופן הבא:
העלות הזו חייבת להיות חיובית, ואפשר להגדיר את השדה רק אם הוגדר soft_start_time. |
cost_per_hour_after_soft_end_time |
עלות לשעה מתווספת לעלויות אחרות במודל אם האירוע מתרחש אחרי
העלות הזו חייבת להיות חיובית, ואפשר להגדיר את השדה רק אם הוגדר |
TransitionAttributes
מציין מאפיינים של מעברים בין שני ביקורים רצופים במסלול. ייתכן שיחולו כמה TransitionAttributes
על אותו מעבר: במקרה כזה, כל העלויות הנוספות יסתכמו ויחולו האילוץ או המגבלה המחמירים ביותר (לפי הסמנטיקה הטבעית של "AND").
שדות | |
---|---|
src_tag |
תגים שמגדירים את קבוצת המעברים (src->dst) שעליהם המאפיינים האלה חלים. ביקור במקור או התחלת רכב תואמים אם השדה |
excluded_src_tag |
|
dst_tag |
ביקור ביעד או ערך סיום כלי רכב תואמים אם השדה |
excluded_dst_tag |
|
cost |
מציין עלות לביצוע המעבר. הערך הזה הוא באותה יחידה כמו כל שאר העלויות במודל, והוא לא יכול להיות שלילי. הוא יתווסף לעלויות הקיימות. |
cost_per_kilometer |
מציין עלות לקילומטר שחלה על המרחק שעברתם בזמן ביצוע המעבר. הנתון הזה מצטבר לכל |
distance_limit |
המדיניות הזו מציינת מגבלה על המרחק שהמעבר צריך לבצע. החל מ-6 ביוני 2021 יש תמיכה רק במגבלות רכות. |
delay |
מציין עיכוב במהלך ביצוע המעבר הזה. העיכוב הזה תמיד מתרחש אחרי שמסיימים את הביקור במקור ולפני שמתחילים את הביקור ביעד. |
כלי רכב
דגמי רכב שנמצאים בבעיה במשלוח. פתרון בעיה במשלוח יוביל ליצירת מסלול שמתחיל מ-start_location
ומסתיים בשעה end_location
. מסלול הוא רצף של ביקורים (מידע נוסף זמין בShipmentRoute
).
שדות | |
---|---|
display_name |
השם המוצג של הרכב שהמשתמש הגדיר. היא יכולה להכיל עד 63 תווים והיא יכולה לכלול תווי UTF-8. |
travel_mode |
מצב הנסיעה שמשפיע על הדרכים שבהן הרכב זמין והמהירות שלו. למידע נוסף, יש לעיין ב- |
start_location |
המיקום הגיאוגרפי שבו הרכב מתחיל לפני איסוף משלוחים. אם לא מציינים שום אפשרות, הרכב יתחיל באיסוף הראשון. אם מודל המשלוח כולל מטריצות של משך ומרחק, אין לציין |
start_waypoint |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מתחיל לפני איסוף משלוחים. אם לא מציינים |
end_location |
המיקום הגיאוגרפי שבו הרכב מסתיים אחרי שהוא השלים |
end_waypoint |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מסתיים אחרי |
start_tags[] |
מציין תגים שמצורפים להתחלת המסלול של הרכב. אי אפשר להשתמש במחרוזות ריקות או כפולות. |
end_tags[] |
מציין תגים שמצורפים לסוף המסלול של הרכב. אי אפשר להשתמש במחרוזות ריקות או כפולות. |
start_time_windows[] |
חלונות זמן שבמהלכם הרכב עשוי לצאת ממיקום ההתחלה שלו. הן חייבות להיות במסגרת מגבלות הזמן הגלובליות (ראו חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים. כלומר, חלונות זמן לא יכולים לחפוף או להיות קרובים לחלונות זמן אחרים, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
end_time_windows[] |
חלונות זמן שבמהלכם הרכב עשוי להגיע למיקום הסיום שלו. הן חייבות להיות במסגרת מגבלות הזמן הגלובליות (ראו חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים. כלומר, חלונות זמן לא יכולים לחפוף או להיות קרובים לחלונות זמן אחרים, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
unloading_policy |
מדיניות הסרת הנתונים שנאכפה על הרכב. |
load_limits |
הקיבולת של הרכב (למשל: משקל, נפח, מספר משטחים). המפתחות במפה הם המזהים של סוג העומס, בהתאם למפתחות של השדה |
cost_per_hour |
עלויות הרכב: כל העלויות מצטברות וחייבות להיות באותה יחידה כמו עלות לשעה של מסלול הרכב. העלות הזו חלה על הזמן הכולל שנדרש במסלול, והיא כוללת את זמן ההגעה, זמן ההמתנה וזמן הביקור. שימוש ב- |
cost_per_traveled_hour |
עלות לשעת נסיעה במסלול הרכב. העלות הזו רלוונטית רק לזמן הנסיעה במסלול (כלומר, שדווח ב- |
cost_per_kilometer |
עלות לקילומטר של מסלול הרכב. העלות הזו חלה על המרחק המדווח ב |
fixed_cost |
עלות קבועה חלה אם הרכב הזה משמש לטיפול במשלוח. |
used_if_route_is_empty |
השדה הזה רלוונטי רק לכלי רכב שהמסלול שלהם לא מספק משלוחים. הוא מציין אם במקרה הזה יש להחשיב את הרכב כרכב משומש או לא. אם הערך הוא True, הרכב נע מנקודת ההתחלה למיקום הסיום שלו גם אם הוא לא מספק משלוחים, והמערכת מביאה בחשבון את העלויות של הזמן והמרחק שנובעות מנקודת ההתחלה שלו --> הנסיעה לסוף הנסיעה. אחרת, הוא לא ייסע מנקודת ההתחלה שלו למיקום הסיום שלו, ולא מתוכנן |
route_duration_limit |
הגבלה שחלה על משך הזמן הכולל של המסלול של הרכב. ב |
travel_duration_limit |
הגבלה שחלה על משך הנסיעה במסלול של הרכב. ב- |
route_distance_limit |
המגבלה חלה על המרחק הכולל של המסלול של הרכב. ב |
extra_visit_duration_for_visit_type |
מציין מפה ממחרוזות visit_types למשך הזמן. משך הזמן הוא זמן בנוסף ל- אם לבקשת ביקור יש כמה סוגים, יתווסף משך זמן לכל סוג במפה. |
break_rule |
מתאר את לוח הזמנים של ההפסקה לאכיפה על הרכב הזה. אם השדה ריק, לא יתוזמנו הפסקות לרכב הזה. |
label |
מציין תווית לרכב הזה. התווית מדווחת בתשובה בתור |
ignore |
אם הערך הוא True, הערך של אם משלוח מתבצע על ידי כלי רכב ב- אם משלוח מבוצע על ידי רכב של |
travel_duration_multiple |
מציין גורם כפל שאפשר להשתמש בו כדי להגדיל או לקצר את זמני הנסיעה של הרכב הזה. לדוגמה, אם קובעים במדיניות את הערך 2.0, המשמעות היא שהרכב הזה איטי יותר וזמני הנסיעה שלו גדולים פי שניים כשמדובר ברכבים רגילים. הכפולה הזו לא משפיעה על משך הביקורים. אם מציינים אזהרה: זמני הנסיעה יעוגלו לשנייה הקרובה ביותר לאחר החלת הכפולה הזו, אבל לפני ביצוע פעולות מספריות כלשהן, ולכן, ריבוי קטן עלול לגרום לאובדן דיוק. יש לעיין גם ב- |
DurationLimit
מגבלה שקובעת משך זמן מקסימלי של המסלול בכלי רכב. היא יכולה להיות קשה או רכה.
כשמוגדר שדה של מגבלה רכה, יש להגדיר יחד את הסף המקסימלי וגם את העלות המשויכת.
שדות | |
---|---|
max_duration |
מגבלה קשיחה מגבילה את משך הזמן כך שיהיה לכל היותר max_duration. |
soft_max_duration |
אם אין הגבלה על משך המסלול, היא לא אוכפת מגבלה של משך זמן מקסימלי, אבל היא כרוכה בתשלום. העלות הזו מסתכמת לעלויות אחרות שמוגדרות במודל, באמצעות אותה יחידה. אם מוגדר, |
quadratic_soft_max_duration |
מגבלה רכה שאינה אוכפת מגבלת משך זמן מקסימלית, אבל כאשר היא מופרת, היא צוברת עלות, ריבועית למשך הזמן. העלות הזו מסתכמת לעלויות אחרות שמוגדרות במודל, באמצעות אותה יחידה. אם מוגדר,
|
cost_per_hour_after_soft_max |
עלות לשעה שנצברו במקרה של הפרת הסף של
העלות חייבת להיות לא שלילית. |
cost_per_square_hour_after_quadratic_soft_max |
עלות לשעה רבועה שנצברו במקרה של הפרת הסף של העלות הנוספת היא 0 אם משך הזמן נמוך מהסף, אחרת העלות תלויה במשך הזמן באופן הבא:
העלות חייבת להיות לא שלילית. |
LoadLimit
מגדירה מגבלת עומסים שחלה על רכב, למשל "משאית זו יכולה לשאת עד 3,500 ק"ג בלבד". load_limits
.
שדות | |
---|---|
soft_max_load |
גבול "רך" של העומס. |
cost_per_unit_above_soft_max |
אם העומס יחרוג מ- |
start_load_interval |
מרווח הטעינה הקביל של הרכב בתחילת המסלול. |
end_load_interval |
מרווח הטעינה המקובל של הרכב בסוף המסלול. |
max_load |
כמות הטעינה הקבילה המקסימלית. |
מרווח
מרווח הזמן של סכומי הטעינה הקבילים.
שדות | |
---|---|
min |
טעינה מינימלית קבילה. חייב להיות 0 או יותר. אם שניהם מצוינים, הערך של |
max |
טעינה קבילה מקסימלית. חייב להיות 0 או יותר. אם לא צוין אחרת, הטעינה המקסימלית לא מוגבלת על ידי הודעה זו. אם שניהם מצוינים, הערך של |
TravelMode
מצבי נסיעה שיכולים לשמש כלי רכב.
הקבוצות האלה צריכות להיות קבוצת משנה של אמצעי התחבורה שמוגדרים כ-Preferred API Routes API. ניתן למצוא מידע בכתובת https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
טיפוסים בני מנייה (enums) | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
אמצעי הגעה לא מוגדר, שווה ערך ל-DRIVING . |
DRIVING |
מצב נסיעה המתאים למסלול נסיעה (מכונית, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
UnloadingPolicy
המדיניות בנושא הסרת הנתונים מכלי הרכב. רלוונטי רק למשלוחים שיש בהם גם אפשרות לאיסוף וגם משלוח.
משלוחים אחרים זמינים בחינם בכל מקום במסלול, ללא קשר ל-unloading_policy
.
טיפוסים בני מנייה (enums) | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
מדיניות הסרת הנתונים שנטענו לא צוינה. משלוחים חייבים להתרחש רק אחרי האיסוף התואם. |
LAST_IN_FIRST_OUT |
פרטי המשלוח צריכים להתרחש בסדר הפוך של האיסוף |
FIRST_IN_FIRST_OUT |
פרטי המשלוח צריכים להתבצע באותה סדר כמו האיסוף |
נקודת ציון
כולל ציון דרך. נקודות ציון מציינות את מיקומי ההגעה והיציאה של VisitRequests, ואת מיקומי ההתחלה והסיום של כלי הרכב.
שדות | |
---|---|
side_of_road |
זה שינוי אופציונלי. מציין שמיקום ציון הדרך הזה נועד לתת העדפה לעצירת הרכב בצד מסוים של הדרך. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כך שהרכב יכול לעצור בצד הדרך כשהמיקום מוטה לכיוון מרכז הכביש. אפשרות זו אינה פועלת במצב הנסיעה 'הליכה'. |
שדה איחוד location_type . דרכים שונות לייצוג מיקום. location_type יכול להיות רק אחד מהבאים: |
|
location |
נקודה שצוינה באמצעות קואורדינטות גיאוגרפיות, כולל כותרת אופציונלית. |
place_id |
מזהה המקום של נקודת העניין שמשויך לציון הדרך. |