Skip to content

Commit a5ab479

Browse files
committed
chore: adapt to Move refactor upstream
1 parent ca80c22 commit a5ab479

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/main/java/ai/timefold/solver/benchmarks/micro/scoredirector/problems/AbstractProblem.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import ai.timefold.solver.core.impl.localsearch.decider.LocalSearchDecider;
2121
import ai.timefold.solver.core.impl.localsearch.scope.LocalSearchPhaseScope;
2222
import ai.timefold.solver.core.impl.localsearch.scope.LocalSearchStepScope;
23+
import ai.timefold.solver.core.impl.move.director.MoveDirector;
2324
import ai.timefold.solver.core.impl.score.director.InnerScoreDirector;
2425
import ai.timefold.solver.core.impl.score.director.InnerScoreDirectorFactory;
2526
import ai.timefold.solver.core.impl.solver.DefaultSolver;
@@ -35,6 +36,7 @@ abstract class AbstractProblem<Solution_> implements Problem {
3536
private final InnerScoreDirectorFactory<Solution_, ?> scoreDirectorFactory;
3637
private final Solution_ originalSolution;
3738

39+
private MoveDirector<Solution_> moveDirector;
3840
private InnerScoreDirector<Solution_, ?> scoreDirector;
3941
private MoveSelector<Solution_> moveSelector;
4042
private Iterator<Move<Solution_>> moveIterator;
@@ -104,6 +106,7 @@ public final void setupIteration() {
104106
scoreDirector.setWorkingSolution(scoreDirector.cloneSolution(originalSolution)); // Use fresh solution again.
105107
scoreDirector.triggerVariableListeners();
106108
scoreDirector.calculateScore();
109+
moveDirector = new MoveDirector<>(scoreDirector);
107110
// Prepare the lifecycle.
108111
var solverScope = new SolverScope<Solution_>();
109112
solverScope.setScoreDirector(scoreDirector);
@@ -146,10 +149,14 @@ public final void setupInvocation() {
146149
*/
147150
@Override
148151
public final Object runInvocation() {
152+
var scoreDirector = (InnerScoreDirector<Solution_, ?>) moveDirector.getScoreDirector();
149153
if (willUndo) {
150-
move = move.doMove(scoreDirector); // Do the move and prepare undo.
154+
try (var ephemeralMoveDirector = moveDirector.ephemeral()) {
155+
move.doMoveOnly(ephemeralMoveDirector.getScoreDirector());
156+
}
157+
} else {
158+
move.doMoveOnly(scoreDirector); // Do the move without any undo.
151159
}
152-
move.doMoveOnly(scoreDirector); // Run either the original move, or the undo.
153160
return scoreDirector.calculateScore();
154161
}
155162

0 commit comments

Comments
 (0)