[jboss-svn-commits] JBL Code SVN: r32376 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples: common/business and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Apr 3 12:39:28 EDT 2010


Author: ge0ffrey
Date: 2010-04-03 12:39:27 -0400 (Sat, 03 Apr 2010)
New Revision: 32376

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java
Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java
Log:
nurse rostering: evaluator helper

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java	2010-04-03 14:30:32 UTC (rev 32375)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java	2010-04-03 16:39:27 UTC (rev 32376)
@@ -1,13 +1,10 @@
 package org.drools.planner.examples.common.app;
 
-import java.io.File;
-
 import org.drools.planner.core.Solver;
 import org.drools.planner.examples.common.business.SolutionBusiness;
 import org.drools.planner.examples.common.persistence.AbstractSolutionExporter;
 import org.drools.planner.examples.common.persistence.AbstractSolutionImporter;
 import org.drools.planner.examples.common.persistence.SolutionDao;
-import org.drools.planner.examples.common.persistence.XstreamSolutionDaoImpl;
 import org.drools.planner.examples.common.swingui.SolutionPanel;
 import org.drools.planner.examples.common.swingui.WorkflowFrame;
 
@@ -17,13 +14,11 @@
 public abstract class CommonApp extends LoggingMain {
 
     private WorkflowFrame workflowFrame;
-    private SolutionDao solutionDao;
     private SolutionBusiness solutionBusiness;
 
     public CommonApp() {
-        solutionDao = createSolutionDao();
         solutionBusiness = createSolutionBusiness();
-        workflowFrame = new WorkflowFrame(solutionBusiness, createSolutionPanel(), solutionDao.getDirName());
+        workflowFrame = new WorkflowFrame(solutionBusiness, createSolutionPanel(), solutionBusiness.getDirName());
     }
 
     public void init() {
@@ -31,12 +26,13 @@
         workflowFrame.setVisible(true);
     }
 
-    protected SolutionBusiness createSolutionBusiness() {
+    public SolutionBusiness createSolutionBusiness() {
+        SolutionDao solutionDao = createSolutionDao();
         SolutionBusiness solutionBusiness = new SolutionBusiness();
         solutionBusiness.setSolutionDao(solutionDao);
         solutionBusiness.setImporter(createSolutionImporter());
         solutionBusiness.setExporter(createSolutionExporter());
-        solutionBusiness.setDataDir(solutionDao.getDataDir());
+        solutionBusiness.updateDataDirs();
         solutionBusiness.setSolver(createSolver());
         return solutionBusiness;
     }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java	2010-04-03 14:30:32 UTC (rev 32375)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java	2010-04-03 16:39:27 UTC (rev 32376)
@@ -62,6 +62,14 @@
         this.exporter = exporter;
     }
 
+    public File getDataDir() {
+        return solutionDao.getDataDir();
+    }
+
+    public String getDirName() {
+        return solutionDao.getDirName();
+    }
+
     public boolean hasImporter() {
         return importer != null;
     }
@@ -70,26 +78,26 @@
         return exporter != null;
     }
 
