Realiza una solicitud con costos de carga para que el optimizador tenga en cuenta la
carga que transportan tus vehículos entre las visitas. El costo incurrido depende de la
cantidad de ShipmentRoute.VehicleLoad transportada y de la distancia o la duración de
la transición (con cost_per_kilometer o cost_per_traveled_hour
respectivamente).
Un ejemplo mínimo de solicitud con costos de carga
Este es un ejemplo parcial de una solicitud con un costo de carga. En este ejemplo, el
vehículo único no puede transportar más de 1,000 kg de carga total weightKg, lo que
genera 1 unidad de costo por kilómetro cuando la carga weightKg transportada supera los 500
kg.
{ "model": { "vehicles": [{ "loadLimits": { "weightKg": { "maxLoad": "1000", "costPerKilometer": { "loadThreshold": "500", "costPerUnitAboveThreshold": 1 } } } }] } }
El cálculo del costo de carga para este ejemplo es el siguiente:
cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold
Por lo tanto, si el vehículo transporta una carga de weightKg de 600 durante 10 kilómetros, el
cálculo sería el siguiente:
(600 - 500) * 10 * 1 = 1000 cost units
Los costos de carga se pueden usar para modelar una variedad de conceptos, como el aumento del uso de energía del vehículo cuando se transportan cargas pesadas o el desgaste del vehículo causado por una carga excesiva.
Otro ejemplo de solicitud con costos de carga
Este es otro ejemplo de costos de carga que impone un costo por tiempo de viaje tanto por encima como por debajo de un umbral:
{ "model": { "vehicles": [{ "loadLimits": { "weightLbs": { "maxLoad": "1000", "costPerTraveledHour": { "loadThreshold": "900", "costPerUnitAboveThreshold": 10, "costPerUnitBelowThreshold": 1 }, }, } }] } }
El cálculo del costo de carga para este ejemplo es el siguiente:
cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
+ min(carried load, load threshold) * time * cost per unit below threshold
Por lo tanto, si el vehículo transporta una carga de weightLbs de 950 durante 5 horas, el
cálculo sería el siguiente:
max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000
En este ejemplo, el load_threshold para el costo de carga de weightLbs está cerca
de max_load. El cost_per_unit_above_threshold aplica un costo alto por
hora de viaje cuando el vehículo viaja con una carga especialmente pesada,
lo que penaliza las rutas que pueden aumentar el desgaste del vehículo o consumir exceso de combustible.
El cost_per_unit_below_threshold agrega un costo por unidad de peso que transporta
el vehículo hasta el umbral, lo que representa un aumento en el consumo de combustible a medida que el
vehículo transporta más carga.
Preguntas frecuentes
Estas son algunas preguntas frecuentes sobre los costos de carga:
| Pregunta | Respuesta |
|---|---|
| ¿Dónde especifico los costos de carga? | Especifica los costos de carga en Vehicle.LoadLimit. |
| ¿Cómo se relacionan los costos de carga con los envíos? | Un costo de carga se aplica a los envíos cuyo tipo de demanda de carga coincide con el tipo de límite de carga del vehículo, como el peso o el volumen. Los tipos de carga son cadenas arbitrarias, como se describe en las demandas y los límites de carga. |
| ¿Cómo se expresan los costos de carga? | Los costos de carga se expresan en términos de distancia o
duración de la transición. Usa cost_per_kilometer para especificar los costos en
términos de distancia y cost_per_traveled_hour para especificar los costos
en términos de duración.
|
| ¿Cuándo se aplican los costos de carga? | La carga del vehículo se compara con el load_threshold del costo de carga. Si se especifica cost_per_unit_above_threshold, se agrega el costo proporcional a la carga del vehículo por encima del load_threshold con la fórmula max(0, load - load_threshold). Si
cost_per_unit_below_threshold se especifica, se agrega el costo
proporcional a la carga del vehículo por debajo
del load_threshold, con la fórmula
min(load, load_threshold).
|
| ¿Cuáles son los valores predeterminados para los parámetros de costo de carga? | load_threshold, cost_per_unit_above_threshold y
cost_per_unit_below_threshold son cero de forma predeterminada.
|
| ¿En qué unidades se expresan los costos de carga? | Los costos de carga se expresan en las mismas unidades adimensionales que todos los demás
parámetros de costo, como global_duration_cost_per_hour o
Shipment.penalty_cost.
|
| ¿Dónde encuentro los costos de carga en la respuesta? | Los costos de carga incurridos aparecen en las propiedades metrics y
route_metrics de los mensajes de respuesta. Por ejemplo, un
incurrido cost_per_kilometer aparecerá como model.vehicles.load_limits.cost_per_kilometer.
|
Para obtener una explicación detallada de los costos de carga, consulta la documentación de referencia (REST, gRPC).
Ejemplo: Realiza una solicitud de OptimizeTours
Las solicitudes de OptimizeTours también se pueden realizar con REST o gRPC.
Antes de realizar una solicitud, reemplaza los siguientes parámetros por valores adecuados para tu entorno:
- Asegúrate de tener configuradas las credenciales predeterminadas de la aplicación como se describe en Usar OAuth.
Establece PROJECT_NUMBER_OR_ID en el número o ID de tu proyecto de Cloud.
El siguiente comando envía una solicitud de
OptimizeToursa la API de Route Optimization y recibe una respuesta de forma síncrona.curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --data @- << EOM { "model": { "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": 50 } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "penaltyCost": 30.0, "loadDemands": { "weightKg": { "amount": 10 } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": 80 } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100", "costPerKilometer": { "loadThreshold": "15", "costPerUnitAboveThreshold": 1 } } } } ] } } EOM
Una vez que se complete la solicitud, recibirás un mensaje de respuesta.