Demandas e limites de carga

A propriedade "loadDemands" é definida em "ShipmentModel.shipments.Shipment", e "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. Essa restrição especifica a capacidade necessária de um envio e a capacidade máxima de um veículo, o que permite otimizar as atribuições de rota com base nessas restrições.

As demandas e os limites de carga podem oferecer suporte a objetivos como:

  • Evitar a sobrecarga de veículos.
  • Monitorar como as cargas dos veículos mudam à medida que os envios são coletados e entregues.
  • Priorizar o pareamento de veículos pesados com envios de carga pesada.

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

  • loadDemands especifica a quantidade de capacidade que um envio específico exige.
  • loadLimits especifica a capacidade máxima de um veículo.

Estrutura

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

Lista de verificação de fundamentos

A lista de verificação a seguir descreve o conhecimento essencial que evita possíveis erros relacionados à carga. Essa lista pode ajudar você a validar sua solicitação e solucionar problemas na resposta.

Propriedades

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

  • Tipo de carga:uma propriedade compartilhada entre demandas e limites de carga.
  • Load e LoadLimit: propriedades exclusivas presentes em demandas e limites de carga , respectivamente.

Tipo de carga

Um tipo de carga é uma chave de string que você aplica igualmente a envios e veículos. Um único tipo de carga se aplica à demanda de carga de um envio e ao limite de carga de um veículo.

Os tipos de carga usam a sintaxe do tipo de mapa de buffers de protocolo. Ao nomear um tipo de carga, use identificadores que descrevam o tipo de 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 envios e veículos. A tabela a seguir descreve essas propriedades:

Objeto Com filhos Propriedade Tipo de propriedade 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 máxima de carga do veículo no tipo especificado.

Exemplos

Esta seção aborda três tipos de exemplos:

Amostras de código

O exemplo a seguir mostra a estrutura de uma demanda de carga em que é possível definir o loadDemands tipo como uma string e a amount propriedade como uma string no formato int64:

{
  "model": {
    "shipments": [ ...
      {
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [ ...
    ]
  }
}

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:

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

Exemplo de cenário

Esta seção descreve um cenário em que você tem uma creche para cães e está otimizando um trajeto para transportar alguns cães em um veículo com um número limitado de caixas.

Cada envio representa uma parada em que você pega um determinado número de cães. Neste exemplo, cada envio tem um local de coleta diferente, que é a casa dos cães que você cuida, e todos os envios têm o mesmo local de entrega, o prédio da sua creche.

Para este exemplo, os valores de propriedade na sua solicitação são os seguintes:

Com filhos Propriedade Tipo Valor Cenário
loadDemands tipo de carga string dogUnit Define o tipo de carga para o envio. Este exemplo usa dogUnit, em que cada dogUnit representa um cão.
loadDemands amount número 1º envio: 1
2º envio: 3
Especifica a quantidade do tipo de carga definido. Neste exemplo, você está definindo dois envios. No primeiro, você está pegando um cão e, no segundo, três cães.
loadLimits tipo de carga string dogUnit Define o tipo de limite de carga aplicado ao veículo. Isso precisa corresponder ao tipo de carga do envio para que o limite seja relevante.
loadLimits maxLoad número 6 Especifica a quantidade máxima do tipo de carga que o veículo pode transportar. Neste exemplo, você tem apenas um veículo com uma capacidade máxima de 6 dogUnit, em que cada dogUnit representa uma caixa de cães.

O diagrama a seguir ilustra os limites de carga do veículo, as demandas de carga de cada envio e como cada envio consome os limites de carga do veículo:

O veículo começa o trajeto com seis espaços vazios que representam os limites de carga. A primeira remessa exige espaço para um cachorro, e a segunda, para três. O estado final do veículo é ter quatro das seis vagas ocupadas, com duas vagas vazias restantes.

Neste exemplo, as demandas de carga de cada envio e os limites de carga do veículo têm os seguintes efeitos:

  • O otimizador não terá problemas para gerar um trajeto para o veículo transportar os cães, já que o veículo pode transportar até 6 cães, e você só está pegando 4 cães.

  • Ter um limite de carga de 6 dogUnit no veículo também significa que você só pode transportar mais dois cães nesse veículo específico.

  • Se o número de cães fosse maior que o limite de carga, o otimizador ignoraria uma das coletas ou a atribuiria a um veículo adequado.

Lembre-se de que não há um conjunto de tipos predefinidos. Neste exemplo, você pode mudar o tipo de carga de unidades de cães para unidades de peso para limitar o peso dos cães ou mudar para medidas lineares para limitar a largura ou a altura deles. Essa flexibilidade permite adaptar as demandas e os limites de carga às suas necessidades específicas.

Exemplo de solicitação

O exemplo a seguir mostra a estrutura de uma solicitação optimizeTours básica que incorpora os valores do cenário de exemplo:

{
  "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
      }
    ]
  }
}

Lembre-se de que, ao contrário do caso deste exemplo, um envio 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 a serem consideradas ao otimizar os trajetos da sua frota.

Limites de carga flexíveis

É possível definir limites de carga como restrições flexíveis adicionando softMaxLoad e costPerUnitAboveSoftMax aos loadLimits de um veículo. Isso permite que o otimizador exceda a carga máxima do veículo a um custo, priorizando a conclusão do trajeto em vez da adesão estrita ao limite de carga.

É possível usar maxLoad e softMaxLoad juntos para definir um limite de carga rígido e um flexível. Nesse caso, softMaxLoad define a carga que pode ser excedida, e maxLoad define um limite rígido que não pode ser excedido. Quando ambos são usados, maxLoad precisa ser maior que softMaxLoad.

Propriedades

A tabela a seguir descreve as propriedades de restrição flexível para demandas e limites de carga.

Com filhos Nome da propriedade Tipo de propriedade Descrição da propriedade
loadLimits softMaxLoad string (formato int64) A carga máxima preferida para um veículo. Se a carga do veículo exceder esse valor, um custo será incorrido.
loadLimits costPerUnitAboveSoftMax número O custo por unidade de carga acima do softMaxLoad. Esse campo é obrigatório ao usar softMaxLoad. Consulte o conceito-chave do modelo de custo para saber mais sobre os custos.

Exemplo de código

O exemplo a seguir mostra a estrutura das propriedades de restrição flexível de loadLimits:

{
   "loadLimits": {
        "LOAD_TYPE": {
          "softMaxLoad": "LOAD_AMOUNT",
          "costPerUnitAboveSoftMax": COST_PER_UNIT
        }
      }
}