הימנעות מפנייה 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. במקרה הזה, המערכת לא תבחר בנתיב שכולל פניית פרסה, אבל היא תבחר בנתיב שבו הרכב נמצא באותו צד של הכביש כמו נקודת הביניים, בדומה להגדרה של 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 לאיסוף ולמשלוח כשנקודת ההגעה ונקודת היציאה לא זהות.
  • כשצריך לאסוף או למסור חבילה ברחוב ללא מוצא, צריך לבצע פניית פרסה כדי לצאת מהרחוב.
  • המטרה של התכונה הזו היא למנוע פניות פרסה במיקומי איסוף ומסירה. המערכת לא נמנעת מביצוע פניות פרסה בין נקודות ציון.
  • פניות חדות מאוד לכביש אחר לא נחשבות לפרסות, ובדרך כלל לא ייעשה ניסיון להימנע מהן.

בזמן שהתכונה הזו נמצאת בפיתוח, יש מגבלות נוספות. אנחנו מצפים שהמגבלות יוסרו כשהתכונה תתפתח.