Zaman aralıkları

Zaman aralıkları; `ShipmentModel`, teslim alma ve teslimat nesnelerindeki `Shipment` ve `Vehicle` içinde yer alır.

Zaman aralıkları, bir rotadaki etkinliklerin zamanlamasını belirtir. Bu etkinlikler arasında sürücünün rotasının başlangıcı ve bitişi, planlanan teslim alma ve teslimat zamanları veya rotanın tamamının süresi yer alabilir.

Zaman aralıkları aşağıdaki gibi hedefleri destekleyebilir:

  • Belirtilen zaman aralıklarında teslim alma ve teslimat işlemlerini tamamlamaya öncelik verin.
  • Genel çalışma saatleri içinde faaliyet gösterecek rotalar planlayın.
  • Araçların rotalara belirtilen zaman aralıklarında başlamasını ve rotaları belirtilen zaman aralıklarında tamamlamasını sağlayın.

Yapı

Şemada gösterildiği gibi, zaman aralıkları aşağıdaki şekilde yapılandırılır:

  • globalStartTime ve globalEndTime, ShipmentModel'nin özellikleridir.
  • timeWindows şu mülklerin özellikleridir:
    • Shipment içinde pickups.
    • Shipment içinde deliveries.
  • startTimeWindows ve endTimeWindows, Vehicle'nin özellikleridir.

Essentials yapılacaklar listesi

Özellikler

Aşağıdaki tabloda genel zaman aralığı özellikleri açıklanmaktadır.

Mülk Biçim Açıklama
globalStartTime Timestamp Herhangi bir etkinlik için en erken saat.
globalEndTime Timestamp Herhangi bir etkinlik için en son saat.

Aşağıdaki tabloda, gönderimlerdeki ve araçlardaki zaman aralığı özellikleri açıklanmaktadır.

Ebeveyn Mülk Biçim Açıklama
Shipment.pickups timeWindows TimeWindow mesaj türleri dizisi. Kargo teslimatı için zaman aralıklarını belirtir.
Shipment.deliveries timeWindows Bir kargo teslimatı için zaman aralıklarını belirtir.
Vehicle startTimeWindows Bir aracın çalışma programının başlangıç zamanını belirtir.
endTimeWindows Bir aracın çalışma programının bitiş zamanını belirtir.

Aşağıdaki tabloda, TimeWindow mesaj türünün özellikleri açıklanmaktadır.

Mülk Biçim Açıklama
startTime Dize (RFC3339 UTC "Zulu" biçimi) Bir zaman aralığının başlangıcı.
endTime Dize (RFC3339 UTC "Zulu" biçimi) Bir zaman aralığının sonu.

Örnekler

Bu bölümde üç tür örnek ele alınmaktadır:

Kod örnekleri

Aşağıdaki bölümlerde, farklı zaman aralığı türlerine ait kod örnekleri gösterilmektedir.

Genel zaman aralıkları

Aşağıdaki kod örneğinde, global zaman aralıklarının yapısı gösterilmektedir:

{
  "model": {
    "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ",
    "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ",
    "shipments": [ ... ],
    "vehicles": [ ... ]
  }
}

Teslim alma ve teslimat zaman aralıkları

Aşağıdaki kod örneğinde, bir gönderinin teslim alma ve teslimat işlemlerindeki zaman aralıklarının yapısı gösterilmektedir:

{
  "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": [ ... ]
  }
}

Araç zaman aralıkları

Aşağıdaki kod örneğinde, bir aracın zaman aralıklarının yapısı gösterilmektedir:

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

Örnek senaryo

Bu bölümde, köpek kreşi işletmesi senaryosu kullanılmaktadır. Örnekte, iki farklı evden köpek alma ve bırakma rotaları optimize ediliyor. Köpek sahiplerinin alma ve bırakma zaman aralıkları aynı. Optimizasyon aracı; kreşin çalışma saatlerine, müşterilerin belirli teslim alma ve bırakma zamanlarına ve sürücünün çalışma saatlerine uymalıdır.

Bu örnekte, istekteki özellik değerleri şunlardır:

