Éviter les demi-tours aux points de retrait et de livraison

Par défaut, les véhicules peuvent arriver à un point de collecte ou de livraison depuis n'importe quelle direction, puis repartir dans n'importe quelle direction. Dans certains cas, cela oblige le véhicule à faire demi-tour au lieu de la visite, ce qui peut être difficile ou impossible en raison de la taille du véhicule, des panneaux de signalisation sur le site ou des conditions de circulation habituelles.

Pour empêcher les véhicules de changer de direction entre l'arrivée et le départ pour un lieu de retrait ou de livraison donné, vous pouvez définir avoid_u_turns sur "true" pour ce lieu. Avec ce paramètre, le véhicule arrive et quitte l'emplacement avec le même cap, ce qui évite le demi-tour. Sur les routes à double sens, le solveur tient compte des deux sens de circulation et en choisit un lors de l'optimisation de l'itinéraire.

Vous pouvez également définir side_of_road sur "true" pour obtenir un itinéraire où le véhicule arrive et part du côté de la route le plus proche du point de cheminement. Dans ce cas, le véhicule ne change pas non plus de cap entre l'arrivée et le départ. Vous pouvez définir side_of_road et avoid_u_turns sur "true" pour obtenir le même résultat. Pour en savoir plus, consultez la section Interaction avec d'autres fonctionnalités.

En pratique, avoid_u_turns doit être utilisé lorsqu'il est possible de traverser la route pour atteindre le point de cheminement. Utilisez side_of_road lorsque le passage est déconseillé ou impossible.

Exemple: Envoyer une requête OptimizeTours avec avoid_u_turns

Les requêtes OptimizeTours peuvent être effectuées à l'aide de REST ou de gRPC.

Avant d'envoyer une requête, remplacez les paramètres suivants par les valeurs appropriées pour votre environnement:

  • Assurez-vous que les identifiants par défaut de l'application sont configurés comme décrit dans la section Utiliser OAuth.
  • Définissez PROJECT_NUMBER_OR_ID sur le numéro ou l'ID de votre projet Cloud.

    La commande suivante envoie une requête OptimizeTours à l'API Route Optimization et reçoit une réponse de manière synchrone.

    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

Une fois la requête traitée, vous recevrez un message de réponse.

Interaction avec d'autres fonctionnalités

  • avoid_u_turns peut être utilisé avec side_of_road = true. Dans ce cas, les demi-tours sont évités, mais le solveur sélectionne un itinéraire pour lequel le véhicule se trouve du même côté de la route que le point de cheminement, comme si vous ne définissiez que side_of_road = true.
  • Lorsque avoid_u_turns = true pour une requête de visite spécifique, le champ injected_solution_location_token est défini dans la réponse correspondante.ShipmentRoute.Visit La signification précise de sa valeur est un détail d'implémentation, mais elle encode les informations sur le côté de la route choisi par le solveur.
  • Lorsque vous utilisez un ShipmentRoute.Visit dans la requête d'entrée, si cet élément ShipmentRoute.Visit correspond à un VisitRequest dans lequel avoid_u_turns = true, ShipmentRoute.Visit doit contenir un injected_solution_location_token précédemment renvoyé par le solveur.

Limites

L'évitement des demi-tours est réalisé de manière optimale. Dans certains cas, l'itinéraire peut toujours comporter des demi-tours:

  • avoid_u_turns ne fonctionne qu'avec les modes de transport compatibles avec side_of_road. Plus précisément, il n'est pas compatible avec le mode de déplacement WALKING.
  • avoid_u_turns ne peut pas être utilisé pour les collectes et les livraisons où les heures d'arrivée et de départ ne sont pas les mêmes.
  • Lorsqu'une collecte ou une livraison se trouve sur une route sans issue, vous devez faire demi-tour pour quitter la route.
  • L'objectif de cette fonctionnalité est d'éviter les demi-tours aux points de prise en charge et de livraison. Les demi-tours entre les points de cheminement ne sont pas évités.
  • Les virages très serrés vers une autre route ne sont pas considérés comme des demi-tours et ne sont généralement pas évités.

Cette fonctionnalité est en cours de développement et présente d'autres limites. Nous nous attendons à ce qu'elles soient levées à mesure que la fonctionnalité évoluera.