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 uma remessa 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 apoiar objetivos como:
- Evite que os veículos fiquem sobrecarregados.
- Monitore como as cargas dos veículos mudam conforme as remessas são coletadas e entregues.
- Priorize o pareamento de veículos pesados com remessas de carga pesada.
As demandas e os limites de carga são especificados nestas propriedades:
loadDemandsespecifica a capacidade que uma determinada remessa requer.loadLimitsespecifica a capacidade máxima de um determinado veículo.
Estrutura
Como mostrado no diagrama, as demandas e os limites de carga são estruturados da seguinte maneira:
loadDemandsé uma propriedade deShipment. UmShipmentpode ter várias demandas de carga.loadLimitsé uma propriedade deVehicle. UmVehiclepode ter vários limites de carga.
Lista de verificação do Essentials
A lista de verificação a seguir descreve o conhecimento essencial que evita possíveis erros relacionados ao carregamento. Essa lista pode ajudar você a validar sua solicitação e resolver problemas com a resposta.
Propriedades
Nesta seção, descrevemos as propriedades de demandas e limites de carga, que são as seguintes:
- Tipo de carga: uma propriedade compartilhada entre as demandas e os limites de carga.
LoadeLoadLimit: propriedades exclusivas presentes em demandas de carga e limites de carga, respectivamente.
Tipo de carga
Um tipo de carga é uma chave de string que você aplica igualmente a remessas e veículos. Um único tipo de carga se aplica à demanda de carga de uma remessa, bem como ao limite de carga de um veículo.
Os tipos de carregamento usam a sintaxe de tipo de mapa de buffers de protocolo. Ao nomear um tipo de carga, use identificadores que descrevam o tipo de carga e a unidade. 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 | Tipo de propriedade | Descrição da propriedade |
|---|---|---|---|---|
Load |
loadDemands |
amount |
string (formato int64) | Define o requisito de capacidade da remessa 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:
- Exemplos de código que ilustram a estrutura das propriedades de demandas e limites de carga.
- Um cenário de exemplo que mostra uma maneira de usar demandas e limites de carga em uma solicitação de API.
- Um exemplo de solicitação que inclui os valores definidos no cenário de exemplo.
Amostras de código
O exemplo a seguir mostra a estrutura de uma demanda de carga em que é possível definir o tipo
loadDemands como uma string e a propriedade amount 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 é possível 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
Nesta seção, descrevemos um cenário em que você tem uma creche para cachorros e está otimizando uma rota para transportar alguns cachorros em um veículo com um número limitado de caixas.
Cada remessa representa uma parada em que você pega um determinado número de cachorros. Neste exemplo, cada remessa tem um local de retirada diferente, que é a casa dos cães de que você cuida, e todas as remessas têm o mesmo local de entrega, o prédio da creche.
Neste exemplo, os valores de propriedade na solicitação são os seguintes:
| Com filhos | Propriedade | Tipo | Valor | Cenário |
|---|---|---|---|---|
loadDemands |
tipo de carga | string | dogUnit |
Define o tipo de carga da remessa. Este exemplo usa dogUnit, em que cada dogUnit representa um cachorro. |
loadDemands |
amount |
número | 1º envio: 12º envio: 3 |
Especifica a quantidade do tipo de carga definido. Neste exemplo, você está definindo duas remessas: na primeira, você vai buscar um cachorro, e na segunda, três. |
loadLimits |
tipo de carga | string | dogUnit |
Define o tipo de limite de carga aplicado ao veículo. Ele precisa corresponder ao tipo de carga da remessa 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 capacidade máxima de 6 dogUnit, em que cada dogUnit representa uma caixa de transporte para cães. |
O diagrama a seguir ilustra os limites de carga do veículo, as demandas de carga de cada remessa e como cada remessa consome os limites de carga do veículo:

Neste exemplo, as demandas de carga de cada remessa 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 ele pode transportar até seis cães, e você só vai buscar quatro.
Com um limite de carga de 6
dogUnit, você só pode transportar mais dois cachorros nesse veículo específico.Se o número de cães fosse maior que o limite de carga, o otimizador pularia 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, é possível mudar o tipo de carga de unidades de cães para unidades de peso para limitar o peso dos cães ou para medidas lineares para limitar a largura ou a altura deles. Essa flexibilidade permite que você adapte 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
incorporando 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, uma remessa 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 as rotas da sua frota.
Limites de carga flexíveis
É possível definir limites de carga como restrições flexíveis adicionando softMaxLoad e
costPerUnitAboveSoftMax ao 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 da rota
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 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 preferencial de um veículo. Se a carga do veículo exceder esse valor, um custo será gerado. |
loadLimits |
costPerUnitAboveSoftMax |
número | O custo por unidade de carga acima de softMaxLoad. Este campo é obrigatório ao usar softMaxLoad. Consulte o conceito principal 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 } } }