001 package net.sf.cpsolver.ifs.solution;
002
003 import java.util.Collection;
004 import java.util.Map;
005
006 import net.sf.cpsolver.ifs.model.Value;
007 import net.sf.cpsolver.ifs.model.Variable;
008
009 /**
010 * IFS solution listener.
011 *
012 * @see Solution
013 *
014 * @version IFS 1.2 (Iterative Forward Search)<br>
015 * Copyright (C) 2006 - 2010 Tomas Muller<br>
016 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
017 * <a href="http://muller.unitime.org">http://muller.unitime.org</a><br>
018 * <br>
019 * This library is free software; you can redistribute it and/or modify
020 * it under the terms of the GNU Lesser General Public License as
021 * published by the Free Software Foundation; either version 3 of the
022 * License, or (at your option) any later version. <br>
023 * <br>
024 * This library is distributed in the hope that it will be useful, but
025 * WITHOUT ANY WARRANTY; without even the implied warranty of
026 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
027 * Lesser General Public License for more details. <br>
028 * <br>
029 * You should have received a copy of the GNU Lesser General Public
030 * License along with this library; if not see
031 * <a href='http://www.gnu.org/licenses/'>http://www.gnu.org/licenses/</a>.
032 */
033 public interface SolutionListener<V extends Variable<V, T>, T extends Value<V, T>> {
034 /**
035 * Called by the solution when it is updated, see
036 * {@link Solution#update(double)}.
037 *
038 * @param solution
039 * source solution
040 */
041 public void solutionUpdated(Solution<V, T> solution);
042
043 /**
044 * Called by the solution when it is asked to produce info table, see
045 * {@link Solution#getInfo()}. A listener can also add some its info into
046 * this table.
047 *
048 * @param solution
049 * source solution
050 * @param info
051 * produced info table
052 */
053 public void getInfo(Solution<V, T> solution, Map<String, String> info);
054
055 /**
056 * Called by the solution when it is asked to produce info table, see
057 * {@link Solution#getInfo()}. A listener can also add some its info into
058 * this table.
059 *
060 * @param solution
061 * source solution
062 * @param info
063 * produced info table
064 * @param variables
065 * only variables from this set are included
066 */
067 public void getInfo(Solution<V, T> solution, Map<String, String> info, Collection<V> variables);
068
069 /**
070 * Called by the solution when method {@link Solution#clearBest()} is
071 * called.
072 *
073 * @param solution
074 * source solution
075 */
076 public void bestCleared(Solution<V, T> solution);
077
078 /**
079 * Called by the solution when method {@link Solution#saveBest()} is called.
080 *
081 * @param solution
082 * source solution
083 */
084 public void bestSaved(Solution<V, T> solution);
085
086 /**
087 * Called by the solution when method {@link Solution#restoreBest()} is
088 * called.
089 *
090 * @param solution
091 * source solution
092 */
093 public void bestRestored(Solution<V, T> solution);
094 }