חלונות זמן

חלונות הזמן מופיעים ב-`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
    }