I am currently working on tweaking our usage of jsprit. We are currently using
RegretInsertionConcurrent and i found that switching to
RegretInsertionConcurrentFast speeds up our computation time by a factor of 2.
Is there any drawback in using this instead of the non-fast version? In the changelog it says something about dependencies between jobs and activities, what exactly does this mean?
The default version (RegretInsertionConcurrent) always calculates insertion score before inserting a new job for every unassigned job and every route. The fast version only calculates new scores after a job has been inserted, i.e. for any unassigned job but only for the route where the last job has been inserted to. Here it is assumed that the insertion score for other routes remain the same.
Let me now assume I have a relation that requires job A and B to be in the same route. Both are unassigned, i.e. they can be both assigned to any route as long as they are in the same route. If I now insert A into a route then actually - in line with the current logic - scores are recalculated for this route only, i.e. the unassigned job B gets a new score for this route, however, there are still scores for B in other routes that might be better than this. Thus, when it comes to assigning B, the algorithm might ignore the hard relation between A and B and assigns B to another route.
Perfect, that was what I was already suspecting, thanks for the clarification!