Most of the above issues have been fixed and were the result of some bugs on our part.
However, we have determined that this isn’t just a matter of loose job dependencies. If you take a look at my description, we want more than job dependencies: we want atomicity. We want to ensure that if task A2 cannot be done, then A1 cannot be done either. They are either all done, or none of them are done. How would you go about implementing this concept of atomicity? (should I create a new thread?)
My plan was to override the cost function (we already have a highly modified cost function) to achieve this, so that it would be better to leave the two tasks (A1 and A2) out than to leave one of them (A1 or A2). In practice, we give additional penalties if either A1 or A2 are left out, but not if both are left out or if both are assigned. The penalties are made in such a way that they overcome the individual unassigned penalties.
The main problem now seems to be that JSprit never tries the scenario where both A1 and A2 are excluded, and is thus leaving A1 (because it doesn’t know that removing it would be better). Is there some setting we can tune for this, perhaps related to the ruin step? We just need JSprit to experiment removing some jobs to see if that improves the score (which it will)
Thank you again, and do say if I should open a new topic for this
EDIT: I’ve decided it is best to open a new topic