חלונות זמן

חלונות הזמן מופיעים ב-`ShipmentModel`, ב-`Shipment` באובייקטים של האיסופים והמשלוחים וב-`Vehicle`.

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

חלונות זמן יכולים לתמוך ביעדים כמו:

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

מבנה

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

רשימת משימות חיוניות

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

מאפיינים

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

נכס פורמט תיאור
globalStartTime Timestamp השעה המוקדמת ביותר של אירוע כלשהו.
globalEndTime Timestamp השעה המאוחרת ביותר של אירוע כלשהו.

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

הורה נכס פורמט תיאור
Shipment.pickups timeWindows מערך של סוגי הודעות TimeWindow. מציין את מרווחי הזמן לאיסוף משלוח.
Shipment.deliveries timeWindows מציין את מרווחי הזמן למשלוח.
Vehicle startTimeWindows מציינת את שעת ההתחלה של לוח הזמנים של הרכב.
endTimeWindows מציינת את שעת הסיום של לוח הזמנים של הרכב.

בטבלה הבאה מתוארים המאפיינים של סוג ההודעה TimeWindow.

נכס פורמט תיאור
startTime מחרוזת (פורמט RFC3339 UTC "Zulu") תחילת חלון הזמן.
endTime מחרוזת (פורמט RFC3339 UTC "Zulu") סיום חלון הזמן.

דוגמאות

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

דוגמאות קוד

בקטעים הבאים מוצגות דוגמאות קוד של סוגים שונים של חלונות זמן.

חלונות זמן גלובליים

דוגמת הקוד הבאה מראה את המבנה של חלונות הזמן הגלובליים:

{
  "model": {
    "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ",
    "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ",
    "shipments": [ ... ],
    "vehicles": [ ... ]
  }
}

חלונות זמן לאיסופים ולמשלוחים

דוגמת הקוד הבאה מראה את המבנה של חלונות הזמן באיסופים ובמסירות של משלוח:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [ ... ]
  }
}

חלונות זמן של כלי רכב

דוגמת הקוד הבאה מראה את המבנה של חלונות הזמן של רכב:

{
  "model": {
    "shipments": [ ... ],
    "vehicles": [
      {
        "startTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ]
      }
    ]
  }
}

תרחיש לדוגמה

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

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

הורה נכס ערך תרחיש
ShipmentModel globalStartTime 2023-01-13T07:00:00Z מייצג את שעת הפתיחה של מעון היום לכלבים. אי אפשר לאסוף או למסור חבילות לפני השעה הזו.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z מייצג את שעת הסגירה של מעון היום לכלבים. כל האיסופים והמשלוחים צריכים להסתיים עד השעה הזו.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
מגדיר את חלון הזמנים המקובל לאיסוף כלב מבית הלקוח. בדוגמה הזו, אמרתם לשני הלקוחות להיות זמינים לאיסוף בין 7:30 ל-9:00.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
מגדיר את חלון הזמן המקובל להחזרת כלב לבית הלקוח. בדוגמה הזו, אמרתם לשני הלקוחות שהכלבים שלהם יוחזרו בין השעות 17:00 ל-18:30.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
מגדיר את חלון הזמן הקביל להתחלת הרכב (7:00 עד 7:15) ולסיום (17:00 עד 17:15).
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

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

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

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

  • חלון הזמן הגלובלי מייצג את שעות הפעילות של העסק, וכל חלונות הזמן האחרים חייבים להיות בתוך חלון הזמן הזה.
  • לאיסופים ולמסירות יש timeWindows משלהם בתחילת היום ובסופו, בהתאמה.
  • startTimeWindows של הרכב נותנים למפעיל הרכב מסגרת זמן שבה הוא חייב להתחיל לעבוד, ו-endTimeWindows מספקים מסגרת זמן נוספת שבה הוא חייב לסיים את היום.
  • שעת ההתחלה של startTimeWindow הראשון ושעת הסיום של endTimeWindow האחרון מגדירות את שעות הפעילות של הרכב, שבמקרה הזה זהות לחלון הזמן הגלובלי.

דוגמה לבקשה

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

{
  "model": {
    "globalStartTime": "2023-01-13T07:00:00Z",
    "globalEndTime": "2023-01-13T19:00:00Z",
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2023-01-13T07:00:00Z",
            "endTime": "2023-01-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2023-01-13T18:45:00Z",
            "endTime": "2023-01-13T19:00:00Z"
          }
        ]
      }
    ]
  }
}

חלונות זמן גמישים

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

אלה מגבלות השימוש בחלונות זמן גמישים:

מאפיינים

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

שם הנכס פורמט תיאור הנכס
softStartTime חותמת זמן מציינת את תחילת חלון הזמן הגמיש. אם אירוע מתרחש לפני הזמן הזה, נצברת עלות.
softEndTime חותמת זמן מציין את הסוף של חלון הזמן הגמיש. אם אירוע מתרחש אחרי פרק הזמן הזה, אתם מחויבים בעלות.
costPerHourBeforeSoftStartTime number העלות לשעה שנוצרת כשאירוע מתחיל לפני softStartTime. המאפיין הזה נדרש כשמשתמשים ב-softStartTime. כדי לקבל מידע נוסף על הטמעת עלויות, אפשר לעיין במושג המרכזי מודל עלות.
costPerHourAfterSoftEndTime number העלות לשעה שנגבית כשאירוע מסתיים אחרי softEndTime. המאפיין הזה נדרש כשמשתמשים ב-softEndTime. כדי לקבל מידע נוסף על הטמעת עלויות, אפשר לעיין במושג המרכזי מודל עלות.

דוגמת קוד

הדוגמה הבאה מראה את המבנה של מאפייני האילוץ הגמיש של סוג ההודעה TimeWindow:

    {
      "softStartTime": "SOFT_START_TIME",
      "softEndTime": "SOFT_END_TIME",
      "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME,
      "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME
    }