پنجره های زمانی

Time windows are present in `ShipmentModel`, in `Shipment` in the pickups and deliveries objects, and in `Vehicle`.

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

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

  • اولویت را به تکمیل دریافت و تحویل سفارش‌ها در بازه‌های زمانی مشخص شده بدهید.
  • مسیرهایی را طوری برنامه‌ریزی کنید که در طول ساعات کاری کلی فعالیت کنند.
  • اطمینان حاصل کنید که وسایل نقلیه مسیرها را در بازه‌های زمانی مشخص شروع و پایان می‌دهند .

ساختار

همانطور که در نمودار نشان داده شده است، پنجره‌های زمانی به شرح زیر ساختار یافته‌اند:

  • globalStartTime و globalEndTime از ویژگی‌های ShipmentModel هستند.
  • timeWindows ویژگی‌هایی از موارد زیر هستند:
    • pickups در داخل Shipment .
    • deliveries در داخل Shipment .
  • startTimeWindows و endTimeWindows ویژگی‌های Vehicle هستند.

چک لیست ضروریات

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

خواص

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

ملک قالب توضیحات
globalStartTime Timestamp زودترین زمان برای هر رویدادی.
globalEndTime Timestamp آخرین زمان برای هر رویدادی.

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

والدین ملک قالب توضیحات
Shipment.pickups timeWindows آرایه‌ای از انواع پیام‌های TimeWindow . فواصل زمانی برای دریافت محموله را مشخص می‌کند.
Shipment.deliveries timeWindows فواصل زمانی برای تحویل محموله را مشخص می‌کند.
Vehicle startTimeWindows زمان شروع برنامه عملیاتی یک وسیله نقلیه را مشخص می‌کند.
endTimeWindows زمان پایان برنامه عملیاتی یک وسیله نقلیه را مشخص می‌کند.

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

ملک قالب توضیحات
startTime رشته (فرمت RFC3339 UTC "زولو") شروع یک پنجره زمانی.
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

نمودار زیر بازه‌های زمانی مؤثر بر این مسیر را نشان می‌دهد.

Several timelines represent the global time window, pickup and delivery time windows, vehicle start and end time windows, and vehicle working hours.

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

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