En este ejemplo, se muestra cómo usar los parámetros de costo para obtener una ruta rentable.
Para obtener una descripción general conceptual completa, consulta el documento Concepto clave del modelo de costos.
Ejemplo de solicitud
En el siguiente ejemplo, se muestra una situación en la que un vehículo debe entregar
tres envíos. El vehículo tiene costos asociados por tiempo y distancia, y
cada envío tiene un penaltyCost que se genera si se omite
el envío.
Esta solicitud de ejemplo contiene los siguientes parámetros relacionados con el costo:
shipments[0]con unpenaltyCostde 100.0.shipments[1]con unpenaltyCostde 5.0.shipments[2]con unpenaltyCostde 50.0.vehicles[0]con uncostPerHourde 40.0 y uncostPerKilometerde 10.0.
Consulta un ejemplo de solicitud con costos
{ "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 } ] } }
Ejemplo de respuesta
La respuesta muestra que el optimizador crea una ruta que realiza dos de los
tres envíos. Se omite el tercer envío porque su penaltyCost es
menor que los costos calculados del vehículo para la recogida y la entrega.
Consulta una respuesta a la solicitud de ejemplo con costos
{ "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 } } }
En los siguientes campos, se muestra cómo se calculan los costos en la respuesta:
routeCostsdesglosa los costos operativos de una ruta específica, que, en este caso, son los siguientes:model.vehicles.cost_per_kilometer: 33.53.model.vehicles.cost_per_hour: 18.91.
- El
routeTotalCost(52.44) es la suma de los costos que se indican enrouteCosts. - En el nivel superior de la respuesta, el objeto
costsresume todos los costos en los que se incurre en la solución. Esto incluye los costos operativos de todas las rutas de vehículos más las penalizaciones, como lamodel.shipments.penalty_cost(5.0) por el envío omitido. - El
totalCostfinal (57.44) representa el total general de la solución, que es la suma derouteTotalCostde todos los vehículos y todos los costos de penalización. En este caso, es 52.44 + 5.0.