-    public void setDataDir(File dataDir) {
+    public void updateDataDirs() {
         if (hasImporter()) {
-            importDataDir = new File(dataDir, "input");
+            importDataDir = new File(getDataDir(), "input");
             if (!importDataDir.exists()) {
                 throw new IllegalStateException("The directory importDataDir (" + importDataDir.getAbsolutePath()
                         + ") does not exist. The working directory should be set to drools-planner-examples.");
             }
         }
-        unsolvedDataDir = new File(dataDir, "unsolved");
+        unsolvedDataDir = new File(getDataDir(), "unsolved");
         if (!unsolvedDataDir.exists()) {
             throw new IllegalStateException("The directory unsolvedDataDir (" + unsolvedDataDir.getAbsolutePath()
                     + ") does not exist. The working directory should be set to drools-planner-examples.");
         }
-        solvedDataDir = new File(dataDir, "solved");
+        solvedDataDir = new File(getDataDir(), "solved");
         if (!solvedDataDir.exists()) {
             throw new IllegalStateException("The directory solvedDataDir (" + solvedDataDir.getAbsolutePath()
                     + ") does not exist. The working directory should be set to drools-planner-examples.");
         }
         if (hasExporter()) {
-            exportDataDir = new File(dataDir, "output");
+            exportDataDir = new File(getDataDir(), "output");
             if (!exportDataDir.exists()) {
                 throw new IllegalStateException("The directory exportDataDir (" + exportDataDir.getAbsolutePath()
                         + ") does not exist. The working directory should be set to drools-planner-examples.");

Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java	2010-04-03 16:39:27 UTC (rev 32376)
@@ -0,0 +1,94 @@
+package org.drools.planner.examples.nurserostering.persistence;
+
+import java.io.File;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.drools.planner.examples.common.business.SolutionBusiness;
+import org.drools.planner.examples.nurserostering.app.NurseRosteringApp;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class NurseRosteringEvaluatorHelper {
+
+    private static final String INPUT_FILE_PREFIX = "long01";
+    private static final String OUTPUT_FILE_SUFFIX = "_tmp";
+
+    public static void main(String[] args) {
+        NurseRosteringApp nurseRosteringApp = new NurseRosteringApp();
+        SolutionBusiness solutionBusiness = nurseRosteringApp.createSolutionBusiness();
+        Process process = null;
+        try {
+            File inputFile = new File(solutionBusiness.getImportDataDir(),
+                    INPUT_FILE_PREFIX + ".xml").getCanonicalFile();
+            File outputFile = new File(solutionBusiness.getExportDataDir(),
+                    INPUT_FILE_PREFIX + OUTPUT_FILE_SUFFIX + ".xml").getCanonicalFile();
+            File evaluatorDir = new File("local/competition/nurserostering/");
+            String command = "java -jar evaluator.jar " + inputFile.getAbsolutePath()
+                    + " " + outputFile.getAbsolutePath();
+            process = Runtime.getRuntime().exec(command, null, evaluatorDir);
+            EvaluatorSummaryFilterOutputStream out = new EvaluatorSummaryFilterOutputStream();
+            IOUtils.copy(process.getInputStream(), out);
+            IOUtils.copy(process.getErrorStream(), System.err);
+            out.writeResults();
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        } finally {
+            if (process != null) {
+                process.destroy();
+            }
+        }
+    }
+
+    private static class EvaluatorSummaryFilterOutputStream extends FilterOutputStream {
+
+        private StringBuilder lineBuffer = new StringBuilder(120);
+        private Map<String, Integer> excessMap;
+        private static final String EXCESS_PATTERN = "excess = ";
+
+        private EvaluatorSummaryFilterOutputStream() {
+            super(System.out);
+            excessMap = new LinkedHashMap<String, Integer>();
+        }
+
+        @Override
+        public void write(int b) throws IOException {
+            super.write(b);
+            if (b == '\n') {
+                processLine(lineBuffer.toString());
+                lineBuffer.delete(0, lineBuffer.length());
+            } else {
+                lineBuffer.append((char) b);
+            }
+        }
+
+        private void processLine(String line) {
+            int excessIndex = line.indexOf(EXCESS_PATTERN);
+            if (excessIndex >= 0) {
+                String key = line.substring(0, excessIndex);
+                int value = Integer.parseInt(line.substring(excessIndex).replaceAll("excess = (\\d+) .*", "$1"));
+                Integer count = excessMap.get(key);
+                if (count == null) {
+                    count = value;
+                } else {
+                    count += value;
+                }
+                excessMap.put(key, count);
+            }
+        }
+
+        public void writeResults() {
+            System.out.println("EvaluatorHelper results");
+            System.out.println("=======================");
+            for (Map.Entry<String, Integer> entry : excessMap.entrySet()) {
+                System.out.println(entry.getKey() + " count = " + entry.getValue());
+            }
+        }
+    }
+
+}



More information about the jboss-svn-commits mailing list