אינדקס
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
- השעות הן לפי שעון יוניקס (Unix): שניות מ-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
(resres, מעל כל 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
יכול לחול על הפסקות לא ברצף. לדוגמה, לוח הזמנים הבא חל על השעה 12:00 דוגמה:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
שדות | |
---|---|
min_break_duration |
חובה. משך ההפסקה המינימלי לאילוץ הזה. לא שלילי. הצגת התיאור של |
max_inter_break_duration |
חובה. פרק הזמן המקסימלי המותר בכל מרווח זמן במסלול שלא כולל לפחות הפסקה חלקית של |
DataFormat
פורמטים של נתונים לקובצי קלט ופלט.
טיפוסים בני מנייה (enum) | |
---|---|
DATA_FORMAT_UNSPECIFIED |
ערך לא חוקי. הפורמט לא יכול להיות UNSPECIFIED. |
JSON |
JavaScript Object Notation. |
PROTO_TEXT |
פורמט טקסט של מאגרי פרוטוקולים. פרטים נוספים זמינים בכתובת https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
מגבלה שמגדירה מרחק מקסימלי שאפשר לעבור בו. היא יכולה להיות קשה או רכה.
אם מוגדרת מגבלת softmax, צריך להגדיר גם את soft_max_meters
וגם את cost_per_kilometer_above_soft_max
וגם לא להיות שליליים.
שדות | |
---|---|
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 |
מספר הביקורים שבהם או אחריהם ניתן להחיל את ההקלות אם הערך הוא |
רמה
העמודה הזו מגדירה את רמות ההקלות במגבלות השונות, שחלות על ביקור ואחר כך אחרי שהוא עומד בתנאי הסף.
הספירה הבאה מסודרת לפי סדר הגברת הרגיעה.
טיפוסים בני מנייה (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_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:
הפרשנות הזו חלה על השדות אם True, התוויות בקטגוריות הבאות חייבות להופיע פעם אחת לכל היותר בקטגוריה שלהן:
אם הסרה של ביקורים במסלול או מסלולים שלמים מפתרון שהוחדר יכולה להיות השפעה על המגבלות המשתמעות. כתוצאה מכך, עשויים להיות שינויים בפתרון, בשגיאות אימות או בחוסר היתכנות. הערה: המתקשר חייב לוודא שכל |
consider_road_traffic |
כדאי להביא בחשבון אומדן תנועה בחישוב השדות של |
populate_polylines |
אם הערך הוא True, הקווים הפוליטיים יאוכלסו בתשובה |
populate_transition_polylines |
אם הערך הוא True, הקווים הפוליטיים יאוכלסו בתשובה |
allow_large_deadline_despite_interruption_risk |
אם היא מוגדרת, ייתכן שתאריך היעד של הבקשה יהיה עד 60 דקות (מידע נוסף זמין בכתובת https://grpc.io/blog/deadlines). אחרת, המועד האחרון המקסימלי הוא 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), אלא אם Solution_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 |
פותרים את המודל. |
VALIDATE_ONLY |
מאמת את המודל רק בלי לפתור את הבעיה: מתבצע אכלוס של כמה שיותר OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
המערכת מאכלסת רק את חשוב: לא כל המשלוחים שאינם מעשיים מוחזרים כאן, אלא רק אלה שזוהו כלא מעשיים במהלך העיבוד מראש. |
OptimizeToursResponse
תגובה אחרי פתרון בעיה של אופטימיזציית סיור, שמכילה את המסלולים שאחריהם של כל רכב, את המשלוחים שדילגת עליהם והעלות הכוללת של הפתרון.
שדות | |
---|---|
routes[] |
מסלולים שמחושבים לכל רכב. המסלול ה-i תואם לרכב i-th במודל. |
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"] הן הסכום של כל עלויות האיסוף במסגרת הפתרון. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות למאפייני מעבר, שמדווחות רק באופן מצטבר נכון ל-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.route Optimize.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' התחיל.
כמה קדימות יכולות להתייחס לאותם אירועים (או אירועים קשורים). למשל: "איסוף ב' מתבצע אחרי המסירה של" ו'איסוף C מתבצע אחרי איסוף של B'.
בנוסף, קדימות חלות רק כאשר מבצעים את שני המשלוחים ומתעלמים ממנה.
שדות | |
---|---|
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
לבסוף, כך אפשר לארגן את TRAVEL, breakS, DELAY ו-WAIT במהלך מעבר.
- אין חפיפה ביניהם.
- משך העיכוב הוא ייחודי וחייב להיות פרק זמן רציף לפני הביקור הבא (או סיום הנסיעה). לכן, מספיק לדעת מהו משך ההשהיה כדי לדעת את שעת ההתחלה ושעת הסיום.
- קטעי ה-breakS הם רציפים ולא חופפים. התגובה מציינת את שעת ההתחלה ואת משך הזמן של כל הפסקה.
- 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_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"] הן הסכום של כל עלויות האיסוף לאורך המסלול. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות למאפייני מעבר, שמדווחות רק באופן מצטבר נכון ל-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
מציינת חוסר תאימות בין משלוחים בהתאם לסוג המשלוח שלהם. ההצגה של משלוחים לא תואמים באותו מסלול מוגבלת בהתאם למצב חוסר התאימות.
שדות | |
---|---|
types[] |
רשימת סוגים לא תואמים. שני משלוחים עם |
incompatibility_mode |
המצב הוחל על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים את האופן שבו משלוחים לא תואמים מוגבלים לאותו מסלול.
טיפוסים בני מנייה (enum) | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב חוסר תאימות לא צוין. אין להשתמש בערך הזה אף פעם. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, שני משלוחים עם סוגים לא תואמים אף פעם לא יכולים לחלוק את אותו רכב. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
לשני משלוחים שאינם תואמים למצב חוסר התאימות של
|
ShipmentTypeRequirement
מציינת את הדרישות בין משלוחים על סמך סוג המשלוח שלהם. הפרטים הספציפיים של הדרישה מוגדרים על ידי מצב הדרישה.
שדות | |
---|---|
required_shipment_type_alternatives[] |
רשימה של סוגי משלוח חלופיים שנדרשים על ידי |
dependent_shipment_types[] |
לכל משלוחים מסוג מסוים בשדה הערה: אסור להשתמש בשרשראות של דרישות כמו |
requirement_mode |
המצב הוחל על הדרישה. |
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 |
יש לעיין בהערות של הקוד. |
example_exceeded_capacity_type |
אם קוד הסיבה הוא |
example_vehicle_index |
אם הסיבה קשורה לאי-תאימות של רכב למשלוח, בשדה הזה יופיע האינדקס של כלי רכב רלוונטי אחד. |
קוד
קוד לזיהוי סוג הסיבה. הסדר כאן הוא חסר משמעות. באופן ספציפי, לא מצוין אם סיבה מסוימת תופיע לפני סיבה אחרת בפתרון, אם שתיהן רלוונטיות.
טיפוסים בני מנייה (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` <= `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 |
מציינת מגבלה על המרחק שהמשתמש עובר במהלך ביצוע המעבר הזה. נכון ל-2021/06, אפשר להשתמש רק במגבלות רכות. |
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
הגדרת מגבלת עומס שחלה על כלי רכב, לדוגמה "משאית כזו יכולה לשאת עד 3500 ק"ג". load_limits
.
שדות | |
---|---|
soft_max_load |
מגבלת עומס רכה. |
cost_per_unit_above_soft_max |
אם העומס בכל זאת יחרוג מ- |
start_load_interval |
מרווח העומס הקביל של הרכב בתחילת המסלול. |
end_load_interval |
מרווח העומס הקביל של הרכב בסוף המסלול. |
max_load |
כמות הטעינה המקסימלית הקבילה. |
מרווח
מרווח של סכומי עומסים מקובלים.
שדות | |
---|---|
min |
עומס קביל מינימלי. מספר זה חייב להיות 0 ומעלה. אם מציינים את שניהם, הערך של |
max |
טעינה קבילה מקסימלית. מספר זה חייב להיות 0 ומעלה. אם לא צוין, ההודעה הזו לא תוכל להגביל את הטעינה המקסימלית. אם מציינים את שניהם, הערך של |
TravelMode
מצבי נסיעה לשימוש בכלי רכב.
הקבוצות האלה צריכות להיות קבוצת משנה של מצבי הנסיעה המועדפים ב-API של המסלולים בפלטפורמה של מפות Google, מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
טיפוסים בני מנייה (enum) | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
מצב נסיעה לא מוגדר, המקביל ל-DRIVING . |
DRIVING |
מצב נסיעה התואם למסלול הנסיעה (מכונית, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
UnloadingPolicy
מדיניות לגבי האופן שבו ניתן להוריד כלי רכב. המאפיין חל רק על משלוחים שכוללים גם איסוף עצמי וגם משלוח.
משלוחים אחרים מתבצעים בחינם בכל מקום במסלול, ללא קשר ל-unloading_policy
.
טיפוסים בני מנייה (enum) | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
מדיניות הסרת הנתונים שנטענו לא צוינה. והמשלוחים צריכים להתרחש רק אחרי האיסוף. |
LAST_IN_FIRST_OUT |
משלוחים צריכים להתרחש בסדר הפוך. |
FIRST_IN_FIRST_OUT |
המשלוחים צריכים להיות באותה הזמנה כמו באיסוף עצמי |
נקודת ציון
כולל ציון דרך. נקודות ציון מציינות את מיקומי ההגעה והיציאה של VisitRequests, ואת מיקומי ההתחלה והסיום של כלי הרכב.
שדות | |
---|---|
side_of_road |
זה שינוי אופציונלי. מציין שמיקום ציון הדרך הזה נועד לתת לרכב העדפה בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו נוטה המיקום ממרכז הכביש. האפשרות הזו לא פועלת עבור 'הליכה' במצב נסיעה. |
שדה איחוד location_type . דרכים שונות לייצוג מיקום. location_type יכול להיות רק אחת מהאפשרויות הבאות: |
|
location |
נקודה שמצוינת באמצעות קואורדינטות גיאוגרפיות, כולל כותרת אופציונלית. |
place_id |
מזהה המקום של נקודת העניין המשויך לציון הדרך. |