כברירת מחדל, רכבים יכולים להגיע למיקום לאיסוף או למיקום למשלוח מכל כיוון, ואז לצאת ממנו לכל כיוון. במקרים מסוימים, הדבר מחייב את הרכב לבצע פניית U במיקום הביקור, ויכול להיות שזה יהיה קשה או בלתי אפשרי בגלל גודל הרכב, תמרורים במיקום או תנאי התנועה הרגילים.
כדי למנוע מכלי רכב לשנות כיוון בין ההגעה לבין היציאה ממיקום מסוים לאיסוף או למשלוח, אפשר להגדיר את הערך של avoid_u_turns כ-true עבור המיקום הזה. בהגדרה הזו, הרכב יגיע ויצא מהמיקום באותה כיוון, וכך ימנע את פניית הפרסה. בכבישים דו-סטריים, הפתרון יבחן את שתי הכיוונים ויבחור אחד מהם כחלק מאיתור המסלול היעיל ביותר.
אפשר גם להגדיר את side_of_road כ-true כדי לקבל מסלול שבו הרכב מגיע ויוצא מהצד של הכביש הקרוב ביותר לציון הדרך. במקרה כזה, גם כיוון הרכב לא משתנה בין הגעה לבין יציאה. אפשר להגדיר את side_of_road ואת avoid_u_turns ל-true כדי להשיג את אותה תוצאה. פרטים נוספים זמינים בקטע אינטראקציה עם תכונות אחרות.
בפועל, צריך להשתמש ב-avoid_u_turns כשבטוח לחצות את הכביש כדי להגיע לנקודת הציון. משתמשים ב-side_of_road כשלא מומלץ לחצות את הכביש או כשאי אפשר לעשות זאת.
דוגמה: שליחת בקשה מסוג OptimizeTours באמצעות avoid_u_turns
אפשר לשלוח בקשות OptimizeTours באמצעות REST או gRPC.
לפני שליחת הבקשה, מחליפים את הפרמטרים הבאים בערכים שמתאימים לסביבה שלכם:
- מוודאים שהגדרתם את Application Default Credentials כפי שמתואר במאמר שימוש ב-OAuth.
מגדירים את PROJECT_NUMBER_OR_ID למספר או למזהה של הפרויקט ב-Cloud.
הפקודה הבאה שולחת בקשה מסוג
OptimizeToursל-Route Optimization API ומקבלת תשובה באופן סינכרוני.curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --data @- <<EOM { "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.42506261000996, "longitude": -122.09535511930135 }, "avoidUTurns": true } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.42421503206021, "longitude": -122.09526063135228 }, "avoidUTurns": true } ] } ], "vehicles": [ { "travelMode": "DRIVING", "costPerKilometer": 1.0 } ], } } EOM
בסיום הטיפול בבקשה תקבלו הודעה עם תגובה.
אינטראקציה עם תכונות אחרות
- אפשר להשתמש ב-
avoid_u_turnsיחד עםside_of_road = true. במקרה כזה, המערכת נמנעת מפנייה ל-U, אבל הפתרון שנבחר הוא מסלול שבו הרכב נמצא באותו צד של הכביש כמו נקודת הציון, בדומה להגדרה שלside_of_road = trueבלבד. - כשהערך של
avoid_u_turns = trueהוא 1 לבקשת ביקור מסוימת, השדהinjected_solution_location_tokenמוגדר ב-ShipmentRoute.Visitבתשובה המתאימה. המשמעות המדויקת של הערך היא פרט להטמעה, אבל הוא מכיל את המידע על הצד של הכביש שנבחר על ידי הפתרון. - כשמשתמשים ב-
ShipmentRoute.Visitכחלק מבקשת הקלט, אם הערך שלShipmentRoute.Visitתואם ל-VisitRequestשבוavoid_u_turns = true, הערך שלShipmentRoute.Visitחייב להכיל את הערך שלinjected_solution_location_tokenשהוחזר בעבר על ידי הפותר.
מגבלות
אנחנו עושים כמיטב יכולתנו כדי למנוע פנייה U. במצבים מסוימים, המסלול עדיין עשוי לכלול פנייה U:
- התכונה
avoid_u_turnsפועלת רק עם שיטות נסיעה שתומכות ב-side_of_road. באופן ספציפי, אין תמיכה במצב הנסיעהWALKING. - לא ניתן להשתמש ב-
avoid_u_turnsלאיסוף ולמסירה שבהם המיקום של האיסוף שונה מהמיקום של המסירה. - כשהאיסוף או המסירה מתבצעים ברחוב ללא מוצא, צריך לבצע פניית U כדי לצאת מהרחוב.
- מטרת התכונה הזו היא למנוע פנייה U במיקומי האיסוף וההעברה. המערכת לא מונעת פנייה U בין נקודות ציון.
- פיתולים חדים מאוד לכביש אחר לא נחשבים לתנועה ב-U, ובדרך כלל לא נמנעים מהם.
יש מגבלות נוספות בזמן שהתכונה הזו נמצאת בפיתוח. אנחנו מצפים שהן יוסרו ככל שהתכונה תתפתח.
- אי אפשר להשתמש ב-
avoid_u_turnsיחד עםinterpret_injected_solutions_using_labels.