I've stumbled into an obviously suboptimal solution on a real-life instance where:
- 1 job ends up unassigned;
- there is an empty (unused) vehicle that could serve it.
After investigating, it turns out that the unassigned job has been dropped at some point by an UnassignedExchange move during one of the local search phases. This happens in the middle of a rearranging sequence allowing another route to re-order and insert other unassigned jobs. The core problem is that the job discarded in this UnassignedExchange operation is never tested against other vehicle candidates than the one involved into the move. As a result it is never inserted in the available empty vehicle.
That is kind of an edge case in the sense that on top of the above chain of events, we need that exact solution to be the best available in term of number of assigned task for the problem to show up, i.e. finding a "full" solution is hard enough to not happen through other parallel searches.
I've stumbled into an obviously suboptimal solution on a real-life instance where:
After investigating, it turns out that the unassigned job has been dropped at some point by an
UnassignedExchangemove during one of the local search phases. This happens in the middle of a rearranging sequence allowing another route to re-order and insert other unassigned jobs. The core problem is that the job discarded in thisUnassignedExchangeoperation is never tested against other vehicle candidates than the one involved into the move. As a result it is never inserted in the available empty vehicle.That is kind of an edge case in the sense that on top of the above chain of events, we need that exact solution to be the best available in term of number of assigned task for the problem to show up, i.e. finding a "full" solution is hard enough to not happen through other parallel searches.