/* Copyright 2009-2016 David Hadka * * This file is part of the MOEA Framework. * * The MOEA Framework 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 of the License, or (at your * option) any later version. * * The MOEA Framework 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 General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the MOEA Framework. If not, see <http://www.gnu.org/licenses/>. */ package org.moeaframework.core; import java.io.NotSerializableException; import java.io.Serializable; import org.moeaframework.algorithm.AlgorithmException; /** * Interface for an optimization algorithm. An optimization algorithm operates * by performing a series of optimization steps, though the amount of work * performed by each step depends on the algorithm. For example, an algorithm * may completely solve a problem in one step or may require hundreds of * thousands of steps. */ public interface Algorithm { /** * Returns the problem being solved by this algorithm. * * @return the problem being solved by this algorithm */ public Problem getProblem(); /** * Returns the current best-known result. * * @return the current best-known result */ public NondominatedPopulation getResult(); /** * Performs one logical step of this algorithm. The amount of work performed * depends on the implementation. One invocation of this method may produce * one or many trial solutions. * <p> * This method should not be invoked when {@link #isTerminated()} returns * {@code true}. */ public void step(); /** * Evaluates the specified solution for the problem being solved by this * algorithm. * * @param solution the solution to be evaluated * @see Problem#evaluate(Solution) */ public void evaluate(Solution solution); /** * Returns the number of times the {@code evaluate} method was invoked. This * is the primary measure of runtime for optimization algorithms. * * @return the number of times the {@code evaluate} method was invoked */ public int getNumberOfEvaluations(); /** * Returns {@code true} if this algorithm is terminated; {@code false} * otherwise. * * @return {@code true} if this algorithm is terminated; {@code false} * otherwise * @see #terminate() */ public boolean isTerminated(); /** * Terminates this algorithm. Implementations should use this method to * free any underlying resources; however, the {@link #getResult()} and * {@link #getNumberOfEvaluations()} methods are still required to work * after termination. */ public void terminate(); /** * Returns a {@code Serializable} object representing the internal state of * this algorithm. * * @return a {@code Serializable} object representing the internal state of * this algorithm * @throws NotSerializableException if this algorithm does not support * serialization * @throws AlgorithmException if this algorithm has not yet been * initialized */ public Serializable getState() throws NotSerializableException; /** * Sets the internal state of of this algorithm. * * @param state the internal state of this algorithm * @throws NotSerializableException if this algorithm does not support * serialization * @throws AlgorithmException if this algorithm has already been * initialized */ public void setState(Object state) throws NotSerializableException; }