Interface SolutionCloner<Solution_>

  • Type Parameters:
    Solution_ - the solution type, the class with the PlanningSolution annotation
    All Known Subinterfaces:
    PlanningSolution.NullSolutionCloner
    All Known Implementing Classes:
    FieldAccessingSolutionCloner

    public interface SolutionCloner<Solution_>
    Clones a PlanningSolution during planning. Used to remember the state of a good PlanningSolution so it can be recalled at a later time when the original PlanningSolution is already modified. Also used in population based heuristics to increase or repopulate the population.

    Planning cloning is hard: avoid doing it yourself.

    An implementing class must be thread-safe after initialization.

    • Method Detail

      • cloneSolution

        Solution_ cloneSolution​(Solution_ original)
        Does a planning clone. The returned PlanningSolution clone must fulfill these requirements:
        • The clone must represent the same planning problem. Usually it reuses the same instances of the problem facts and problem fact collections as the original.
        • The clone must have the same (equal) score as the original.
        • The clone must use different, cloned instances of the entities and entity collections. If a cloned entity changes, the original must remain unchanged. If an entity is added or removed in a cloned PlanningSolution, the original PlanningSolution must remain unchanged.
        Note that a class might support more than 1 clone method: planning clone is just one of them.

        This method is thread-safe.

        Parameters:
        original - never null, the original PlanningSolution
        Returns:
        never null, the cloned PlanningSolution