Structure de base (ShipmentModel, Shipment et Vehicle)

ShipmentModel comporte un objet "shipments" avec un type de message "Shipment" et un objet "vehicles" avec un type de message "Vehicle".

L'objectif de l'API Route Optimization est de planifier des itinéraires pour une flotte de véhicules afin de visiter un ensemble de lieux. L'objet OptimizeToursRequest décrit les propriétés de ces véhicules et de ces emplacements. Il s'agit de la structure principale du corps de la requête de chaque point de terminaison.

La structure de base de l'objet OptimizeToursRequest est la suivante :

Ce document décrit les types de messages suivants :

  • ShipmentModel : contient la liste des envois, des véhicules disponibles et d'autres objets décrivant leurs relations.
  • Shipment : décrit les lieux à visiter par un véhicule. Elles peuvent représenter des colis réels à récupérer et à livrer, ou des lieux où le conducteur du véhicule effectue un service.
  • Vehicle : décrit le moyen de transport entre les lieux d'expédition. Chaque véhicule correspond à un véhicule réel ou à une personne se déplaçant à pied.

ShipmentModel

ShipmentModel contient les éléments du problème d'optimisation d'itinéraire. Il contient un ensemble d'envois pouvant être effectués par un ensemble de véhicules, tout en tenant compte des contraintes et en minimisant le coût global.

Le tableau ci-dessous décrit certaines propriétés pertinentes de ShipmentModel :

Propriétés Description
shipments et vehicles Objets obligatoires contenant les détails d'un ou de plusieurs envois et véhicules.
globalStartTime et globalEndTime Indique le début et la fin de la période pendant laquelle tous les véhicules doivent effectuer toutes les livraisons. Bien que ces propriétés ne soient pas obligatoires, il est recommandé de les inclure, car l'optimiseur fonctionne mieux lorsqu'il respecte les contraintes de temps.

Consultez la documentation de référence pour obtenir la liste complète des propriétés de ShipmentModel.

Exemple d'utilisation de la fonction ShipmentModel

Dans cet exemple, vous proposez un service de garde de chiens et vous commencez à créer votre requête. Vous définirez les livraisons et les véhicules plus tard, mais vous souhaitez commencer par définir vos horaires d'ouverture et votre coût opérationnel horaire.

Pour cet exemple, les valeurs de la propriété ShipmentModel de votre requête sont les suivantes :

Propriété Valeur Description
globalStartTime 2024-02-13T00:00:00.000Z Date et heure de début des horaires d'ouverture.
globalEndTime 2024-02-14T06:00:00.000Z Date et heure de fin des horaires d'ouverture.

Voici un exemple de code d'un message ShipmentModel intégrant les valeurs de l'exemple de scénario.

{
  "model": {
    "shipments": [
      ...
    ],
    "vehicles": [
      ...
    ],
   "globalStartTime": "2024-02-13T00:00:00.000Z",
   "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}

Shipment

Le type de message Shipment définit la structure des propriétés d'un envoi pouvant être livré ou d'un service pouvant être effectué sur un itinéraire.

Un envoi réel correspond à un message "Shipment", qui est contenu dans un objet "shipments".

Comme illustré dans le schéma :

  • Un message Shipment contient toutes les informations d'un envoi ou d'un service réel.
  • Tous les messages Shipment sont spécifiés dans le champ shipments.
  • Le champ shipments contient un ou plusieurs messages Shipment.

Un message Shipment nécessite au moins un objet pickups ou deliveries. La définition de ces objets est la suivante :

Le tableau suivant décrit les différents scénarios en fonction de la configuration de pickups et deliveries dans un message Shipment.

Scénario Description
pickups uniquement Nous partons du principe que vous récupérez uniquement le colis.
deliveries uniquement Nous partons du principe que vous avez préchargé l'envoi ou que vous fournissez un service.
pickups et deliveries Le véhicule attribué doit d'abord effectuer l'enlèvement, puis la livraison. Seul le véhicule qui a effectué la prise en charge peut effectuer la livraison.
Plusieurs pickups ou deliveries Si un envoi liste plusieurs possibilités pour pickups ou deliveries, l'optimiseur choisit une option de retrait et une option de livraison à utiliser, en fonction de la minimisation des coûts et du respect des contraintes.

Consultez la documentation de référence pour obtenir la liste complète des propriétés de Shipment.

Exemple d'utilisation de la fonction Shipment

Dans cet exemple, vous proposez un service de garde de chiens à la journée. Vous allez chercher les chiens chez eux et les amenez à votre garderie. Vous souhaitez définir le lieu de prise en charge de deux chiens et définir leur lieu de livraison sur votre établissement :

  • La maison du premier chien se trouve dans la Coit Tower, à San Francisco. Les coordonnées de cet emplacement sont : latitude 37.8024 et longitude -122.4058.
  • La maison du deuxième chien se trouve dans le South Sunset Playground Park, à San Francisco. Les coordonnées de cet emplacement sont : latitude 37.7359 et longitude -122.5011.
  • Votre garderie pour chiens se trouve à Mission Dolores Park, San Francisco. Les coordonnées de cet emplacement sont : latitude 37.759773 et longitude -122.427063.

Voici un exemple de code d'un message Shipment, où l'objet shipments contient deux types de messages Shipment avec les exemples de coordonnées.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
    ...
    ]
  }
}

