Jendela waktu

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

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

Jendela waktu dapat mendukung tujuan seperti:

  • Memprioritaskan penyelesaian pengambilan dan pengiriman dalam jangka waktu yang ditentukan.
  • Merencanakan rute untuk beroperasi dalam jam kerja keseluruhan.
  • Memastikan kendaraan memulai dan mengakhiri rute dalam jangka waktu yang ditentukan.

Struktur

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

Checklist penting

Checklist berikut menjelaskan pengetahuan penting yang mencegah potensi kesalahan terkait jendela waktu. Daftar ini dapat membantu Anda memvalidasi permintaan dan memecahkan masalah respons.

Properti

Tabel berikut menjelaskan properti jendela waktu global.

Properti Format Deskripsi
globalStartTime Timestamp Waktu paling awal untuk peristiwa apa pun.
globalEndTime Timestamp Waktu paling akhir untuk peristiwa apa pun.

Tabel berikut menjelaskan properti jendela waktu dalam pengiriman dan kendaraan.

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

Tabel berikut menjelaskan properti jenis pesan TimeWindow.

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

Contoh

Bagian ini membahas tiga jenis contoh:

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

Contoh kode

Bagian berikut menunjukkan contoh kode dari berbagai jenis jendela waktu.

Jendela waktu global

Contoh kode berikut menunjukkan struktur jendela waktu global:

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

Jendela waktu pengambilan dan pengiriman

Contoh kode berikut menunjukkan struktur jendela waktu dalam pengambilan dan pengiriman pengiriman:

{
  "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 mengambil dan mengantar dari dua rumah yang berbeda, dan pemiliknya memiliki jendela waktu pengambilan dan pengantaran yang sama. Pengoptimal harus menghormati jam operasional tempat penitipan anak, jendela waktu penjemputan dan pengantaran khusus untuk pelanggan, dan jam kerja pengemudi.

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

Parent Properti Nilai Skenario
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Mewakili waktu buka penitipan Anda. Tidak ada pengambilan atau pengiriman yang dapat terjadi sebelum waktu ini.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Mewakili waktu tutup penitipan Anda. Semua pengambilan dan pengiriman harus diselesaikan pada waktu ini.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Menentukan jendela yang dapat diterima untuk mengambil dari rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan untuk bersedia diambil antara pukul 07.30 dan 09.00.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Menentukan jendela 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 jendela yang dapat diterima untuk kendaraan 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 mengilustrasikan jendela 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, jendela waktu berfungsi sebagai berikut:

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

Contoh permintaan

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

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

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

Jendela waktu fleksibel memiliki batasan penggunaan berikut:

Properti

Tabel berikut menjelaskan properti batasan fleksibel untuk jendela 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 jendela waktu fleksibel. Jika peristiwa terjadi setelah waktu ini, biaya akan dikenakan.
costPerHourBeforeSoftStartTime angka Biaya per jam yang dikenakan saat peristiwa dimulai sebelum softStartTime. Properti ini diperlukan saat menggunakan softStartTime. Lihat Konsep utama model biaya untuk mempelajari lebih lanjut cara menerapkan biaya.
costPerHourAfterSoftEndTime angka Biaya per jam yang dikenakan saat peristiwa berakhir setelah softEndTime. Properti ini diperlukan saat menggunakan softEndTime. Lihat Konsep utama model biaya untuk mempelajari lebih lanjut cara menerapkan biaya.

Contoh kode

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

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