המבנה הבסיסי (ShipmentModel,‏ Shipment ו-Vehicle)

ל-ShipmentModel יש אובייקט אחד של `shipments` עם סוג הודעה `Shipment` ואובייקט אחד של `vehicles` עם סוג הודעה `Vehicle`.

המטרה של Route Optimization API היא לתכנן מסלולים לצי של כלי רכב כדי לבקר בקבוצה של מיקומים. אובייקט OptimizeToursRequest מתאר את המאפיינים של כלי הרכב והמיקומים האלה, והוא המבנה העיקרי של גוף הבקשה של כל נקודת קצה.

המבנה הבסיסי של האובייקט OptimizeToursRequest הוא:

במסמך הזה מתוארים סוגי ההודעות הבאים:

  • ‫ShipmentModel: מכיל את רשימת המשלוחים, כלי הרכב הזמינים ואובייקטים אחרים שמתארים את הקשרים ביניהם.
  • ‫Shipment: מתאר את המיקומים שבהם הרכב צריך לבקר. הן יכולות לייצג חבילות אמיתיות שצריך לאסוף ולמסור, או מקומות שבהם הנהג מספק שירות.
  • ‫Vehicle: תיאור של אמצעי התחבורה בין מיקומי המשלוח. כל רכב תואם לרכב בפועל או לאדם שנע ברגל.

ShipmentModel

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

בטבלה הבאה מתוארים כמה מאפיינים רלוונטיים של ShipmentModel:

מאפיינים תיאור
shipments וגם vehicles אובייקטים נדרשים שמכילים את הפרטים של משלוח אחד או יותר ושל כלי רכב אחד או יותר.
globalStartTime וגם globalEndTime מציין את ההתחלה והסיום של חלון הזמן שבו כל הרכבים צריכים להשלים את כל המשלוחים. המאפיינים האלה לא נדרשים, אבל מומלץ לכלול אותם כי הכלי לאופטימיזציה פועל בצורה הטובה ביותר כשהוא פועל לפי מגבלות זמן.

רשימה מלאה של המאפיינים ב-ShipmentModel זמינה במאמרי העזרה.

ShipmentModel דוגמה

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

בדוגמה הזו, ערכי המאפיינים של ShipmentModel בבקשה הם:

נכס ערך תיאור
globalStartTime 2024-02-13T00:00:00.000Z התאריך והשעה שבהם מתחילים שעות הפעילות.
globalEndTime 2024-02-14T06:00:00.000Z התאריך והשעה של סיום שעות הפעילות.

הקוד הבא הוא דוגמה להודעת ShipmentModel שמשלבת את הערכים של התרחיש לדוגמה.

{
  "model": {
    "shipments": [
      ...
    ],
    "vehicles": [
      ...
    ],
   "globalStartTime": "2024-02-13T00:00:00.000Z",
   "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}

Shipment

סוג ההודעה Shipment מגדיר את מבנה המאפיינים של משלוח שאפשר למסור או של שירות שאפשר לבצע במסלול.

משלוח בחיים האמיתיים שווה להודעת `Shipment` אחת, שנכללת באובייקט `shipments`

כפי שמוצג בתרשים:

  • הודעת Shipment כוללת את כל המידע על משלוח או שירות אמיתי.
  • כל ההודעות של Shipment מצוינות בשדה shipments.
  • השדה shipments מכיל הודעה אחת או יותר מסוג Shipment.

הודעת Shipment צריכה לכלול לפחות אובייקט pickups או deliveries. ההגדרה של האובייקטים האלה היא:

  • pickups מגדיר את מיקום האיסוף של המשלוח.
  • התג deliveries מגדיר את יעד המשלוח של חבילה.
  • גם pickups וגם deliveries מכילים סוג הודעה VisitRequest שמגדיר מיקומים ופרטים אחרים.

בטבלה הבאה מתוארים תרחישים שונים בהתאם להגדרות של pickups ו-deliveries בהודעה מסוג Shipment.

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

רשימה מלאה של המאפיינים ב-Shipment זמינה במאמרי העזרה.

Shipment דוגמה

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

  • הבית של הכלב הראשון נמצא במגדל קויט בסן פרנסיסקו. הקואורדינטות של המיקום הזה הן קו רוחב 37.8024 וקו אורך ‎-122.4058.
  • הבית של הכלב השני נמצא בפארק South Sunset Playground בסן פרנסיסקו. הקואורדינטות של המיקום הזה הן קו רוחב 37.7359 וקו אורך ‎-122.5011.
  • הגן לכלבים שלך נמצא בפארק מיסיון דולורס בסן פרנסיסקו. הקואורדינטות של המיקום הזה הן קו רוחב 37.759773 וקו אורך ‎-122.427063.

הדוגמה הבאה היא קוד של הודעת Shipment, שבה האובייקט shipments מכיל שני סוגי הודעות Shipment עם הקואורדינטות לדוגמה.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
    ...
    ]
  }
}

