Ce document vous explique comment envoyer votre première requête à l'API Route Optimization à l'aide d'un scénario d'utilisation réel.
Pour simplifier, l'exemple utilise HTTP et JSON pour illustrer l'API REST. Toutefois, pour votre environnement de production, la recommandation générale est d'utiliser gRPC pour ses avantages en termes de performances. Cependant, gRPC nécessite une installation. Pour en savoir plus, consultez Bibliothèques clientes de l'API Route Optimization.
Scénario
Vous gérez une garderie pour chiens de 7h à 19h à San Francisco. Ce matin, vous devez aller chercher deux chiens à différents endroits de la ville. Les deux propriétaires de chiens vous ont donné une plage horaire de prise en charge entre 7h30 et 9h30.
Vous disposez d'une seule camionnette pour cette tâche et vous payez le chauffeur 27 dollars de l'heure. Le chauffeur et la camionnette commencent la journée à votre garderie à 7h et doivent être de retour des prises en charge du matin avant 12h pour une pause déjeuner.
Nous sommes le 13 février 2024 et le chauffeur a les tâches suivantes à effectuer :
- Aller chercher le bouvier bernois près de la Coit Tower.
- Aller chercher le chihuahua au South Sunset Playground Park.
- Déposer les deux chiens à la garderie du Mission Dolores Park.
Vous avez besoin d'un itinéraire qui minimise le temps que les chiens passent dans la camionnette, tout en respectant les exigences de prise en charge et de dépose.
Avant de commencer
Pour exécuter le code de cet exemple de scénario, vous devez d'abord suivre les instructions de la section Configurer l'API Route Optimization.
1. Choisir votre approche d'optimisation d'itinéraire
L'API Route Optimization propose plusieurs méthodes au choix, en fonction de la complexité de votre problème d'optimisation.
Étant donné que ce scénario de garderie pour chiens est une requête simple et directe, utilisez
une méthode de blocage, telle que optimizeTours, qui fournit rapidement des résultats
pour les petites requêtes. Pour en savoir plus sur les méthodes de l'API Route Optimization, consultez Points de terminaison synchrones et asynchrones.
Utilisez l'URL suivante pour envoyer une requête HTTP POST à la optimizeTours
méthode :
https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours
Vous devez également définir des paramètres de délai avant expiration et de délai limite courts pour réduire tout temps d'attente inutile. Pour ce scénario de garderie pour chiens, l'optimiseur n'a pas besoin de beaucoup de temps pour répondre à votre requête. Utilisez donc les paramètres suivants :
- Définissez le
timeoutparamètre sur 2 secondes. - Laissez les paramètres de délai limite sur la valeur par défaut, qui est de 60 secondes pour les requêtes REST.
2. Créer le corps du message de requête
Après avoir choisi la méthode de blocage optimizeTours et défini les paramètres de délai avant expiration
et de délai limite, vous devez créer le corps du message de requête.
Dans ce scénario, la requête est un message OptimizeToursRequest encodé au format JSON dans l'API REST.
Pour créer le message de requête, procédez comme suit :
Commencez par la structure de requête de base, qui est la suivante :
{ "timeout": ..., "model": { "shipments": [...], "vehicles": [...], "globalStartTime": "...", "globalEndTime": "..." } }Pour en savoir plus sur la structure, consultez le guide conceptuel clé pour Structure de base (ShipmentModel, Shipment et Vehicle).
Définissez les livraisons. Dans le
shipmentschamp, ajoutez unShipmentmessage pour chaque chien qui doit être pris en charge et déposé le matin. C'est là que vous définissez le lieu et l'heure de prise en charge préférés de chaque propriétaire de chien, ainsi que le lieu et l'heure de dépose des chiens à la garderie.Pour chaque chien, créez un
VisitRequestpour les prises en charge et un autre pour les livraisons, qui, dans ce scénario, sont appelées "dépose à la garderie".Dans les prises en charge, définissez le
arrivalWaypointsur le lieu de prise en charge du chien (Coit Tower pour le bouvier bernois ou South Sunset Playground Park pour le chihuahua) et letimeWindowssur l'heure de prise en charge demandée par le propriétaire (7h30 à 9h30).Dans les livraisons, définissez
arrivalWaypointsur la garderie ettimeWindowssur l'heure de dépose requise (9h30 à 11h30).
Pour en savoir plus sur les plages horaires, consultez Plages horaires.
Vous pouvez utiliser le champ
labelpour ajouter un identifiant à chaque livraison, comme « bouvier bernois » et « chihuahua ». Cela peut vous aider à identifier les livraisons dans la réponse.
Pour en savoir plus sur la définition des livraisons, consultez Livraison.
Définissez les véhicules. Dans le champ
vehicles, ajoutez un messageVehiclepour votre camionnette, avec la garderie comme point de départ et d'arrivée, le coût du salaire du chauffeur et les heures de fonctionnement de la camionnette.Définissez les
startWaypointetendWaypointpour la camionnette sur les lieux de début et de fin de la journée, qui sont la garderie près du Mission Dolores Park.Pour minimiser vos coûts d'exploitation, vous devez définir les contraintes de coût de votre entreprise. Définissez le paramètre de coût
costPerHoursur 27, qui correspond au montant que vous payez au chauffeur pour conduire la camionnette de la garderie. Pour en savoir plus sur les paramètres de coût, consultez Modèle de coût.Pour vous assurer que l'optimiseur crée un itinéraire pendant les heures de fonctionnement de la camionnette, définissez
startTimeWindowssur la plage acceptable pour que le chauffeur commence à conduire la camionnette etendTimeWindowssur la plage acceptable pour que le chauffeur revienne à la garderie. Pour en savoir plus sur les plages horaires, consultez Plages horaires.
Pour en savoir plus sur la définition des véhicules, consultez Véhicule.
Définissez une plage horaire globale. La plage horaire globale représente la période pendant laquelle la camionnette peut effectuer des prises en charge et des déposes pour votre garderie tout au long de la journée. Dans ce scénario, définissez
globalStartTimesur 7h etglobalEndTimesur 19h pour le 13 février 2024, ce qui correspond aux heures de fonctionnement de votre garderie pour chiens.
3. Envoyer la requête
Voici une requête curl simple basée sur le scénario de garderie pour chiens et qui utilise la méthode de blocage optimizeTours.
Avant d'envoyer la requête, remplacez PROJECT_NUMBER_OR_ID dans l'exemple de code par l'ID de votre projet Google Cloud.
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
{
"timeout": "2s",
"model": {
"shipments": [
{
"pickups": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.802395,
"longitude": -122.405822
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T07:30:00Z",
"endTime": "2024-02-13T09:30:00Z"
}
]
}
],
"deliveries": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T09:30:00Z",
"endTime": "2024-02-13T11:30:00Z"
}
]
}
],
"label": "Bernese mountain dog"
},
{
"pickups": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.738067,
"longitude": -122.498593
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T07:30:00Z",
"endTime": "2024-02-13T09:30:00Z"
}
]
}
],
"deliveries": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T09:30:00Z",
"endTime": "2024-02-13T11:30:00Z"
}
]
}
],
"label": "Chihuahua"
}
],
"vehicles": [
{
"startWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"endWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"costPerHour": 27,
"startTimeWindows": [
{
"startTime": "2024-02-13T07:00:00Z",
"endTime": "2024-02-13T07:15:00Z"
}
],
"endTimeWindows": [
{
"startTime": "2024-02-13T11:45:00Z",
"endTime": "2024-02-13T12:00:00Z"
}
]
}
],
"globalStartTime": "2024-02-13T07:00:00Z",
"globalEndTime": "2024-02-13T19:00:00Z"
}
}
EOM
Paramètres de requête utilisés dans la requête
Le tableau suivant décrit les paramètres de requête utilisés dans le corps de la requête de l'exemple de scénario. Vous pouvez filtrer le contenu par parent ou par recherche textuelle.
| Parent | Paramètre | Type de propriété | Description |
|---|---|---|---|
OptimizeToursRequest |
model |
objet (ShipmentModel) |
Il s'agit du cœur de votre requête. Il s'agit d'un seul objet dans lequel vous
définissez l'ensemble de votre problème, y compris tous les chiens que vous devez prendre en charge et
déposer (shipments)
et la camionnette de votre flotte
(vehicles).
Considérez-le comme le plan complet du problème que vous devez optimiser. |
timeout |
Durée | Ce paramètre spécifie la durée maximale pendant laquelle le serveur traite une requête avant de renvoyer une réponse. Utilisez ce paramètre pour réduire votre temps d'attente. Pour les requêtes petites et rapides, comme ce scénario de garderie pour chiens, définissez cette valeur sur 2s. | |
ShipmentModel |
shipments[] |
tableau d'objets (Shipment) |
Il s'agit d'un tableau d'objets dans lequel chaque objet représente un chien qui doit être pris en charge ou déposé. |
vehicles[] |
tableau d'objets (Vehicle) |
Il s'agit d'un tableau d'objets dans lequel chaque objet définit un véhicule de votre flotte. C'est là que vous décrivez vos ressources, comme la camionnette qui effectue les prises en charge et les déposes. Vous devez définir au moins un véhicule pour obtenir un itinéraire optimisé. | |
globalStartTime |
Horodatage | Il s'agit de l'heure la plus tôt possible pour qu'un événement se produise dans l'ensemble de votre modèle. Ce paramètre réduit le problème d'optimisation dans le temps, ce qui est essentiel pour des calculs précis du trafic et de l'itinéraire Pour ce scénario de garderie pour chiens, définissez cette valeur sur l'heure la plus tôt à laquelle le chauffeur peut conduire la camionnette pour la journée, soit 7h le 13 février 2024. | |
globalEndTime |
Horodatage | Il s'agit de l'heure la plus tard possible pour qu'un événement se produise dans l'ensemble de votre modèle. Pour ce scénario de garderie pour chiens, définissez cette valeur sur l'heure à laquelle la camionnette devrait terminer son fonctionnement, soit 19h le 13 février 2024. | |
Shipment |
pickups[] |
tableau d'objets (VisitRequest) |
Il s'agit d'une liste de toutes les options de prise en charge possibles pour la livraison. L'optimiseur choisit la meilleure pour résoudre votre problème. Pour ce scénario de garderie pour chiens, listez les lieux de prise en charge et les plages horaires que chaque propriétaire a fournis pour chaque chien. |
deliveries[] |
tableau d'objets (VisitRequest) |
Il s'agit d'une liste de toutes les options de dépose possibles pour la livraison. L'optimiseur choisit la meilleure pour résoudre votre problème. Pour ce scénario de garderie pour chiens, listez l'emplacement de la garderie et la plage horaire pendant laquelle le chauffeur doit revenir déjeuner pour chaque chien. | |
label |
chaîne | Il s'agit d'un identifiant pour une livraison spécifique dans votre requête. Vous pouvez spécifier des libellés dans votre requête pour faciliter la lecture de la réponse. Pour ce scénario de garderie pour chiens, utilisez une chaîne descriptive telle que "Chihuahua", "Bouvier bernois" ou le nom du chien pour faire correspondre la solution à votre entrée lorsque vous recevez la réponse de l'API. | |
VisitRequest |
arrivalWaypoint[] |
objet (Waypoint) |
Il s'agit de l'emplacement d'une visite spécifique sur l'itinéraire. Vous pouvez le définir
à l'aide de coordonnées de latitude et de longitude, d'un ID de lieu ou d'un cap. Dans
ce scénario de garderie pour chiens, définissez cette valeur sur le lieu fourni par le propriétaire pour
pickups
et sur l'adresse de la garderie pour
deliveries. |
timeWindows[] |
tableau d'objets (TimeWindow) |
Il s'agit d'un tableau d'objets qui définissent les contraintes de temps pour une prise en charge ou livraison. Dans ce scénario, utilisez-le pour définir la plage de prise en charge pour chacun des chiens et la plage acceptable pour déposer les chiens à la garderie. | |
Vehicle |
startWaypoint[] |
objet (Waypoint) |
Il s'agit du lieu de départ de l'itinéraire du véhicule, défini avec des coordonnées de latitude et de longitude ou un ID de lieu. Ce paramètre indique à l' optimiseur où le véhicule doit commencer l'itinéraire. Si vous ne définissez pas ce point de cheminement, l'optimiseur choisit l'une des prises en charge ou des livraisons comme lieu de départ. Pour ce scénario de garderie pour chiens, étant donné que le chauffeur commence la journée à la garderie, utilisez les coordonnées du Mission Dolores Park. |
endWaypoint[] |
objet (Waypoint) |
Il s'agit de la destination finale de l'itinéraire du véhicule, définie avec des coordonnées de latitude et de longitude ou un ID de lieu. Ce paramètre indique à l' optimiseur où le véhicule doit terminer l'itinéraire. Si vous ne définissez pas ce point de cheminement, l'optimiseur choisit l'une des prises en charge ou des livraisons comme fin de l'itinéraire. Pour ce scénario de garderie pour chiens, étant donné que le chauffeur doit terminer la journée à la garderie, utilisez les coordonnées du Mission Dolores Park. | |
costPerHour |
nombre | Il s'agit du coût encouru pour chaque heure d'utilisation d'un véhicule, quel que soit qu'il soit en déplacement ou à l'arrêt. Pour ce scénario de garderie pour chiens, utilisez ceci pour modéliser le salaire horaire d'un chauffeur. | |
startTimeWindows[] |
tableau d'objets (TimeWindow) |
Il s'agit de la plage acceptable pour que le chauffeur commence à conduire la camionnette pour les prises en charge de chiens du matin. | |
endTimeWindows[] |
tableau d'objets (TimeWindow) |
Il s'agit de la plage acceptable pour que le chauffeur termine de conduire la camionnette et se gare à la garderie. |