Parameter Model Biaya

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

  • Memprioritaskan rute Vehicle yang lebih cepat daripada rute yang lebih pendek atau sebaliknya
  • Menentukan apakah biaya untuk mengirimkan Shipment sebanding dengan nilai penyelesaian Shipment
  • Melakukan pengambilan dan pengiriman dalam jangka waktu tertentu hanya jika hal tersebut 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
      }
    ]
  }
}
    

Properti biaya Vehicle

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

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

Parameter biaya ini memungkinkan pengoptimal melakukan kompromi waktu versus jarak yang ditempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan muncul dalam pesan respons sebagai metrics.costs:

Saat costPerHour meningkat, pengoptimal akan mencoba menemukan rute yang lebih cepat, tetapi mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat ternyata juga merupakan rute terpendek, sehingga perubahan pada parameter biaya tidak banyak berpengaruh.

Properti biaya Shipment

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

  • Shipment.penalty_cost mewakili biaya yang dikeluarkan dengan melewatkan pengiriman.
  • Shipment.VisitRequest.cost mewakili biaya pengambilan atau pengiriman 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 dikeluarkan untuk menyelesaikan Shipment melebihi biaya penaltinya, Shipment tidak disertakan di rute Vehicle mana pun, tetapi muncul dalam daftar skipped_shipments dalam pesan respons.

Properti biaya ShipmentModel

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

Properti biaya respons Pengoptimalan Rute

Pesan OptimizeToursResponse (REST, gRPC) memiliki properti biaya yang mewakili biaya yang dikeluarkan dalam proses menyelesaikan 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 tertentu tersebut.

Melihat respons untuk contoh permintaan dengan biaya

{
  "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 teratas 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 mewakili biaya yang timbul karena pengiriman yang dilewati. Properti skippedShipments mencantumkan pengiriman 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 kunci model.shipments.penalty_cost total dalam contoh respons. penaltyCost pengiriman yang rendah dibandingkan dengan Vehicle 40,0 costPerHour dan 10,0 costPerKilometer membuat pengiriman lebih hemat biaya jika dilewati daripada diselesaikan.

Topik lanjutan: biaya dan batasan lunak

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

Misalnya, batasan LoadLimit kendaraan (REST, gRPC) memiliki properti softMaxLoad dan costPerUnitAboveSoftMax. Bersama-sama, hal ini menimbulkan biaya yang sebanding dengan unit pemuatan yang melebihi softMaxLoad, sehingga batas dapat terlampaui hanya jika hal itu masuk akal 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 timbul berdasarkan seberapa awal atau terlambat peristiwa yang dibatasi terjadi sehubungan dengan TimeWindow.

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

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