    001    package ifs.solution;
    002
    003    import ifs.util.DataProperties;
    004
    005    /**
    006     * General implementation of solution comparator.
    007     * <br><br>
    008     * The solution is better than the best ever found solution when it has more variables assigned. In the case, when both
    009     * solutions have the same number of assigned variables, the better solution is the one with smaller total value, i.e.,
    010     * the sum of {@link ifs.model.Value#toInt()} over all assigned variables.
    011     *
    012     * @see Solution
    013     * @see ifs.solver.Solver
    014     *
    015     * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
    016     * @version 1.0
    017     */
    018    public class GeneralSolutionComparator implements SolutionComparator {
    019
    020        public GeneralSolutionComparator() {}
    021        /** No parameters are used so far. */
    022        public GeneralSolutionComparator(DataProperties properties) {
    023        }
    024
    025        public boolean isBetterThanBestSolution(Solution currentSolution) {
    026            if (currentSolution.getBestInfo()==null) return true;
    027            int unassigned = currentSolution.getModel().unassignedVariables().size();
    028            if (currentSolution.getModel().getBestUnassignedVariables()!=unassigned)
    029                return currentSolution.getModel().getBestUnassignedVariables()>unassigned;
    030            return currentSolution.getModel().getTotalValue()<currentSolution.getBestValue();
    031        }
    032
    033    }