Ebeveyn Mülk Değer Senaryo
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Köpek bakım merkezinizin açılış saatini gösterir. Bu saatten önce teslim alma veya teslimat yapılamaz.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Köpek bakım merkezinizin kapanış saatini gösterir. Tüm teslim alma ve teslimat işlemleri bu zamana kadar tamamlanmalıdır.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Köpeğin müşterinin evinden alınması için kabul edilebilir zaman aralığını tanımlar. Bu örnekte, her iki müşteriye de teslim alma için 07:30 ile 09:00 arasında müsait olmalarını söylediniz.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Köpeğin müşterinin evine bırakılması için kabul edilebilir zaman aralığını tanımlar. Bu örnekte, her iki müşteriye de köpeklerinin 17:00 ile 18:30 arasında bırakılacağını söylediniz.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Aracın çalışmaya başlayabileceği (07:00-07:15) ve çalışmayı durdurabileceği (17:00-17:15) kabul edilebilir aralığı tanımlar.
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

Aşağıdaki şemada, bu rotayı etkileyen zaman aralıkları gösterilmektedir.

Genel zaman aralığını, teslim alma ve teslimat zaman aralıklarını, araç başlangıç ve bitiş zaman aralıklarını ve araç çalışma saatlerini gösteren çeşitli zaman çizelgeleri vardır.

Bu senaryoda, şemada gösterildiği gibi zaman aralıkları şu şekilde çalışır:

  • Genel zaman aralığı, köpek kreşinin çalışma saatlerini gösterir ve diğer tüm zaman aralıkları bu zaman aralığı içinde olmalıdır.
  • Teslim alma ve teslimat işlemleri, günün başında ve sonunda kendi timeWindows'larına sahiptir.
  • Aracın startTimeWindows, araç operatörüne çalışmaya başlaması gereken zaman aralığını verirken endTimeWindows, günü bitirmesi gereken başka bir zaman aralığı sağlar.
  • İlk startTimeWindow başlangıç saati ve son endTimeWindow bitiş saati, aracın çalışma saatlerini tanımlar. Bu durumda, çalışma saatleri küresel zaman aralığıyla aynıdır.

İstek örneği

Aşağıdaki örnekte, örnek senaryo zaman aralıkları değerlerini içeren bir optimizeTours isteğinin yapısı gösterilmektedir.

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

Esnek zaman aralıkları

Zaman aralıkları, TimeWindow mesaj türünde softStartTime ve softEndTime tanımlanarak esnek kısıtlamalar olarak kullanılabilir. Bu sayede optimize edici, belirtilen maliyetle belirtilen zaman aralığından sapabilir ve faydalı olduğunda zaman aralıklarına sıkı sıkıya bağlı kalmak yerine genel optimizasyona öncelik verebilir.

Esnek zaman aralıklarıyla ilgili aşağıdaki kullanım sınırlamaları geçerlidir:

  • TimeWindow ileti türünü kullanmadıkları için globalStartTime ve globalEndTime'ye uygulanamazlar.
  • Yalnızca bir listede tek bir TimeWindow olduğunda geçerlidir.

Özellikler

Aşağıdaki tabloda, zaman aralıklarıyla ilgili esnek kısıtlama özellikleri açıklanmaktadır.

Mülk adı Biçim Tesis açıklaması
softStartTime Zaman damgası Esnek zaman aralığının başlangıcını belirtir. Bu süreden önce bir etkinlik gerçekleşirse maliyet oluşur.
softEndTime Zaman damgası Esnek zaman aralığının sonunu belirtir. Bu saatten sonra bir etkinlik gerçekleşirse maliyet oluşur.
costPerHourBeforeSoftStartTime sayı Bir etkinlik softStartTime tarihinden önce başladığında saat başına oluşan maliyet. Bu özellik, softStartTime kullanılırken zorunludur. Maliyetleri uygulama hakkında daha fazla bilgi edinmek için Maliyet modeli temel kavramına bakın.
costPerHourAfterSoftEndTime sayı Bir etkinlik softEndTime sonra sona erdiğinde saat başına oluşan maliyet. Bu özellik, softEndTime kullanılırken zorunludur. Maliyetleri uygulama hakkında daha fazla bilgi edinmek için Maliyet modeli temel kavramına bakın.

Kod örneği

Aşağıdaki örnekte, TimeWindow mesaj türünün esnek kısıtlama özelliklerinin yapısı gösterilmektedir:

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