protected void runPhases() {
Iterator<Phase> it = phaseList.iterator();
while (!termination.isSolverTerminated(solverScope) && it.hasNext()) {
Phase phase = it.next();
phase.solve(solverScope);
if (it.hasNext()) {
solverScope.setWorkingSolutionFromBestSolution();
}
}
// TODO support doing round-robin of phases (only non-construction heuristics)