Construire un message de requête

Comme décrit brièvement dans la section Présentation de l'optimisation des itinéraires, une requête de base est constituée de Model, Shipments (Expéditions) et Vehicles (Véhicules) en tant qu'entités obligatoires:

  • Le modèle capture les paramètres et les contraintes pour l'ensemble de la requête, y compris Shipments et Vehicles.
  • Les expéditions représentent des tâches ou des livraisons réelles qui incluent des VisitRequest pour le retrait et la livraison. Des contraintes et des paramètres locaux s'appliquent aux expéditions.
  • Les véhicules représentent les véhicules, les conducteurs ou le personnel. Les véhicules sont également soumis à des contraintes et à un cadre 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 applicables à l'ensemble du modèle sont appliquées à l'ensemble des expéditions et des véhicules, tandis que les contraintes et les propriétés spécifiées pour les expéditions ou les véhicules sont spécifiques à une seule livraison 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).

OptimzeToursRequest de propriétés

Voici quelques propriétés couramment utilisées pour le message OptimizeToursRequest de premier niveau (REST, gRPC) :

  • searchMode indique s'il faut renvoyer la première solution qui répond aux 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 temps réel est utilisé ou non pour le calcul d'itinéraire et l'estimation de l'heure d'arrivée prévue.
  • populateTransitionPolylines détermine si les polylignes d'itinéraire sont renvoyées ou non dans la réponse.

Propriétés du modèle

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

  • globalStartTime représente l'heure de départ au plus tôt des itinéraires pour tous les véhicules et toutes les livraisons. Aucun véhicule ne peut lancer ses premières transitions et expéditions avant cette heure.
  • globalEndTime représente l'heure de fin la plus tardive des itinéraires pour tous les véhicules et livraisons. Tous les envois et transitions attribués doivent être terminés avant cette date.

Propriétés de livraison

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

  • pickups[] et deliveries[] représentent l'endroit où un envoi peut être retiré ou déposé. Les propriétés pickups[] et deliveries[] utilisent toutes deux le message VisitRequest (REST, gRPC).
  • Les loadDemands représentent la charge requise pour qu'un véhicule puisse effectuer une expédition. La propriété load_limits (REST, gRPC) correspondante d'un véhicule représente la charge qu'un véhicule peut supporter en une seule fois. Pour en savoir plus sur la charge, consultez l'article Demandes et limites de charge.
  • penalty_cost représente les frais facturés si une expédition 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 pour le 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'adresse du premier envoi qui lui a été attribué.
  • 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 qui lui a été attribuée.
  • startTimeWindows[] représente le moment où un véhicule peut démarrer son itinéraire. Cette propriété est facultative.
  • endTimeWindows[] représente le moment où un véhicule peut commencer et terminer son itinéraire. Ces deux propriétés sont facultatives.
  • loadLimits représente la capacité du véhicule disponible pour répondre aux demandes de chargement des colis. Consultez la section Demandes et limites de charge pour en savoir plus sur les demandes et les limites de charge.

Voici un exemple complet de requê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 des messages de requête comme dans l'exemple ci-dessus, mais de différentes manières. Avant d'envoyer une requête d'optimisation des routes, il est important de comprendre la différence entre les deux méthodes:

Comparer OptimizeTours et BatchOptimizeTours