Evite fazer retornos nos locais de retirada e entrega

Por padrão, os veículos podem chegar a um local de coleta ou entrega de qualquer direção e sair em qualquer direção. Em alguns casos, isso força o veículo a fazer um retorno no local da visita, o que pode ser difícil ou impossível devido ao tamanho do veículo, às placas de trânsito no local ou às condições normais de tráfego.

Para evitar que os veículos mudem de direção entre a chegada e a partida de um determinado local de coleta ou entrega, defina avoid_u_turns como "true" para esse local. Com essa configuração, o veículo vai chegar e sair do local com o mesmo sentido, evitando o retorno. Em vias de mão dupla, o solucionador considera os dois sentidos e escolhe um deles como parte da otimização do trajeto.

Você também pode definir side_of_road como "true" para receber uma rota em que o veículo chega e sai do lado da via mais próximo do waypoint. Nesse caso, o veículo também não muda de direção entre a chegada e a partida. É possível definir side_of_road e avoid_u_turns como "true" para alcançar o mesmo resultado. Para mais detalhes, consulte Interação com outros recursos.

Na prática, avoid_u_turns deve ser usado quando é seguro atravessar a rua para chegar ao ponto de referência. Use side_of_road quando a travessia não for recomendada ou possível.

Exemplo: fazer uma solicitação OptimizeTours com avoid_u_turns

As solicitações OptimizeTours podem ser feitas usando REST ou gRPC.

Antes de fazer uma solicitação, substitua os seguintes parâmetros por valores adequados para seu ambiente:

  • Verifique se você configurou as Application Default Credentials conforme descrito em Usar o OAuth.
  • Defina PROJECT_NUMBER_OR_ID como o número ou ID do projeto do Cloud.

    O comando a seguir envia uma solicitação OptimizeTours para a API Route Optimization e recebe uma resposta de forma síncrona.

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data @- <<EOM
    {
      "model": {
        "shipments": [
          {
            "pickups": [
              {
                "arrivalLocation": {
                  "latitude": 37.42506261000996,
                  "longitude": -122.09535511930135
                },
                "avoidUTurns": true
              }
            ],
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.42421503206021,
                  "longitude": -122.09526063135228
                },
                "avoidUTurns": true
              }
            ]
          }
        ],
        "vehicles": [
          {
            "travelMode": "DRIVING",
            "costPerKilometer": 1.0
          }
        ],
      }
    }
    EOM

Quando a solicitação for concluída, você vai receber uma mensagem de resposta.

Interação com outros recursos

  • avoid_u_turns pode ser usado com side_of_road = true. Nesse caso, as conversões em U são evitadas, mas o solucionador seleciona uma rota em que o veículo está no mesmo lado da via que o ponto de referência, semelhante a definir apenas side_of_road = true.
  • Quando avoid_u_turns = true para uma determinada solicitação de visita, o ShipmentRoute.Visit na resposta correspondente tem o campo injected_solution_location_token definido. O significado exato do valor é um detalhe de implementação, mas ele codifica as informações sobre o lado da via escolhido pelo solucionador.
  • Quando você usa um ShipmentRoute.Visit como parte da solicitação de entrada, se esse ShipmentRoute.Visit corresponder a um VisitRequest em que avoid_u_turns = true, então ShipmentRoute.Visit precisará conter um injected_solution_location_token retornado anteriormente pelo solucionador.

Limitações

A prevenção de retornos é baseada no melhor esforço. Em algumas situações, a rota ainda pode ter retornos em U:

  • O avoid_u_turns funciona apenas com modos de viagem que oferecem suporte a side_of_road. Especificamente, ele não é compatível com o modo de viagem WALKING.
  • avoid_u_turns não pode ser usado para retiradas e entregas em que a chegada e a partida não são iguais.
  • Quando uma coleta ou entrega é feita em uma rua sem saída, é necessário fazer um retorno para sair da via.
  • O objetivo desse recurso é evitar retornos em U nos locais de retirada e entrega. Retornos entre waypoints não são evitados.
  • Curvas muito acentuadas para uma via diferente não são consideradas retornos em U e geralmente não são evitadas.

Há outras limitações enquanto esse recurso está em desenvolvimento. Esperamos que elas sejam removidas à medida que o recurso evolui.