Skip to content

feat: Multistage moves#1976

Merged
triceo merged 11 commits intoTimefoldAI:mainfrom
Christopher-Chianelli:feat/351
Dec 15, 2025
Merged

feat: Multistage moves#1976
triceo merged 11 commits intoTimefoldAI:mainfrom
Christopher-Chianelli:feat/351

Conversation

@triceo
Copy link
Copy Markdown
Collaborator

@triceo triceo commented Dec 10, 2025

No description provided.

Copy link
Copy Markdown
Collaborator Author

@triceo triceo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor comments. The bulk of the comments will be in Enterprise.

@triceo
Copy link
Copy Markdown
Collaborator Author

triceo commented Dec 11, 2025

@Christopher-Chianelli Please remember to write documentation. I'd probably add this to the section about moves, add a disclaimer that it's an enterprise feature, and reference it in the enterprise section.

@triceo
Copy link
Copy Markdown
Collaborator Author

triceo commented Dec 13, 2025

Good to go when CI is green, @Christopher-Chianelli.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a new "Multistage Moves" feature as an enhanced ruin-and-recreate capability for Timefold Solver Enterprise Edition. The feature allows users to compose moves from multiple stages, where each stage can evaluate potential moves before execution.

  • Adds two new move selectors: MultistageMoveSelector for basic variables and ListMultistageMoveSelector for list variables
  • Provides comprehensive documentation with code examples showing how to implement stage providers
  • Updates XML schemas to support the new configuration options

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
docs/src/modules/ROOT/pages/optimization-algorithms/move-selector-reference.adoc Adds documentation for multistageMoveSelector and listMultistageMoveSelector with configuration examples
docs/src/modules/ROOT/pages/enterprise-edition/enterprise-edition.adoc Documents the Multistage Moves enterprise feature with overview and references
core/src/main/resources/solver.xsd Adds XSD schema definitions for the new move selectors (contains critical naming issues)
benchmark/src/main/resources/benchmark.xsd Adds benchmark XSD schema definitions for the new move selectors
core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/MultistageMoveSelectorConfig.java New configuration class for basic variable multistage moves
core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListMultistageMoveSelectorConfig.java New configuration class for list variable multistage moves
core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/MoveSelectorFactory.java Integrates new move selector configs with enterprise service
core/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java Adds enterprise service methods and feature enum for multistage moves
core/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfig.java Registers new move selector configs in XML binding
core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/UnionMoveSelectorConfig.java Adds new move selectors to union composite
core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/CartesianProductMoveSelectorConfig.java Adds new move selectors to cartesian product composite
core/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirector.java Adds generic type parameters to getListVariableStateSupply
core/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java Implements generic type parameters with proper casting
core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/VariableDescriptor.java Adds generic type parameters to getVariableMetaModel
core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptor.java Overrides getVariableMetaModel with proper return type
core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/BasicVariableDescriptor.java Overrides getVariableMetaModel with proper return type
core/src/main/java/ai/timefold/solver/core/preview/api/move/SolutionView.java Reformats method signature for better readability
core/src/main/java/ai/timefold/solver/core/impl/neighborhood/maybeapi/move/Moves.java Reorders parameters in unassign methods for consistency
core/src/main/java/ai/timefold/solver/core/impl/move/director/MoveDirector.java Reformats method signature for better readability
core/src/test/java/ai/timefold/solver/core/testdomain/list/TestdataListUtils.java Reformats method signature for better readability

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
9.1% Coverage on New Code (required ≥ 70%)

See analysis details on SonarQube Cloud

@triceo triceo merged commit e06a54b into TimefoldAI:main Dec 15, 2025
33 of 34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants