بازه زمانی

پنجره‌های زمانی در `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
بازه زمانی قابل‌قبول برای تحویل گرفتن سگ از خانه مشتری را تعریف می‌کند. در این مثال، به هر دو مشتری گفته‌اید که بین ساعت ۷:۳۰ صبح تا ۹:۰۰ صبح برای تحویل گرفتن دردسترس باشند.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
بازه زمانی قابل‌قبول برای تحویل سگ در خانه مشتری را تعریف می‌کند. در این مثال، به هر دو مشتری گفته‌اید که سگ‌هایشان بین ساعت ۵:۰۰ تا ۶:۳۰ ب.ظ. تحویل داده خواهند شد.
endTime:
2023-01-13T18:30:00Z
Vehicle 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

نمودار زیر پنجره‌های زمانی را که بر این مسیر تأثیر می‌گذارند نشان می‌دهد.

چند خط زمان نشان‌دهنده پنجره زمانی جهانی، پنجره‌های زمانی تحویل و دریافت، پنجره‌های زمانی شروع و پایان خودرو، و ساعت کاری خودرو است.

در این سناریو، همان‌طور که در نمودار نشان داده شده است، پنجره‌های زمانی به‌صورت زیر عمل می‌کنند:

  • پنجره زمانی سراسری نشان‌دهنده ساعت کاری مهدکودک سگ‌ها است و همه پنجره‌های زمانی دیگر باید در این پنجره زمانی قرار بگیرند.
  • تحویل گرفتن و تحویل دادن هرکدام 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، می‌توان از پنجره‌های زمانی به‌عنوان محدودیت‌های نرم استفاده کرد. این کار به بهینه‌ساز اجازه می‌دهد تا با هزینه مشخصی از پنجره زمانی مشخص‌شده منحرف شود و درصورت مفید بودن، بهینه‌سازی کلی را بر رعایت دقیق چارچوب‌های زمانی اولویت دهد.

پنجره‌های زمانی نرم محدودیت‌های استفاده زیر را دارند:

  • نمی‌توان آن‌ها را روی globalStartTime و globalEndTime اعمال کرد زیرا از نوع پیام TimeWindow استفاده نمی‌کنند.
  • این موارد فقط زمانی قابل‌اجرا هستند که یک TimeWindow در فهرست وجود داشته باشد.

مشخصات

جدول زیر ویژگی‌های محدودیت نرم را برای پنجره‌های زمانی شرح می‌دهد.

نام دارایی قالب شرح ملک
softStartTime مُهر زمان شروع پنجره زمانی نرم را مشخص می‌کند. اگر رویدادی قبل‌از این زمان رخ دهد، هزینه ایجاد می‌شود.
softEndTime مُهر زمان پایان پنجره زمانی نرم را مشخص می‌کند. اگر رویدادی پس‌از این زمان رخ دهد، هزینه ایجاد می‌شود.
costPerHourBeforeSoftStartTime شماره هزینه ساعتی که وقتی رویدادی قبل‌از softStartTime شروع می‌شود ایجاد می‌شود. این ویژگی هنگام استفاده از softStartTime الزامی است. برای کسب اطلاعات بیشتر درباره نحوه پیاده‌سازی هزینه‌ها، مفهوم کلیدی مدل هزینه را ببینید.
costPerHourAfterSoftEndTime شماره هزینه به‌ازای هر ساعت که وقتی رویدادی پس‌از softEndTime به‌پایان می‌رسد، متحمل می‌شوید. این ویژگی هنگام استفاده از softEndTime الزامی است. برای کسب اطلاعات بیشتر درباره نحوه پیاده‌سازی هزینه‌ها، مفهوم کلیدی مدل هزینه را ببینید.

نمونه کد

مثال زیر ساختار ویژگی‌های محدودیت نرم نوع پیام TimeWindow را نشان می‌دهد:

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