From 029754b8d06510bdae3cc3de864fc58f984b9b61 Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 9 Jun 2025 08:51:08 -0300 Subject: [PATCH 1/4] chore: temporally disabling the mixed model --- benchmark/src/main/resources/benchmark.xsd | 2 +- .../solution/descriptor/SolutionDescriptor.java | 5 +++++ .../DefaultConstructionHeuristicPhaseTest.java | 2 ++ .../list/SubListChangeMoveSelectorFactoryTest.java | 2 ++ .../list/SubListSwapMoveSelectorFactoryTest.java | 2 ++ .../solver/core/impl/solver/DefaultSolverTest.java | 11 +++++++++++ 6 files changed, 23 insertions(+), 1 deletion(-) diff --git a/benchmark/src/main/resources/benchmark.xsd b/benchmark/src/main/resources/benchmark.xsd index 6bb3594d055..7fb34bd4308 100644 --- a/benchmark/src/main/resources/benchmark.xsd +++ b/benchmark/src/main/resources/benchmark.xsd @@ -674,7 +674,7 @@ - + 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..5bca7e5d9a1 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,11 @@ public static SolutionDescriptor buildSolutionDescriptor( solutionDescriptor.constraintWeightSupplier.initialize(solutionDescriptor, descriptorPolicy.getMemberAccessorFactory(), descriptorPolicy.getDomainAccessType()); } + // Temporarily disabling the mixed-model feature + if (solutionDescriptor.hasBothBasicAndListVariables()) { + throw new IllegalStateException( + "The mixed model is currently unavailable for general use. Please modify the model to utilize either a list variable or only basic variables."); + } 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..2ae144023aa 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,7 @@ private static List generateMovesForMultiEntity() { return allMoveSelectionConfigList; } + @Disabled("The mixed model is currently unavailable for general use") @Test void solveMixedModel() { // Same size for both list and basic variables @@ -1667,6 +1669,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 +1752,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 +1777,7 @@ void solveMixedModelCustomMove() { .isEmpty(); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solveMixedModelCustomPhase() { var solverConfig = PlannerTestUtils.buildSolverConfig( @@ -1805,6 +1810,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 +1844,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 +1868,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 +1895,7 @@ void solveUnassignedMixedModel() { .hasSize(2); } + @Disabled("The mixed model is currently unavailable for general use") @Test void solvePinnedAndUnassignedMixedModel() { var solverConfig = PlannerTestUtils.buildSolverConfig( @@ -1974,6 +1983,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 +2046,7 @@ private static List generateMovesForMultiEntityMixedModel() return allMoveSelectionConfigList; } + @Disabled("The mixed model is currently unavailable for general use") @ParameterizedTest @MethodSource("generateMovesForMultiEntityMixedModel") void solveMultiEntityMoveConfigMixedModel(MoveSelectorConfig moveSelectionConfig) { From 406081602523b771f97f42dedfa048791586e4d4 Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 9 Jun 2025 08:52:28 -0300 Subject: [PATCH 2/4] chore: minor fix --- .../impl/domain/solution/descriptor/SolutionDescriptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5bca7e5d9a1..15e4b523ec6 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,7 +166,7 @@ public static SolutionDescriptor buildSolutionDescriptor( solutionDescriptor.constraintWeightSupplier.initialize(solutionDescriptor, descriptorPolicy.getMemberAccessorFactory(), descriptorPolicy.getDomainAccessType()); } - // Temporarily disabling the mixed-model feature + // Temporally disabling the mixed model if (solutionDescriptor.hasBothBasicAndListVariables()) { throw new IllegalStateException( "The mixed model is currently unavailable for general use. Please modify the model to utilize either a list variable or only basic variables."); From 8939550e2caebdfca0feb28c587cfa3f1bd429de Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 9 Jun 2025 10:36:53 -0300 Subject: [PATCH 3/4] chore: address comments --- benchmark/src/main/resources/benchmark.xsd | 2 +- .../impl/domain/solution/descriptor/SolutionDescriptor.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/benchmark/src/main/resources/benchmark.xsd b/benchmark/src/main/resources/benchmark.xsd index 7fb34bd4308..6bb3594d055 100644 --- a/benchmark/src/main/resources/benchmark.xsd +++ b/benchmark/src/main/resources/benchmark.xsd @@ -674,7 +674,7 @@ - + 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 15e4b523ec6..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 @@ -168,8 +168,7 @@ public static SolutionDescriptor buildSolutionDescriptor( } // Temporally disabling the mixed model if (solutionDescriptor.hasBothBasicAndListVariables()) { - throw new IllegalStateException( - "The mixed model is currently unavailable for general use. Please modify the model to utilize either a list variable or only basic variables."); + throw new IllegalStateException("Combining list variable and basic variables is currently not supported."); } return solutionDescriptor; } From 0535259f4ba29dee644f169c5ad764d6e2bdb7d1 Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 9 Jun 2025 11:21:29 -0300 Subject: [PATCH 4/4] chore: address sonar --- .../solver/core/impl/solver/DefaultSolverTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 2ae144023aa..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 @@ -1657,6 +1657,18 @@ 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() {