InjectedSolutionConstraint

Solusi yang dimasukkan dalam permintaan termasuk informasi tentang kunjungan mana yang harus dibatasi dan bagaimana kunjungan tersebut harus dibatasi.

Representasi JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Kolom
routes[]

object (ShipmentRoute)

Rute solusi yang akan diinjeksi. Beberapa rute mungkin dihilangkan dari solusi asli. Rute dan pengiriman yang dilewati harus memenuhi asumsi validitas dasar yang tercantum untuk injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Melewati pengiriman solusi yang akan dimasukkan. Beberapa solusi mungkin dihilangkan dari solusi asli. Lihat kolom routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Untuk nol kelompok kendaraan atau lebih, tentukan waktu dan frekuensi untuk melonggarkan batasan. Jika kolom ini kosong, semua rute kendaraan yang tidak kosong akan sepenuhnya dibatasi.

ConstraintRelaxation

Untuk grup kendaraan, tentukan pada batas minimum berapakah batasan kunjungan akan dilonggarkan dan pada tingkat mana. Pengiriman yang tercantum dalam kolom skipped_shipment dibatasi untuk dilewati; artinya, pengiriman tersebut tidak dapat dilakukan.

Representasi JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Kolom
relaxations[]

object (Relaxation)

Semua relaksasi membatasi kunjungan yang akan berlaku untuk kunjungan pada rute dengan kendaraan di vehicleIndices.

vehicleIndices[]

integer

Menentukan indeks kendaraan yang menerapkan batasan kunjungan relaxations. Jika kosong, ini dianggap sebagai default dan relaxations berlaku untuk semua kendaraan yang tidak ditentukan di constraintRelaxations lainnya. Hanya boleh ada maksimal satu default, yaitu maksimal satu kolom relaksasi batasan diizinkan kosong vehicleIndices. Indeks kendaraan hanya dapat dicantumkan sekali, bahkan dalam beberapa constraintRelaxations.

Indeks kendaraan dipetakan sama seperti ShipmentRoute.vehicle_index, jika interpretInjectedSolutionsUsingLabels bernilai benar (lihat komentar fields).

Relaksasi

Jika relaxations kosong, waktu mulai dan urutan semua kunjungan di routes akan sepenuhnya dibatasi dan tidak ada kunjungan baru yang dapat disisipkan atau ditambahkan ke rute tersebut. Selain itu, waktu mulai dan berakhir kendaraan di routes sepenuhnya dibatasi, kecuali jika kendaraan kosong (yaitu, tidak memiliki kunjungan dan memiliki usedIfRouteIsEmpty yang ditetapkan ke salah pada model).

relaxations(i).level menentukan tingkat relaksasi batasan yang diterapkan pada kunjungan #j yang memenuhi:

  • route.visits(j).start_time >= relaxations(i).threshold_time DAN
  • j + 1 >= relaxations(i).threshold_visit_count

Demikian pula, start kendaraan akan dilonggarkan ke relaxations(i).level jika memenuhi:

  • vehicleStartTime >= relaxations(i).threshold_time DAN
  • relaxations(i).threshold_visit_count == 0 dan ujung kendaraan dilonggarkan menjadi relaxations(i).level jika memenuhi:
  • vehicleEndTime >= relaxations(i).threshold_time DAN
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Untuk menerapkan tingkat relaksasi jika kunjungan memenuhi thresholdVisitCount ATAU thresholdTime, tambahkan dua relaxations dengan level yang sama: satu dengan hanya thresholdVisitCount yang ditetapkan dan yang lainnya dengan thresholdTime yang ditetapkan. Jika kunjungan memenuhi kondisi beberapa relaxations, tingkat yang paling longgar akan berlaku. Akibatnya, dari awal kendaraan hingga kunjungan rute hingga ke akhir kendaraan, tingkat relaksasi menjadi lebih santai: yaitu, tingkat relaksasi tidak menurun saat rute berlangsung.

Waktu dan urutan kunjungan rute yang tidak memenuhi ketentuan ambang batas relaxations sepenuhnya dibatasi dan tidak ada kunjungan yang dapat disisipkan ke dalam urutan ini. Selain itu, jika titik awal atau akhir kendaraan tidak memenuhi kondisi relaksasi apa pun, waktu akan tetap, kecuali jika kendaraan kosong.

Representasi JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Kolom
level

enum (Level)

Tingkat relaksasi batasan yang berlaku saat kondisi pada atau setelah thresholdTime DAN setidaknya thresholdVisitCount terpenuhi.

thresholdTime

string (Timestamp format)

Waktu saat atau setelah relaksasi level dapat diterapkan.

Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Jumlah kunjungan saat atau setelah relaksasi level dapat diterapkan. Jika thresholdVisitCount adalah 0 (atau tidak disetel), level dapat langsung diterapkan saat kendaraan dinyalakan.

Jika yang ditetapkan adalah route.visits_size() + 1, level hanya dapat diterapkan ke ujung kendaraan. Jika lebih dari route.visits_size() + 1, level tidak diterapkan sama sekali untuk rute tersebut.

Tingkat

Menunjukkan berbagai tingkat relaksasi batasan, yang diterapkan untuk kunjungan dan yang mengikuti saat memenuhi kondisi batas.

Enumerasi di bawah ini bertujuan untuk meningkatkan relaksasi.

Enum
LEVEL_UNSPECIFIED

Tingkat relaksasi default implisit: tidak ada batasan yang dilonggarkan, artinya, semua kunjungan sepenuhnya dibatasi.

Nilai ini tidak boleh digunakan secara eksplisit di level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Waktu mulai kunjungan dan waktu mulai/berakhir kendaraan akan santai, tetapi setiap kunjungan tetap terikat pada kendaraan yang sama dan urutan kunjungan harus diperhatikan: tidak ada kunjungan yang dapat disisipkan di antara keduanya atau sebelumnya.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Sama seperti RELAX_VISIT_TIMES_AFTER_THRESHOLD, tetapi urutan kunjungan juga longgar: kunjungan tetap terikat dengan kendaraan mereka.
RELAX_ALL_AFTER_THRESHOLD Sama seperti RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, tetapi kendaraan juga santai: kunjungan sepenuhnya gratis pada atau setelah waktu ambang batas dan berpotensi tidak dapat dilakukan.