Vroom or ORS? dynamic routes?


can someone explain for me the difference between VROOM and ORS? if they are fully integrated, how do they complement eachother? whichone should I choose?

Also, is it possible to optimise routes for vehicles individually, but when new jobs come in, decide which vehicle this is best added to, based on location, skills and time_window? any pointers how to do this would be helpful :slight_smile:

I must add, jobs could be added to specific vehicles, and they should stay with those vehicles.

or they can be added to the pool, and then they should be added to the most optimal vehicle, and can not be changed vehicle thereafter.

we would want pass a list of vehicles pool jobs could be added to, so we can handle some prioritisation (vehcile selection best on performance) on our end.


the openrouteservice is a route calculation tool.
It takes exactly two coordinates and a means of transportation and calculates the best route between them.

VROOM, on the other hand, solves the vehicle routing problem. That mean, given a fleet of vehicles and some job sites with known times between each locations (and possibly job and time constraints on vehicles and job sites) it calculates how to best serve all given job sites.

With this in mind, the ors complements VROOM such that it provides the numbers that vroom assumes to be known.

Thus, if you have any optimization problem with more than one vehicle or more than one job site or any constraints on vehicles and job sites, VROOM is what you’re looking for.
If you only want an answer to the question “What’s the fastest route from A to B”, you’re looking for the ors.

Hope that clears things up,
Best regards


thanks @jschnell that cleared things up, VROOM it is!

Can you comment on our usecase, where we would like to assign new jobs throughout the day to a list of existing vehicles and their existing routes? how to go about that?


if I understand correctly, you’d start out with a list of vehicles and jobs and would solve the corresponding VRP, and then let your fleet go on its way.

Then, over the day, new jobs would come in and you’d have to decide which vehicles should do them.

One solution that comes to mind is to update the problem (i.e. delete jobs already finished and update the locations of your vehicles), add the new jobs and solve it again. Note that this might change the routes of vehicles completely.

Another might be to just check which vehicle with the needed skills comes closest to the location and then let this vehicle handle it.

These would be two methods that I’d come up with from the top of my head. I think this depends heavily on what you’re actually planning to do though.

Best regards

it is okay that the route changes, but we do not want to re-assign jobs <> vehicles.

so when a job is added, we want to pass:

  • 1 vehicle = force this job to this vehicle
  • multiple vehicles = assign to the most optimal vehicle in from selection
  • no vehicle = assign to most optimal vehicle from fleet (pool)

once a job is assigned to a vehicle, unless it is rejected by the vehicle, it should remain with that vehicle…

when we assign a new job to a vehicle we will re-optimize their route to include the new job.

we could even potentially re-optimize the route after completing each job, but i guess that is only interesting if traffic is taken into account? is it?


if you want to add a job to one vehicle, you could just solve the problem consisting of this one vehicle and the jobs it currently has, plus the job added.

If you want to assign it to the most optimal vehicle, the question becomes what “most optimal” means. If you have a metric for this, you could solve the problem for one vehicle as above, iterating through the pool of vehicles, and compare you metric for every solution.

You could probably also play around with your original problem formulation, forcing jobs to vehicles by making them exclusive, e.g. by adding certain skills.

Traffic is not taken into account by the ors.

Best regards

ahh got it, so I could make the vehicle_id a skill, just as a group of vehicles (team_id) a skill, and :

  • as soon as I assign a job, add the vehicle_id as skill to that job
  • if i want to force a job, add the vehicle_id as skill
  • if I want to force to a team, add team_id as skill, and once assigned, replace for vehicle_id

then when i have a new job, I can feed all existing jobs <> vehicles and bind them with the skill tag to their current vehicle, and check which vehicle is best suited to take the new job based on my metric…

thanks a lot!

1 Like