Exemplo de utilização da Planning API com um problema logístico simples com um único veículo.
Neste exemplo, temos uma requisição para Planning API resolver um problema logístico de 1 veículo e 2 operações, partindo do centro de distribuição.
Parâmetros utilizados
"optimizationProfile": "BRAZIL46". Para essa simulação, foi usado o perfil de otimização BRAZIL46, o mais indicado para problemas mais simples.
"tripsProfile": "MAPLINK". 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": 1671516600000. Horário de início de referência para o cálculo da otimização logística (Terça-feira, 20 de dezembro de 2022 06:10:00).
"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 900 segundos (15 minutos) para o tempo de carregamento do caminhão e 600 segundos (10 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 em 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. Neste exemplo, um veículo do tipo VUC. Se define também o período de trabalho e o perfil de legislação aplicável ao motorista. Foi definido que o veículo irá sair e retornar para o 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. Neste exemplo, são 2 operações.
Requisição
{
"optimizationProfile": "BRAZIL46",
"tripsProfile": "MAPLINK",
"startDate": 1671516600000,
"legislationProfiles": [
{
"name": "DEFAULT"
}
],
"logisticConstraints": [
{
"name": "P1Pickup",
"siteLoadingFixedTime": 900
},
{
"name": "P1Delivery",
"siteUnloadingFixedTime": 600
}
],
"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"
}
],
"depots": [
{
"name": "CD",
"coordinates": {
"latitude": -23.503939,
"longitude": -46.498419
},
"logisticConstraints": "P1Pickup"
}
],
"vehicleTypes": [
{
"name": "VUC",
"maxVolume": 20,
"maxWeight": 1200,
"size": 1
}
],
"vehicles": [
{
"name": "VUC_1",
"vehicleType": "VUC",
"legislationProfile": "DEFAULT",
"availablePeriods": [
{
"departureSite": "CD",
"arrivalSite": "CD",
"timeWindow": {
"start": 1671519600000,
"end": 1671562800000
}
}
]
}
],
"operations": [
{
"id": "P1",
"weight": 100,
"volume": 2,
"product": "DEFAULT",
"type": "DELIVERY",
"depotSite": "CD",
"customerSite": "Cliente1",
"customerTimeWindows": [
{
"start": 1671523200000,
"end": 1671537600000
}
]
},
{
"id": "P2",
"weight": 250,
"volume": 5,
"product": "DEFAULT",
"type": "DELIVERY",
"depotSite": "CD",
"customerSite": "Cliente2",
"customerTimeWindows": [
{
"start": 1671523200000,
"end": 1671537600000
}
]
}
]
}
Solução do problema logístico
A resposta da API retornará no formato JSON com o melhor sequenciamento das operações de entrega para cada veículo.
A resposta retorna os seguintes indicadores globais:
Indicador |
Resultado |
Tempo total de serviço: |
00:35:00 |
Tempo total de entrega: |
00:20:00 |
Tempo total do dia de trabalho: |
02:24:07 |
Tempo total de trabalho noturno: |
00:00:00 |
Tempo total de descarregamento: |
00:00:00 |
Tempo total de trabalho: |
02:24:07 |
Tempo total de coleta: |
00:00:00 |
Número de janelas de horário: |
1 |
Tempo total de condução: |
01:49:07 |
Tempo total de carregamento: |
00:15:00 |
Tempo total: |
02:24:07 |
Distância total: |
75.03 km |
Taxa de ocupação média em Volume: |
35 |
Taxa de ocupação média em Peso: |
29.17 |
Número de rejeições: |
0 |
Tempo total de espera: |
00:00:00 |
Tempo total de descanso: |
00:00:00 |
Número de rotas: |
1 |
Abaixo a reposta completa. Repare que a rota apresentará a sequência temporal das atividades realizada pelo veículo:
{
"id": "62a3425f368c8a6c62d9397a",
"clientId": "915xlwDleOGUKQEAOPnvO6nz1ql9ucuz",
"vehicleRoutes": [
{
"routes": [
{
"id": "NewRoute_1_1",
"activities": [
{
"activity": "ROUTE_START",
"timeWindow": {
"start": 1671520968000,
"end": 1671520968000
},
"type": "SITE",
"site": "CD",
"operations": []
},
{
"activity": "LOADING",
"timeWindow": {
"start": 1671520968000,
"end": 1671521868000
},
"type": "SITE",
"site": "CD",
"fixedTimeSite": 900,
"operations": [
"P2",
"P1"
]
},
{
"activity": "DRIVING",
"timeWindow": {
"start": 1671521868000,
"end": 1671523200000
},
"type": "DRIVING",
"operations": [],
"arrivalSite": "Cliente1",
"departureSite": "CD",
"distance": 13411,
"nominalDuration": 1332
},
{
"activity": "DELIVERY",
"timeWindow": {
"start": 1671523200000,
"end": 1671523800000
},
"type": "SITE",
"site": "Cliente1",
"fixedTimeSite": 600,
"operations": [
"P1"
]
},
{
"activity": "DRIVING",
"timeWindow": {
"start": 1671523800000,
"end": 1671526134000
},
"type": "DRIVING",
"operations": [],
"arrivalSite": "Cliente2",
"departureSite": "Cliente1",
"distance": 26969,
"nominalDuration": 2334
},
{
"activity": "DELIVERY",
"timeWindow": {
"start": 1671526134000,
"end": 1671526734000
},
"type": "SITE",
"site": "Cliente2",
"fixedTimeSite": 600,
"operations": [
"P2"
]
},
{
"activity": "DRIVING",
"timeWindow": {
"start": 1671526734000,
"end": 1671529615000
},
"type": "DRIVING",
"operations": [],
"arrivalSite": "CD",
"departureSite": "Cliente2",
"distance": 34647,
"nominalDuration": 2881
},
{
"activity": "ROUTE_END",
"timeWindow": {
"start": 1671529615000,
"end": 1671529615000
},
"type": "SITE",
"site": "CD",
"operations": []
}
]
}
],
"vehicle": "VUC_1",
"period": {
"timeWindow": {
"start": 1671519600000,
"end": 1671562800000
},
"departureSite": "CD",
"arrivalSite": "CD"
}
}
],
"indicators": {
"totalServiceTime": 2100,
"totalDeliveringTime": 1200,
"dayWorkingTotalTime": 8647,
"nightWorkingTotalTime": 0,
"totalUnloadingTime": 0,
"totalWorkingTime": 8647,
"totalCollectingTime": 0,
"timeWindowNumber": 1,
"totalDrivingTime": 6547,
"totalLoadingTime": 900,
"totalTime": 8647,
"totalDistance": 75027,
"averageOccupancyRateVolume": 35.0,
"averageOccupancyRateWeight": 29.17,
"rejectOperationsNumber": 0,
"totalWaitingTime": 0,
"totalRestTime": 0,
"routesNumber": 1
}
}