Planning

Estrutura de resposta

Neste artigo, apresentamos a estrutura da resposta da Planning API a partir de um exemplo: a otimização de uma rota de entregas com um centro de distribuição (CD), dois clientes (Cliente1 e Cliente2) e um veículo do tipo VUC. O veículo sai do CD, carrega as duas operações, entrega primeiro no Cliente1, depois no Cliente2, e retorna ao CD.

Mais detalhes do exemplo em Exemplo 1 – Operações com um único veículo,

A resposta traz a sequência de atividades de cada rota (carregamento, deslocamentos e entregas), com janelas de tempo, distâncias e durações, além de indicadores consolidados da solução.

Requisição

A requisição abaixo foi utilizada para gerar a resposta deste exemplo. Os campos da requisição estão detalhados em um artigo específico.

{
    "optimizationProfile": "BRAZIL46",
    "startDate": 1513750219000,
    "legislationProfiles": [
        {
            "name": "DEFAULT"
        }
    ],
    "logisticConstraints": [
        {
            "name": "DEFAULT",
            "siteLoadingFixedTime": 900,
            "siteUnloadingFixedTime": 600
        }
    ],
    "products": [
        {
            "name": "DEFAULT"
        }
    ],
    "sites": [
        {
            "name": "Cliente1",
            "coordinates": {
                "latitude": -23.507608,
                "longitude": -46.587145
            },
            "logisticConstraints": "DEFAULT"
        },
        {
            "name": "Cliente2",
            "coordinates": {
                "latitude": -23.621059,
                "longitude": -46.756193
            },
            "logisticConstraints": "DEFAULT"
        }
    ],
    "depots": [
        {
            "name": "CD",
            "coordinates": {
                "latitude": -23.503939,
                "longitude": -46.498419
            },
            "logisticConstraints": "DEFAULT"
        }
    ],
    "vehicleTypes": [
        {
            "name": "VUC",
            "maxVolume": 20,
            "maxWeight": 1200,
            "size": 1
        }
    ],
    "vehicles": [
        {
            "name": "VUC_1",
            "vehicleType": "VUC",
            "legislationProfile": "DEFAULT",
            "availablePeriods": [
                {
                    "departureSite": "CD",
                    "arrivalSite": "CD",
                    "timeWindow": {
                        "start": 1513753200000,
                        "end": 1513796400000
                    }
                }
            ]
        }
    ],
    "operations": [
        {
            "id": "P1",
            "weight": 100,
            "volume": 2,
            "product": "DEFAULT",
            "type": "DELIVERY",
            "depotSite": "CD",
            "customerSite": "Cliente1",
            "customerTimeWindows": [
                {
                    "start": 1513756800000,
                    "end": 1513771200000
                }
            ]
        },
        {
            "id": "P2",
            "weight": 250,
            "volume": 5,
            "product": "DEFAULT",
            "type": "DELIVERY",
            "depotSite": "CD",
            "customerSite": "Cliente2",
            "customerTimeWindows": [
                {
                    "start": 1513756800000,
                    "end": 1513771200000
                }
            ]
        }
    ]
}

Resposta

A resposta é composta pelos campos abaixo. Os campos vehicleRoutes e indicators são detalhados nas próximas seções. Alguns campos só são retornados em situações específicas, como quando há operações rejeitadas ou quando determinados parâmetros são enviados na requisição. Eles estão descritos nas seções “Campos retornados somente…”.

  • id – Identificador único da solução gerada;
  • clientId – Identificador do cliente que realizou a requisição;
  • vehicleRoutes – Lista com as rotas calculadas para cada veículo;
  • indicators – Indicadores consolidados da solução.

Campo vehicleRoutes

