001    package ifs.heuristics;
002    
003    import ifs.model.*;
004    import ifs.solution.*;
005    import ifs.solver.*;
006    
007    /**
008     * Value selection criterion.
009     * <br><br>
010     * After a variable is selected, we need to find a value to be assigned to the variable. This problem is usually called
011     * "value selection" in constraint programming. Typically, the most useful advice is to select the best-fit value.
012     * So, we are looking for a value which is the most preferred for the variable and which causes the least trouble as well.
013     * This means that we need to find a value with the minimal potential for future conflicts with other variables.
014     * For example, a value which violates the smallest number of soft constraints can be selected among those with
015     * the smallest number of hard conflicts.
016     * <br><br>
017     * The task of this criterion is to select a value of the given variable which will be assigned to this variable.
018     *
019     * @see Solver
020     *
021     * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
022     * @version 1.0
023     **/
024    public interface ValueSelection {
025        /** Initialization */
026        public void init(Solver solver);
027        /** Value selection
028         * @param solution current solution
029         * @param selectedVariable selected variable
030         */
031        public Value selectValue(Solution solution, Variable selectedVariable);
032    }