001 package ifs.example.csp;
002
003 import java.util.*;
004
005 /**
006 * Simple test of IFS CBS algorithm on random binary CSP problem CSP(25,12,198/300,36/144).
007 *
008 * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
009 * @version 1.0
010 */
011 public class SimpleTest {
012 /**
013 * run the test
014 */
015 public static void main(String[] args) {
016 org.apache.log4j.BasicConfigurator.configure();
017 int nrVariables = 25;
018 int nrValues = 12;
019 int nrConstraints = 198;
020 double tigtness = 0.25;
021 int nrAllPairs = nrValues*nrValues;
022 int nrCompatiblePairs = (int)((1.0-tigtness)*nrAllPairs);
023 long seed = System.currentTimeMillis();
024 System.out.println("CSP("+nrVariables+","+nrValues+","+nrConstraints+"/"+((nrVariables*(nrVariables-1))/2)+","+(nrAllPairs-nrCompatiblePairs)+"/"+nrAllPairs+")");
025
026 ifs.util.DataProperties cfg = new ifs.util.DataProperties();
027 cfg.setProperty("Termination.Class","ifs.termination.GeneralTerminationCondition");
028 cfg.setProperty("Termination.StopWhenComplete","true");
029 cfg.setProperty("Termination.TimeOut","60");
030 cfg.setProperty("Comparator.Class","ifs.solution.GeneralSolutionComparator");
031 cfg.setProperty("Value.Class","ifs.heuristics.GeneralValueSelection");
032 cfg.setProperty("Value.WeightConflicts", "1");
033 cfg.setProperty("Variable.Class","ifs.heuristics.GeneralVariableSelection");
034 cfg.setProperty("Extensions.Classes","ifs.extension.ConflictStatistics");
035
036 CSPModel model = new CSPModel(nrVariables,nrValues,nrConstraints,nrCompatiblePairs,seed);
037 ifs.solver.Solver solver = new ifs.solver.Solver(cfg);
038 solver.setInitalSolution(model);
039
040 solver.start();
041 try {
042 solver.getSolverThread().join();
043 } catch (InterruptedException e) {}
044
045 ifs.solution.Solution solution = solver.lastSolution();
046 solution.restoreBest();
047
048 System.out.println("Best solution found after "+solution.getBestTime()+" seconds ("+solution.getBestIteration()+" iterations).");
049 System.out.println("Number of assigned variables is "+solution.getModel().assignedVariables().size());
050 System.out.println("Total value of the solution is "+solution.getModel().getTotalValue());
051
052 int idx=1;
053 for (Enumeration e=solution.getModel().variables().elements();e.hasMoreElements();) {
054 CSPVariable v=(CSPVariable)e.nextElement();
055 if (v.getAssignment()!=null)
056 System.out.println("Var"+(idx++)+"="+v.getAssignment().toInt());
057 }
058 }
059 }