<?xml version="1.0" encoding="UTF-8"?>
<solver>
  <!--<environmentMode>FULL_ASSERT</environmentMode>--><!-- To slowly prove there are no bugs in this code -->
  <!--<moveThreadCount>AUTO</moveThreadCount>--><!-- To solve faster by saturating multiple CPU cores -->

  <solutionClass>org.optaplanner.examples.nqueens.domain.NQueens</solutionClass>
  <entityClass>org.optaplanner.examples.nqueens.domain.Queen</entityClass>

  <scoreDirectorFactory>
    <!--<easyScoreCalculatorClass>org.optaplanner.examples.nqueens.solver.score.NQueensEasyScoreCalculator</easyScoreCalculatorClass>-->
    <!--<easyScoreCalculatorClass>org.optaplanner.examples.nqueens.solver.score.NQueensMapBasedEasyScoreCalculator</easyScoreCalculatorClass>-->
    <!--<constraintProviderClass>org.optaplanner.examples.nqueens.solver.score.NQueensConstraintProvider</constraintProviderClass>-->
    <!--<incrementalScoreCalculatorClass>org.optaplanner.examples.nqueens.solver.score.NQueensBasicIncrementalScoreCalculator</incrementalScoreCalculatorClass>-->
    <!--<incrementalScoreCalculatorClass>org.optaplanner.examples.nqueens.solver.score.NQueensAdvancedIncrementalScoreCalculator</incrementalScoreCalculatorClass>-->
    <scoreDrl>org/optaplanner/examples/nqueens/solver/nQueensScoreRules.drl</scoreDrl>
    <initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
    <!--<assertionScoreDirectorFactory>-->
      <!--<easyScoreCalculatorClass>org.optaplanner.examples.nqueens.solver.score.NQueensEasyScoreCalculator</easyScoreCalculatorClass>-->
    <!--</assertionScoreDirectorFactory>-->
  </scoreDirectorFactory>

  <termination>
    <bestScoreLimit>0</bestScoreLimit>
  </termination>
  <constructionHeuristic>
    <constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
  </constructionHeuristic>
  <localSearch>
    <changeMoveSelector>
      <selectionOrder>ORIGINAL</selectionOrder>
    </changeMoveSelector>
    <!-- changeMoveSelector is the generic form of RowChangeMoveFactory: -->
    <!--<moveListFactory>-->
      <!--<moveListFactoryClass>org.optaplanner.examples.nqueens.solver.move.factory.RowChangeMoveFactory</moveListFactoryClass>-->
    <!--</moveListFactory>-->
    <acceptor>
      <entityTabuSize>5</entityTabuSize>
    </acceptor>
    <forager>
      <!-- Real world problems require use of <acceptedCountLimit> -->
    </forager>
  </localSearch>

  <!-- To scale out, replace <localSearch> with this configuration: -->
  <!--<localSearch>-->
    <!--<acceptor>-->
      <!--<entityTabuSize>11</entityTabuSize>-->
    <!--</acceptor>-->
    <!--<forager>-->
      <!--<acceptedCountLimit>2000</acceptedCountLimit>-->
      <!--<pickEarlyType>FIRST_BEST_SCORE_IMPROVING</pickEarlyType>-->
    <!--</forager>-->
  <!--</localSearch>-->

  <!-- To super scale out, replace <constructionHeuristic> and <localSearch> with this configuration: -->
  <!--<customPhase>-->
    <!--<customPhaseCommandClass>org.optaplanner.examples.nqueens.solver.solution.CheatingNQueensPhaseCommand</customPhaseCommandClass>-->
  <!--</customPhase>-->
</solver>
