A Planning API é responsável por retornar a ordenação dos pontos logísticos da forma mais otimizada possível, mas podemos utilizá-la com a Trip API para obter também a melhor rota entre os pontos.
Neste exemplo, temos uma requisição para Planning API com integração a Trip API para resolver um problema logístico de 2 veículos e 10 operações, partindo do centro de distribuição.
Parâmetros utilizados:
Planning:
"optimizationProfile": "BRAZIL46"
. Para essa simulação, foi usado o perfil de otimização BRAZIL46. Para os tipos disponíveis, verifique em optimizationProfile.
"tripsProfile": "MAPLINKBR"
. Utilizamos o perfil que contém o mapa mais atualizado e configurado para utilizar o modo de cálculo para utilizar vias mais rápidas.
"startDate": "1620298800000"
. Horário de início de referência para o cálculo da otimização logística.
"legislationProfiles"
: Parâmetro com o nome do perfil que se aplica ao tempo de direção, duração de um dia de trabalho ou intervalo. Neste caso não há nenhuma característica definida.
"logisticConstraints"
: Restrições logísticas usadas para determinar o tempo fixo de carregamento e descarregamento da carga. Nesse exemplo, foi usado 1800 segundos (30 minutos) para o tempo de carregamento do caminhão e 300 segundos (5 minutos) para o descarregamento na entrega.
"products"
: Nome para referenciar o produto.
"sites"
: Localização onde ocorrerão as atividades de entregas, com definição do nome e a restrição logística com o tempo de entrega.
"depots"
: Localização do centro de distribuição, com definição do nome e a restrição logística com o tempo de carregamento do caminhão.
"vehicleTypes"
: Neste parâmetro especificamos a capacidade de carga dos veículos da frota, como volume e peso máximos e o tamanho dentro de um intervalo de 1 a 9, e o nome da tipologia.
"vehicles"
: Foram especificados os veículos que estão disponíveis para executar a rota. Se define também o período de trabalho e o perfil de legislação aplicável ao motorista. Foi definido que os veículos sairão e retornarão ao centro de distribuição.
"operations"
: São as características das operações de entregas, definindo o local, peso e volume, produto, tipo de atividade, centro de distribuição da origem do produto e o horário que o cliente irá receber.
Trip:
"calculationMode"
: Foi definido que o módulo de cálculo da rota seria o mais rápido (“THE FASTEST”).
"crossedBorders"
: Indica o retorno das cidades que a rota cruzará.
"toll"
: Indica que a rota deverá informar o cálculo do pedágio.
"freight"
: Foram definidos os parâmetros que retornam os cálculos referente ao Piso Mínimo do Frete.
Request:
{ "optimizationProfile": "BRAZIL46", "tripsProfile": "MAPLINKBR", "startDate": 1620298800000, "legislationProfiles": [ { "name": "DEFAULT" } ], "logisticConstraints": [ { "name": "P1Pickup", "siteLoadingFixedTime": 1800 }, { "name": "P1Delivery", "siteUnloadingFixedTime": 300 } ], "products": [ { "name": "DEFAULT" } ], "sites": [ { "name": "Cliente1", "coordinates": { "latitude": -23.507608, "longitude": -46.587145 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente2", "coordinates": { "latitude": -23.621059, "longitude": -46.756193 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente3", "coordinates": { "latitude": -23.44935, "longitude": -46.588822 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente4", "coordinates": { "latitude": -23.751801, "longitude": -46.698468 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente5", "coordinates": { "latitude": -23.520565, "longitude": -46.508478 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente6", "coordinates": { "latitude": -23.506592, "longitude": -46.524707 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente7", "coordinates": { "latitude": -23.646993, "longitude": -46.779077 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente8", "coordinates": { "latitude": -23.373816, "longitude": -46.57777 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente9", "coordinates": { "latitude": -23.476158, "longitude": -46.640241 }, "logisticConstraints": "P1Delivery" }, { "name": "Cliente10", "coordinates": { "latitude": -23.761565, "longitude": -46.655746 }, "logisticConstraints": "P1Delivery" } ], "depots": [ { "name": "CD", "coordinates": { "latitude": -23.503939, "longitude": -46.498419 }, "logisticConstraints": "P1Pickup" } ], "vehicleTypes": [ { "name": "3/4", "maxWeight": 15000, "maxVolume": 30, "size": 1 } ], "vehicles": [ { "name": "3/4_1", "vehicleType": "3/4", "legislationProfile": "DEFAULT", "availablePeriods": [ { "departureSite": "CD", "arrivalSite": "CD", "maxRoutesNumber": 1, "timeWindow": { "start": 1620298800000, "end": 1620334800000 } } ] }, { "name": "3/4_2", "vehicleType": "3/4", "legislationProfile": "DEFAULT", "availablePeriods": [ { "departureSite": "CD", "arrivalSite": "CD", "maxRoutesNumber": 1, "timeWindow": { "start": 1620298800000, "end": 1620334800000 } } ] } ], "operations": [ { "id": "P1", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente1", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P2", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente2", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P3", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente3", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P4", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente4", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P5", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente4", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P6", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente6", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P7", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente7", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P8", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente8", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P9", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente9", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] }, { "id": "P10", "weight": 2, "volume": 2, "product": "DEFAULT", "type": "DELIVERY", "depotSite": "CD", "customerSite": "Cliente10", "customerTimeWindows": [ { "start": 1620302400000, "end": 1620309600000 } ] } ], "trip": { "calculationMode": "THE_FASTEST", "crossedBorders": { "level": "CITY" }, "toll": { "vehicleType": "TRUCK_WITH_TWO_DOUBLE_AXLES" }, "freight": { "operationType": [ "A", "D" ], "goodsType": [ "GRANEL_LIQUIDO", "GRANEL_SOLIDO" ], "axis": [ "2", "4" ], "roundTrip": false, "backEmpty": false, "otherCosts": [ { "name": "ICMS", "type": "PERCENT", "value": "5" }, { "name": "Lucro", "type": "PERCENT", "value": "20" }, { "name": "TaxaFixa", "type": "FIXED", "value": "500" } ], "date": "2021-10-02" } } }
Solução do problema logístico
A resposta da API retornará no formato json o melhor sequenciamento das operações de entrega para cada veículo. A resposta completa pode ser obtida no arquivo em anexo.
A resposta retorna os seguintes indicadores globais:
Indicador | Resultado |
Tempo total de serviço | 01:45:00 |
Tempo total de entrega | 00:45:00 |
Tempo total do dia de trabalho | 06:16:18 |
Tempo total de trabalho noturno | 00:00:00 |
Tempo total de descarregamento | 00:00:00 |
Tempo total de trabalho | 06:16:18 |
Tempo total de coleta | 00:00:00 |
Número de janelas de horário | 2 |
Tempo total de condução | 04:31:18 |
Tempo total de carregamento | 01:00:00 |
Tempo total | 06:16:18 |
Distância total | 191.61 km |
Taxa de ocupação média em Volume | 33.33 |
Taxa de ocupação média em Peso | 0.07 |
Número de rejeições | 0 |
Tempo total de espera | 00:00:00 |
Tempo total de descanso | 00:00:00 |
Número de rotas | 2 |
A resposta também retorna a sequência temporal de atividades de cada veículo. Esse é um exemplo do veículo de nome “3/4_1”:
VEÍCULO | ATIVIDADE | ID DO LOCAL DE PARTIDA | ID DO LOCAL DE RETORNO | DISTÂNCIA | DURAÇÃO NOMINAL | JANELA DE HORÁRIO INICIAL | JANELA DE HORÁRIO FINAL |
3/4_1 | ROUTE_START | CD | 06/05/21 08:00 | 06/05/21 08:00 | |||
3/4_1 | LOADING | CD | 06/05/21 08:00 | 06/05/21 08:30 | |||
3/4_1 | DRIVING | CD | Cliente2 | 37.96 km | 00:50:38 | 06/05/21 08:30 | 06/05/21 09:20 |
3/4_1 | DELIVERY | Cliente2 | 06/05/21 09:20 | 06/05/21 09:25 | |||
3/4_1 | DRIVING | Cliente2 | Cliente7 | 4.77 km | 00:07:27 | 06/05/21 09:25 | 06/05/21 09:33 |
3/4_1 | DELIVERY | Cliente7 | 06/05/21 09:33 | 06/05/21 09:38 | |||
3/4_1 | DRIVING | Cliente7 | Cliente10 | 26.91 km | 00:35:36 | 06/05/21 09:38 | 06/05/21 10:13 |
3/4_1 | DELIVERY | Cliente10 | 06/05/21 10:13 | 06/05/21 10:18 | |||
3/4_1 | DRIVING | Cliente10 | Cliente4 | 5.47 km | 00:10:25 | 06/05/21 10:18 | 06/05/21 10:29 |
3/4_1 | DELIVERY | Cliente4 | 06/05/21 10:29 | 06/05/21 10:34 | |||
3/4_1 | DRIVING | Cliente4 | CD | 45.25 km | 01:01:02 | 06/05/21 10:34 | 06/05/21 11:35 |
3/4_1 | ROUTE_END | CD | 06/05/21 11:35 | 06/05/21 11:35 |