En este ejemplo, se muestra cómo usar parámetros de costos 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.0shipments[1]con unpenaltyCostde 5.0shipments[2]con unpenaltyCostde 50.0vehicles[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 inferior a los costos calculados del vehículo para la recolección 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 cada costo incurrido en la solución. Esto incluye los costos operativos de todas las rutas de vehículos, además de las penalizaciones, como elmodel.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 delrouteTotalCostde todos los vehículos y todos los costos de penalización. En este caso, es 52.44 + 5.0.