Cada item da lista representa um veículo e as rotas realizadas por ele no período disponível.

  • vehicle – Nome do veículo;
  • period – Período de disponibilidade do veículo utilizado na solução:
    • timeWindow – Janela de tempo do período, com start e end (timestamp em milissegundos);
    • departureSite – Local de saída do veículo;
    • arrivalSite – Local de chegada do veículo;
    • maxRoutesNumber – Quantidade máxima de rotas do veículo no período. Retornado somente quando informado na requisição.
  • routes – Lista de rotas do veículo:
    • id – Identificador da rota;
    • activities – Lista ordenada das atividades da rota:
      • activity – Tipo da atividade. Os valores possíveis são:
        • ROUTE_START – Início da rota;
        • LOADING – Carregamento no depósito;
        • DRIVING – Deslocamento entre dois locais;
        • DELIVERY – Entrega no cliente;
        • COLLECTION – Coleta no cliente;
        • UNLOADING – Descarregamento;
        • WAITING – Espera;
        • PAUSE – Pausa;
        • REST – Descanso;
        • ROUTE_END – Fim da rota.
      • type – Classificação da atividade, sendo SITE para atividades realizadas em um local e DRIVING para deslocamentos;
      • timeWindow – Janela de tempo em que a atividade ocorre, com start e end (timestamp em milissegundos);
      • operations – Lista com os id das operações tratadas na atividade. Fica vazia em atividades como ROUTE_START, DRIVING e ROUTE_END;
      • site – Local onde a atividade é realizada. Retornado nas atividades do tipo SITE;
      • fixedTimeSite – Tempo fixo de atendimento no local, em segundos. Retornado em atividades de LOADING, UNLOADING, COLLECTION e DELIVERY;
      • volume – Volume das operações tratadas na atividade. Retornado em atividades de LOADING, UNLOADING, COLLECTION e DELIVERY;
      • weight – Peso das operações tratadas na atividade. Retornado em atividades de LOADING, UNLOADING, COLLECTION e DELIVERY;
      • departureSite – Local de origem do deslocamento. Retornado em DRIVING;
      • arrivalSite – Local de destino do deslocamento. Retornado em DRIVING;
      • distance – Distância percorrida no deslocamento, em metros. Retornado em DRIVING;
      • nominalDuration – Duração nominal do deslocamento, em segundos. Retornado em DRIVING.

No exemplo, a rota do veículo VUC_1 segue esta sequência de atividades: ROUTE_START no CD, LOADING das operações P2 e P1, DRIVING até o Cliente1, DELIVERY da operação P1, DRIVING até o Cliente2, DELIVERY da operação P2, DRIVING de volta ao CD e ROUTE_END.

Campo indicators

Indicadores consolidados de toda a solução. Todos os tempos são retornados em segundos e a distância em metros.

  • routesNumber – Quantidade de rotas da solução;
  • rejectOperationsNumber – Quantidade de operações rejeitadas, ou seja, não atendidas pela solução;
  • timeWindowNumber – Quantidade de janelas de tempo consideradas na solução;
  • totalDistance – Distância total percorrida;
  • totalTime – Tempo total das rotas;
  • totalWorkingTime – Tempo total de trabalho:
    • dayWorkingTotalTime – Tempo de trabalho em período diurno;
    • nightWorkingTotalTime – Tempo de trabalho em período noturno.
  • totalDrivingTime – Tempo total de deslocamento;
  • totalServiceTime – Tempo total de atendimento nos locais:
    • totalLoadingTime – Tempo total de carregamento;
    • totalDeliveringTime – Tempo total de entrega;
    • totalUnloadingTime – Tempo total de descarregamento;
    • totalCollectingTime – Tempo total de coleta.
  • totalWaitingTime – Tempo total de espera;
  • totalRestTime – Tempo total de descanso;
  • averageOccupancyRateVolume – Taxa média de ocupação do veículo por volume, em porcentagem;
  • averageOccupancyRateWeight – Taxa média de ocupação do veículo por peso, em porcentagem.

Campos retornados somente quando há operações rejeitadas

Quando o solver não consegue atender uma ou mais operações, elas são listadas na resposta junto com as possíveis causas.

  • rejectOperations – Lista com os id das operações rejeitadas;
  • possibleCausesOfRejectOperations – Objeto em que cada chave é o id de uma operação rejeitada e o valor é a lista de possíveis causas da rejeição. Consulte a lista de possíveis mensagens retornadas em Operações Rejeitadas.
    • code – Código da causa;
    • message – Descrição da causa.

Campos retornados somente com trip

  • routes[].tripId – Identificador da rota gerada pela Trip API;
  • indicators.tollCosts – Custo total de pedágio da solução.

