You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While working on #1196, I've come across situations where two different heuristic solutions have exactly the same indicators.
Example on instance X-n251-k28 from the CVRP benchmarks:
Of course this is related to the fact that those benchmarks use euclidean distances with rounding and this is much less prone to happen with real-life instances: it would require different solutions with "real" indicators to be equal to the second and meter.
Yet the consequence is that in this situation one of the solution "shadows" the other and one of the local search phase is skipped, potentially resulting in a different overall solution. This was already a thing before but used to be deterministic since the deduplication was done from heuristic solutions stored in a std::vector. After #1196, this is now depending on which heuristic solution we get first., resulting in different solutions across runs in those edge cases.
The text was updated successfully, but these errors were encountered:
A way to prevent this would be to adjust SolutionIndicators::operator== to catch more differences. This is not trivial in general since we can't just "compare routes": we do not want to tag identical solutions as different simply because they have the same routes shuffled across vehicles.
In order to get a reasonably more robust filtering, we could maybe add more precision to the solutions indicators by storing (a hash based on) the ordered sizes of all routes.
While working on #1196, I've come across situations where two different heuristic solutions have exactly the same indicators.
Example on instance
X-n251-k28
from the CVRP benchmarks:Of course this is related to the fact that those benchmarks use euclidean distances with rounding and this is much less prone to happen with real-life instances: it would require different solutions with "real" indicators to be equal to the second and meter.
Yet the consequence is that in this situation one of the solution "shadows" the other and one of the local search phase is skipped, potentially resulting in a different overall solution. This was already a thing before but used to be deterministic since the deduplication was done from heuristic solutions stored in a
std::vector
. After #1196, this is now depending on which heuristic solution we get first., resulting in different solutions across runs in those edge cases.The text was updated successfully, but these errors were encountered: