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

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 "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
پنجره قابل قبولی را برای پیاده کردن سگ در خانه مشتری تعریف می کند. در این مثال، به هر دو مشتری گفتید که سگ هایشان بین ساعت 5:00 بعد از ظهر تا 6: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 صبح) و پایان (5:00 عصر تا 5:15 بعد از ظهر) تعیین می کند.
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
    }