Jendela waktu

Rentang waktu ada di `ShipmentModel`, di `Shipment` dalam objek pengambilan dan pengiriman, serta di `Vehicle`.

Jendela waktu menentukan waktu untuk acara di rute. Peristiwa ini dapat mencakup awal dan akhir rute pengemudi, waktu pengambilan dan pengiriman yang dijadwalkan, atau durasi seluruh rute.

Periode waktu dapat mendukung tujuan seperti:

  • Prioritaskan penyelesaian pengambilan dan pengiriman dalam jangka waktu yang ditentukan.
  • Rencanakan rute untuk beroperasi dalam jam kerja secara keseluruhan.
  • Pastikan kendaraan memulai dan mengakhiri rute dalam jangka waktu yang ditentukan.

Struktur

Seperti yang ditunjukkan dalam diagram, rentang waktu disusun sebagai berikut:

  • globalStartTime dan globalEndTime adalah properti ShipmentModel
  • timeWindows adalah properti dari:
    • pickups di dalam Shipment.
    • deliveries di dalam Shipment.
  • startTimeWindows dan endTimeWindows adalah properti Vehicle.

Checklist Essentials

Properti

Tabel berikut menjelaskan properti jangka waktu global.

Properti Format Deskripsi
globalStartTime Timestamp Waktu paling awal untuk acara apa pun.
globalEndTime Timestamp Waktu terbaru untuk acara apa pun.

Tabel berikut menjelaskan properti jangka waktu dalam pengiriman dan kendaraan.

Orang tua Properti Format Deskripsi
Shipment.pickups timeWindows Array jenis pesan TimeWindow. Menentukan interval waktu untuk pengambilan pengiriman.
Shipment.deliveries timeWindows Menentukan interval waktu untuk pengiriman.
Vehicle startTimeWindows Menentukan waktu mulai untuk jadwal pengoperasian kendaraan.
endTimeWindows Menentukan waktu berakhir untuk jadwal pengoperasian kendaraan.

Tabel berikut menjelaskan properti jenis pesan TimeWindow.

Properti Format Deskripsi
startTime String (format RFC3339 UTC "Zulu") Awal periode waktu.
endTime String (format RFC3339 UTC "Zulu") Akhir periode waktu.

Contoh

Bagian ini mencakup tiga jenis contoh:

  • Contoh kode yang menggambarkan struktur rentang waktu.
  • Contoh skenario yang menunjukkan salah satu cara menggunakan jangka waktu untuk mencapai tujuan bisnis.
  • Contoh permintaan yang menyertakan nilai yang ditetapkan dalam skenario contoh.

Contoh kode

Bagian berikut menunjukkan contoh kode berbagai jenis rentang waktu.

Jendela waktu global

Contoh kode berikut menunjukkan struktur rentang waktu global:

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

Periode waktu pengambilan dan pengiriman

Contoh kode berikut menunjukkan struktur rentang waktu dalam pengambilan dan pengiriman kiriman:

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

Jendela waktu kendaraan

Contoh kode berikut menunjukkan struktur jendela waktu kendaraan:

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

Contoh skenario

Bagian ini menggunakan skenario bisnis penitipan. Contoh ini mengoptimalkan rute untuk menjemput dan mengantar dari dua rumah yang berbeda, dan pemiliknya memiliki rentang waktu penjemputan dan pengantaran yang sama. Pengoptimal harus mematuhi jam buka tempat penitipan anak, jangka waktu pengambilan dan pengantaran khusus untuk pelanggan, serta jam kerja pengemudi.

Untuk contoh ini, nilai properti dalam permintaan adalah sebagai berikut:

Orang tua Properti Nilai Skenario
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Mewakili waktu buka tempat penitipan Anda. Pengambilan atau pengiriman tidak dapat dilakukan sebelum waktu ini.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Mewakili waktu tutup tempat penitipan Anda. Semua pengambilan dan pengiriman harus diselesaikan pada waktu ini.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Menentukan periode yang dapat diterima untuk mengambil dari rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan bahwa pesanan dapat diambil antara pukul 07.30 dan 09.00.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Menentukan rentang waktu yang dapat diterima untuk mengantar ke rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan bahwa mereka akan diantar antara pukul 17.00 dan 18.30.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Menentukan interval yang dapat diterima bagi kendaraan untuk memulai (07.00 hingga 07.15) dan mengakhiri (17.00 hingga 17.15).
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

Diagram berikut menggambarkan rentang waktu yang memengaruhi rute ini.

Beberapa linimasa mewakili jangka waktu global, jangka waktu pengambilan dan pengiriman, jangka waktu mulai dan berakhir kendaraan, serta jam kerja kendaraan.

Dalam skenario ini, seperti yang diilustrasikan oleh diagram, rentang waktu berfungsi sebagai berikut:

  • Jangka waktu global merepresentasikan jam buka bisnis penitipan, dan semua jangka waktu lainnya harus berada dalam jangka waktu ini.
  • Pengambilan dan pengiriman memiliki timeWindows sendiri di awal dan akhir hari.
  • startTimeWindows kendaraan memberi operator kendaraan jangka waktu untuk memulai pekerjaan, dan endTimeWindows memberikan jangka waktu lain untuk menyelesaikan pekerjaan mereka.
  • Waktu mulai startTimeWindow pertama dan waktu berakhir endTimeWindow terakhir menentukan jam operasional kendaraan, yang dalam hal ini sama dengan jendela waktu global.

Contoh permintaan

Contoh berikut menunjukkan struktur permintaan optimizeTours yang menggabungkan nilai rentang waktu skenario contoh.

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

Jendela waktu fleksibel

Rentang waktu dapat digunakan sebagai batasan ringan dengan menentukan softStartTime dan softEndTime dalam jenis pesan TimeWindow. Hal ini memungkinkan pengoptimal menyimpang dari jangka waktu yang ditentukan dengan biaya tertentu, memprioritaskan pengoptimalan secara keseluruhan daripada kepatuhan yang ketat terhadap jangka waktu jika menguntungkan.

Periode waktu fleksibel memiliki batasan penggunaan berikut:

  • Peran ini tidak dapat diterapkan ke globalStartTime dan globalEndTime karena tidak menggunakan jenis pesan TimeWindow.
  • Hal ini hanya berlaku jika ada satu TimeWindow dalam daftar.

Properti

Tabel berikut menjelaskan properti batasan ringan untuk jangka waktu.

Nama properti Format Deskripsi properti
softStartTime Stempel waktu Menentukan awal jendela waktu fleksibel. Jika peristiwa terjadi sebelum waktu ini, biaya akan dikenakan.
softEndTime Stempel waktu Menentukan akhir interval waktu fleksibel. Jika peristiwa terjadi setelah waktu ini, biaya akan dikenakan.
costPerHourBeforeSoftStartTime angka Biaya per jam yang timbul saat acara dimulai sebelum softStartTime. Properti ini wajib ada saat menggunakan softStartTime. Lihat konsep utama Model biaya untuk mempelajari lebih lanjut cara menerapkan biaya.
costPerHourAfterSoftEndTime angka Biaya per jam yang dikeluarkan saat acara berakhir setelah softEndTime. Properti ini wajib ada saat menggunakan softEndTime. Lihat konsep utama Model biaya untuk mempelajari lebih lanjut cara menerapkan biaya.

Contoh kode

Contoh berikut menunjukkan struktur properti batasan ringan dari jenis pesan TimeWindow:

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