Search in sources :

Example 1 with ParallelSolver

use of org.cpsolver.ifs.solver.ParallelSolver in project cpsolver by UniTime.

the class Test method main.

/**
     * Main program
     * 
     * @param args
     *            problem property file, input file (optional, may be set by
     *            General.Input property), output file (optional, may be set by
     *            General.OutputFile property)
     */
public static void main(String[] args) {
    try {
        DataProperties cfg = new DataProperties();
        cfg.setProperty("Termination.StopWhenComplete", "false");
        cfg.setProperty("Termination.TimeOut", "1800");
        cfg.setProperty("General.SaveBestUnassigned", "-1");
        cfg.setProperty("Neighbour.Class", "org.cpsolver.exam.heuristics.ExamNeighbourSelection");
        if (args.length >= 1) {
            cfg.load(new FileInputStream(args[0]));
            cfg.setProperty("General.Config", new File(args[0]).getName());
        }
        cfg.putAll(System.getProperties());
        File inputFile = new File("c:\\test\\exam\\exam1070.xml");
        if (args.length >= 2) {
            inputFile = new File(args[1]);
        }
        ToolBox.setSeed(cfg.getPropertyLong("General.Seed", Math.round(Long.MAX_VALUE * Math.random())));
        cfg.setProperty("General.Input", inputFile.toString());
        String outName = inputFile.getName();
        if (outName.indexOf('.') >= 0)
            outName = outName.substring(0, outName.lastIndexOf('.')) + "s.xml";
        File outFile = new File(inputFile.getParentFile(), outName);
        if (args.length >= 3) {
            outFile = new File(args[2]);
            if (outFile.exists() && outFile.isDirectory())
                outFile = new File(outFile, outName);
            if (!outFile.exists() && !outFile.getName().endsWith(".xml"))
                outFile = new File(outFile, outName);
        }
        if (outFile.getParentFile() != null)
            outFile.getParentFile().mkdirs();
        cfg.setProperty("General.OutputFile", outFile.toString());
        cfg.setProperty("General.Output", outFile.getParent());
        String logName = outFile.getName();
        if (logName.indexOf('.') >= 0)
            logName = logName.substring(0, logName.lastIndexOf('.')) + ".log";
        setupLogging(new File(outFile.getParent(), logName), "true".equals(System.getProperty("debug", "false")));
        ExamModel model = new ExamModel(cfg);
        Document document = (new SAXReader()).read(new File(cfg.getProperty("General.Input")));
        int nrSolvers = cfg.getPropertyInt("Parallel.NrSolvers", 1);
        Assignment<Exam, ExamPlacement> assignment = (nrSolvers <= 1 ? new DefaultSingleAssignment<Exam, ExamPlacement>() : new DefaultParallelAssignment<Exam, ExamPlacement>());
        model.load(document, assignment);
        Solver<Exam, ExamPlacement> solver = (nrSolvers == 1 ? new Solver<Exam, ExamPlacement>(cfg) : new ParallelSolver<Exam, ExamPlacement>(cfg));
        solver.setInitalSolution(new Solution<Exam, ExamPlacement>(model, assignment));
        solver.currentSolution().addSolutionListener(new SolutionListener<Exam, ExamPlacement>() {

            @Override
            public void solutionUpdated(Solution<Exam, ExamPlacement> solution) {
            }

            @Override
            public void getInfo(Solution<Exam, ExamPlacement> solution, Map<String, String> info) {
            }

            @Override
            public void getInfo(Solution<Exam, ExamPlacement> solution, Map<String, String> info, Collection<Exam> variables) {
            }

            @Override
            public void bestCleared(Solution<Exam, ExamPlacement> solution) {
            }

            @Override
            public void bestSaved(Solution<Exam, ExamPlacement> solution) {
                ExamModel m = (ExamModel) solution.getModel();
                Assignment<Exam, ExamPlacement> a = solution.getAssignment();
                if (sLog.isInfoEnabled()) {
                    sLog.info("**BEST[" + solution.getIteration() + "]** " + (m.variables().size() > a.nrAssignedVariables() ? "V:" + a.nrAssignedVariables() + "/" + m.variables().size() + " - " : "") + "T:" + new DecimalFormat("0.00").format(m.getTotalValue(a)) + " " + m.toString(a) + (solution.getFailedIterations() > 0 ? ", F:" + sDoubleFormat.format(100.0 * solution.getFailedIterations() / solution.getIteration()) + "%" : ""));
                }
            }

            @Override
            public void bestRestored(Solution<Exam, ExamPlacement> solution) {
            }
        });
        Runtime.getRuntime().addShutdownHook(new ShutdownHook(solver));
        solver.start();
        try {
            solver.getSolverThread().join();
        } catch (InterruptedException e) {
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : Solver(org.cpsolver.ifs.solver.Solver) ParallelSolver(org.cpsolver.ifs.solver.ParallelSolver) DefaultParallelAssignment(org.cpsolver.ifs.assignment.DefaultParallelAssignment) ExamModel(org.cpsolver.exam.model.ExamModel) SAXReader(org.dom4j.io.SAXReader) DecimalFormat(java.text.DecimalFormat) DataProperties(org.cpsolver.ifs.util.DataProperties) Document(org.dom4j.Document) DefaultParallelAssignment(org.cpsolver.ifs.assignment.DefaultParallelAssignment) DefaultSingleAssignment(org.cpsolver.ifs.assignment.DefaultSingleAssignment) Assignment(org.cpsolver.ifs.assignment.Assignment) ExamStudentConflictsPerExam(org.cpsolver.exam.reports.ExamStudentConflictsPerExam) Exam(org.cpsolver.exam.model.Exam) ParallelSolver(org.cpsolver.ifs.solver.ParallelSolver) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) ExamPlacement(org.cpsolver.exam.model.ExamPlacement) DefaultSingleAssignment(org.cpsolver.ifs.assignment.DefaultSingleAssignment) File(java.io.File)

Example 2 with ParallelSolver

use of org.cpsolver.ifs.solver.ParallelSolver in project cpsolver by UniTime.

the class Test method execute.

/**
     * Run the problem
     */
public void execute() {
    int nrSolvers = getProperties().getPropertyInt("Parallel.NrSolvers", 1);
    Solver<TeachingRequest.Variable, TeachingAssignment> solver = (nrSolvers == 1 ? new Solver<TeachingRequest.Variable, TeachingAssignment>(getProperties()) : new ParallelSolver<TeachingRequest.Variable, TeachingAssignment>(getProperties()));
    Assignment<TeachingRequest.Variable, TeachingAssignment> assignment = (nrSolvers <= 1 ? new DefaultSingleAssignment<TeachingRequest.Variable, TeachingAssignment>() : new DefaultParallelAssignment<TeachingRequest.Variable, TeachingAssignment>());
    if (!load(new File(getProperties().getProperty("input", "input/solution.xml")), assignment))
        return;
    solver.setInitalSolution(new Solution<TeachingRequest.Variable, TeachingAssignment>(this, assignment));
    solver.currentSolution().addSolutionListener(new SolutionListener<TeachingRequest.Variable, TeachingAssignment>() {

        @Override
        public void solutionUpdated(Solution<TeachingRequest.Variable, TeachingAssignment> solution) {
        }

        @Override
        public void getInfo(Solution<TeachingRequest.Variable, TeachingAssignment> solution, Map<String, String> info) {
        }

        @Override
        public void getInfo(Solution<TeachingRequest.Variable, TeachingAssignment> solution, Map<String, String> info, Collection<TeachingRequest.Variable> variables) {
        }

        @Override
        public void bestCleared(Solution<TeachingRequest.Variable, TeachingAssignment> solution) {
        }

        @Override
        public void bestSaved(Solution<TeachingRequest.Variable, TeachingAssignment> solution) {
            Model<TeachingRequest.Variable, TeachingAssignment> m = solution.getModel();
            Assignment<TeachingRequest.Variable, TeachingAssignment> a = solution.getAssignment();
            System.out.println("**BEST[" + solution.getIteration() + "]** " + m.toString(a));
        }

        @Override
        public void bestRestored(Solution<TeachingRequest.Variable, TeachingAssignment> solution) {
        }
    });
    solver.start();
    try {
        solver.getSolverThread().join();
    } catch (InterruptedException e) {
    }
    Solution<TeachingRequest.Variable, TeachingAssignment> solution = solver.lastSolution();
    solution.restoreBest();
    sLog.info("Best solution found after " + solution.getBestTime() + " seconds (" + solution.getBestIteration() + " iterations).");
    sLog.info("Number of assigned variables is " + solution.getModel().assignedVariables(solution.getAssignment()).size());
    sLog.info("Total value of the solution is " + solution.getModel().getTotalValue(solution.getAssignment()));
    sLog.info("Info: " + ToolBox.dict2string(solution.getExtendedInfo(), 2));
    File outDir = new File(getProperties().getProperty("output", "output"));
    outDir.mkdirs();
    save(outDir, solution.getAssignment());
    try {
        generateReports(outDir, assignment);
    } catch (IOException e) {
        sLog.error("Failed to write reports: " + e.getMessage(), e);
    }
    ConflictStatistics<TeachingRequest.Variable, TeachingAssignment> cbs = null;
    for (Extension<TeachingRequest.Variable, TeachingAssignment> extension : solver.getExtensions()) {
        if (ConflictStatistics.class.isInstance(extension)) {
            cbs = (ConflictStatistics<TeachingRequest.Variable, TeachingAssignment>) extension;
        }
    }
    if (cbs != null) {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileWriter(new File(outDir, "cbs.txt")));
            out.println(cbs.toString());
            out.flush();
            out.close();
        } catch (IOException e) {
            sLog.error("Failed to write CBS: " + e.getMessage(), e);
        } finally {
            if (out != null)
                out.close();
        }
    }
}
Also used : Solver(org.cpsolver.ifs.solver.Solver) ParallelSolver(org.cpsolver.ifs.solver.ParallelSolver) DefaultParallelAssignment(org.cpsolver.ifs.assignment.DefaultParallelAssignment) FileWriter(java.io.FileWriter) TeachingRequest(org.cpsolver.instructor.model.TeachingRequest) DefaultParallelAssignment(org.cpsolver.ifs.assignment.DefaultParallelAssignment) DefaultSingleAssignment(org.cpsolver.ifs.assignment.DefaultSingleAssignment) Assignment(org.cpsolver.ifs.assignment.Assignment) TeachingAssignment(org.cpsolver.instructor.model.TeachingAssignment) PrintWriter(java.io.PrintWriter) ParallelSolver(org.cpsolver.ifs.solver.ParallelSolver) IOException(java.io.IOException) TeachingAssignment(org.cpsolver.instructor.model.TeachingAssignment) Model(org.cpsolver.ifs.model.Model) InstructorSchedulingModel(org.cpsolver.instructor.model.InstructorSchedulingModel) DefaultSingleAssignment(org.cpsolver.ifs.assignment.DefaultSingleAssignment) File(java.io.File)

