Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * Copyright 2010 JBoss Inc
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.drools.planner.core.bestsolution;
A BestSolutionRecaller remembers the best solution that a org.drools.planner.core.Solver encounters.
public class BestSolutionRecaller implements SolverLifecycleListener {
    protected final transient Logger logger = LoggerFactory.getLogger(getClass());
    public void setSolverEventSupport(SolverEventSupport solverEventSupport) {
        this. = solverEventSupport;
    }
    // ************************************************************************
    // Worker methods
    // ************************************************************************
    public void solvingStarted(DefaultSolverScope solverScope) {
        boolean workingSolutionInitialized = solverScope.isWorkingSolutionInitialized();
        Score startingInitializedScore;
        Solution bestSolution;
        if (workingSolutionInitialized) {
            startingInitializedScore = solverScope.calculateScoreFromWorkingMemory();
            bestSolution = solverScope.getWorkingSolution().cloneSolution();
        } else {
            startingInitializedScore = null;
            bestSolution = null;
        }
        solverScope.setStartingInitializedScore(startingInitializedScore);
        solverScope.setBestSolution(bestSolution);
        solverScope.setBestScore(startingInitializedScore);
    }
    public void extractBestSolution(AbstractStepScope stepScope) {
        if (!stepScope.isSolutionInitialized()) {
            return;
        }
        AbstractSolverPhaseScope solverPhaseScope = stepScope.getSolverPhaseScope();
        DefaultSolverScope solverScope = solverPhaseScope.getSolverScope();
        Score newScore = stepScope.getScore();
        Score bestScore = solverPhaseScope.getBestScore();
        boolean bestScoreImproved;
        if (bestScore == null) {
            bestScoreImproved = true;
            solverScope.setStartingInitializedScore(newScore);
        } else {
            bestScoreImproved = newScore.compareTo(bestScore) > 0;
        }
        stepScope.setBestScoreImproved(bestScoreImproved);
        if (bestScoreImproved) {
            solverPhaseScope.setBestSolutionStepIndex(stepScope.getStepIndex());
            Solution newBestSolution = stepScope.createOrGetClonedSolution();
            solverScope.setBestSolution(newBestSolution);
            solverScope.setBestScore(newBestSolution.getScore());
            .fireBestSolutionChanged(newBestSolution);
        }
    }
    public void solvingEnded(DefaultSolverScope solverScope) {
    }
New to GrepCode? Check out our FAQ X