מטרות

מאפייני היעד כוללים את `objectives` ב-`ShipmentModel` ואת `type` ו-`weight` ב-`objectives`

יעדים הם פרמטרים שבהם אפשר להשתמש כדי לציין יעדי אופטימיזציה ברמה גבוהה, במקום לספק פרמטרים ספציפיים של עלות ממודל העלויות.

אפשר להשתמש בכמה יעדים בבקשה אחת, ולתת לכל יעד משקל יחסי כדי לקבוע את מידת ההשפעה שלו על האופטימיזציה הכוללת. היעדים משפיעים על כל הבקשה, ועל כל כלי הרכב והמשלוחים. בנוסף, אפשר להשתמש ביעדים כדי להתחיל לפתח מודל עלויות משלכם, כמו שמתואר במאמר יצירת מודל עלויות.

אתם יכולים להשתמש ביעדים כדי לשלוט בהשפעות הבאות על תוכנית המסלול:

  • זמן הנסיעה הכולל או המרחק הכולל של המסלולים.
  • זמן העבודה הכולל בכל כלי הרכב.
  • המספר הכולל של כלי הרכב שהיו בשימוש.

מאפיינים

המאפיין objectives הוא מערך של סוגי הודעות Objective בתוך ShipmentModel. כל Objective מגדיר יעד אופטימיזציה ספציפי ומכיל את השדות שמפורטים בטבלה הבאה:

שדה סוג תיאור
type ספירה מציין את יעד האופטימיזציה המוגדר מראש. הערכים הקבילים הם:
  • ‫DEFAULT: המערכת משתמשת בסט ברירת מחדל של עלויות כדי להבטיח פתרון בסיסי, כלומר היא מונעת מהפתרון להשתמש בערכים קיצוניים כדי להשיג יעד. הכותרת DEFAULT מתווספת אוטומטית לבקשות שמכילות יעד, והיא מתווספת עם הערך weight של 1.0. אם תציינו את היעד הזה באופן פעיל בבקשה, הפתרון ישתמש בweight שתציינו.
  • ‫MIN_DISTANCE: מזעור המרחק הכולל.
  • ‫MIN_WORKING_TIME: ממזער את סך זמן העבודה, שמתקבל מסיכום של כל כלי הרכב.
  • ‫MIN_TRAVEL_TIME: מזעור של סך זמן הנסיעה של כל כלי הרכב.
  • ‫MIN_NUM_VEHICLES: מצמצם את מספר כלי הרכב שנעשה בהם שימוש.
weight כפול המאפיין הזה מגדיר את החשיבות היחסית של היעד. כשמשתמשים בכמה יעדים, הערך weight קובע את מידת ההשפעה של היעד הספציפי הזה על האופטימיזציה הכוללת של המסלול בהשוואה ליעדים האחרים. אפשר להזין כל מספר לא שלילי, והסכום לא חייב להיות 1. ערך ברירת המחדל הוא 1.0.

דוגמאות

בקטע הזה יש שתי דוגמאות:

  • דוגמת קוד שממחישה את המבנה של מערך objectives.
  • דוגמה לבקשה שכוללת את המערך objectives.

דוגמאות קוד

בדוגמה הבאה אפשר לראות את המבנה של objectives:

"objectives": [
  {
    "type": "OBJECTIVE_TYPE",
    "weight": WEIGHT
  }
]

דוגמה לבקשה

בדוגמה הבאה מוצג המבנה של בקשת optimizeTours בסיסית שמשלבת כמה יעדים, כאשר MIN_TRAVEL_TIME חשוב פי 3 מ-MIN_WORKING_TIME.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.42506261000996,
              "longitude": -122.09535511930135
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.42421503206021,
              "longitude": -122.09526063135228
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "travelMode": "DRIVING"
      }
    ],
    "objectives": [
      {
        "type": "MIN_TRAVEL_TIME",
        "weight": 3.0
      },
      {
        "type": "MIN_WORKING_TIME"
      }
    ]
  }
}

יצירת מודל עלויות

היעדים הם דרך מהירה להגדיר יעדי אופטימיזציה, אבל במקרים מסוימים הם לא מספיק ספציפיים. כדי להשיג את יעדי הניתוב המדויקים שלכם, יכול להיות שתצטרכו את השליטה המפורטת שזמינה רק דרך פרמטרים של מודל עלויות.

כדי להתחיל לפתח מודל עלויות משלכם, אתם יכולים להוסיף יעדים לבקשה, ואז להמיר את היעדים בבקשה לפרמטרים של מודל עלויות באמצעות מצב הפתרון TRANSFORM_AND_RETURN_REQUEST.

כששולחים בקשה באמצעות מצב הפתרון הזה, קורים הדברים הבאים:

  • ה-API ממיר את היעדים לפרמטרים של מודל עלויות ומחזיר אותם ב-processedRequest. לאחר מכן תוכלו לשנות את הפרמטרים של מודל העלויות לפי הצורך כדי לשפר את תוכנית המסלול.
  • כשמשתמשים בכמה יעדים, ה-API משלב את העלויות של כל היעדים ומשקלל אותן לפי המשקלים שלהן.
  • לא מחויבים על הבקשה הזו, כי ה-API לא מספק מסלול אופטימלי, אלא רק ממיר את היעדים לפרמטרים של מודל עלות.

דוגמה לבקשה

בדוגמה הבאה מוצגת בקשה שמשתמשת ביעד MIN_TRAVEL_TIME ובמצב הפתרון TRANSFORM_AND_RETURN_REQUEST:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.42506261000996,
              "longitude": -122.09535511930135
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.42421503206021,
              "longitude": -122.09526063135228
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "travelMode": "DRIVING"
      }
    ],
    "objectives": [
      {
        "type": "MIN_TRAVEL_TIME"
      }
    ]
  },
  "solvingMode": "TRANSFORM_AND_RETURN_REQUEST"
}

דוגמה לתשובה

זוהי התגובה שמתאימה לבקשה הקודמת. התשובה הזו כוללת גם את הפרמטרים של מודל העלויות שנוצר וגם את היעד המקורי לצורך עיון.

{
  "processedRequest": {
    "model": {
      "shipments": [
        {
          "pickups": [
            {
              "arrivalLocation": {
                "latitude": 37.425062610009959,
                "longitude": -122.09535511930135
              }
            }
          ],
          "deliveries": [
            {
              "arrivalLocation": {
                "latitude": 37.424215032060211,
                "longitude": -122.09526063135228
              }
            }
          ]
        }
      ],
      "vehicles": [
        {
          "travelMode": "DRIVING",
          "costPerHour": 30,
          "costPerTraveledHour": 330,
          "costPerKilometer": 0.2
        }
      ],
      "objectives": [
        {
          "type": "MIN_TRAVEL_TIME"
        }
      ]
    },
    "solvingMode": "TRANSFORM_AND_RETURN_REQUEST"
  }
}