Vehicle

סוג ההודעה Vehicle מגדיר את מבנה המאפיינים של כלי רכב שיכול לבצע משלוח במסלול.

רכב בעולם האמיתי שווה להודעת `Vehicle` אחת, שנכללת באובייקט `vehicles`

כפי שמוצג בתרשים:

  • הודעת Vehicle מכילה את כל המידע על רכב אמיתי.
  • כל ההודעות של Vehicle מצוינות בשדה vehicles.
  • השדה vehicles מכיל כמה הודעות Vehicle.

בטבלה הבאה מתוארים כמה מאפיינים רלוונטיים של Vehicle.

מאפיינים תיאור
startLocation וגם endLocation נקודות ההתחלה והסיום של כלי הרכב, שהם חלק מהמסלול הסופי שעבר אופטימיזציה. אם לא תגדירו אותם, ברירת המחדל תהיה מיקומי האיסוף של המשלוח הראשון והמסירה של המשלוח האחרון.
costPerHour,‏ costPerKilometer,‏ costPerTraveledHour פרמטרים של עלות ספציפיים לרכב. מומלץ לכלול לפחות פרמטר עלות אחד בבקשה כדי שממשק ה-API יחזיר מסלול אופטימלי. מידע נוסף על עלויות זמין במושג המפתח מודל עלויות.
startTimeWindows וגם endTimeWindows הגדרת תקופות הזמן שבהן רכב יכול לפעול במסלול. התאריכים האלה צריכים להיות בטווח של חלון הזמן globalStartTime עד globalEndTime שהוגדר ב-ShipmentModel. המאפיין הזה לא חובה, אבל מומלץ לכלול אותו כי כלי האופטימיזציה פועל בצורה הכי טובה כשהוא עומד במגבלות הזמן.

Vehicle דוגמה

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

בדוגמה הזו, ערכי המאפיינים של Vehicle בבקשה הם:

נכס ערך תיאור
startLocation latitude: 37.759773, longitude: -122.427063 הקואורדינטות של נקודת ההתחלה של המסלול של הרכב. המיקומים האלה תואמים למיקום של המעון לכלבים שלכם, שנמצא בפארק מישן דולורס בסן פרנסיסקו.
endLocation ‫latitude: 37.759773, longitude: -122.427063 הקואורדינטות של נקודת הסיום של המסלול של הרכב. המיקומים האלה תואמים למיקום של המעון לכלבים שלכם, שנמצא בפארק מישן דולורס בסן פרנסיסקו.
costPerHour 27 כמה אתם משלמים לנהג על נהיגה ברכב שלכם במעון לכלבים. אתם משלמים לנהג 27 דולר לשעה.

בדוגמה הבאה מוצג קוד של הודעת Vehicle שמשלבת את הערכים של תרחיש לדוגמה.

{
  "model": {
    "shipments": [
    ...
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ]
  }
}

הרשימה המלאה של המאפיינים ב-Vehicle מופיעה במאמרי העזרה.

דוגמה לבקשה מלאה

דוגמת הקוד הבאה מספקת דוגמה לבקשה מלאה, שמשלבת את הדוגמאות של ShipmentModel,‏ Shipment ו-Vehicle שמוצגות במסמך הזה.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ],
    "globalStartTime": "2024-02-13T00:00:00.000Z",
    "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}