Search in sources :

Example 1 with ContradictionException

use of choco.kernel.solver.ContradictionException in project abstools by abstools.

the class ChocoSolver method checkSolution.

public boolean checkSolution(Map<String, Integer> solution, Model model, CPModel m) {
    // Read the model
    CPSolver s = new CPSolver();
    s.read(m);
    if (absmodel.debug)
        absmodel.println("solution to check:\n" + solution);
    // HashMap<String,Integer> selection = new HashMap<String,Integer>();
    Iterator<IntegerVariable> it = m.getIntVarIterator();
    try {
        // aux variables
        int val;
        Set<String> newFeatures = new HashSet<>();
        Set<String> newParents = new HashSet<>();
        if (absmodel.debug)
            absmodel.println("Adding new values:");
        while (it.hasNext()) {
            // for all variables in the constraints
            // (model): round 1
            IntegerVariable var = it.next();
            // IF used variable is present in the solution, update it!
            if (solution.containsKey(var.getName())) {
                val = solution.get(var.getName());
                if (absmodel.debug)
                    absmodel.println("  " + var + " -> " + val);
                s.getVar(var).setVal(val);
                // Possible feature name -- include later the parents.
                if (val == 1)
                    newFeatures.add(var.getName());
            }
        }
        // constraints (model)
        for (Map.Entry<String, Integer> entry : solution.entrySet()) {
            if (entry.getValue() == 1)
                if (!entry.getKey().contains("."))
                    newFeatures.add(entry.getKey());
        }
        // collect parents of 'newFeatures'
        if (model != null)
            model.collectParents(newFeatures, newParents);
        // add newParents and default values to the solution
        it = m.getIntVarIterator();
        while (it.hasNext()) {
            // for all variables in the constraints
            // (model): round 2
            IntegerVariable var = it.next();
            // If it is a parent to include, set
            if (newParents.contains(var.getName())) {
                if (absmodel.debug)
                    absmodel.println("  " + var + " (parent) -> 1");
                s.getVar(var).setVal(1);
            } else // ELSE use default value
            if (!solution.containsKey(var.getName())) {
                // By default, the optional wrapper "$..." is ALWAYS true
                if (var.getName().startsWith("$")) {
                    if (absmodel.debug)
                        absmodel.println("  " + var + " (default) -> 1");
                    s.getVar(var).setVal(1);
                // By default, unrefered features & attributes are false
                } else if (defaultvals.containsKey(var.getName())) {
                    int defval = defaultvals.get(var.getName());
                    if (absmodel.debug)
                        absmodel.println("  " + var.getName() + " (default) -> " + defval);
                    s.getVar(var).setVal(defval);
                } else {
                    if (absmodel.debug)
                        absmodel.println("  " + var.getName() + " (default) -> 0");
                    s.getVar(var).setVal(0);
                }
            }
        }
    } catch (ContradictionException e1) {
        if (absmodel.debug)
            System.err.println("$$$ Contradiction found... $$$");
    }// Catch-all
     catch (Exception e1) {
        // Catch-all
        if (absmodel.debug) {
            System.err.println("$$$ Failed to check solution... $$$");
            e1.printStackTrace();
        }
    }
    return s.checkSolution();
}
Also used : CPSolver(choco.cp.solver.CPSolver) IntegerVariable(choco.kernel.model.variables.integer.IntegerVariable) ContradictionException(choco.kernel.solver.ContradictionException) HashMap(java.util.HashMap) Map(java.util.Map) Constraint(choco.kernel.model.constraints.Constraint) MetaConstraint(choco.kernel.model.constraints.MetaConstraint) ComponentConstraint(choco.kernel.model.constraints.ComponentConstraint) ContradictionException(choco.kernel.solver.ContradictionException) HashSet(java.util.HashSet)

Example 2 with ContradictionException

use of choco.kernel.solver.ContradictionException in project abstools by abstools.

the class ChocoSolver method checkSolution.

