Skip to content

Commit 7caf3c8

Browse files
committed
chore: mixed model error for LS
1 parent 65bf7db commit 7caf3c8

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ public LocalSearchPhase<Solution_> buildPhase(int phaseIndex, boolean lastInitia
6868
The solver configuration enabled both move selectors and Move Streams.
6969
These are mutually exclusive features, please pick one or the other.""");
7070
}
71-
71+
if (solverConfigPolicy.getSolutionDescriptor().hasBothBasicAndListVariables()) {
72+
throw new UnsupportedOperationException(
73+
"A mixed model using both basic and list variables is not supported yet.");
74+
}
7275
var phaseConfigPolicy = solverConfigPolicy.createPhaseConfigPolicy();
7376
var phaseTermination = buildPhaseTermination(phaseConfigPolicy, solverTermination);
7477
var decider = moveStreamsEnabled

core/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import ai.timefold.solver.core.config.constructionheuristic.placer.QueuedValuePlacerConfig;
2323
import ai.timefold.solver.core.config.heuristic.selector.move.generic.list.ListChangeMoveSelectorConfig;
2424
import ai.timefold.solver.core.config.heuristic.selector.value.ValueSelectorConfig;
25+
import ai.timefold.solver.core.config.localsearch.LocalSearchPhaseConfig;
2526
import ai.timefold.solver.core.config.solver.monitoring.MonitoringConfig;
2627
import ai.timefold.solver.core.config.solver.monitoring.SolverMetric;
2728
import ai.timefold.solver.core.config.solver.termination.TerminationConfig;
@@ -420,6 +421,21 @@ void failMultiEntityWithListAndBasicVariables() {
420421
.hasMessageContaining("it cannot be deduced automatically");
421422
}
422423

424+
@Test
425+
void failLocalSearchWithListAndBasicVariables() {
426+
var solverConfig = PlannerTestUtils.buildSolverConfig(
427+
TestdataListMultiVarSolution.class, TestdataListMultiVarEntity.class, TestdataListMultiVarValue.class,
428+
TestdataListMultiVarOtherValue.class)
429+
.withPhases(new ConstructionHeuristicPhaseConfig()
430+
.withTerminationConfig(new TerminationConfig().withStepCountLimit(16)),
431+
new LocalSearchPhaseConfig())
432+
.withEasyScoreCalculatorClass(TestdataListMultiVarEasyScoreCalculator.class);
433+
434+
var problem = TestdataListMultiVarSolution.generateUninitializedSolution(2, 2, 2);
435+
assertThatCode(() -> PlannerTestUtils.solve(solverConfig, problem))
436+
.hasMessageContaining("A mixed model using both basic and list variables is not supported yet.");
437+
}
438+
423439
@Test
424440
void solveWithListAndBasicVariables() {
425441
var solverConfig = PlannerTestUtils.buildSolverConfig(

0 commit comments

Comments
 (0)