As demandas e os limites de carga são um tipo de restrição que você pode usar para gerenciar a capacidade. Essa restrição especifica a capacidade necessária de um envio e a capacidade máxima de um veículo, permitindo otimizar as atribuições de rota com base nessas restrições.
As demandas e os limites de carga podem ajudar em objetivos como:
- Evite sobrecarregar os veículos.
- Monitore como as cargas dos veículos mudam à medida que as remessas são coletadas e entregues.
- Priorize o pareamento de veículos pesados com cargas pesadas.
As demandas e os limites de carga são especificados nestas propriedades:
loadDemands
especifica a quantidade de capacidade necessária para um determinado envio.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:
loadDemands
é uma propriedade deShipment
. UmShipment
pode ter várias demandas de carga.loadLimits
é uma propriedade deVehicle
. UmVehicle
pode 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 na resposta.
Propriedades
Esta seção descreve as propriedades para demandas e limites de carga, que são os seguintes:
- Tipo de carga:uma propriedade compartilhada entre demandas e limites de carga.
Load
eLoadLimit
:propriedades exclusivas presentes nas demandas e nos 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 um frete 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 e a unidade da carga. Por exemplo: weightKg, volume_gallons, palletcount ou frequencyDaily.
Load
e LoadLimit
Os objetos Load
e LoadLimit
contêm propriedades específicas para definir requisitos de capacidade para 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 a exigência 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:
- Exemplos de código que ilustram a estrutura das propriedades de demandas e limites de carga.
- Um exemplo de cenário 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 você pode definir o tipo loadDemands
e a propriedade amount
como strings 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 cachorros e está otimizando uma rota para transportar alguns cachorros em um veículo com uma quantidade limitada de caixas.
Cada envio representa uma parada em que você pega um certo número de cachorros. Neste exemplo, cada envio tem um local de retirada diferente, que é a casa dos cachorros que você cuida, e todos os envios têm o mesmo local de entrega, o prédio da sua creche para cachorros.
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 do frete. Este exemplo usa dogUnit , em que cada dogUnit representa um cachorro. |
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 cachorro, e no segundo, três. |
loadLimits |
tipo de carga | string | dogUnit |
Define o tipo de limite de carga aplicado ao veículo. Esse precisa corresponder ao tipo de carga do frete 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 cachorros, já que ele pode levar até seis animais, e você só vai buscar quatro.
Ter um limite de carga de 6
dogUnit
no veículo também significa que você só pode transportar mais dois cachorros nesse veículo específico.Se o número de cachorros 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, você pode mudar o tipo de carga de unidades de cachorro para unidades de peso para limitar o peso dos cachorros 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 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 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
no 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 os dois 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 | Property type | 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, será cobrado um custo. |
loadLimits |
costPerUnitAboveSoftMax |
número | O custo por unidade de carga acima do softMaxLoad . Este campo é obrigatório ao usar softMaxLoad . Consulte o conceito-chave 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 } } }