-
Notifications
You must be signed in to change notification settings - Fork 366
Add implicit max tasks values #693
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
A couple results comparing this PR to current Usual CVRP benchmarksOn the usual CVRP benchmarks, average computing time (ms) reported in the table below show a steady reduction around -10% across various exploration levels.
The average reduction in applied operators is ~5% but this is highly dependent on the instance. If route sizes are close to the bound we use, we expect to see a higher impact. Digging a bit into the details, most of the computing times reductions are slight but a few are drastic.For example the total number of operators applied for Usual VRPTW benchmarksOn the Solomon/Homberger instances, the reduction in number of operators applied is much smaller, probably because the number of tasks in a route is much less constraining than other parameters like TW restrictions. On average, I'm seeing a -1.2% computing time reduction so much less than on pure-CVRP instances. Custom instancesI generated a few random instances with typical obvious Example of a huge instance where load balancing is done with all vehicles capacity set to Solutions are identical but solving time goes from 97.3 s down to 35.0 s (a 2.8x speedup). Diffing the operator logs shows that all operators changing route sizes are affected. The number of tested operators has been divided by more than 6 overall. 4,8c4,8
< MixedExchange,765971627,37
< TwoOpt,400954601,740
< ReverseTwoOpt,801909202,305
< Relocate,710053703,220
< OrOpt,399399470,98
---
> MixedExchange,30263589,37
> TwoOpt,23827245,740
> ReverseTwoOpt,46045064,305
> Relocate,30832775,220
> OrOpt,11339188,98
16c16
< Total,3498399756,13929
---
> Total,562419014,13929 |
We're not there yet as I'm actually seeing an increase of computing times for most VRPTW benchmarks and real-life instances. After some digging I found out that the (small) solving gain we get by cutting down on operators is overtaken by the loading time required to actually compute the bounds. The timing-based bounds currently require going through all pair of jobs for each vehicle to account for lower bounds on travel time to/from. This happens in If we drop the travel time part in the bound and only rely on setup + service times, then we can pre-process all job-related stuff and we'd be down to I think we can definitely leave with a looser bound not accounting for travel times since:
|
Issue
Fixes #648
Tasks
CHANGELOG.md