diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedChangeMove.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedChangeMove.java index a0e69fa732..bb60995fb7 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedChangeMove.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedChangeMove.java @@ -29,12 +29,22 @@ */ public class ChainedChangeMove extends ChangeMove { - protected final SingletonInverseVariableSupply inverseVariableSupply; + protected final Object oldTrailingEntity; + protected final Object newTrailingEntity; public ChainedChangeMove(Object entity, GenuineVariableDescriptor variableDescriptor, SingletonInverseVariableSupply inverseVariableSupply, Object toPlanningValue) { super(entity, variableDescriptor, toPlanningValue); - this.inverseVariableSupply = inverseVariableSupply; + oldTrailingEntity = inverseVariableSupply.getInverseSingleton(entity); + newTrailingEntity = toPlanningValue == null ? null + : inverseVariableSupply.getInverseSingleton(toPlanningValue); + } + + public ChainedChangeMove(Object entity, GenuineVariableDescriptor variableDescriptor, Object toPlanningValue, + Object oldTrailingEntity, Object newTrailingEntity) { + super(entity, variableDescriptor, toPlanningValue); + this.oldTrailingEntity = oldTrailingEntity; + this.newTrailingEntity = newTrailingEntity; } // ************************************************************************ @@ -50,15 +60,12 @@ public boolean isMoveDoable(ScoreDirector scoreDirector) { @Override public ChainedChangeMove createUndoMove(ScoreDirector scoreDirector) { Object oldValue = variableDescriptor.getValue(entity); - return new ChainedChangeMove<>(entity, variableDescriptor, inverseVariableSupply, oldValue); + return new ChainedChangeMove<>(entity, variableDescriptor, oldValue, newTrailingEntity, oldTrailingEntity); } @Override protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) { Object oldValue = variableDescriptor.getValue(entity); - Object oldTrailingEntity = inverseVariableSupply.getInverseSingleton(entity); - Object newTrailingEntity = toPlanningValue == null ? null - : inverseVariableSupply.getInverseSingleton(toPlanningValue); // Close the old chain if (oldTrailingEntity != null) { scoreDirector.changeVariableFacade(variableDescriptor, oldTrailingEntity, oldValue); @@ -74,8 +81,10 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) @Override public ChainedChangeMove rebase(ScoreDirector destinationScoreDirector) { return new ChainedChangeMove<>(destinationScoreDirector.lookUpWorkingObject(entity), - variableDescriptor, inverseVariableSupply, - destinationScoreDirector.lookUpWorkingObject(toPlanningValue)); + variableDescriptor, + destinationScoreDirector.lookUpWorkingObject(toPlanningValue), + destinationScoreDirector.lookUpWorkingObject(oldTrailingEntity), + destinationScoreDirector.lookUpWorkingObject(newTrailingEntity)); } } diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedSwapMove.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedSwapMove.java index af786d9eef..0b91a1f948 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedSwapMove.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/ChainedSwapMove.java @@ -16,6 +16,7 @@ package org.optaplanner.core.impl.heuristic.selector.move.generic.chained; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -30,12 +31,26 @@ */ public class ChainedSwapMove extends SwapMove { - protected final List inverseVariableSupplyList; + protected final List oldLeftTrailingEntityList; + protected final List oldRightTrailingEntityList; public ChainedSwapMove(List> variableDescriptorList, List inverseVariableSupplyList, Object leftEntity, Object rightEntity) { super(variableDescriptorList, leftEntity, rightEntity); - this.inverseVariableSupplyList = inverseVariableSupplyList; + oldLeftTrailingEntityList = new ArrayList<>(inverseVariableSupplyList.size()); + oldRightTrailingEntityList = new ArrayList<>(inverseVariableSupplyList.size()); + for (SingletonInverseVariableSupply inverseVariableSupply : inverseVariableSupplyList) { + oldLeftTrailingEntityList.add(inverseVariableSupply.getInverseSingleton(leftEntity)); + oldRightTrailingEntityList.add(inverseVariableSupply.getInverseSingleton(rightEntity)); + } + } + + public ChainedSwapMove(List> genuineVariableDescriptors, + Object leftEntity, Object rightEntity, + List oldLeftTrailingEntityList, List oldRightTrailingEntityList) { + super(genuineVariableDescriptors, leftEntity, rightEntity); + this.oldLeftTrailingEntityList = oldLeftTrailingEntityList; + this.oldRightTrailingEntityList = oldRightTrailingEntityList; } // ************************************************************************ @@ -44,7 +59,7 @@ public ChainedSwapMove(List> variableDescri @Override public ChainedSwapMove createUndoMove(ScoreDirector scoreDirector) { - return new ChainedSwapMove<>(variableDescriptorList, inverseVariableSupplyList, rightEntity, leftEntity); + return new ChainedSwapMove<>(variableDescriptorList, rightEntity, leftEntity, oldLeftTrailingEntityList, oldRightTrailingEntityList); } @Override @@ -58,9 +73,8 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) scoreDirector.changeVariableFacade(variableDescriptor, leftEntity, oldRightValue); scoreDirector.changeVariableFacade(variableDescriptor, rightEntity, oldLeftValue); } else { - SingletonInverseVariableSupply inverseVariableSupply = inverseVariableSupplyList.get(i); - Object oldLeftTrailingEntity = inverseVariableSupply.getInverseSingleton(leftEntity); - Object oldRightTrailingEntity = inverseVariableSupply.getInverseSingleton(rightEntity); + Object oldLeftTrailingEntity = oldLeftTrailingEntityList.get(i); + Object oldRightTrailingEntity = oldRightTrailingEntityList.get(i); if (oldRightValue == leftEntity) { // Change the right entity scoreDirector.changeVariableFacade(variableDescriptor, rightEntity, oldLeftValue); @@ -100,9 +114,11 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) @Override public ChainedSwapMove rebase(ScoreDirector destinationScoreDirector) { - return new ChainedSwapMove<>(variableDescriptorList, inverseVariableSupplyList, + return new ChainedSwapMove<>(variableDescriptorList, destinationScoreDirector.lookUpWorkingObject(leftEntity), - destinationScoreDirector.lookUpWorkingObject(rightEntity)); + destinationScoreDirector.lookUpWorkingObject(rightEntity), + rebaseList(oldLeftTrailingEntityList, destinationScoreDirector), + rebaseList(oldRightTrailingEntityList, destinationScoreDirector)); } } diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMove.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMove.java index 946ff9a335..014e7cd8d3 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMove.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMove.java @@ -36,15 +36,28 @@ public class SubChainChangeMove extends AbstractMove { protected final SubChain subChain; protected final GenuineVariableDescriptor variableDescriptor; - protected final SingletonInverseVariableSupply inverseVariableSupply; protected final Object toPlanningValue; + protected final Object oldTrailingLastEntity; + protected final Object newTrailingEntity; + public SubChainChangeMove(SubChain subChain, GenuineVariableDescriptor variableDescriptor, SingletonInverseVariableSupply inverseVariableSupply, Object toPlanningValue) { this.subChain = subChain; this.variableDescriptor = variableDescriptor; - this.inverseVariableSupply = inverseVariableSupply; this.toPlanningValue = toPlanningValue; + oldTrailingLastEntity = inverseVariableSupply.getInverseSingleton(subChain.getLastEntity()); + newTrailingEntity = toPlanningValue == null ? null + : inverseVariableSupply.getInverseSingleton(toPlanningValue); + } + + public SubChainChangeMove(SubChain subChain, GenuineVariableDescriptor variableDescriptor, + Object toPlanningValue, Object oldTrailingLastEntity, Object newTrailingEntity) { + this.subChain = subChain; + this.variableDescriptor = variableDescriptor; + this.toPlanningValue = toPlanningValue; + this.oldTrailingLastEntity = oldTrailingLastEntity; + this.newTrailingEntity = newTrailingEntity; } public String getVariableName() { @@ -75,7 +88,7 @@ public boolean isMoveDoable(ScoreDirector scoreDirector) { @Override public SubChainChangeMove createUndoMove(ScoreDirector scoreDirector) { Object oldFirstValue = variableDescriptor.getValue(subChain.getFirstEntity()); - return new SubChainChangeMove<>(subChain, variableDescriptor, inverseVariableSupply, oldFirstValue); + return new SubChainChangeMove<>(subChain, variableDescriptor, oldFirstValue, newTrailingEntity, oldTrailingLastEntity); } @Override @@ -83,9 +96,6 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) Object firstEntity = subChain.getFirstEntity(); Object lastEntity = subChain.getLastEntity(); Object oldFirstValue = variableDescriptor.getValue(firstEntity); - Object oldTrailingLastEntity = inverseVariableSupply.getInverseSingleton(lastEntity); - Object newTrailingEntity = toPlanningValue == null ? null - : inverseVariableSupply.getInverseSingleton(toPlanningValue); // Close the old chain if (oldTrailingLastEntity != null) { scoreDirector.changeVariableFacade(variableDescriptor, oldTrailingLastEntity, oldFirstValue); @@ -101,8 +111,10 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) @Override public SubChainChangeMove rebase(ScoreDirector destinationScoreDirector) { return new SubChainChangeMove<>(subChain.rebase(destinationScoreDirector), - variableDescriptor, inverseVariableSupply, - destinationScoreDirector.lookUpWorkingObject(toPlanningValue)); + variableDescriptor, + destinationScoreDirector.lookUpWorkingObject(toPlanningValue), + destinationScoreDirector.lookUpWorkingObject(oldTrailingLastEntity), + destinationScoreDirector.lookUpWorkingObject(newTrailingEntity)); } // ************************************************************************ diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingChangeMove.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingChangeMove.java index 8ea2b5c032..f94b394488 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingChangeMove.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingChangeMove.java @@ -36,15 +36,28 @@ public class SubChainReversingChangeMove extends AbstractMove variableDescriptor; - protected final SingletonInverseVariableSupply inverseVariableSupply; protected final Object toPlanningValue; + protected final Object oldTrailingLastEntity; + protected final Object newTrailingEntity; + public SubChainReversingChangeMove(SubChain subChain, GenuineVariableDescriptor variableDescriptor, SingletonInverseVariableSupply inverseVariableSupply, Object toPlanningValue) { this.subChain = subChain; this.variableDescriptor = variableDescriptor; - this.inverseVariableSupply = inverseVariableSupply; this.toPlanningValue = toPlanningValue; + oldTrailingLastEntity = inverseVariableSupply.getInverseSingleton(subChain.getLastEntity()); + newTrailingEntity = toPlanningValue == null ? null + : inverseVariableSupply.getInverseSingleton(toPlanningValue); + } + + public SubChainReversingChangeMove(SubChain subChain, GenuineVariableDescriptor variableDescriptor, + Object toPlanningValue, Object oldTrailingLastEntity, Object newTrailingEntity) { + this.subChain = subChain; + this.variableDescriptor = variableDescriptor; + this.toPlanningValue = toPlanningValue; + this.oldTrailingLastEntity = oldTrailingLastEntity; + this.newTrailingEntity = newTrailingEntity; } public String getVariableName() { @@ -75,7 +88,14 @@ public boolean isMoveDoable(ScoreDirector scoreDirector) { @Override public SubChainReversingChangeMove createUndoMove(ScoreDirector scoreDirector) { Object oldFirstValue = variableDescriptor.getValue(subChain.getFirstEntity()); - return new SubChainReversingChangeMove<>(subChain.reverse(), variableDescriptor, inverseVariableSupply, oldFirstValue); + boolean unmovedReverse = toPlanningValue == oldFirstValue; + if (!unmovedReverse) { + return new SubChainReversingChangeMove<>(subChain.reverse(), variableDescriptor, oldFirstValue, + newTrailingEntity, oldTrailingLastEntity); + } else { + return new SubChainReversingChangeMove<>(subChain.reverse(), variableDescriptor, oldFirstValue, + oldTrailingLastEntity, newTrailingEntity); + } } @Override @@ -83,10 +103,7 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) Object firstEntity = subChain.getFirstEntity(); Object lastEntity = subChain.getLastEntity(); Object oldFirstValue = variableDescriptor.getValue(firstEntity); - Object oldTrailingLastEntity = inverseVariableSupply.getInverseSingleton(lastEntity); - Object newTrailingEntity = toPlanningValue == null ? null - : inverseVariableSupply.getInverseSingleton(toPlanningValue); - boolean unmovedReverse = newTrailingEntity == firstEntity; + boolean unmovedReverse = toPlanningValue == oldFirstValue; // Close the old chain if (!unmovedReverse) { if (oldTrailingLastEntity != null) { @@ -122,8 +139,10 @@ private void reverseChain(ScoreDirector scoreDirector, Object entity, @Override public SubChainReversingChangeMove rebase(ScoreDirector destinationScoreDirector) { return new SubChainReversingChangeMove<>(subChain.rebase(destinationScoreDirector), - variableDescriptor, inverseVariableSupply, - destinationScoreDirector.lookUpWorkingObject(toPlanningValue)); + variableDescriptor, + destinationScoreDirector.lookUpWorkingObject(toPlanningValue), + destinationScoreDirector.lookUpWorkingObject(oldTrailingLastEntity), + destinationScoreDirector.lookUpWorkingObject(newTrailingEntity)); } // ************************************************************************ diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingSwapMove.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingSwapMove.java index 22db827920..c2619c0126 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingSwapMove.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainReversingSwapMove.java @@ -37,17 +37,30 @@ public class SubChainReversingSwapMove extends AbstractMove { private final GenuineVariableDescriptor variableDescriptor; - protected final SingletonInverseVariableSupply inverseVariableSupply; - private final SubChain leftSubChain; - private final SubChain rightSubChain; + protected final SubChain leftSubChain; + protected final Object leftTrailingLastEntity; + protected final SubChain rightSubChain; + protected final Object rightTrailingLastEntity; - public SubChainReversingSwapMove(GenuineVariableDescriptor variableDescriptor, SingletonInverseVariableSupply inverseVariableSupply, + public SubChainReversingSwapMove(GenuineVariableDescriptor variableDescriptor, + SingletonInverseVariableSupply inverseVariableSupply, SubChain leftSubChain, SubChain rightSubChain) { this.variableDescriptor = variableDescriptor; - this.inverseVariableSupply = inverseVariableSupply; this.leftSubChain = leftSubChain; + leftTrailingLastEntity = inverseVariableSupply.getInverseSingleton(leftSubChain.getLastEntity()); this.rightSubChain = rightSubChain; + rightTrailingLastEntity = inverseVariableSupply.getInverseSingleton(rightSubChain.getLastEntity()); + } + + public SubChainReversingSwapMove(GenuineVariableDescriptor variableDescriptor, + SubChain leftSubChain, Object leftTrailingLastEntity, + SubChain rightSubChain, Object rightTrailingLastEntity) { + this.variableDescriptor = variableDescriptor; + this.leftSubChain = leftSubChain; + this.rightSubChain = rightSubChain; + this.leftTrailingLastEntity = leftTrailingLastEntity; + this.rightTrailingLastEntity = rightTrailingLastEntity; } public SubChain getLeftSubChain() { @@ -75,8 +88,9 @@ public boolean isMoveDoable(ScoreDirector scoreDirector) { @Override public SubChainReversingSwapMove createUndoMove(ScoreDirector scoreDirector) { - return new SubChainReversingSwapMove<>(variableDescriptor, inverseVariableSupply, - rightSubChain.reverse(), leftSubChain.reverse()); + return new SubChainReversingSwapMove<>(variableDescriptor, + rightSubChain.reverse(), leftTrailingLastEntity, + leftSubChain.reverse(), rightTrailingLastEntity); } @Override @@ -84,11 +98,9 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) Object leftFirstEntity = leftSubChain.getFirstEntity(); Object leftFirstValue = variableDescriptor.getValue(leftFirstEntity); Object leftLastEntity = leftSubChain.getLastEntity(); - Object leftTrailingLastEntity = inverseVariableSupply.getInverseSingleton(leftLastEntity); Object rightFirstEntity = rightSubChain.getFirstEntity(); Object rightFirstValue = variableDescriptor.getValue(rightFirstEntity); Object rightLastEntity = rightSubChain.getLastEntity(); - Object rightTrailingLastEntity = inverseVariableSupply.getInverseSingleton(rightLastEntity); Object leftLastEntityValue = variableDescriptor.getValue(leftLastEntity); Object rightLastEntityValue = variableDescriptor.getValue(rightLastEntity); // Change the entities @@ -129,9 +141,11 @@ private void reverseChain(ScoreDirector scoreDirector, Object entity, @Override public SubChainReversingSwapMove rebase(ScoreDirector destinationScoreDirector) { - return new SubChainReversingSwapMove<>(variableDescriptor, inverseVariableSupply, + return new SubChainReversingSwapMove<>(variableDescriptor, leftSubChain.rebase(destinationScoreDirector), - rightSubChain.rebase(destinationScoreDirector)); + destinationScoreDirector.lookUpWorkingObject(leftTrailingLastEntity), + rightSubChain.rebase(destinationScoreDirector), + destinationScoreDirector.lookUpWorkingObject(rightTrailingLastEntity)); } // ************************************************************************ diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMove.java b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMove.java index b809fd52be..b124c7c0f4 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMove.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMove.java @@ -37,17 +37,30 @@ public class SubChainSwapMove extends AbstractMove { protected final GenuineVariableDescriptor variableDescriptor; - protected final SingletonInverseVariableSupply inverseVariableSupply; protected final SubChain leftSubChain; + protected final Object leftTrailingLastEntity; protected final SubChain rightSubChain; + protected final Object rightTrailingLastEntity; - public SubChainSwapMove(GenuineVariableDescriptor variableDescriptor, SingletonInverseVariableSupply inverseVariableSupply, + public SubChainSwapMove(GenuineVariableDescriptor variableDescriptor, + SingletonInverseVariableSupply inverseVariableSupply, SubChain leftSubChain, SubChain rightSubChain) { this.variableDescriptor = variableDescriptor; - this.inverseVariableSupply = inverseVariableSupply; this.leftSubChain = leftSubChain; + leftTrailingLastEntity = inverseVariableSupply.getInverseSingleton(leftSubChain.getLastEntity()); this.rightSubChain = rightSubChain; + rightTrailingLastEntity = inverseVariableSupply.getInverseSingleton(rightSubChain.getLastEntity()); + } + + public SubChainSwapMove(GenuineVariableDescriptor variableDescriptor, + SubChain leftSubChain, Object leftTrailingLastEntity, SubChain rightSubChain, + Object rightTrailingLastEntity) { + this.variableDescriptor = variableDescriptor; + this.leftSubChain = leftSubChain; + this.rightSubChain = rightSubChain; + this.leftTrailingLastEntity = leftTrailingLastEntity; + this.rightTrailingLastEntity = rightTrailingLastEntity; } public String getVariableName() { @@ -79,8 +92,9 @@ public boolean isMoveDoable(ScoreDirector scoreDirector) { @Override public SubChainSwapMove createUndoMove(ScoreDirector scoreDirector) { - return new SubChainSwapMove<>(variableDescriptor, inverseVariableSupply, - rightSubChain, leftSubChain); + return new SubChainSwapMove<>(variableDescriptor, + rightSubChain, leftTrailingLastEntity, + leftSubChain, rightTrailingLastEntity); } @Override @@ -88,11 +102,9 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) Object leftFirstEntity = leftSubChain.getFirstEntity(); Object leftFirstValue = variableDescriptor.getValue(leftFirstEntity); Object leftLastEntity = leftSubChain.getLastEntity(); - Object leftTrailingLastEntity = inverseVariableSupply.getInverseSingleton(leftLastEntity); Object rightFirstEntity = rightSubChain.getFirstEntity(); Object rightFirstValue = variableDescriptor.getValue(rightFirstEntity); Object rightLastEntity = rightSubChain.getLastEntity(); - Object rightTrailingLastEntity = inverseVariableSupply.getInverseSingleton(rightLastEntity); // Change the entities if (leftLastEntity != rightFirstValue) { scoreDirector.changeVariableFacade(variableDescriptor, leftFirstEntity, rightFirstValue); @@ -119,9 +131,11 @@ protected void doMoveOnGenuineVariables(ScoreDirector scoreDirector) @Override public SubChainSwapMove rebase(ScoreDirector destinationScoreDirector) { - return new SubChainSwapMove<>(variableDescriptor, inverseVariableSupply, + return new SubChainSwapMove<>(variableDescriptor, leftSubChain.rebase(destinationScoreDirector), - rightSubChain.rebase(destinationScoreDirector)); + destinationScoreDirector.lookUpWorkingObject(leftTrailingLastEntity), + rightSubChain.rebase(destinationScoreDirector), + destinationScoreDirector.lookUpWorkingObject(rightTrailingLastEntity)); } // ************************************************************************ diff --git a/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/benchmark/tspBenchmarkConfig.xml b/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/benchmark/tspBenchmarkConfig.xml index fe7dd6256c..98c107b671 100644 --- a/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/benchmark/tspBenchmarkConfig.xml +++ b/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/benchmark/tspBenchmarkConfig.xml @@ -47,7 +47,7 @@ - PHASE + STEP SHUFFLED diff --git a/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/solver/tspSolverConfig.xml b/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/solver/tspSolverConfig.xml index b15f0772b6..524e103013 100644 --- a/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/solver/tspSolverConfig.xml +++ b/optaplanner-examples/src/main/resources/org/optaplanner/examples/tsp/solver/tspSolverConfig.xml @@ -25,7 +25,7 @@ - PHASE + STEP SHUFFLED