Demandas y límites de carga

La propiedad loadDemands se define en ShipmentModel.shipments.Shipment y la propiedad loadLimits en ShipmentModel.vehicles.Vehicle.

Las demandas y los límites de carga son un tipo de restricción que puedes usar para administrar la capacidad. Especifican la capacidad requerida de un envío y la capacidad máxima de un vehículo, lo que te permite optimizar las asignaciones de ruta 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 retiran y entregan los envíos.
  • Restringe la cantidad de veces que un vehículo puede visitar una ubicación específica.

Las demandas y los límites de carga se especifican en estas propiedades:

  • loadDemands especifica la cantidad de capacidad que necesita 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:

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 y LoadLimit: Son propiedades únicas presentes en las demandas de carga y los límites de carga, respectivamente.

Tipo de carga

Los tipos de carga son claves de cadena que identifican el tipo de demanda de carga de un envío y los límites de carga de un vehículo. Los tipos de carga tienen las siguientes características importantes:

  • Definidos por el usuario: Los tipos de carga son los que defines. No hay variables del sistema predefinidas para los tipos de carga.
  • Compartido: Los tipos de carga se comparten entre los envíos y los vehículos. Esto significa que un envío consumirá la capacidad de un vehículo hasta su límite solo cuando sus tipos de carga coincidan. Si un vehículo no especifica ningún límite de carga para un tipo en particular, puede transportar una cantidad ilimitada de ese tipo de carga.

Las claves de cadena que representan los tipos de carga usan la sintaxis del tipo de mapa de Protocol Buffers. Estas claves de cadena no deben ser nulas para evitar problemas. Cuando asignes un nombre a un tipo de carga, se recomienda usar 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 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 el formato int64:

"loadDemands": {
  "MATCHING_LOAD_TYPE": {
    "amount": "YOUR_LOAD_AMOUNT"
  }
}

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:

"loadLimits": {
  "MATCHING_LOAD_TYPE": {
    "maxLoad": "YOUR_MAX_LOAD"
  }
}

Probar

Usa los ejemplos de código anteriores para crear una situación ficticia. En esta situación, tienes un envío que pesa 10 kilogramos y un vehículo que puede transportar 100 kilogramos:

  1. En el ejemplo de loadDemands, define el tipo de carga como weightKg.

    Una vez que lo hagas, el tipo de carga del ejemplo de loadLimits también se propagará y compartirá el tipo de carga. Recuerda que los tipos de loadDemands y loadLimits deben coincidir para que el envío consuma los límites del vehículo.

  2. En el mismo ejemplo de loadDemands, establece la propiedad amount en 10.

    Esto significa que el envío pesa 10 kilogramos.

  3. En el ejemplo de loadLimits, establece la propiedad maxLoad en 100.

    Esto significa que el vehículo puede transportar un máximo de 100 kilogramos.

Recuerda que no hay un conjunto de tipos predefinidos. En este ejemplo, podrías cambiar los kilogramos a puntos o a mediciones lineales en lugar de peso. 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 con loadDemands en un envío y loadLimits en un vehículo:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 00.000000,
              "longitude": 00.000000
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 00.000000,
              "longitude": 00.000000
            }
          }
        ],
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 00.000000,
          "longitude": 00.000000
        },
        "endLocation": {
          "latitude": 00.000000,
          "longitude": 00.000000
        },
        "costPerKilometer": 1.0,
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

Recuerda que 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 que se deben tener en cuenta cuando se optimizan las rutas de tu flota.