<?xml version="1.0" encoding="UTF-8"?>
<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">
  <!-- To slowly prove there are no bugs in this code -->
  <!--<environmentMode>FULL_ASSERT</environmentMode>-->
  <!-- To solve faster by saturating multiple CPU cores -->
  <!--<moveThreadCount>AUTO</moveThreadCount>-->

  <!-- Domain model configuration -->
  <solutionClass>org.optaplanner.examples.cheaptime.domain.CheapTimeSolution</solutionClass>
  <entityClass>org.optaplanner.examples.cheaptime.domain.TaskAssignment</entityClass>

  <!-- Score configuration -->
  <scoreDirectorFactory>
    <!--<easyScoreCalculatorClass>org.optaplanner.examples.cheaptime.optional.score.CheapTimeEasyScoreCalculator</easyScoreCalculatorClass>-->
    <constraintProviderClass>org.optaplanner.examples.cheaptime.score.CheapTimeConstraintProvider</constraintProviderClass>
    <!--<incrementalScoreCalculatorClass>org.optaplanner.examples.cheaptime.optional.score.CheapTimeIncrementalScoreCalculator</incrementalScoreCalculatorClass>-->
    <!--<scoreDrl>org/optaplanner/examples/cheaptime/optional/score/cheapTimeConstraints.drl</scoreDrl>-->
    <initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
    <!--<assertionScoreDirectorFactory>-->
      <!--<easyScoreCalculatorClass>org.optaplanner.examples.cheaptime.optional.score.CheapTimeEasyScoreCalculator</easyScoreCalculatorClass>-->
    <!--</assertionScoreDirectorFactory>-->
  </scoreDirectorFactory>

  <!-- Optimization algorithms configuration -->
  <termination>
    <minutesSpentLimit>5</minutesSpentLimit>
  </termination>
  <constructionHeuristic>
    <constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
    <forager>
      <pickEarlyType>FIRST_FEASIBLE_SCORE_OR_NON_DETERIORATING_HARD</pickEarlyType>
    </forager>
  </constructionHeuristic>
  <localSearch>
    <unionMoveSelector>
      <changeMoveSelector>
        <valueSelector variableName="startPeriod"/>
      </changeMoveSelector>
      <changeMoveSelector>
        <valueSelector variableName="machine"/>
      </changeMoveSelector>
      <swapMoveSelector/>
      <!--<moveIteratorFactory>-->
        <!--<moveIteratorFactoryClass>org.optaplanner.examples.cheaptime.optional.solver.move.factory.CheapTimePillarSlideMoveIteratorFactory</moveIteratorFactoryClass>-->
      <!--</moveIteratorFactory>-->
    </unionMoveSelector>
    <acceptor>
      <lateAcceptanceSize>400</lateAcceptanceSize>
    </acceptor>
    <forager>
      <acceptedCountLimit>1</acceptedCountLimit>
    </forager>
  </localSearch>
</solver>
