Demandas e limites de carga

A propriedade loadDemands é definida em ShipmentModel.shipments.Shipment, e a propriedade loadLimits em ShipmentModel.vehicles.Vehicle.

As demandas e os limites de carga são um tipo de restrição que pode ser usado para gerenciar a capacidade. Eles especificam a capacidade necessária de um envio e a capacidade máxima de um veículo, o que permite otimizar as alocações de rota com base nessas restrições.

As demandas e os limites de carga podem ajudar a alcançar objetivos como:

  • Evitar a sobrecarga de veículos.
  • Monitore como as cargas dos veículos mudam à medida que os envios são coletados e entregues.
  • Restringir o número de vezes que um veículo pode visitar um local específico.

As demandas e os limites de carga são especificados nestas propriedades:

  • loadDemands especifica a quantidade de capacidade necessária para um envio específico.
  • loadLimits especifica a capacidade máxima de um determinado veículo.

Estrutura

Conforme mostrado no diagrama, as demandas e os limites de carga são estruturados da seguinte maneira:

Propriedades

Esta seção descreve as propriedades para limites e demandas de carga, que são os seguintes:

  • Tipo de carga:uma propriedade compartilhada entre as demandas e os limites de carga.
  • Load e LoadLimit:propriedades exclusivas presentes nas demandas de carregamento e nos limites de carregamento, respectivamente.

Tipo de carga

Os tipos de carga são chaves de string que identificam o tipo de demanda de carga de um envio e os limites de carga de um veículo. Os tipos de carga têm estas características importantes:

  • Definidos pelo usuário:os tipos de carga são definidos por você. Não há variáveis predefinidas do sistema para tipos de carga.
  • Compartilhado:os tipos de carga são compartilhados entre remessas e veículos. Isso significa que uma remessa vai consumir a capacidade de um veículo até o limite apenas quando os tipos de carga corresponderem. Se um veículo não especificar nenhum limite de carga para um tipo específico, ele poderá transportar uma quantidade ilimitada desse tipo de carga.

As chaves de string que representam os tipos de carga usam a sintaxe do tipo de mapa de Protocol Buffers. Para evitar problemas, essas chaves de string não podem ser nulas. Ao nomear um tipo de carga, é recomendável usar identificadores que descrevam o tipo da carga e a unidade dela. Por exemplo: weightKg, volume_gallons, palletcount ou frequencyDaily.

Load e LoadLimit

Os objetos Load e LoadLimit contêm propriedades específicas para definir os requisitos de capacidade de remessas e veículos. A tabela a seguir descreve essas propriedades:

Objeto Com filhos Propriedade Property type Descrição da propriedade
Load loadDemands amount string (formato int64) Define o requisito de capacidade do envio no tipo especificado.
LoadLimit loadLimits maxLoad string (formato int64) Define a capacidade de carga máxima do veículo no tipo especificado.

Exemplos

O exemplo a seguir mostra a estrutura de uma demanda de carga em que você pode definir o tipo loadDemands como uma string e a propriedade amount como uma string no formato int64:

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

O exemplo a seguir mostra a estrutura mais básica de um limite de carga, em que você pode definir o tipo loadLimits como uma string e a propriedade maxLoad como uma string no formato int64:

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

Faça um teste

Use os exemplos de código acima para criar um cenário fictício. Nesse cenário, você tem um envio de 10 kg e um veículo que pode transportar 100 kg:

  1. No exemplo loadDemands, defina o tipo de carga como weightKg.

    Depois disso, o tipo de carga no exemplo loadLimits também será preenchido, compartilhando o tipo de carga. Os tipos de loadDemands e loadLimits precisam ser iguais para que a remessa consuma os limites do veículo.

  2. No mesmo exemplo loadDemands, defina a propriedade amount como 10.

    Isso significa que o pacote pesa 10 kg.

  3. No exemplo loadLimits, defina a propriedade maxLoad como 100.

    Isso significa que o veículo pode transportar no máximo 100 kg.

Não há conjuntos de tipos predefinidos. Neste exemplo, você pode mudar de quilogramas para pontos ou para medidas lineares em vez de peso. Essa flexibilidade permite que você adapte as demandas de carga e os limites às suas necessidades específicas.

Exemplo de solicitação

O exemplo a seguir mostra a estrutura de uma solicitação optimizeTours básica com loadDemands em um envio e loadLimits em um veí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"
          }
        }
      }
    ]
  }
}

Lembre-se de que um frete pode ter várias demandas de carga e um veículo pode ter vários limites de carga, permitindo que você forneça restrições complexas para considerar ao otimizar as rotas da frota.