כברירת מחדל, כלי רכב יכולים להגיע למיקום איסוף או למיקום מסירה מכל כיוון, ואז לצאת לכל כיוון. במקרים מסוימים, הפעולה הזו גורמת לרכב לבצע פניית פרסה במיקום הביקור, וזה עלול להיות קשה או בלתי אפשרי בגלל גודל הרכב, תמרורי התנועה במיקום או מצב התנועה הרגיל.
כדי למנוע מכלי רכב לשנות כיוון בין ההגעה ליציאה במיקום איסוף או מסירה מסוים, אפשר להגדיר את avoid_u_turns לערך true עבור המיקום הזה. בהגדרה הזו, כלי הרכב יגיע למיקום ויצא ממנו באותו כיוון, וכך לא יבצע פניית פרסה. בכבישים דו-סטריים, הפותר יתייחס לשני הכיוונים ויבחר אחד מהם כחלק מאופטימיזציית המסלול.
אפשר גם להגדיר את side_of_road כ-TRUE כדי לקבל מסלול שבו הרכב מגיע לצד הכביש הקרוב ביותר לציון הדרך ויוצא ממנו. במקרה הזה, כיוון הנסיעה של הרכב לא משתנה בין ההגעה ליציאה. אפשר להגדיר את הערך true גם ל-side_of_road וגם ל-avoid_u_turns כדי להשיג את אותה תוצאה. פרטים נוספים זמינים במאמר בנושא אינטראקציה עם תכונות אחרות.
בפועל, צריך להשתמש ב-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. במקרה הזה, המערכת תמנע פניות פרסה, אבל הפותר יבחר מסלול שבו הרכב נמצא באותו צד של הכביש כמו נקודת הדרך, בדומה להגדרה שלside_of_road = trueבלבד. - אם הערך של
avoid_u_turns = trueבבקשה מסוימת לביקור הואShipmentRoute.Visit, השדהinjected_solution_location_tokenמוגדר בתשובה המתאימה. המשמעות המדויקת של הערך היא פרט הטמעה, אבל הוא מקודד את המידע על הצד של הכביש שנבחר על ידי הפותר. - כשמשתמשים ב-
ShipmentRoute.Visitכחלק מבקשת הקלט, אםShipmentRoute.Visitמתאים ל-VisitRequestשבוavoid_u_turns = true, אזShipmentRoute.Visitחייב להכילinjected_solution_location_tokenשהוחזר בעבר על ידי הפותר.
מגבלות
הימנעות מסיבוב פרסה היא כמיטב יכולתנו. במצבים מסוימים, יכול להיות שהמסלול עדיין יכלול פניות פרסה:
avoid_u_turnsפועל רק עם אמצעי תחבורה שתומכים ב-side_of_road. באופן ספציפי, אין תמיכה במצב הנסיעהWALKING.- אי אפשר להשתמש ב-
avoid_u_turnsלאיסוף ולמשלוח של מוצרים אם נקודת ההגעה ונקודת היציאה לא זהות. - כשנקודת האיסוף או המסירה נמצאת בכביש ללא מוצא, צריך לבצע פניית פרסה כדי לצאת מהכביש.
- המטרה של התכונה הזו היא למנוע פניות פרסה בנקודות איסוף ומסירה. המערכת לא מונעת פניות פרסה בין נקודות ציון.
- פניות חדות מאוד לכביש אחר לא נחשבות לפרסות, ובדרך כלל לא ייעשה ניסיון להימנע מהן.
בזמן שהתכונה הזו נמצאת בפיתוח, יש מגבלות נוספות. אנחנו מצפים שהמגבלות יוסרו כשהתכונה תתפתח.
- אי אפשר להשתמש ב-
avoid_u_turnsביחד עםinterpret_injected_solutions_using_labels.