I have a problem with the Tabu search. My solving problem is quite restrained, as most probably only one entity is movable, thus the number of steps is very limited.
By defining
<acceptor>
<solutionTabuSize>1000</solutionTabuSize>
</acceptor>
in the configuration file, I expect the Tabu search to only visit each solution once, but for some reason, this is not happening, as the algorithm bounces between solutions.
2015-09-06 13:17:20,612 [main] DEBUG LS step (0), time spent (256), score (-1hard/0medium/-1584soft), new best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@1af05b03).
2015-09-06 13:17:20,634 [main] DEBUG LS step (1), time spent (278), score (-1hard/0medium/-2202soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@437e951d).
2015-09-06 13:17:20,641 [main] DEBUG LS step (2), time spent (285), score (-1hard/0medium/-1584soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@1af05b03).
2015-09-06 13:17:20,656 [main] DEBUG LS step (3), time spent (300), score (-1hard/0medium/-2202soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@437e951d).
2015-09-06 13:17:20,664 [main] DEBUG LS step (4), time spent (308), score (-1hard/0medium/-1584soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@1af05b03).
2015-09-06 13:17:20,676 [main] DEBUG LS step (5), time spent (320), score (-1hard/0medium/-2202soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@437e951d).
2015-09-06 13:17:20,682 [main] DEBUG LS step (6), time spent (325), score (-1hard/0medium/-1584soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@1af05b03).
2015-09-06 13:17:20,688 [main] DEBUG LS step (7), time spent (332), score (-1hard/0medium/-2202soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@437e951d).
2015-09-06 13:17:20,698 [main] DEBUG LS step (8), time spent (342), score (-1hard/0medium/-1584soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@1af05b03).
2015-09-06 13:17:20,716 [main] DEBUG LS step (9), time spent (360), score (-1hard/0medium/-2202soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@437e951d).
2015-09-06 13:17:20,724 [main] DEBUG LS step (10), time spent (367), score (-1hard/0medium/-1584soft), best score (-1hard/0medium/-1584soft), accepted/selected move count (4/4), picked move (com.tiftapp.solver.domain.shift.ShiftAssignment@7003b6ac => com.tiftapp.solver.domain.employee.Employee@1af05b03).
As stated in the documentation, the solution class has equals and hashCode properly implemented.