diff --git a/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java index 5913547d3fa..08d00e6f656 100644 --- a/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java @@ -166,6 +166,10 @@ public static SolutionDescriptor buildSolutionDescriptor( solutionDescriptor.constraintWeightSupplier.initialize(solutionDescriptor, descriptorPolicy.getMemberAccessorFactory(), descriptorPolicy.getDomainAccessType()); } + // Temporally disabling the mixed model + if (solutionDescriptor.hasBothBasicAndListVariables()) { + throw new IllegalStateException("Combining list variable and basic variables is currently not supported."); + } return solutionDescriptor; } diff --git a/core/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseTest.java b/core/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseTest.java index f904fb90460..2ca4bbacced 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseTest.java @@ -47,6 +47,7 @@ import ai.timefold.solver.core.testutil.AbstractMeterTest; import ai.timefold.solver.core.testutil.PlannerTestUtils; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import io.micrometer.core.instrument.Metrics; @@ -348,6 +349,7 @@ void constructionHeuristicAllocateToValueFromQueue() { .filter(e -> e.getValue() == null)).isEmpty(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void failMixedModelDefaultConfiguration() { var solverConfig = PlannerTestUtils diff --git a/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveSelectorFactoryTest.java b/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveSelectorFactoryTest.java index 7f034b035f5..809d0efa443 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveSelectorFactoryTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveSelectorFactoryTest.java @@ -20,6 +20,7 @@ import ai.timefold.solver.core.testdomain.list.TestdataListSolution; import ai.timefold.solver.core.testdomain.mixed.multientity.TestdataMixedMultiEntitySolution; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -43,6 +44,7 @@ void buildMoveSelector() { assertThat(selector.isSelectReversingMoveToo()).isTrue(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void buildMoveSelectorMultiEntity() { var config = new SubListChangeMoveSelectorConfig(); diff --git a/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveSelectorFactoryTest.java b/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveSelectorFactoryTest.java index 12422e928d1..b388c6d70f1 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveSelectorFactoryTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveSelectorFactoryTest.java @@ -16,6 +16,7 @@ import ai.timefold.solver.core.testdomain.list.TestdataListSolution; import ai.timefold.solver.core.testdomain.mixed.multientity.TestdataMixedMultiEntitySolution; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -40,6 +41,7 @@ void buildBaseMoveSelector() { assertThat(selector.isSelectReversingMoveToo()).isTrue(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void buildMoveSelectorMultiEntity() { var config = new SubListSwapMoveSelectorConfig(); diff --git a/core/src/test/java/ai/timefold/solver/core/impl/solver/DefaultSolverTest.java b/core/src/test/java/ai/timefold/solver/core/impl/solver/DefaultSolverTest.java index a199116cc21..3e38ae69574 100644 --- a/core/src/test/java/ai/timefold/solver/core/impl/solver/DefaultSolverTest.java +++ b/core/src/test/java/ai/timefold/solver/core/impl/solver/DefaultSolverTest.java @@ -146,6 +146,7 @@ import org.assertj.core.api.junit.jupiter.SoftAssertionsExtension; import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.extension.ExtendWith; @@ -1656,6 +1657,19 @@ private static List generateMovesForMultiEntity() { return allMoveSelectionConfigList; } + @Test + void failMixedModel() { + var solverConfig = PlannerTestUtils + .buildSolverConfig(TestdataMixedSolution.class, TestdataMixedEntity.class, TestdataMixedValue.class, + TestdataMixedOtherValue.class) + .withPreviewFeature(DECLARATIVE_SHADOW_VARIABLES); + + assertThatCode(() -> PlannerTestUtils.solve(solverConfig, new TestdataSolution("s1"))) + .hasMessageContaining( + "Combining list variable and basic variables is currently not supported"); + } + + @Disabled("The mixed model is currently unavailable for general use") @Test void solveMixedModel() { // Same size for both list and basic variables @@ -1667,6 +1681,7 @@ void solveMixedModel() { executeSolveMixedModel(3, 2, 2); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solveMultiEntityMixedModel() { // Same size for both list and basic variables @@ -1749,6 +1764,7 @@ void executeSolveMultiEntityMixedModel(int entitySize, int valueSize, int otherV } } + @Disabled("The mixed model is currently unavailable for general use") @Test void solveMixedModelCustomMove() { var solverConfig = PlannerTestUtils.buildSolverConfig( @@ -1773,6 +1789,7 @@ void solveMixedModelCustomMove() { .isEmpty(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solveMixedModelCustomPhase() { var solverConfig = PlannerTestUtils.buildSolverConfig( @@ -1805,6 +1822,7 @@ private static List> getSortMannerLi return sortMannerList; } + @Disabled("The mixed model is currently unavailable for general use") @ParameterizedTest @MethodSource("getSortMannerList") void solveMixedModelWithSortManner(Pair sorterManner) { @@ -1838,6 +1856,7 @@ void solveMixedModelWithSortManner(Pair s .isEmpty(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solvePinnedMixedModel() { // We don't enable the LS because we want to ensure the pinned entity remains uninitialized @@ -1861,6 +1880,7 @@ void solvePinnedMixedModel() { assertThat(solution.getEntityList().get(0).getValueList()).isEmpty(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solveUnassignedMixedModel() { var solverConfig = PlannerTestUtils.buildSolverConfig( @@ -1887,6 +1907,7 @@ void solveUnassignedMixedModel() { .hasSize(2); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solvePinnedAndUnassignedMixedModel() { var solverConfig = PlannerTestUtils.buildSolverConfig( @@ -1974,6 +1995,7 @@ private static List generateMovesForMixedModel() { return allMoveSelectionConfigList; } + @Disabled("The mixed model is currently unavailable for general use") @ParameterizedTest @MethodSource("generateMovesForMixedModel") void solveMoveConfigMixedModel(MoveSelectorConfig moveSelectionConfig) { @@ -2036,6 +2058,7 @@ private static List generateMovesForMultiEntityMixedModel() return allMoveSelectionConfigList; } + @Disabled("The mixed model is currently unavailable for general use") @ParameterizedTest @MethodSource("generateMovesForMultiEntityMixedModel") void solveMultiEntityMoveConfigMixedModel(MoveSelectorConfig moveSelectionConfig) {