Construire un message de requête

Comme décrit brièvement dans la Présentation de l'optimisation des routes, une requête de base se compose d'un modèle, d'un envoi et d'un véhicule en tant qu'entités requises:

  • Un modèle capture les paramètres et les contraintes de l'ensemble de la requête, y compris Shipments et Vehicles.
  • Expéditions représentent les tâches ou les expéditions réelles qui incluent des VisitRequest pour le retrait et la livraison. Les expéditions ont des paramètres et des contraintes locaux.
  • Les véhicules représentent des véhicules, des conducteurs ou du personnel. Les véhicules ont également des paramètres et contraintes locaux.

Les propriétés de chaque entité décrivent une partie d'un problème d'optimisation à un niveau de précision particulier. Les contraintes à l'échelle du modèle sont appliquées à tous les expéditions et véhicules, tandis que les contraintes et les propriétés spécifiées sur les expéditions ou les véhicules sont spécifiques à une seule expédition ou à un seul véhicule.

Pour obtenir une documentation complète sur chaque type de message, consultez la documentation de référence sur les messages ShipmentModel (REST, gRPC), Shipment (REST, gRPC) et Vehicle (REST, gRPC).

OptimizeToursRequest de propriétés

Voici quelques-unes des propriétés couramment utilisées du message OptimizeToursRequest de premier niveau (REST, gRPC) :

  • searchMode indique s'il faut renvoyer la première solution qui respecte les contraintes spécifiées ou s'il faut trouver la meilleure solution possible dans un délai défini.
  • considerRoadTraffic détermine si le trafic en direct est utilisé ou non pour l'itinéraire et l'estimation de l'heure d'arrivée prévue.
  • populateTransitionPolylines détermine si les polylignes de routage sont renvoyées ou non dans la réponse.

Propriétés du modèle

Voici quelques propriétés couramment utilisées du message ShipmentModel (REST, gRPC) :

  • globalStartTime représente l'heure de départ la plus proche pour l'ensemble des véhicules et des livraisons. Aucun véhicule ne peut commencer ses premières transitions et expéditions avant cette date.
  • globalEndTime représente la dernière heure de fin des itinéraires pour l'ensemble des véhicules et des livraisons. Toutes les expéditions et transitions attribuées doivent être terminées avant cette date.

Propriétés de livraison

Voici quelques propriétés couramment utilisées du message Shipment (REST, gRPC) :

  • pickups[] et deliveries[] indiquent l'endroit où un colis peut être retiré ou déposé. Les propriétés pickups[] et deliveries[] utilisent toutes deux le message VisitRequest (REST, gRPC).
  • loadDemands représente la charge requise pour qu'un véhicule puisse finaliser un envoi. La propriété load_limits (REST, gRPC) correspondante des véhicules représente la charge qu'un véhicule peut supporter simultanément. Pour en savoir plus sur le chargement, consultez l'article Demandes et limites de chargement.
  • penalty_cost représente le coût facturé si une livraison est ignorée. Pour en savoir plus sur les coûts, consultez la page Paramètres du modèle de coût.

Propriétés du véhicule

Voici quelques propriétés couramment utilisées du message Vehicle (REST, gRPC) :

  • startLocation représente le point de départ d'un véhicule. Cette propriété est facultative. S'il n'est pas spécifié, l'itinéraire du véhicule commence à l'emplacement de la première livraison qui lui a été attribuée.
  • endLocation représente l'endroit où un véhicule doit terminer son itinéraire. Cette propriété est facultative. S'il n'est pas spécifié, l'itinéraire du véhicule se termine à l'emplacement de la dernière livraison attribuée.
  • startTimeWindows[] représente le moment où un véhicule peut prendre son itinéraire. Cette propriété est facultative.
  • endTimeWindows[] représente les heures de début et de fin de son trajet pour un véhicule. Ces deux propriétés sont facultatives.
  • loadLimits représente la capacité disponible du véhicule pour répondre aux besoins de charge des expéditions. Pour en savoir plus sur les exigences et les limites de charge, consultez la section Exigences et limites de chargement.

Voici un exemple de requête complète au format JSON:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.73881799999999,
              "longitude": -122.4161
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.79581,
              "longitude": -122.4218856
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        },
        "endLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        },
        "costPerKilometer": 1.0
      }
    ],
   "globalStartTime": "2024-02-13T00:00:00.000Z",
   "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}

OptimizeTours et BatchOptimizeTours consomment tous deux les messages de requête comme dans l'exemple ci-dessus, mais de manière différente. Avant d'effectuer une requête d'optimisation des routes, il est important de comprendre la différence entre les deux méthodes:

Comparer OptimizeTours et BatchOptimizeTours