Le message OptimizeToursRequest
(REST, gRPC) contient un certain nombre de
propriétés liées à
coûts. Ensemble, ces paramètres de coût représentent
le modèle de coûts. Le modèle de coût capture de nombreux aspects généraux de la requête
des objectifs d'optimisation, tels que:
- Privilégier les itinéraires
Vehicle
plus rapides sur les itinéraires plus courts ou dans l'autre sens environ - Déterminer si le coût de diffusion d'un
Shipment
vaut la valeur de la Progression deShipment
- Effectuer des retraits et des livraisons dans les créneaux horaires uniquement si cela est rentable
Voir un exemple de requête avec des coûts
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
propriétés de coût
Le message Vehicle
(REST, gRPC) comporte plusieurs propriétés de coût:
Vehicle.cost_per_hour
: représente le coût d'utilisation d'un véhicule par heure. (y compris les temps de transport, d'attente, de visite et de pause).Vehicle.cost_per_kilometer
: représente le coût par kilomètre parcouru par le véhicule.Vehicle.cost_per_traveled_hour
: représente le coût d'utilisation d'un véhicule. uniquement pendant le transport, à l'exception des temps d'attente, de visite et de pause.
Ces paramètres de coût permettent à l'optimiseur de faire le lien entre le temps et la distance parcourue
les compromis. Les coûts engendrés par l'itinéraire optimisé apparaissent dans la réponse.
message en tant que metrics.costs
:
À mesure que costPerHour
augmente, l'optimiseur tente de trouver des routes plus rapides
qui ne correspondent peut-être pas aux itinéraires les plus courts. Dans cet exemple, l'itinéraire le plus rapide
est la plus courte. Par conséquent, les modifications
apportées aux paramètres de coût ont peu d'effet.
Shipment
propriétés de coût
Le message Shipment
(REST, gRPC) a également plusieurs coûts
paramètres:
Shipment.penalty_cost
représente le coût engendré en ignorant la valeur livraison.Shipment.VisitRequest.cost
représente le coût d'un retrait spécifique la livraison, utilisée principalement pour permettre des compromis en termes de coûts entre plusieurs retraits pour un même envoi.
Shipment
paramètres de coût utilisent les mêmes unités sans dimension que le coût Vehicle
.
paramètres. Le coût facturé pour Shipment
dépasse le coût de sa pénalité, le
Shipment
n'est pas inclus sur l'itinéraire d'aucun Vehicle
et apparaît à la place dans le
skipped_shipments
dans le message de réponse.
ShipmentModel
propriétés de coût
Le message ShipmentModel
(REST, gRPC) inclut un seul coût
de projet, globalDurationCostPerHour
. Ces frais sont basés sur le montant total
de temps nécessaire pour que tous les véhicules terminent leurs ShipmentRoute
. En hausse
globalDurationCostPerHour
donne la priorité aux livraisons anticipées.
Propriétés de coût de la réponse d'optimisation des routes
Le message OptimizeToursResponse
(REST, gRPC) comporte des propriétés de coût.
qui représentent les coûts encourus lors du processus d'exécution des ShipmentRoute
.
Les propriétés metrics.costs
et metrics.totalCost
représentent le nombre de
d'unités de coûts pour toutes les routes de la réponse. Chaque entrée routes
a
routeCosts
et routeTotalCosts
établissements, ce qui représente les coûts correspondants
route spécifique.
Afficher une réponse à l'exemple de requête avec des coûts
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
Dans l'exemple de réponse, les metrics.costs
de premier niveau sont les suivants:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
La valeur model.shipments.penalty_cost
représente le coût dû à
livraisons ignorées. La propriété skippedShipments
indique les livraisons
ignorée.
Dans cet exemple, seul model.shipments[1]
est ignoré dans l'exemple de requête.
model.shipments[1]
a un coût de pénalité de 5 unités, ce qui correspond au total
model.shipments.penalty_cost
dans l'exemple de réponse. La livraison est presque terminée
penaltyCost
par rapport aux 40,0 costPerHour
et 10,0 de Vehicle
costPerKilometer
, il est plus rentable de
sauter la livraison que de
le compléter.
Sujet avancé: coûts et contraintes souples
Plusieurs propriétés de message OptimizeToursRequest
(REST, gRPC)
représentent des contraintes souples, qui entraînent des frais lorsqu'elles
ne peut pas être satisfaite.
Par exemple, les contraintes LoadLimit
du véhicule (REST, gRPC) ont
softMaxLoad
et costPerUnitAboveSoftMax
. Ensemble, ils entraînent une
un coût proportionnel aux unités de charge qui dépassent softMaxLoad
, ce qui permet
ne peut être dépassée que si cela est pertinent du point de vue des coûts.
De même, les contraintes TimeWindow
(REST, gRPC) ont
soft_start_time
et soft_end_time
, avec les propriétés correspondantes
cost_per_hour_before_soft_start_time
et cost_per_hour_after_soft_end_time
qui sont engagés en fonction de l'avance ou du retard de l'événement de contrainte
par rapport à TimeWindow
.
Comme pour tous les paramètres de modèle de coût, les coûts associés à une contrainte souple sont exprimés dans le les mêmes unités sans dimension que les autres paramètres de coût.
Les contraintes LoadLimit
sont traitées en détail dans
Demandes et limites de chargement : Les contraintes TimeWindow
sont traitées en détail
dans la section Contraintes liées aux périodes de retrait et de livraison.