I apologize if people feel like this stuff have already been explained plenty of times. But after an extensive search I am still not sure exactly what is what, or which information is still correct.
Essentially I have been trying to figure out what solver VRP uses and how I might optimize or parallelize it. (I know that the conventional wisdom is to decompose the problem into smaller problems, and I will also do that, but in the end I still need to solve the VRP problem for something like 500-2000 deliveries ideally.)
My first question is, which solver does or-tools vrp use?
https://github.com/google/or-tools/issues/1867 already asked this question, and was directed to: https://developers.google.com/optimization/routing/routing_options#first_sol_options
However, there also seem to be something about original CP solver, and the new CP-SAT solver. If I look at: https://developers.google.com/optimization/routing/original_cp_solver I can see that the original CP solver seems to have been replaced by the CP-SAT solver. However, it isn't explicitly stated that this is also the case for VRP problems?, but it is placed under the routing problem section.
Is there any command for getting/seeing the underlying solver being used?
How to parallelize?
Assuming that it is CP-SAT that is used as the solver, then the question is how to actually parallelize it. From what I understand CP-SAT is designed to used with multiple workers https://github.com/google/or-tools/blob/stable/ortools/sat/docs/troubleshooting.md#improving-performance-with-multiple-workers However it does not actually give me the command to set the number of workers?
It should be noted that I am using the python API if that makes a difference.
How to optimize?
I haven't found much information on this
There is talk about trying all the various solver strategies in parallel https://developers.google.com/optimization/routing/routing_options
There is this thread, where it is suggested to set the max callback cache size: https://groups.google.com/g/or-tools-discuss/c/yWdZm6nJLxI/m/qaiJMF5EAAAJ
What performance should I expect?
For my particular problem I have the following runtimes (using 1 core), if I do not use GUIDED_LOCAL_SEARCH:
n_deliveries/n_vehicles/runtime (s)
50/25/6
100/50/30
200/100/177
300/150/311
If I enable GUIDED_LOCAL_SEARCH, I get the following times for 100 searches:
n_deliveries/n_vehicles/runtime (s)
50/25/12
100/50/5.3
200/100/13
300/150/12
500/250/41
The above problems, were run on 1 core out of 10 on my laptop, and uses negligble amounts of memory. (Multi-Capacitated, Pick and delivery, with dynamic start and end points, time-windows VRP.)