Vehicle

Le type de message Vehicle définit la structure des propriétés d'un véhicule pouvant effectuer un envoi sur un itinéraire.

Un véhicule réel correspond à un message "Vehicle", qui est contenu dans un objet "vehicles".

Comme illustré dans le schéma :

  • Un message Vehicle contient toutes les informations d'un véhicule réel.
  • Tous les messages Vehicle sont spécifiés dans le champ vehicles.
  • Le champ vehicles contient plusieurs messages Vehicle.

Le tableau suivant décrit certaines propriétés pertinentes d'un Vehicle.

Propriétés Description
startLocation et endLocation Les lieux de départ et d'arrivée des véhicules, qui font partie de l'itinéraire optimisé final. Si elles ne sont pas définies, elles sont définies par défaut sur le premier lieu d'enlèvement et le dernier lieu de livraison.
costPerHour, costPerKilometer, costPerTraveledHour Paramètres de coût spécifiques au véhicule. Nous vous recommandons d'inclure au moins un paramètre de coût dans votre requête pour que l'API renvoie un itinéraire optimisé. Pour en savoir plus sur les coûts, consultez le concept clé Modèle de coût.
startTimeWindows et endTimeWindows Définissez les périodes pendant lesquelles un véhicule peut circuler sur un itinéraire. Ces dates doivent être comprises dans la période globalStartTime et globalEndTime définie dans ShipmentModel. Bien que cette propriété ne soit pas obligatoire, il est recommandé de l'inclure, car l'optimiseur fonctionne mieux lorsqu'il respecte les contraintes de temps.

Exemple d'utilisation de la fonction Vehicle

Dans cet exemple, vous proposez un service de garde de chiens et vous souhaitez définir l'emplacement de votre véhicule au début et à la fin de la journée, ainsi que la quantité de carburant qu'il consomme. Vous n'avez pas besoin de spécifier les heures de travail du véhicule, car elles correspondent aux heures que vous avez définies dans les propriétés globalStartTime et globalEndTime de l'objet ShipmentModel.

Pour cet exemple, les valeurs de la propriété Vehicle de votre requête sont les suivantes :

Propriété Valeur Description
startLocation latitude : 37.759773, longitude : -122.427063 Coordonnées de départ de l'itinéraire de votre véhicule. Ces termes correspondent à l'emplacement de votre garderie pour chiens, qui se trouve dans le parc Mission Dolores à San Francisco.
endLocation latitude : 37.759773, longitude : -122.427063 Coordonnées de fin de l'itinéraire de votre véhicule. Ces coordonnées correspondent à l'emplacement de votre garderie pour chiens, située dans le Mission Dolores Park, à San Francisco.
costPerHour 27 Combien vous payez un conducteur pour conduire votre véhicule de garderie pour chiens. Vous payez le chauffeur 27 $ de l'heure.

Voici un exemple de code d'un message Vehicle intégrant les valeurs de l'exemple de scénario.

{
  "model": {
    "shipments": [
    ...
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ]
  }
}

Consultez la documentation de référence pour obtenir la liste complète des propriétés de Vehicle.

Exemple de requête complet

L'exemple de code suivant fournit un exemple de requête complet, combinant les exemples ShipmentModel, Shipment et Vehicle présentés dans ce document.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ],
    "globalStartTime": "2024-02-13T00:00:00.000Z",
    "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}