[Optimización] Cómo crear un objeto de optimización

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",
}