Some additional optimization resources (for metaheuristics, where you only have the objective/score function and no derivative): - "Essentials of Metaheuristics" by Sean Luke https://cs.gmu.edu/~sean/book/metaheuristics/ - "Clever Algorithms" by Jason Brownlee https://cleveralgorithms.com/ Timefold uses the metaheuristic algorithms in these books (Tabu Search, Late Acceptance, Simulated Annealing, etc.) to find near-…
Timefold looks very interesting. This might be irrelevant but have you looked at stuff like InfoBax [1]? [1] https://willieneis.github.io/bax-website/
var score = 0;
for (var shiftA : solution.getShifts()) {
for (var shiftB : solution.getShifts()) {
if (shiftA != shiftB && shiftA.getEmployee() == shiftB.getEmployee() && shiftA.overlaps(shiftB)) {
score -= 1;
}
}
}
return score
usually takes shift * shift evaluations of overlaps, we only check the shifts affected by the change (changing it from O(N^2) to O(1) usually).That being said, it might be useful for a move selector. I need to give it a more in depth reading.