Parameter Model Biaya

Pesan OptimizeToursRequest (REST, gRPC) berisi sejumlah properti yang terkait dengan biaya. Bersama-sama, parameter biaya ini mewakili model biaya permintaan. Model biaya merekam banyak tujuan pengoptimalan tingkat tinggi dari permintaan, seperti:

  • Memprioritaskan rute Vehicle yang lebih cepat daripada rute yang lebih pendek atau sebaliknya
  • Menentukan apakah biaya untuk mengirim Shipment sepadan dengan nilai penyelesaian Shipment
  • Melakukan pengambilan dan pengiriman dalam jangka waktu hanya saat melakukannya yang hemat biaya

Lihat contoh permintaan dengan biaya

{
  "model": {
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 5.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

Vehicle properti biaya

Pesan Vehicle (REST, gRPC) memiliki beberapa properti biaya:

  • Vehicle.cost_per_hour: menunjukkan biaya pengoperasian kendaraan per jam termasuk waktu transportasi umum, waktu tunggu, kunjungan, dan waktu istirahat.
  • Vehicle.cost_per_kilometer: menunjukkan biaya per kilometer yang ditempuh oleh kendaraan.
  • Vehicle.cost_per_traveled_hour: menunjukkan biaya pengoperasian kendaraan hanya saat dalam perjalanan, tidak termasuk waktu tunggu, kunjungan, dan jeda.

Parameter biaya ini memungkinkan pengoptimal membuat konsekuensi waktu versus jarak tempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan akan muncul dalam pesan respons sebagai metrics.costs:

Seiring peningkatan costPerHour, pengoptimal akan mencoba menemukan rute yang lebih cepat yang mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat akan menjadi rute terpendek, sehingga perubahan parameter biaya memiliki pengaruh yang kecil.

Shipment properti biaya

Pesan Shipment (REST, gRPC) juga memiliki beberapa parameter biaya:

  • Shipment.penalty_cost adalah biaya yang timbul karena melewatkan pengiriman.
  • Shipment.VisitRequest.cost merepresentasikan biaya pengambilan atau pengantaran tertentu, yang terutama digunakan untuk memungkinkan kompromi biaya antara beberapa opsi pengambilan atau pengiriman untuk satu pengiriman.

Parameter biaya Shipment menggunakan unit tanpa dimensi yang sama dengan parameter biaya Vehicle. Biaya yang timbul menyelesaikan Shipment yang melebihi biaya penaltinya, Shipment tidak disertakan dalam rute Vehicle mana pun dan akan muncul dalam daftar skipped_shipments di pesan respons.

ShipmentModel properti biaya

Pesan ShipmentModel (REST, gRPC) mencakup satu properti biaya, globalDurationCostPerHour. Biaya ini dikeluarkan berdasarkan total waktu yang diperlukan bagi semua kendaraan untuk menyelesaikan ShipmentRoute. Meningkatkan globalDurationCostPerHour akan memprioritaskan penyelesaian lebih awal dari semua pengiriman.

Properti biaya respons Pengoptimalan Rute

Pesan OptimizeToursResponse (REST, gRPC) memiliki properti biaya yang mewakili biaya yang dikeluarkan dalam proses penyelesaian ShipmentRoute. Properti metrics.costs dan metrics.totalCost mewakili jumlah unit biaya yang dikeluarkan di semua rute dalam respons. Setiap entri routes memiliki properti routeCosts dan routeTotalCosts yang mewakili biaya untuk rute spesifik tersebut.

Lihat respons terhadap contoh permintaan beserta biayanya

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:28:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-14T00:02:30Z",
          "detour": "150s"
        },
        {
          "startTime": "2023-01-14T00:08:55Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-14T00:21:21Z",
          "detour": "572s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:02:30Z"
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-14T00:05:00Z"
        },
        {
          "travelDuration": "496s",
          "travelDistanceMeters": 1893,
          "waitDuration": "0s",
          "totalDuration": "496s",
          "startTime": "2023-01-14T00:13:05Z"
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-14T00:25:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "902s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "800s",
        "totalDuration": "1702s",
        "travelDistanceMeters": 3353
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 33.53,
        "model.vehicles.cost_per_hour": 18.911111111111111
      },
      "routeTotalCost": 52.441111111111113
    }
  ],
  "skippedShipments": [
    {
      "index": 1
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "902s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "800s",
      "totalDuration": "1702s",
      "travelDistanceMeters": 3353
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:28:22Z",
    "totalCost": 57.441111111111113,
    "costs": {
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.shipments.penalty_cost": 5
    }
  }
}
    

Dalam contoh respons, metrics.costs tingkat atas adalah:

{
  "metrics": {
    ...
    "costs": {
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.shipments.penalty_cost": 5
    }
  }
}

Nilai model.shipments.penalty_cost menunjukkan biaya yang timbul karena pengiriman yang dilewati. Properti skippedShipments mencantumkan pengiriman mana yang dilewati.

Dalam contoh ini, hanya model.shipments[1] dalam contoh permintaan yang dilewati. model.shipments[1] memiliki biaya penalti 5 unit, yang cocok dengan total kunci model.shipments.penalty_cost dalam contoh respons. Pengiriman yang rendah penaltyCost dibandingkan dengan Vehicle 40.0 costPerHour dan 10.0 costPerKilometer membuat melewatkan pengiriman lebih hemat daripada menyelesaikannya.

Topik lanjutan: biaya dan batasan lunak

Beberapa properti pesan OptimizeToursRequest (REST, gRPC) mewakili batasan terbatas, yang merupakan batasan yang menimbulkan biaya saat tidak dapat dipenuhi.

Misalnya, batasan LoadLimit (REST, gRPC) kendaraan memiliki properti softMaxLoad dan costPerUnitAboveSoftMax. Bersama-sama, semuanya akan dikenai biaya yang proporsional dengan unit muatan yang melebihi softMaxLoad, sehingga batas tersebut akan terlampaui hanya jika hal tersebut relevan dari sudut pandang biaya.

Demikian pula, batasan TimeWindow (REST, gRPC) memiliki properti soft_start_time dan soft_end_time, dengan cost_per_hour_before_soft_start_time dan cost_per_hour_after_soft_end_time yang sesuai yang terjadi berdasarkan seberapa awal atau lambat peristiwa terbatas terjadi terkait dengan TimeWindow.

Seperti semua parameter model biaya, biaya batasan ringan dinyatakan dalam unit tanpa dimensi yang sama dengan parameter biaya lainnya.

Batasan LoadLimit dibahas secara mendetail di Permintaan dan Batas Beban. Batasan TimeWindow ditangani secara mendetail di Batasan Periode Waktu Ambil dan Pengiriman.