package bsearch.algorithms ; import java.util.HashMap ; import org.nlogo.util.MersenneTwisterFast ; import bsearch.app.BehaviorSearchException; import bsearch.app.SearchProtocol; import bsearch.evaluation.SearchManager; import bsearch.nlogolink.NetLogoLinkException; import bsearch.representations.ChromosomeFactory; import bsearch.space.SearchSpace; public strictfp interface SearchMethod { /** * @param searchMethodParams a map of all the search parameter names to the values * they are to be assigned. * @throws SearchParameterException */ public abstract void setSearchParams( HashMap<String , String> searchMethodParams ) throws SearchParameterException; /** * @return the current search parameters used by this search method, or the * default parameters, if the parameters haven't been specified yet. */ public abstract HashMap<String , String> getSearchParams(); /** * @return descriptions of what each search parameter means */ public abstract HashMap<String , String> getSearchParamsHelp(); /** * @return the name of the search algorithm (should be the same for all instances). */ public abstract String getName(); /** * @return a brief description of the search algorithm (should be the same for all instances). */ public abstract String getDescription(); /** * @return a description of the algorithm along with an explanation of each search method parameter. */ public abstract String getHTMLHelpText(); //TODO: return SearchResults object? Or just use the SearchManager for this purpose? public abstract void search( SearchSpace space , ChromosomeFactory cFactory, SearchProtocol protocol, SearchManager archive, MersenneTwisterFast rng ) throws BehaviorSearchException, NetLogoLinkException, InterruptedException; public abstract boolean supportsAdaptiveSampling(); }