N-Ways
Documentation développeursOptimisation de tournées

Optimisation de tournées

Donnez-nous les arrêts et les livreurs ; recevez qui va où, dans quel ordre, et à quelle heure.

Sur cette page

Un livreur a douze colis pour cet après-midi ; ou trois livreurs s’en partagent quarante. L’optimisation de tournées décide qui prend quoi, dans quel ordre, pour le moins de temps possible sur la route au total, sans surcharger personne.

Planifier un lot

cURL
curl -X POST "https://nways.ng/maps/v1/routes/optimize?key=VOTRE_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"mode": "dispatch", "vehicles": [{"id": "bike-17", "start": {"lat": 6.5965, "lng": 3.3421}, "capacity": 8}], "stops": [{"id": "order-1", "location": {"lat": 6.6018, "lng": 3.3515}, "serviceS": 120}, {"id": "order-2", "location": {"lat": 6.6107, "lng": 3.3589}, "serviceS": 120}, {"id": "order-3", "location": {"lat": 6.5934, "lng": 3.3602}, "serviceS": 120}]}'
JavaScript
import { createClient } from '@nways/maps'

const nways = createClient({ key: 'VOTRE_CLE_API' })
const plan = await nways.optimize({
  mode: 'dispatch',
  vehicles: [{ id: 'bike-17', start: { lat: 6.5965, lng: 3.3421 }, capacity: 8 }],
  stops: [
    { id: 'order-1', location: { lat: 6.6018, lng: 3.3515 }, serviceS: 120 },
    { id: 'order-2', location: { lat: 6.6107, lng: 3.3589 }, serviceS: 120 },
    { id: 'order-3', location: { lat: 6.5934, lng: 3.3602 }, serviceS: 120 },
  ],
})
for (const r of plan.routes) console.log(r.vehicle, r.stops.join(' → '), Math.round(r.durationS / 60), 'min')

La requête

ChampDescription
stopsObligatoire. De 1 à 50 arrêts, chacun avec votre id, son location (un point, { postcode }, { ghanaPost } ou { plusCode }), sa demand (la place qu’il prend, 1 par défaut) et serviceS (les secondes passées sur place, jusqu’à 4 heures).
vehiclesObligatoire. De 1 à 5 véhicules, chacun avec un id, un start, un end facultatif (sinon il finit à son dernier arrêt) et une capacity (0 pour aucune limite).
modedrive (par défaut), van, okada, keke et danfo (qui respectent leurs interdictions, comme Itinéraires), motorbike et dispatch (motos de coursiers : seules les interdictions visant toutes les motos s’appliquent), walk ou bicycle.
geometryfalse pour n’obtenir que l’ordre et les temps, sans l’itinéraire de chaque véhicule.
langen ou fr, pour les instructions des itinéraires.

La réponse

  • routes : pour chaque véhicule utilisé, ses stops dans l’ordre de passage, arrivalsS (les secondes entre le départ et chaque arrêt), durationS, distanceM, load, et son route (comme dans Itinéraires), sauf si geometry vaut false.
  • unassigned : les arrêts qu’aucun véhicule n’a pu prendre (au-delà de toutes les capacités, ou dans une zone interdite pour le mode ; ceux-là sont aussi dans notAllowed, avec l’interdiction).
  • durationS : le temps de conduite et de service de tout le plan.

La réponse est un bon plan trouvé en quelques secondes, pas un plan dont on a prouvé qu’il est le meilleur. Référence