بازه زمانی

پنجره‌های زمانی در `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 «زولو») پایان یک بازه زمانی.

مثال‌ها

این بخش سه نوع مثال را پوشش می‌دهد:

  • نمونه‌های کد که ساختار پنجره‌های زمانی را نشان می‌دهند.
  • سناریو نمونه که یک روش استفاده از پنجره‌های زمانی برای دستیابی به هدف کسب‌وکار را نشان می‌دهد.
  • نمونه درخواست که شامل مقادیر تنظیم‌شده در سناریوی نمونه است.

نمونه‌های کد

بخش‌های زیر نمونه‌های کد از انواع مختلف بازه‌های زمانی را نشان می‌دهد.

بازه زمانی جهانی

نمونه کد زیر ساختار بازه‌های زمانی جهانی را نشان می‌دهد:

{
  "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
    }