All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.evosuite.ga.localsearch.LocalSearchBudget Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (C) 2010-2018 Gordon Fraser, Andrea Arcuri and EvoSuite
 * contributors
 *
 * This file is part of EvoSuite.
 *
 * EvoSuite is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3.0 of the License, or
 * (at your option) any later version.
 *
 * EvoSuite is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with EvoSuite. If not, see .
 */
/**
 * 
 */
package org.evosuite.ga.localsearch;

import java.io.Serializable;

import org.evosuite.Properties;
import org.evosuite.ga.Chromosome;
import org.evosuite.ga.metaheuristics.GeneticAlgorithm;
import org.evosuite.ga.metaheuristics.SearchListener;
import org.evosuite.ga.stoppingconditions.MaxStatementsStoppingCondition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 

* This singleton class provides support for updating the amount of LS budget * that was consumed during the current application of LS. *

* * @author Gordon Fraser */ public class LocalSearchBudget implements SearchListener, Serializable { private static final long serialVersionUID = 9152147170303160131L; private final static Logger logger = LoggerFactory.getLogger(LocalSearchBudget.class); // Singleton instance private static LocalSearchBudget instance = null; protected int fitnessEvaluations = 0; protected int tests = 0; protected long executedStart = 0L; protected int suites = 0; protected long startTime = 0L; protected long endTime = 0L; protected GeneticAlgorithm ga = null; // Private constructor because of singleton type private LocalSearchBudget() { } // Singleton accessor public static LocalSearchBudget getInstance() { if(instance == null) instance = new LocalSearchBudget(); return instance; } /** *

* isFinished *

* * @return a boolean. */ public boolean isFinished() { // If the global search is finished then we don't want local search either if (ga != null && ga.isFinished()) return true; boolean isFinished = false; switch(Properties.LOCAL_SEARCH_BUDGET_TYPE) { case FITNESS_EVALUATIONS: isFinished = fitnessEvaluations >= Properties.LOCAL_SEARCH_BUDGET; break; case SUITES: isFinished = suites >= Properties.LOCAL_SEARCH_BUDGET; break; case STATEMENTS: isFinished = MaxStatementsStoppingCondition.getNumExecutedStatements() > executedStart + Properties.LOCAL_SEARCH_BUDGET; break; case TESTS: isFinished = tests >= Properties.LOCAL_SEARCH_BUDGET; break; case TIME: isFinished = System.currentTimeMillis() > endTime; break; default: throw new RuntimeException("Unknown budget type: " + Properties.LOCAL_SEARCH_BUDGET_TYPE); } if(isFinished) { logger.info("Local search budget used up; type: "+Properties.LOCAL_SEARCH_BUDGET_TYPE); } return isFinished; } /** * Reports that a fitness evaluation was consumed */ public void countFitnessEvaluation() { fitnessEvaluations++; } /** * Reports that Local search on an specific test has been concluded. */ public void countLocalSearchOnTest() { tests++; } /** * Reports that local search on a whole test suite has been finished. */ public void countLocalSearchOnTestSuite() { suites++; } /** * Indicates that the application of LS to the current population has started. */ public void localSearchStarted() { startTime = System.currentTimeMillis(); endTime = startTime + Properties.LOCAL_SEARCH_BUDGET * 1000; tests = 0; suites = 0; fitnessEvaluations = 0; executedStart = MaxStatementsStoppingCondition.getNumExecutedStatements(); } /* (non-Javadoc) * @see org.evosuite.ga.SearchListener#searchStarted(org.evosuite.ga.GeneticAlgorithm) */ /** {@inheritDoc} */ @Override public void searchStarted(GeneticAlgorithm algorithm) { ga = algorithm; tests = 0; suites = 0; fitnessEvaluations = 0; } /* (non-Javadoc) * @see org.evosuite.ga.SearchListener#iteration(org.evosuite.ga.GeneticAlgorithm) */ /** {@inheritDoc} */ @Override public void iteration(GeneticAlgorithm algorithm) { tests = 0; suites = 0; fitnessEvaluations = 0; } /* (non-Javadoc) * @see org.evosuite.ga.SearchListener#searchFinished(org.evosuite.ga.GeneticAlgorithm) */ /** {@inheritDoc} */ @Override public void searchFinished(GeneticAlgorithm algorithm) { ga = null; } /* (non-Javadoc) * @see org.evosuite.ga.SearchListener#fitnessEvaluation(org.evosuite.ga.Chromosome) */ /** {@inheritDoc} */ @Override public void fitnessEvaluation(Chromosome individual) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.evosuite.ga.SearchListener#modification(org.evosuite.ga.Chromosome) */ /** {@inheritDoc} */ @Override public void modification(Chromosome individual) { // TODO Auto-generated method stub } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy