אינדקס
-
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(הודעה) -
OptimizeToursLongRunningMetadata(הודעה) -
OptimizeToursRequest(הודעה) OptimizeToursRequest.SearchMode(enum)OptimizeToursRequest.SolvingMode(enum)-
OptimizeToursResponse(הודעה) -
OptimizeToursResponse.Metrics(הודעה) -
OptimizeToursUriMetadata(הודעה) -
OptimizeToursUriRequest(הודעה) -
OptimizeToursUriResponse(הודעה) -
OptimizeToursValidationError(הודעה) -
OptimizeToursValidationError.FieldReference(הודעה) -
OutputConfig(הודעה) -
RouteModifiers(הודעה) -
Shipment(הודעה) -
Shipment.Load(הודעה) -
Shipment.VisitRequest(הודעה) -
ShipmentModel(הודעה) -
ShipmentModel.DurationDistanceMatrix(הודעה) -
ShipmentModel.DurationDistanceMatrix.Row(הודעה) -
ShipmentModel.Objective(הודעה) ShipmentModel.Objective.Type(enum)-
ShipmentModel.PrecedenceRule(הודעה) -
ShipmentRoute(הודעה) -
ShipmentRoute.Break(הודעה) -
ShipmentRoute.EncodedPolyline(הודעה) -
ShipmentRoute.Transition(הודעה) -
ShipmentRoute.VehicleLoad(הודעה) -
ShipmentRoute.Visit(הודעה) ShipmentRoute.Visit.VisitType(enum)-
ShipmentTypeIncompatibility(הודעה) ShipmentTypeIncompatibility.IncompatibilityMode(enum)-
ShipmentTypeRequirement(הודעה) ShipmentTypeRequirement.RequirementMode(enum)-
SkippedShipment(הודעה) -
SkippedShipment.Reason(הודעה) SkippedShipment.Reason.Code(enum)-
TimeWindow(הודעה) -
TransitionAttributes(הודעה) -
Uri(הודעה) -
Vehicle(הודעה) -
Vehicle.DurationLimit(הודעה) -
Vehicle.LoadLimit(הודעה) -
Vehicle.LoadLimit.Interval(הודעה) -
Vehicle.LoadLimit.LoadCost(הודעה) Vehicle.TravelMode(enum)Vehicle.UnloadingPolicy(enum)-
VehicleFullness(הודעה) -
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). הנתונים שמוזנים לאופטימיזציה (הודעות המשתמש יכול לשלוח בקשות מסוג poll אל אם השדה אם השדה
|
| OptimizeTours |
|---|
|
שולחת מודל המטרה היא להקצות
|
| OptimizeToursLongRunning |
|---|
|
זוהי וריאציה של ה-method הפעולה ארוכת הטווח (LRO) שמוחזרת תהיה בפורמט ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request.
|
| OptimizeToursUri |
|---|
|
זוהי וריאציה של שיטת הלקוח מציין את ה-URI של מומלץ להשתמש בשיטה הזו במקום בשיטה הפעולה ארוכת הטווח (LRO) שמוחזרת תהיה בפורמט ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request.
|
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 |
העומס המקסימלי שהושג לאורך המסלול כולו (או הפתרון), לכל אחת מהכמויות במסלול (או בפתרון), שמחושב כמקסימום של כל |
performed_mandatory_shipment_count |
מספר המשלוחים שבוצעו. ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
performed_shipment_penalty_cost_sum |
סכום ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
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 שעות':
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
מגבלה שמגדירה את המרחק המקסימלי שאפשר לנסוע. היא יכולה להיות קשה או רכה.
אם מוגדרת מגבלה רכה, צריך להגדיר את soft_max_meters ואת cost_per_kilometer_above_soft_max כערכים לא שליליים.
| שדות | |
|---|---|
max_meters |
מגבלה קשיחה שמגבילה את המרחק למקסימום של max_meters. ההגבלה לא יכולה להיות שלילית. |
soft_max_meters |
מגבלה רכה שלא אוכפת מגבלת מרחק מקסימלית, אבל אם היא מופרת, נוצרת עלות שמצטברת עם עלויות אחרות שמוגדרות במודל, באותה יחידה. אם מגדירים את soft_max_meters, הערך שלו חייב להיות קטן מ-max_meters ולא שלילי. |
cost_per_kilometer_below_soft_max |
העלות לקילומטר שנוספה, עלייה של עד העלות הזו לא נתמכת ב- |
cost_per_kilometer_above_soft_max |
העלות לקילומטר שנוספת אם המרחק גדול מהמגבלה העלות לא יכולה להיות שלילית. |
GcsDestination
המיקום ב-Google Cloud Storage שבו ייכתבו קובצי הפלט.
| שדות | |
|---|---|
uri |
חובה. URI של 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 מציין כיוון מזרחה וכן הלאה. |
OptimizeToursLongRunningMetadata
בסוג הזה אין שדות.
מטא-נתונים של פעולות עבור קריאות ל-OptimizeToursLongRunning.
OptimizeToursRequest
בקשה שמועברת לכלי לפתרון בעיות אופטימיזציה של סיורים, שמגדיר את מודל המשלוח לפתרון וגם את פרמטרי האופטימיזציה.
| שדות | |
|---|---|
parent |
חובה. בוחרים פרויקט או מיקום כדי להתקשר. פורמט:
אם לא מציינים מיקום, המערכת תבחר אזור באופן אוטומטי. |
timeout |
אם מוגדר פסק זמן, השרת מחזיר תשובה לפני שפסק הזמן מסתיים או לפני שהגיע מועד היעד של השרת לבקשות סינכרוניות, לפי המוקדם מביניהם. בבקשות אסינכרוניות, השרת ייצור פתרון (אם אפשר) לפני שחלף הזמן הקצוב לתפוגה. |
model |
מודל משלוח לפתרון. |
solving_mode |
מצב הפתרון הוא |
search_mode |
מצב החיפוש שבו נעשה שימוש כדי לפתור את הבקשה. |
injected_first_solution_routes[] |
הנחיית אלגוריתם האופטימיזציה למציאת פתרון ראשון שדומה לפתרון קודם. המודל מוגבל כשיוצרים את הפתרון הראשון. כל המשלוחים שלא מתבצעים במסלול מסוים נכללים אוטומטית בפתרון הראשון, אבל יכול להיות שהם יתבצעו בפתרונות הבאים. הפתרון צריך לעמוד בכמה הנחות בסיסיות לגבי תוקף:
אם הפתרון שהוזרק לא אפשרי, לא בהכרח תוחזר שגיאת אימות, ויכול להיות שתוחזר שגיאה שמציינת שהפתרון לא אפשרי. |
injected_solution_constraint |
הגבלת אלגוריתם האופטימיזציה כדי למצוא פתרון סופי שדומה לפתרון קודם. לדוגמה, אפשר להשתמש בזה כדי להקפיא חלקים של מסלולים שכבר הושלמו או שצריך להשלים אותם אבל אסור לשנות אותם. אם הפתרון שהוזרק לא אפשרי, לא בהכרח תוחזר שגיאת אימות, ויכול להיות שתוחזר שגיאה שמציינת שהפתרון לא אפשרי. |
refresh_details_routes[] |
אם הרשימה לא ריקה, המסלולים שצוינו ירעננו בלי לשנות את רצף הביקורים או את זמני הנסיעה: רק פרטים אחרים יעודכנו. הפעולה הזו לא פותרת את המודל. החל מ-2020/11, המדיניות הזו מאכלסת רק את הקווים המקוטעים של מסלולים לא ריקים, ונדרש שהמדיניות יכול להיות שהשדות אסור להשתמש בשדה הזה יחד עם לכללי המדיניות |
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), אלא אם solving_mode=VALIDATE_ONLY: ראו את השדה |
SearchMode
מצב שמגדיר את התנהגות החיפוש, שבו יש פשרה בין זמן האחזור לבין איכות הפתרון. בכל המצבים, מועד היעד הגלובלי לבקשה נאכף.
| טיפוסים בני מנייה (enum) | |
|---|---|
SEARCH_MODE_UNSPECIFIED |
מצב חיפוש לא מוגדר, שווה ערך ל-RETURN_FAST. |
RETURN_FAST |
להפסיק את החיפוש אחרי שמוצאים את הפתרון הטוב הראשון. |
CONSUME_ALL_AVAILABLE_TIME |
כדאי להקדיש את כל הזמן שזמין לכם לחיפוש פתרונות טובים יותר. |
SolvingMode
הגדרה של אופן הטיפול של פותר הבעיות בבקשה. בכל המצבים חוץ מ-VALIDATE_ONLY, אם הבקשה לא תקינה, תקבלו שגיאת INVALID_REQUEST. אפשר להגביל את מספר השגיאות שיוחזרו באמצעות max_validation_errors.
| טיפוסים בני מנייה (enum) | |
|---|---|
DEFAULT_SOLVE |
פתרון המודל. יכול להיות שיונפקו אזהרות ב-[OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. |
VALIDATE_ONLY |
מאמת רק את המודל בלי לפתור אותו: ממלא כמה שיותר OptimizeToursResponse.validation_errors. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
מאכלס רק את חשוב: לא כל המשלוחים הלא אפשריים מוחזרים כאן, אלא רק אלה שמזוהים כלא אפשריים במהלך העיבוד המקדים. |
TRANSFORM_AND_RETURN_REQUEST |
המצב הזה פועל רק אם ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
OptimizeToursResponse
תשובה אחרי פתרון בעיה של אופטימיזציה של מסלולים, שמכילה את המסלולים שכל כלי רכב עבר, את המשלוחים שדילגו עליהם ואת העלות הכוללת של הפתרון.
| שדות | |
|---|---|
routes[] |
מסלולים שמחושבים לכל רכב. המסלול ה-i מתאים לרכב ה-i במודל. |
request_label |
עותק של |
skipped_shipments[] |
רשימה של כל המשלוחים שדילגתם עליהם. |
validation_errors[] |
רשימה של כל שגיאות האימות שהצלחנו לזהות באופן עצמאי. אפשר לעיין בהסבר על ההודעה |
processed_request |
במקרים מסוימים אנחנו משנים את הבקשה הנכנסת לפני שאנחנו פותרים אותה, למשל מוסיפים עלויות. אם solving_mode == TRANSFORM_AND_RETURN_REQUEST, הבקשה ששונתה מוחזרת כאן. ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
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', והערכים הם העלות הכוללת שנוצרה על ידי שדה העלות המתאים, שנצברת על פני הפתרון כולו. במילים אחרות, costs["model.shipments.pickups.cost"] הוא סכום כל העלויות של איסוף משלוחים בפתרון. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות ל-TransitionAttributes, שמדווחות רק באופן מצטבר החל מ-2022/01. |
total_cost |
העלות הכוללת של הפתרון. סכום כל הערכים במפת העלויות. |
OptimizeToursUriMetadata
בסוג הזה אין שדות.
מטא-נתונים של פעולות עבור קריאות ל-OptimizeToursUri.
OptimizeToursUriRequest
בקשה שמשמשת את השיטה OptimizeToursUri.
| שדות | |
|---|---|
parent |
חובה. בוחרים פרויקט או מיקום כדי להתקשר. פורמט:
אם לא מציינים מיקום, המערכת תבחר אזור באופן אוטומטי. |
input |
חובה. ה-URI של האובייקט ב-Cloud Storage שמכיל את |
output |
חובה. ה-URI של אובייקט Cloud Storage שיכיל את |
OptimizeToursUriResponse
תשובה שמוחזרת על ידי השיטה OptimizeToursUri.
| שדות | |
|---|---|
output |
אופציונלי. ה-URI של אובייקט Cloud Storage שמכיל את אפשר להשתמש ב- |
OptimizeToursValidationError
תיאור של שגיאה או אזהרה שנתקלו בהן במהלך אימות של OptimizeToursRequest.
| שדות | |
|---|---|
code |
שגיאת אימות מוגדרת על ידי הצמד ( השדות שמופיעים אחרי הקטע הזה מספקים הקשר נוסף לגבי השגיאה. שגיאות מרובות: אם יש כמה שגיאות, תהליך האימות ינסה להציג כמה מהן. בדומה לתהליך של קומפילציה, זהו תהליך לא מושלם. חלק משגיאות האימות יהיו 'חמורות', כלומר הן יגרמו להפסקת כל תהליך האימות. זה המצב לגבי שגיאות יציבות: הקודים |
display_name |
השם המוצג של השגיאה. |
fields[] |
הקשר של שגיאה יכול לכלול 0, 1 (ברוב המקרים) או יותר שדות. לדוגמה, כדי להתייחס לאיסוף הראשון של משלוח מספר 2 באמצעות כלי רכב מספר 4, אפשר להשתמש בפורמט הבא: עם זאת, שימו לב שהקרדינליות של |
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 |
שם השדה, למשל 'vehicles'. |
sub_field |
שדה משנה מקונן באופן רקורסיבי, אם צריך. |
שדה איחוד הערך |
|
index |
האינדקס של השדה אם הוא חוזר. |
key |
מפתח אם השדה הוא מפה. |
OutputConfig
מציינים יעד לתוצאות של [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
| שדות | |
|---|---|
data_format |
חובה. פורמט נתוני הפלט. |
שדה איחוד destination. חובה. הערך destination יכול להיות רק אחד מהבאים: |
|
gcs_destination |
המיקום ב-Google Cloud Storage שאליו ייכתב הפלט. |
RouteModifiers
המאפיין הזה כולל קבוצה של תנאים אופציונליים שצריך לעמוד בהם כשמחשבים מסלולים לרכבים. זה דומה ל-RouteModifiers ב-API המועדף של מסלולים ב-Google Maps Platform. מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| שדות | |
|---|---|
avoid_tolls |
המדיניות הזו קובעת אם להימנע מכבישי אגרה במקרים שבהם זה אפשרי. תינתן עדיפות למסלולים שלא כוללים כבישי אגרה. המדיניות חלה רק על אמצעי תחבורה ממונעים. |
avoid_highways |
מציין אם יש להימנע מכבישים מהירים במקרים שבהם זה הגיוני. תינתן עדיפות למסלולים שלא כוללים כבישים מהירים. ההגדרה רלוונטית רק למצבי נסיעה ממונעים. |
avoid_ferries |
המדיניות הזו קובעת אם להימנע ממעבורות כשזה אפשרי. תינתן עדיפות למסלולים שלא כוללים נסיעה במעבורות. המדיניות חלה רק על אמצעי תחבורה ממונעים. |
avoid_indoor |
אופציונלי. ההגדרה קובעת אם להימנע מניווט בתוך מבנים כשזה אפשרי. תינתן עדיפות למסלולים שלא כוללים ניווט בתוך מבנים. ההגדרה חלה רק על מצב הנסיעה |
משלוח
משלוח של פריט יחיד, מאחת מנקודות האיסוף שלו לאחת מנקודות המסירה שלו. כדי שהמשלוח ייחשב כמשלוח שבוצע, רכב ייחודי צריך להגיע לאחת מנקודות האיסוף שלו (ולהקטין את קיבולת המקום הפנוי שלו בהתאם), ואז להגיע לאחת מנקודות המסירה שלו (ולהגדיל את קיבולת המקום הפנוי שלו בהתאם).
| שדות | |
|---|---|
display_name |
השם שהמשתמש נתן למשלוח. הוא יכול לכלול עד 63 תווים, ואפשר להשתמש בתווים בתקן UTF-8. |
pickups[] |
קבוצת חלופות לאיסוף שמשויכות למשלוח. אם לא מציינים מיקום, הרכב צריך להגיע רק למיקום שמתאים למשלוחים. |
deliveries[] |
קבוצת חלופות למשלוח שמשויכות למשלוח. אם לא מציינים חלופות, הרכב צריך להגיע רק למיקום שמתאים לאיסופים. |
load_demands |
דרישות העמסה של המשלוח (לדוגמה, משקל, נפח, מספר משטחים וכו'). המפתחות במיפוי צריכים להיות מזהים שמתארים את סוג העומס התואם, ורצוי לכלול גם את היחידות. לדוגמה: weight_kg, volume_gallons, pallet_count וכו'. אם מפתח מסוים לא מופיע במיפוי, המטען התואם נחשב כ-null. |
allowed_vehicle_indices[] |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם לא מציינים ערך, כל כלי הרכב יכולים לבצע את הפעולה. הרכבים מופיעים לפי האינדקס שלהם ברשימה |
costs_per_vehicle[] |
עלות המשלוח בכל רכב. אם מציינים את המאפיין הזה, צריך להזין בו את אחד מהערכים הבאים:
העלויות האלה צריכות להיות באותה יחידה כמו |
costs_per_vehicle_indices[] |
מספרי האינדקס של כלי הרכב שעליהם חל |
pickup_to_delivery_absolute_detour_limit |
מציין את זמן העיכוב המקסימלי בהשוואה למסלול הקצר ביותר מנקודת האיסוף לנקודת המסירה. אם מציינים את המאפיין הזה, הערך שלו חייב להיות לא שלילי, והמשלוח חייב לכלול לפחות איסוף ומסירה. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי להגיע ישירות מנקודת האיסוף החלופית שנבחרה לנקודת המסירה החלופית שנבחרה. ההגדרה אם מציינים גם מגבלות יחסיות וגם מגבלות מוחלטות לאותו משלוח, המגבלה המחמירה יותר תשמש לכל צמד אפשרי של איסוף/מסירה. החל מ-2017/10, יש תמיכה בנתיבי מעקף רק אם משך הנסיעה לא תלוי ברכב. |
pickup_to_delivery_time_limit |
מציין את משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המסירה של משלוח. אם מציינים את המאפיין הזה, הערך שלו חייב להיות לא שלילי, והמשלוח חייב לכלול לפחות איסוף ומסירה. החישוב לא תלוי בחלופות שנבחרו לאיסוף ולמשלוח, וגם לא במהירות הנסיעה. אפשר לציין את זה לצד אילוצים של מעקפים מקסימליים: הפתרון יתחשב בשני המפרטים. |
shipment_type |
מחרוזת לא ריקה שמציינת את ה'סוג' של המשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין שונה מ |
label |
תווית למשלוח הזה. התווית הזו מדווחת בתשובה בשדה |
ignore |
אם הערך הוא True, המערכת מדלגת על המשלוח הזה, אבל לא מחילה עליו התעלמות ממשלוח גורמת לשגיאת אימות אם יש במודל מותר להתעלם ממשלוח שמתבצע ב- |
penalty_cost |
אם המשלוח לא הושלם, הקנס הזה מתווסף לעלות הכוללת של המסלולים. משלוח נחשב להשלמה אם בוצע איסוף או מסירה של אחת מהאפשרויות שלו. העלות יכולה להיות מבוטאת באותה יחידה שבה משתמשים בכל שאר השדות שקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס הזה, הוא נחשב לאינסופי, כלומר המשלוח חייב להסתיים. |
pickup_to_delivery_relative_detour_limit |
מציין את זמן העיקוף היחסי המקסימלי בהשוואה למסלול הקצר ביותר מנקודת האיסוף לנקודת המסירה. אם מציינים את המאפיין הזה, הערך שלו חייב להיות לא שלילי, והמשלוח חייב לכלול לפחות איסוף ומסירה. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי להגיע ישירות מנקודת האיסוף החלופית שנבחרה לנקודת המסירה החלופית שנבחרה. ההגדרה אם מציינים גם מגבלות יחסיות וגם מגבלות מוחלטות לאותו משלוח, המגבלה המחמירה יותר תשמש לכל צמד אפשרי של איסוף/מסירה. החל מ-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 |
מציינת תווית ל- |
avoid_u_turns |
מציין אם צריך להימנע מביצוע פניות פרסה במסלולי נסיעה במיקום הזה. הימנעות מפרסה היא כמיטב יכולתנו, ואין הבטחה להימנעות מלאה. זוהי תכונה ניסיונית וההתנהגות שלה עשויה להשתנות. בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
ShipmentModel
מודל משלוחים מכיל קבוצה של משלוחים שצריך לבצע באמצעות קבוצה של כלי רכב, תוך מזעור העלות הכוללת, שהיא סכום העלויות הבאות:
- העלות של ניתוב כלי הרכב (סכום העלות לזמן הכולל, העלות לזמן הנסיעה והעלות הקבועה של כל כלי הרכב).
- הקנסות על משלוחים שלא בוצעו.
- העלות של משך המשלוח הכולל
| שדות | |
|---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצה של כלי רכב שאפשר להשתמש בהם לביצוע ביקורים. |
objectives[] |
קבוצת היעדים של המודל הזה, שנתרגם לעלויות. אם המודל לא ריק, הוא צריך להיות ללא עלות. כדי לקבל את הבקשה ששונתה, צריך להשתמש ב- ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
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 לא תואמים (ראו |
shipment_type_requirements[] |
קבוצות של דרישות |
precedence_rules[] |
קבוצה של כללי קדימות שצריך לאכוף במודל. חשוב: השימוש בכללי קדימות מגביל את גודל הבעיה שאפשר לבצע אופטימיזציה שלה. יכול להיות שבקשות שמשתמשות בכללי עדיפות שכוללים משלוחים רבים יידחו. |
max_active_vehicles |
מגביל את המספר המקסימלי של כלי רכב פעילים. רכב נחשב פעיל אם הוא מבצע לפחות משלוח אחד במסלול שלו. אפשר להשתמש בזה כדי להגביל את מספר המסלולים במקרים שבהם יש פחות נהגים מכלי רכב, וצי כלי הרכב הוא הטרוגני. לאחר מכן, המערכת תבחר את קבוצת המשנה הטובה ביותר של כלי רכב לשימוש. חייב להיות חיובי. |
DurationDistanceMatrix
מציין מטריצת משך ומרחקים מנקודות ההתחלה של הביקור והרכב לנקודות הסיום של הביקור והרכב.
| שדות | |
|---|---|
rows[] |
מציין את השורות של מטריצת משך הזמן ומטריצת המרחקים. הוא חייב להכיל את אותו מספר רכיבים כמו |
vehicle_start_tag |
תג שמגדיר לאילו רכבים חלים הנתונים של מטריצת משך הזמן ומטריצת המרחקים הזו. אם התג ריק, הנתונים חלים על כל הרכבים, ויכולה להיות רק מטריצה אחת. כל התחלה של נסיעה ברכב צריכה להתאים בדיוק למטריצה אחת, כלומר בדיוק אחד מהערכים בשדה לכל מטריצה צריך להיות |
שורה
מציין שורה במטריצת מרחקים ומשך זמן.
| שדות | |
|---|---|
durations[] |
ערכי משך הזמן בשורה נתונה. הוא חייב להכיל את אותו מספר רכיבים כמו |
meters[] |
ערכי המרחק בשורה נתונה. אם אין עלויות או אילוצים שמתייחסים למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, צריך שיהיו בו מספר אלמנטים כמו ב- |
מטרה
היעדים מחליפים לחלוטין את מודל העלויות, ולכן הם לא תואמים לעלויות קיימות. כל יעד ממופה למספר עלויות מוגדרות מראש, למשל עלויות של כלי רכב, משלוחים או מאפייני מעבר.
ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.
| שדות | |
|---|---|
type |
סוג היעד. |
weight |
המשקל היחסי של היעד הזה בהשוואה ליעדים אחרים. אפשר לציין במאפיין הזה כל מספר לא שלילי, והמשקלים לא צריכים להסתכם ל-1. משקלים מוגדרים כברירת מחדל ל-1.0. |
סוג
סוג היעד שימופה לקבוצת עלויות.
| טיפוסים בני מנייה (enum) | |
|---|---|
DEFAULT |
כדי להבטיח פתרון סביר, נעשה שימוש בקבוצת עלויות שמוגדרת כברירת מחדל. הערה: אפשר להשתמש ביעד הזה לבד, אבל הוא תמיד יתווסף עם משקל של 1.0, כבסיס, ליעדים שצוינו על ידי המשתמש, אם הוא עדיין לא קיים. |
MIN_DISTANCE |
מטרות מסוג MIN. צמצום מרחק הנסיעה הכולל. |
MIN_WORKING_TIME |
לצמצם את זמן העבודה הכולל, שמחושב כסכום של כל כלי הרכב. |
MIN_TRAVEL_TIME |
כמו למעלה, אבל מתמקדים רק בזמן הנסיעה. |
MIN_NUM_VEHICLES |
לצמצם את מספר כלי הרכב שבהם נעשה שימוש. |
PrecedenceRule
כלל קדימות בין שני אירועים (כל אירוע הוא איסוף או מסירה של משלוח): האירוע ה "שני" צריך להתחיל לפחות offset_duration אחרי שהאירוע ה "ראשון" התחיל.
יכול להיות שיהיו כמה קדימויות שמתייחסות לאותם אירועים (או לאירועים קשורים), למשל: 'איסוף של B מתרחש אחרי מסירה של A' ו'איסוף של C מתרחש אחרי איסוף של B'.
בנוסף, העדיפויות חלות רק כששתי המשלוחים מתבצעים, אחרת המערכת מתעלמת מהן.
| שדות | |
|---|---|
first_is_delivery |
מציין אם האירוע 'first' הוא מסירה. |
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 במהלך מעבר.
- הם לא חופפים.
- העיכוב הוא ייחודי וחייב להיות תקופה רציפה של זמן ממש לפני הביקור הבא (או סיום השימוש ברכב). לכן, מספיק לדעת את משך העיכוב כדי לדעת את שעת ההתחלה ושעת הסיום שלו.
- ההפסקות הן תקופות זמן רצופות שלא חופפות זו לזו. בתשובה מצוינים שעת ההתחלה והמשך של כל הפסקה.
- הפעולות TRAVEL ו-WAIT הן פעולות שניתן להפריע להן: אפשר להפריע להן כמה פעמים במהלך המעבר הזה. הלקוחות יכולים להניח שהפעולה 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[] |
רצף מסודר של ביקורים שמייצג מסלול. visits[i] הוא הביקור ה-i במסלול. אם השדה הזה ריק, הרכב נחשב כלא בשימוש. |
transitions[] |
רשימה מסודרת של מעברים במסלול. |
has_traffic_infeasibilities |
אם הערך של ההגעה ל-next_visit צפויה לקרות מאוחר יותר מחלון הזמן הנוכחי שלה בגלל העלייה בהערכת זמן הנסיעה |
route_polyline |
ייצוג של קו פוליגוני מקודד של המסלול. השדה הזה מאוכלס רק אם |
breaks[] |
הפסקות שמתוזמנות לרכב שמבצע את המסלול הזה. הרצף |
metrics |
מדדי משך, מרחק ועומס של המסלול הזה. השדות של |
vehicle_fullness |
השדה ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
route_costs |
עלות המסלול, מחולקת לפי שדות בקשה שקשורים לעלות. המפתחות הם נתיבי פרוטו, ביחס לקלט OptimizeToursRequest, לדוגמה, 'model.shipments.pickups.cost', והערכים הם העלות הכוללת שנוצרה על ידי שדה העלות המתאים, שנצברת לאורך המסלול כולו. במילים אחרות, העלות [costs["model.shipments.pickups.cost"]] היא סכום כל העלויות של האיסופים לאורך המסלול. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, למעט עלויות שקשורות ל-TransitionAttributes, שמדווחות רק באופן מצטבר החל מ-2022/01. |
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 |
ייצוג של קו פוליגוני מקודד של המסלול שבו נסעו במהלך המעבר. השדה הזה מאוכלס רק אם |
route_token |
פלט בלבד. טוקן אטום שאפשר להעביר אל Navigation SDK כדי לשחזר את המסלול במהלך הניווט, ובמקרה של שינוי מסלול, כדי לכבד את הכוונה המקורית כשנוצר המסלול. צריך להתייחס לטוקן הזה כאל blob אטום. אל תשוו את הערך שלו בין בקשות, כי הערך עשוי להשתנות גם אם השירות מחזיר את אותו מסלול בדיוק. השדה הזה יאוכלס רק אם המדיניות |
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 |
עותק של |
visit_type |
אופציונלי. מציין את סוג הביקור. ההגדרה הזו מחליפה את השדה |
injected_solution_location_token |
טוקן אטום שמייצג מידע על מיקום הביקור. יכול להיות שהשדה הזה יאוכלס בביקורים של מסלולי התוצאות אם בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
VisitType
מציין אם הביקור הוא לצורך איסוף, משלוח או ביקור בStop. הנתון 'ביקורים בStop' משמש רק כשאופטימיזציה מולטימודלית מופעלת.
| טיפוסים בני מנייה (enum) | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
סוג הביקור לא צוין. |
PICKUP_SHIPMENT |
ביקור תואם לאיסוף משלוח. |
DELIVER_SHIPMENT |
ביקור מתאים למשלוח. |
ShipmentTypeIncompatibility
מציין אי התאמות בין משלוחים בהתאם לערך של מאפיין shipment_type. ההגבלה על הופעת משלוחים לא תואמים באותו מסלול משתנה בהתאם למצב אי-התאימות.
| שדות | |
|---|---|
types[] |
רשימה של סוגים לא תואמים. שתי משלוחים עם ערכים שונים של |
incompatibility_mode |
המצב שחל על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים איך המראה של משלוחים לא תואמים מוגבל באותו מסלול.
| טיפוסים בני מנייה (enum) | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב תאימות לא מוגדר. אסור להשתמש בערך הזה. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, אף פעם לא ניתן לשלוח שני משלוחים עם סוגים לא תואמים באותו רכב. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
במצב הזה, אף פעם לא יכולות להיות באותו רכב באותו זמן שתי משלוחים עם סוגים לא תואמים:
|
ShipmentTypeRequirement
מציינת דרישות בין משלוחים על סמך shipment_type. הפרטים הספציפיים של הדרישה מוגדרים על ידי מצב הדרישה.
| שדות | |
|---|---|
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[] |
רשימת סיבות שמסבירות למה המשלוח נדחה. התגובה מופיעה למעלה |
penalty_cost |
זוהי העתקה של ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
estimated_incompatible_vehicle_ratio |
יחס משוער של כלי רכב שלא יכולים לבצע את המשלוח הזה לפחות בגלל אחת מהסיבות שמופיעות בהמשך. הערה: השדה הזה מתמלא רק אם הסיבות קשורות לרכב. ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
סיבה
אם נוכל להסביר למה המשלוח לא נכלל, הסיבות יופיעו כאן. אם הסיבה לא זהה לכל כלי הרכב, לרכיב reason יהיו יותר מ-1 רכיבים. במשלוח שדילגתם עליו לא יכולות להיות סיבות כפולות, כלומר, מצב שבו כל השדות זהים חוץ מהשדה 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_vehicle_indices[] |
זהה לפונקציה ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
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 |
הזמן המינימלי שנדרש לביצוע המשלוח הזה, כולל זמן הנסיעה, זמן ההמתנה וזמן השירות, חורג מ הערה: זמן הנסיעה מחושב בתרחיש האופטימלי, כלומר כמרחק גיאודזי כפול 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 של המשלוח לא ריק, וכלי הרכב הזה לא שייך למשלוח. |
VEHICLE_IGNORED |
הערך בשדה ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
SHIPMENT_IGNORED |
השדה ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT |
דילגת על המשלוח החודש ב- ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED |
ההקלה על מסלול הנסיעה של כלי הרכב שצוינה ב- ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
ZERO_PENALTY_COST |
עלות הקנס על המשלוח היא אפס. האפשרות הזו יכולה להיות שימושית כבחירה מתקדמת של מודל, אבל היא גם יכולה להסביר בדיעבד למה משלוח מסוים נדלג. ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
TimeWindow
חלונות זמן מגבילים את הזמן של אירוע מסוים, כמו זמן ההגעה לביקור או שעת ההתחלה ושעת הסיום של נסיעה ברכב.
הגבולות של חלון הזמן הקשיח, start_time ו-end_time, מגדירים את השעה המוקדמת ביותר והשעה המאוחרת ביותר של האירוע, כך ש-start_time <= event_time <=
end_time. הגבול התחתון של חלון הזמן הרך, soft_start_time, מבטא העדפה שהאירוע יתרחש בזמן soft_start_time או אחריו, על ידי חיוב בעלות שפרופורציונלית למשך הזמן שחלף לפני soft_start_time. הגבול העליון של חלון הזמן הרך, soft_end_time, מבטא העדפה שהאירוע יתרחש במועד soft_end_time או לפניו, על ידי חיוב בעלות שפרופורציונלית לפרק הזמן שחלף בין soft_end_time לבין מועד האירוע. הערכים של start_time, end_time, soft_start_time ו-soft_end_time צריכים להיות במסגרת מגבלות הזמן הגלובליות (ראו ShipmentModel.global_start_time ו-ShipmentModel.global_end_time) ולעמוד בדרישות הבאות:
0 <= `start_time` <= `end_time` and
0 <= `start_time` <= `soft_start_time` and
0 <= `soft_end_time` <= `end_time`.
| שדות | |
|---|---|
start_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 שרלוונטיים לאותו מעבר: במקרה כזה, כל העלויות הנוספות מצטברות וההגבלה או המגבלה המחמירה ביותר חלות (בהתאם לסמנטיקה הטבעית של 'וגם').
| שדות | |
|---|---|
src_tag |
תגים שמגדירים את קבוצת המעברים (ממקור ליעד) שהמאפיינים האלה חלים עליהם. ביקור במקור או התנעה של כלי רכב נחשבים להתאמה אם השדה |
excluded_src_tag |
|
dst_tag |
ביקור ביעד או סיום נסיעה ברכב תואמים אם השדה |
excluded_dst_tag |
|
cost |
מציינים את העלות של ביצוע המעבר הזה. הערך הזה צריך להיות באותה יחידה כמו כל העלויות האחרות במודל, והוא לא יכול להיות שלילי. העלות הזו מתווספת לכל העלויות הקיימות האחרות. |
cost_per_kilometer |
מציינים עלות לקילומטר שחלה על המרחק שעוברים במהלך המעבר הזה. העלות הזו מצטרפת לכל |
distance_limit |
מציין מגבלה על המרחק שנסעו בזמן המעבר הזה. החל מיוני 2021, יש תמיכה רק במגבלות רכות. |
delay |
מציין את העיכוב שמתרחש כשמבצעים את המעבר הזה. העיכוב הזה תמיד מתרחש אחרי סיום הביקור במקור ולפני תחילת הביקור ביעד. |
אורי
מזהה משאבים אחיד שמפנה למשאב שאפשר לקרוא ולכתוב בו באמצעות Route Optimization API.
| שדות | |
|---|---|
uri |
ה-URI של המשאב. יכול להיות שהמשאב עדיין לא קיים. התוכן של המשאב מקודד כ-JSON או כ-textproto. יש תמיכה רק במשאבי Google Cloud Storage. אם המשאב מקודד כ-JSON, שם המשאב צריך להסתיים ב- |
כלי רכב
מודלים של רכב בבעיה במשלוח. פתרון בעיה במשלוח ייצור מסלול לרכב הזה שמתחיל ב-start_location ומסתיים ב-end_location. מסלול הוא רצף של ביקורים (ראו ShipmentRoute).
| שדות | |
|---|---|
display_name |
השם לתצוגה שהמשתמש נתן לרכב. הוא יכול לכלול עד 63 תווים, ואפשר להשתמש בתווים בתקן UTF-8. |
travel_mode |
מצב הנסיעה שמשפיע על הכבישים שבהם הרכב יכול לנסוע ועל המהירות שלו. ראו גם |
route_modifiers |
קבוצת תנאים שצריך לעמוד בהם, שמשפיעים על האופן שבו מחושבים המסלולים עבור הרכב הנתון. |
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 |
כמות העומס המקסימלית שניתן לקבל. |
cost_per_kilometer |
העלות של העברת יחידת עומס אחת למרחק של קילומטר אחד ברכב הזה. אפשר להשתמש בערך הזה כפרוקסי לצריכת דלק: אם העומס הוא משקל (בניוטון), אז עומס כפול קילומטר הוא ממד של אנרגיה. בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
cost_per_traveled_hour |
העלות של נסיעה עם יחידת מטען למשך שעה ברכב הזה. בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
מרווח
מרווח הסכומים הקבילים לטעינה.
| שדות | |
|---|---|
min |
עומס מינימלי קביל. הערך חייב להיות ≥ 0. אם מציינים את שניהם, הערך של |
max |
עומס מקסימלי קביל. הערך חייב להיות ≥ 0. אם לא מציינים ערך, אין הגבלה על העומס המקסימלי בהודעה הזו. אם מציינים את שניהם, הערך של |
LoadCost
העלות של העברת יחידת עומס אחת במהלך Transition. עבור טעינה נתונה, העלות היא סכום של שני חלקים:
- min(load,
load_threshold) *cost_per_unit_below_threshold - max(0, load -
load_threshold) *cost_per_unit_above_threshold
בשיטה הזו, הפתרונות מעדיפים לספק קודם את הביקוש הגבוה, או לחלופין לאסוף את הביקוש הגבוה בסוף. לדוגמה, אם לרכב יש
load_limit {
key: "weight"
value {
cost_per_kilometer {
load_threshold: 15
cost_per_unit_below_threshold: 2.0
cost_per_unit_above_threshold: 10.0
}
}
}
והמסלול שלה הוא התחלה,איסוף,איסוף,מסירה,מסירה,סיום עם מעברים:
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
אז העלות שנובעת מהשימוש ב-LoadCost היא (cost_below * load_below * kilometers + cost_above * load_above * kms)
- מעבר 0: 0.0
- מעבר 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- מעבר 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 4: 0.0
לכן, ה-LoadCost במסלול הוא 120.0.
אבל אם המסלול הוא התחלה, איסוף, מסירה, איסוף, מסירה, סיום עם מעברים:
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
אז העלות שנובעת מ-LoadCost היא
- מעבר 0: 0.0
- מעבר 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 2: 0.0
- מעבר 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- מעבר 4: 0.0
במקרה הזה, הערך של LoadCost במסלול הוא 40.0.
LoadCost מייקר את הפתרונות עם מעברים עמוסים.
בשלב ניסיוני: פרטים נוספים זמינים בכתובת https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| שדות | |
|---|---|
load_threshold |
כמות העומס שמעליה העלות של העברת יחידת עומס משתנה מ-cost_per_unit_below_threshold ל-cost_per_unit_above_threshold. הערך חייב להיות גדול מ-0 או שווה לו. |
cost_per_unit_below_threshold |
העלות של העברת יחידת עומס, לכל יחידה בין 0 לערך הסף. הערך חייב להיות סופי וגדול או שווה ל-0. |
cost_per_unit_above_threshold |
העלות של העברת יחידת עומס, לכל יחידה מעל סף. במקרה המיוחד שבו הסף הוא 0, זוהי עלות קבועה ליחידה. הערך חייב להיות סופי וגדול או שווה ל-0. |
TravelMode
אמצעי תחבורה שמתאימים לכלי רכב.
אלה צריכים להיות חלק ממצבי הנסיעה ב-Routes API של Google Maps Platform. מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
הערה: WALKING מסלולים נמצאים בגרסת בטא, ולפעמים יכול להיות שחסרים בהם מדרכות ברורות או שבילים להולכי רגל. חובה להציג את האזהרה הזו למשתמש בכל מסלולי ההליכה שמוצגים באפליקציה.
| טיפוסים בני מנייה (enum) | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
אמצעי תחבורה לא מוגדר, שווה ערך ל-DRIVING. |
DRIVING |
אמצעי התחבורה שמתאים להוראות נסיעה (מכונית וכו'). |
WALKING |
אמצעי התחבורה שמתאים להוראות הגעה בהליכה. |
UnloadingPolicy
מדיניות לגבי אופן פריקת הרכב. ההגדרה הזו חלה רק על משלוחים שכוללים גם איסוף וגם מסירה.
משלוחים אחרים יכולים להתבצע בכל מקום במסלול, בלי קשר לunloading_policy.
| טיפוסים בני מנייה (enum) | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
מדיניות פריקה לא מוגדרת; המשלוחים צריכים להתבצע רק אחרי האיסופים התואמים. |
LAST_IN_FIRST_OUT |
המסירות צריכות להתבצע בסדר הפוך לסדר האיסופים |
FIRST_IN_FIRST_OUT |
המשלוחים חייבים להתבצע באותו סדר שבו מתבצעים האיסופים |
VehicleFullness
VehicleFullness הוא מדד שמחשב את מידת המלאות של כלי רכב. כל שדה VehicleFullness הוא בין 0 ל-1, והוא מחושב כיחס בין שדה מדד עם ערך מקסימלי (למשל AggregatedMetrics.travel_distance_meters) לבין המגבלה הרלוונטית של כלי הרכב (למשל Vehicle.route_distance_limit), אם היא קיימת. אחרת, יחס המלאות לא מוגדר. אם המגבלה היא 0, השדה מוגדר כ-1. הערה: כשמסלול נתון לבעיות שקשורות לתנועה, יכול להיות שחלק מיחסי המלאות הגולמיים יעלו על 1.0, למשל אם כלי הרכב חורג ממגבלת המרחק שלו. במקרים כאלה, אנחנו מגבילים את ערכי המלאות ל-1.0.
| שדות | |
|---|---|
max_fullness |
הערך המקסימלי של כל שאר השדות בהודעה הזו. |
distance |
היחס בין |
travel_duration |
היחס בין [AggregatedMetrics.travel_duration_seconds][] לבין |
active_duration |
היחס בין [AggregatedMetrics.total_duration_seconds][] לבין |
max_load |
היחס המקסימלי בין כל סוגי [AggregatedMetrics.max_load][] לבין |
active_span |
היחס (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) של רכב נתון. אם המכנה לא מופיע, הפונקציה משתמשת במקום זאת ב-( |
נקודת ציון
מכיל ציון דרך. נקודות ציון מציינות את נקודות ההגעה והיציאה של בקשות לביקור, ואת נקודות ההתחלה והסיום של כלי רכב.
| שדות | |
|---|---|
side_of_road |
אופציונלי. המאפיין הזה מציין שהמיקום של נקודת הדרך הזו נועד להגדיר העדפה לעצירת הרכב בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו המיקום מוטה ממרכז הכביש. האפשרות הזו לא פועלת במצב הנסיעה 'הליכה'. |
vehicle_stopover |
השדה מציין שנקודת הציון מיועדת לעצירת רכבים, במטרה לאסוף או להוריד. אפשרות זו פועלת רק במצב הנסיעה 'DRIVING' (נהיגה), וכשהערך של location_type הוא 'location' (מיקום). ניסיוני: ההתנהגות או הקיום של השדה הזה עשויים להשתנות בעתיד. |
שדה איחוד location_type. דרכים שונות לייצוג מיקום. הערך location_type יכול להיות רק אחד מהבאים: |
|
location |
נקודה שצוינה באמצעות קואורדינטות גיאוגרפיות, כולל כיוון אופציונלי. |
place_id |
מזהה המקום של נקודת העניין שמשויך לציון הדרך. כשמשתמשים במזהה מקום כדי לציין את מיקום ההגעה או העזיבה של VisitRequest, צריך להשתמש במזהה מקום ספציפי מספיק כדי לקבוע מיקום LatLng לניווט למקום. לדוגמה, מזהה מקום שמייצג בניין מתאים, אבל מזהה מקום שמייצג כביש לא מומלץ. |