Las demandas y los límites de carga son un tipo de restricción que puedes usar para administrar la capacidad. Esta restricción especifica la capacidad requerida de un envío y la capacidad máxima de un vehículo, lo que te permite optimizar las asignaciones de rutas en función de estas restricciones.
Las demandas y los límites de carga pueden respaldar objetivos como los siguientes:
- Evita que los vehículos se sobrecarguen.
- Supervisa cómo cambian las cargas de los vehículos a medida que se recogen y entregan los envíos.
- Prioriza la combinación de vehículos pesados con envíos de carga pesada.
Las demandas y los límites de carga se especifican en las siguientes propiedades:
loadDemands
especifica la cantidad de capacidad que requiere un envío en particular.loadLimits
especifica la capacidad máxima de un vehículo determinado.
Estructura
Como se muestra en el diagrama, las demandas y los límites de carga se estructuran de la siguiente manera:
loadDemands
es una propiedad deShipment
. UnShipment
puede tener varias demandas de carga.loadLimits
es una propiedad deVehicle
. UnVehicle
puede tener varios límites de carga.
Lista de tareas de Essentials
En la siguiente lista de tareas, se describe el conocimiento esencial que evita posibles errores relacionados con la carga. Esta lista puede ayudarte a validar tu solicitud y solucionar problemas relacionados con tu respuesta.
Propiedades
En esta sección, se describen las propiedades de las demandas y los límites de carga, que son los siguientes:
- Tipo de carga: Es una propiedad compartida entre las demandas y los límites de carga.
Load
yLoadLimit
: Son las propiedades únicas presentes en las demandas y los límites de carga, respectivamente.
Tipo de carga
Un tipo de carga es una clave de cadena que se aplica por igual a los envíos y los vehículos. Un solo tipo de carga se aplica a la demanda de carga de un envío y al límite de carga de un vehículo.
Los tipos de carga usan la sintaxis del tipo de mapa de Protocol Buffers. Cuando asignes un nombre a un tipo de carga, usa identificadores que describan el tipo de carga y su unidad. Por ejemplo: weightKg, volume_gallons, palletcount o frequencyDaily.
Load
y LoadLimit
Los objetos Load
y LoadLimit
contienen propiedades específicas para definir los requisitos de capacidad de los envíos y los vehículos. En la siguiente tabla, se describen estas propiedades:
Objeto | Madre o padre | Propiedad | Tipo de propiedad | Descripción de la propiedad |
---|---|---|---|---|
Load |
loadDemands |
amount |
cadena (formato int64) | Define el requisito de capacidad del envío en el tipo especificado. |
LoadLimit |
loadLimits |
maxLoad |
cadena (formato int64) | Define la capacidad de carga máxima del vehículo en el tipo especificado. |
Ejemplos
En esta sección, se abordan tres tipos de ejemplos:
- Muestras de código que ilustran la estructura de las propiedades de límites y demandas de carga.
- Un ejemplo de situación que muestra una forma de usar los límites y las demandas de carga en una solicitud a la API
- Un ejemplo de solicitud que incluye los valores establecidos en la situación de ejemplo.
Muestras de código
En el siguiente ejemplo, se muestra la estructura de una demanda de carga en la que puedes establecer el tipo loadDemands
como una cadena y la propiedad amount
como una cadena en formato int64:
{ "model": { "shipments": [ ... { "loadDemands": { "MATCHING_LOAD_TYPE": { "amount": "YOUR_LOAD_AMOUNT" } } } ], "vehicles": [ ... ] } }
En el siguiente ejemplo, se muestra la estructura más básica de un límite de carga, en la que puedes establecer el tipo loadLimits
como una cadena y la propiedad maxLoad
como una cadena en formato int64:
{ "model": { "shipments": [ ... ], "vehicles": [ ... { "loadLimits": { "MATCHING_LOAD_TYPE": { "maxLoad": "YOUR_MAX_LOAD" } } } ] } }
Situación de ejemplo
En esta sección, se describe una situación en la que tienes un negocio de guardería para perros y optimizas una ruta para transportar algunos perros en un vehículo con una cantidad limitada de jaulas.
Cada envío representa una parada en la que recoges una cierta cantidad de perros. En este ejemplo, cada envío tiene una ubicación de partida diferente, que es la casa de los perros que cuidas, y todos los envíos tienen la misma ubicación de entrega, el edificio de tu guardería canina.
En este ejemplo, los valores de propiedad de tu solicitud son los siguientes:
Madre o padre | Propiedad | Tipo | Valor | Situación |
---|---|---|---|---|
loadDemands |
Tipo de carga | string | dogUnit |
Define el tipo de carga del envío. En este ejemplo, se usa dogUnit , donde cada dogUnit representa un perro. |
loadDemands |
amount |
número | 1ᵉʳ envío: 1 2ᵉʳ envío: 3 |
Especifica la cantidad del tipo de carga definido. En este ejemplo, defines dos envíos: en el primero, retiras un perro y, en el segundo, retiras 3. |
loadLimits |
Tipo de carga | string | dogUnit |
Define el tipo de límite de carga que se aplica al vehículo. Este valor debe coincidir con el tipo de carga del envío para que el límite sea pertinente. |
loadLimits |
maxLoad |
número | 6 |
Especifica la cantidad máxima del tipo de carga que puede transportar el vehículo. En este ejemplo, solo tienes un vehículo con una capacidad máxima de 6 dogUnit , en el que cada dogUnit representa una jaula para perros. |
En el siguiente diagrama, se ilustran los límites de carga del vehículo, las demandas de carga de cada envío y cómo cada envío consume los límites de carga del vehículo:
En este ejemplo, las demandas de carga de cada envío y los límites de carga del vehículo tienen los siguientes efectos:
El optimizador no tendrá problemas para generar una ruta para el vehículo que transportará a los perros, ya que el vehículo puede transportar hasta 6 perros y tú solo recogerás 4.
Tener un límite de carga de 6
dogUnit
en el vehículo también significa que solo podrías transportar dos perros más en este vehículo específico.Si la cantidad de perros era mayor que el límite de carga, el optimizador omitiría uno de los viajes o lo asignaría a un vehículo adecuado.
Recuerda que no hay un conjunto de tipos predefinidos. En este ejemplo, podrías cambiar el tipo de carga de unidades de perros a unidades de peso para limitar el peso de los perros, o bien cambiarlo a medidas lineales para limitar su ancho o altura. Esta flexibilidad te permite adaptar las demandas y los límites de carga a tus necesidades específicas.
Ejemplo de solicitud
En el siguiente ejemplo, se muestra la estructura de una solicitud optimizeTours
básica que incorpora los valores del caso de ejemplo:
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ], "label": "One bernese mountain dog", "loadDemands": { "dogUnit": { "amount": "1" } } }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ], "label": "Three chihuahuas", "loadDemands": { "dogUnit": { "amount": "3" } } } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "loadLimits": { "dogUnit": { "maxLoad": "6" } }, "costPerKilometer": 1.0 } ] } }
Recuerda que, a diferencia del caso de este ejemplo, un envío puede tener varias demandas de carga y un vehículo puede tener varios límites de carga, lo que te permite proporcionar restricciones complejas para tener en cuenta cuando optimizas las rutas de tu flota.
Límites de carga flexibles
Puedes establecer límites de carga como restricciones flexibles agregando softMaxLoad
y costPerUnitAboveSoftMax
en el objeto loadLimits
de un vehículo. Esto permite que el optimizador exceda la carga máxima del vehículo a un costo, lo que prioriza la finalización de la ruta por sobre el cumplimiento estricto del límite de carga.
Puedes usar maxLoad
y softMaxLoad
juntos para establecer un límite de carga flexible y uno rígido. En este caso, softMaxLoad
establece la carga que se puede superar, y maxLoad
establece un límite estricto que no se puede superar. Cuando se usan ambos, maxLoad
debe ser mayor que softMaxLoad
.
Propiedades
En la siguiente tabla, se describen las propiedades de las restricciones flexibles para los límites y las demandas de carga.
Madre o padre | Nombre de la propiedad | Tipo de propiedad | Descripción de la propiedad |
---|---|---|---|
loadLimits |
softMaxLoad |
cadena (formato int64) | Es la carga máxima preferida para un vehículo. Si la carga del vehículo supera este valor, se generará un costo. |
loadLimits |
costPerUnitAboveSoftMax |
número | Es el costo por unidad de carga superior a softMaxLoad . Este campo es obligatorio cuando se usa softMaxLoad . Consulta el concepto clave Modelo de costos para obtener más información sobre los costos. |
Muestra de código
En el siguiente ejemplo, se muestra la estructura de las propiedades de restricción flexible de loadLimits
:
{ "loadLimits": { "LOAD_TYPE": { "softMaxLoad": "LOAD_AMOUNT", "costPerUnitAboveSoftMax": COST_PER_UNIT } } }