Campos retornados somente com compartimentos

  • routes[].compartmentConfiguration – Nome da configuração de compartimentos utilizada na rota;
  • routes[].activities[].operationCompartments – Distribuição das operações nos compartimentos do veículo. Retornado somente em atividades LOADING:
    • groupId – id da operação;
    • compartmentSolutions – Lista de compartimentos utilizados pela operação:
      • compartment – Nome do compartimento;
      • capacityWeightUsed – Peso alocado no compartimento;
      • capacityVolumeUsed – Volume alocado no compartimento.

Resposta completa

A resposta completa encontra-se abaixo, gerada a partir da requisição deste exemplo:

{
    "id": "6af70501533ca0240d44adc5",
    "clientId": "maplink",
    "vehicleRoutes": [
        {
            "routes": [
                {
                    "id": "NewRoute_1_1",
                    "activities": [
                        {
                            "activity": "ROUTE_START",
                            "timeWindow": {
                                "start": 1513754569000,
                                "end": 1513754569000
                            },
                            "type": "SITE",
                            "site": "CD",
                            "operations": []
                        },
                        {
                            "activity": "LOADING",
                            "timeWindow": {
                                "start": 1513754569000,
                                "end": 1513755469000
                            },
                            "type": "SITE",
                            "site": "CD",
                            "fixedTimeSite": 900,
                            "volume": 7.0,
                            "weight": 350.0,
                            "operations": [
                                "P2",
                                "P1"
                            ]
                        },
                        {
                            "activity": "DRIVING",
                            "timeWindow": {
                                "start": 1513755469000,
                                "end": 1513756800000
                            },
                            "type": "DRIVING",
                            "operations": [],
                            "arrivalSite": "Cliente1",
                            "departureSite": "CD",
                            "distance": 13410,
                            "nominalDuration": 1331
                        },
                        {
                            "activity": "DELIVERY",
                            "timeWindow": {
                                "start": 1513756800000,
                                "end": 1513757400000
                            },
                            "type": "SITE",
                            "site": "Cliente1",
                            "fixedTimeSite": 600,
                            "volume": 2.0,
                            "weight": 100.0,
                            "operations": [
                                "P1"
                            ]
                        },
                        {
                            "activity": "DRIVING",
                            "timeWindow": {
                                "start": 1513757400000,
                                "end": 1513759737000
                            },
                            "type": "DRIVING",
                            "operations": [],
                            "arrivalSite": "Cliente2",
                            "departureSite": "Cliente1",
                            "distance": 26603,
                            "nominalDuration": 2337
                        },
                        {
                            "activity": "DELIVERY",
                            "timeWindow": {
                                "start": 1513759737000,
                                "end": 1513760337000
                            },
                            "type": "SITE",
                            "site": "Cliente2",
                            "fixedTimeSite": 600,
                            "volume": 5.0,
                            "weight": 250.0,
                            "operations": [
                                "P2"
                            ]
                        },
                        {
                            "activity": "DRIVING",
                            "timeWindow": {
                                "start": 1513760337000,
                                "end": 1513763220000
                            },
                            "type": "DRIVING",
                            "operations": [],
                            "arrivalSite": "CD",
                            "departureSite": "Cliente2",
                            "distance": 34654,
                            "nominalDuration": 2883
                        },
                        {
                            "activity": "ROUTE_END",
                            "timeWindow": {
                                "start": 1513763220000,
                                "end": 1513763220000
                            },
                            "type": "SITE",
                            "site": "CD",
                            "operations": []
                        }
                    ]
                }
            ],
            "vehicle": "VUC_1",
            "period": {
                "timeWindow": {
                    "start": 1513753200000,
                    "end": 1513796400000
                },
                "departureSite": "CD",
                "arrivalSite": "CD"
            }
        }
    ],
    "indicators": {
        "totalServiceTime": 2100,
        "totalDeliveringTime": 1200,
        "dayWorkingTotalTime": 8651,
        "nightWorkingTotalTime": 0,
        "totalUnloadingTime": 0,
        "totalWorkingTime": 8651,
        "totalCollectingTime": 0,
        "timeWindowNumber": 1,
        "totalDrivingTime": 6551,
        "totalLoadingTime": 900,
        "totalTime": 8651,
        "totalDistance": 74667,
        "averageOccupancyRateVolume": 35.0,
        "averageOccupancyRateWeight": 29.17,
        "rejectOperationsNumber": 0,
        "totalWaitingTime": 0,
        "totalRestTime": 0,
        "routesNumber": 1
    }
}