Package org.optaplanner.core.impl.solver

## Class AbstractSolver<Solution_>

- java.lang.Object
- - org.optaplanner.core.impl.solver.AbstractSolver<Solution_>

- Type Parameters:
    `Solution_` - the solution type, the class with the `PlanningSolution` annotation
  All Implemented Interfaces:
    `Solver<Solution_>`
  Direct Known Subclasses:
    `DefaultSolver`, `PartitionSolver`

      public abstract class AbstractSolver<Solution_>
      extends Object
      implements Solver<Solution_>

  Common code between `DefaultSolver` and child solvers (such as `PartitionSolver`.

  Do not create a new child `Solver` to implement a new heuristic or metaheuristic, just use a new `Phase` for that.

  See Also:
    `Solver`, `DefaultSolver`

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected BestSolutionRecaller<Solution_>` | `bestSolutionRecaller` |
    `protected org.slf4j.Logger` | `logger` |
    `protected PhaseLifecycleSupport<Solution_>` | `phaseLifecycleSupport` |
    `protected List<Phase<Solution_>>` | `phaseList` |
    `protected SolverEventSupport<Solution_>` | `solverEventSupport` |
    `protected Termination<Solution_>` | `termination` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `AbstractSolver​(BestSolutionRecaller<Solution_> bestSolutionRecaller, Termination<Solution_> termination, List<Phase<Solution_>> phaseList)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addEventListener​(SolverEventListener<Solution_> eventListener)` |
    `void` | `addPhaseLifecycleListener​(PhaseLifecycleListener<Solution_> phaseLifecycleListener)` | Add a `PhaseLifecycleListener` that is notified of `SolverLifecycleListener.solvingStarted(SolverScope)` solving} events and also of the `phase` and the `PhaseLifecycleListener.stepStarted(AbstractStepScope)` step} starting/ending events of all phases.
    `void` | `removeEventListener​(SolverEventListener<Solution_> eventListener)` |
    `void` | `removePhaseLifecycleListener​(PhaseLifecycleListener<Solution_> phaseLifecycleListener)` |
    `protected void` | `runPhases​(SolverScope<Solution_> solverScope)` |
    `void` | `solvingEnded​(SolverScope<Solution_> solverScope)` |
    `void` | `solvingStarted​(SolverScope<Solution_> solverScope)` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.optaplanner.core.api.solver.Solver

      `addProblemFactChange, addProblemFactChanges, isEveryProblemFactChangeProcessed, isSolving, isTerminateEarly, solve, terminateEarly`

- - ### Field Detail

    - #### logger

          protected final transient org.slf4j.Logger logger

    - #### solverEventSupport

          protected final SolverEventSupport<Solution_> solverEventSupport

    - #### phaseLifecycleSupport

          protected final PhaseLifecycleSupport<Solution_> phaseLifecycleSupport

    - #### bestSolutionRecaller

          protected final BestSolutionRecaller<Solution_> bestSolutionRecaller

    - #### termination

          protected final Termination<Solution_> termination

    - #### phaseList

          protected final List<Phase<Solution_>> phaseList

  - ### Constructor Detail

    - #### AbstractSolver

          public AbstractSolver​(BestSolutionRecaller<Solution_> bestSolutionRecaller,
                                Termination<Solution_> termination,
                                List<Phase<Solution_>> phaseList)

  - ### Method Detail

    - #### solvingStarted

          public void solvingStarted​(SolverScope<Solution_> solverScope)

    - #### runPhases

          protected void runPhases​(SolverScope<Solution_> solverScope)

    - #### solvingEnded

          public void solvingEnded​(SolverScope<Solution_> solverScope)

    - #### addEventListener

          public void addEventListener​(SolverEventListener<Solution_> eventListener)

      Specified by:
        `addEventListener` in interface `Solver<Solution_>`
      Parameters:
        `eventListener` - never null

    - #### removeEventListener

          public void removeEventListener​(SolverEventListener<Solution_> eventListener)

      Specified by:
        `removeEventListener` in interface `Solver<Solution_>`
      Parameters:
        `eventListener` - never null

    - #### addPhaseLifecycleListener

          public void addPhaseLifecycleListener​(PhaseLifecycleListener<Solution_> phaseLifecycleListener)

      Add a `PhaseLifecycleListener` that is notified of `SolverLifecycleListener.solvingStarted(SolverScope)` solving} events and also of the `phase` and the `PhaseLifecycleListener.stepStarted(AbstractStepScope)` step} starting/ending events of all phases.

      To get notified for only 1 phase, use `Phase.addPhaseLifecycleListener(PhaseLifecycleListener)` instead.

      Parameters:
        `phaseLifecycleListener` - never null

    - #### removePhaseLifecycleListener

          public void removePhaseLifecycleListener​(PhaseLifecycleListener<Solution_> phaseLifecycleListener)

      Parameters:
        `phaseLifecycleListener` - never null
      See Also:
        `addPhaseLifecycleListener(PhaseLifecycleListener)`