Aggregations

File (java.io.File)2 IOException (java.io.IOException)2 Assignment (org.cpsolver.ifs.assignment.Assignment)2 DefaultParallelAssignment (org.cpsolver.ifs.assignment.DefaultParallelAssignment)2 DefaultSingleAssignment (org.cpsolver.ifs.assignment.DefaultSingleAssignment)2 ParallelSolver (org.cpsolver.ifs.solver.ParallelSolver)2 Solver (org.cpsolver.ifs.solver.Solver)2 FileInputStream (java.io.FileInputStream)1 FileWriter (java.io.FileWriter)1 PrintWriter (java.io.PrintWriter)1 DecimalFormat (java.text.DecimalFormat)1 Exam (org.cpsolver.exam.model.Exam)1 ExamModel (org.cpsolver.exam.model.ExamModel)1 ExamPlacement (org.cpsolver.exam.model.ExamPlacement)1 ExamStudentConflictsPerExam (org.cpsolver.exam.reports.ExamStudentConflictsPerExam)1 Model (org.cpsolver.ifs.model.Model)1 DataProperties (org.cpsolver.ifs.util.DataProperties)1 InstructorSchedulingModel (org.cpsolver.instructor.model.InstructorSchedulingModel)1 TeachingAssignment (org.cpsolver.instructor.model.TeachingAssignment)1 TeachingRequest (org.cpsolver.instructor.model.TeachingRequest)1