הימנעות מפנייה U במיקומי האיסוף וההעברה

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

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