public boolean checkSolution(Map<String, Integer> solution, Model model, CPModel m) {
    // Read the model
    CPSolver s = new CPSolver();
    s.read(m);
    if (absmodel.debug)
        absmodel.println("solution to check:\n" + solution);
    // HashMap<String,Integer> selection = new HashMap<String,Integer>();
    Iterator<IntegerVariable> it = m.getIntVarIterator();
    try {
        // aux variables
        int val;
        Set<String> newFeatures = new HashSet<>();
        Set<String> newParents = new HashSet<>();
        if (absmodel.debug)
            absmodel.println("Adding new values:");
        while (it.hasNext()) {
            // for all variables in the constraints
            // (model): round 1
            IntegerVariable var = it.next();
            // IF used variable is present in the solution, update it!
            if (solution.containsKey(var.getName())) {
                val = solution.get(var.getName());
                if (absmodel.debug)
                    absmodel.println("  " + var + " -> " + val);
                s.getVar(var).setVal(val);
                // Possible feature name -- include later the parents.
                if (val == 1)
                    newFeatures.add(var.getName());
            }
        }
        // constraints (model)
        for (Map.Entry<String, Integer> entry : solution.entrySet()) {
            if (entry.getValue() == 1)
                if (!entry.getKey().contains("."))
                    newFeatures.add(entry.getKey());
        }
        // collect parents of 'newFeatures'
        if (model != null)
            model.collectParents(newFeatures, newParents);
        // add newParents and default values to the solution
        it = m.getIntVarIterator();
        while (it.hasNext()) {
            // for all variables in the constraints
            // (model): round 2
            IntegerVariable var = it.next();
            // If it is a parent to include, set
            if (newParents.contains(var.getName())) {
                if (absmodel.debug)
                    absmodel.println("  " + var + " (parent) -> 1");
                s.getVar(var).setVal(1);
            } else // ELSE use default value
            if (!solution.containsKey(var.getName())) {
                // By default, the optional wrapper "$..." is ALWAYS true
                if (var.getName().startsWith("$")) {
                    if (absmodel.debug)
                        absmodel.println("  " + var + " (default) -> 1");
                    s.getVar(var).setVal(1);
                // By default, unrefered features & attributes are false
                } else if (defaultvals.containsKey(var.getName())) {
                    int defval = defaultvals.get(var.getName());
                    if (absmodel.debug)
                        absmodel.println("  " + var.getName() + " (default) -> " + defval);
                    s.getVar(var).setVal(defval);
                } else {
                    if (absmodel.debug)
                        absmodel.println("  " + var.getName() + " (default) -> 0");
                    s.getVar(var).setVal(0);
                }
            }
        }
    } catch (ContradictionException e1) {
        if (absmodel.debug)
            System.err.println("$$$ Contradiction found... $$$");
    }// Catch-all
     catch (Exception e1) {
        // Catch-all
        if (absmodel.debug) {
            System.err.println("$$$ Failed to check solution... $$$");
            e1.printStackTrace();
        }
    }
    return s.checkSolution();
}
Also used : CPSolver(choco.cp.solver.CPSolver) IntegerVariable(choco.kernel.model.variables.integer.IntegerVariable) ContradictionException(choco.kernel.solver.ContradictionException) HashMap(java.util.HashMap) Map(java.util.Map) Constraint(choco.kernel.model.constraints.Constraint) MetaConstraint(choco.kernel.model.constraints.MetaConstraint) ComponentConstraint(choco.kernel.model.constraints.ComponentConstraint) ContradictionException(choco.kernel.solver.ContradictionException) HashSet(java.util.HashSet)

Aggregations

CPSolver (choco.cp.solver.CPSolver)2 ComponentConstraint (choco.kernel.model.constraints.ComponentConstraint)2 Constraint (choco.kernel.model.constraints.Constraint)2 MetaConstraint (choco.kernel.model.constraints.MetaConstraint)2 IntegerVariable (choco.kernel.model.variables.integer.IntegerVariable)2 ContradictionException (choco.kernel.solver.ContradictionException)2 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 Map (java.util.Map)2