Crear un objeto de optimización
La API
de optimización Optiroute permite integrar el motor de optimización Optiroute a tu propia plataforma. Si cuentas con tu propia plataforma para gestionar pedidos puedes llamar a la API
de optimización Optiroute para obtener la ruta óptima de despacho de acuerdo a tu flota, incluyendo información asociada como tiempos de viaje, kilómetros recorridos y rutas usadas.
Optimización asíncrona
La API
de Optimización Optiroute funciona en base a un modelo asíncrono de llamadas REST
; cada optimización que realices se guardará como un objeto en nuestro sistema, el cual puedes acceder para optimizar u obtener el resultado del proceso utilizando diversos endpoints
, independiente de su creación.
Creación de Optimizaciones
Para crear un objeto de optimización debes hacer un POST
con los datos al siguiente endpoint
:
https://app.optiroute.cl/api/v1/optimizations/
Para crear optimizaciones a través de este endpoint
debes incluir 3 objetos en la llamada, Configuration
, Customers
y Vehicles
Configuración de optimización
Este objeto corresponde a la configuración utilizada para optimizar los datos ingresados y obtener la rutas de despacho necesarias.
Un ejemplo de objeto de configuración es el siguiente.
"configuration": { "name": "string", "departure_date": "2021-03-12", "start_time": "08:00", "end_time": "18:00", "optimization_type": "distance", "speed_factor": 1, "delivery_time": 5, "use_load_balance": false, "use_time_balance": false, "minimize_fleet": true, "force_use_all_vehicles": false, "use_time_windows": true, "use_capacity": true, "optimize_start_time": false, "use_exhaustive_search": false, "exhaustive_search_time": 1, "fleet_kind": 0, "use_open_routes": false },
Los campos name
, departure_date
, start_time
y end_time
son obligatorios.
Clientes
El objeto customers
del input corresponde a un hash de todos los los puntos de reparto o entrega de las rutas.
Un ejemplo de objeto de clientes es el siguiente.
customers": { "name": "string", "address": { "name": "string", "address": "string", "latitude": -33.0098962, "longitude": -71.5496237 }, "time_window_start": "10:00", "time_window_end": "11:00", "delivery_time": 0, "demand": 0, "priority": 0, "skills": ["refrigerado"] },
Para los clientes los campos obligatorios son name
y address
.
Vehículos
El tercer objeto necesario para crear tu optimización corresponde a los vehículos utilizados para llegar a cada uno de las direcciones de clientes ingresadas.
Este objeto corresponde a un hash de estos vehículos
Un ejemplo de objeto de vehículo es el siguiente.
"vehicles": { "name": "string", "driver": "string", "start_warehouse": { "name": "string", "address": { "name": "string", "address": "string", "latitude": -33.0098962, "longitude": -71.5496237 }, }, "end_warehouse": { "name": "string", "address": { "name": "string", "address": "string", "latitude": -33.0098962, "longitude": -71.5496237 }, }, "capacity": 0, "break_start": "14:00", "break_end": "15:00", "route_skills": ["refrigerado"], "speed_factor": 1, "shift_start": "09:00", "shift_end": "18:00" }
Los campos name
, driver
y start_warehouse
son obligatorios para crear vehículos.
Input completo
Un ejemplo de un input
completo para crear un objeto optimización corresponde al siguiente:
{ "configuration": { "name": "Test", "departure_date": "2019-12-07", "start_time": "09:00", "end_time": "18:00", "optimization_type": "distance", "speed_factor": 1, "delivery_time": 10, "use_load_balance": false, "use_time_windows": true, "use_capacity": true, "optimize_start_time": false, "use_exhaustive_search": false, "exhaustive_search_time": 1 }, "customers": [ { "name": "Optiroute HQ", "address": { "name": "Bascuñan 1556 Viña del Mar", "address": "Bascuñan 1556 Viña del Mar", "latitude": -33.0281222, "longitude": -71.5807181 }, "demand": 1, "priority": 0, "skills": [ "Skill A" ] }, { "name": "Rand norte", "address": { "name": "8 Nte. 313, Viña del Mar", "address": "8 Nte. 313, Viña del Mar", "latitude": -33.0145786, "longitude": -71.5568975 }, "demand": 1, "priority": 0, "skills": [ "Skill B" ] }, { "name": "Rand oriente", "address": { "name": "1 Ote. 1244, Viña del Mar", "address": "1 Ote. 1244, Viña del Mar", "latitude": -33.0098962, "longitude": -71.5496237 }, "demand": 1, "priority": 0 }, { "name": "Rand latlong", "address": { "name": "Rand sur", "address": "Rand sur", "latitude": -33.0282161, "longitude": -71.5784855 }, "delivery_time": 20, "demand": 1, "priority": 0, "skills": [ "Skill A" ] } ], "vehicles": [ { "name": "Auto 1", "driver": "Auto 1", "start_warehouse": { "name": "Arlegui 441 Viña del Mar", "address": { "name": "1 Ote. 1244, Viña del Mar", "address": "1 Ote. 1244, Viña del Mar", "latitude": -33.0284449, "longitude": -71.5528639 } }, "end_warehouse": { "name": "Arlegui 4 Viña del Mar", "address": { "name": "Arlegui 441 Viña del Mar", "address": "Arlegui 441 Viña del Mar", "latitude": -33.0232505, "longitude": -71.5583657 } }, "capacity": 100, "break_start": "12:00", "break_end": "12:30", "route_skills": [ "Skill B" ] } ] }
Recuerda que puedes probar este json en swagger (https://app.optiroute.cl/swagger/). Esta herramienta permite probar la API de manera fácil e intuitiva.
Retorno de la creación
Cuando ingreses una optimización en el endpoint
de creación este devolverá inmediatamente con un código HTTP
202, dos códigos route_plan_id
y reference
, este último te servirá para identificar el objeto recién creado.
Un ejemplo de retorno correcto corresponde a:
{ "route_plan_id": 983749, "reference": "xxf3949382c002", }