[jboss-svn-commits] JBL Code SVN: r26339 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: resources/org/drools/solver/examples/manners2009/solver and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat May 2 10:23:23 EDT 2009


Author: ge0ffrey
Date: 2009-05-02 10:23:22 -0400 (Sat, 02 May 2009)
New Revision: 26339

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/SeatDesignation.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl
Log:
manners2009: doctor rule prototype

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java	2009-05-02 13:33:51 UTC (rev 26338)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java	2009-05-02 14:23:22 UTC (rev 26339)
@@ -4,6 +4,7 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.EnumSet;
 
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
@@ -77,8 +78,10 @@
 
     public Collection<? extends Object> getFacts() {
         List<Object> facts = new ArrayList<Object>();
+        facts.addAll(EnumSet.allOf(JobType.class));
         facts.addAll(jobList);
         facts.addAll(guestList);
+        facts.addAll(EnumSet.allOf(Hobby.class));
         facts.addAll(hobbyPracticianList);
         facts.addAll(tableList);
         facts.addAll(seatList);

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/SeatDesignation.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/SeatDesignation.java	2009-05-02 13:33:51 UTC (rev 26338)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/SeatDesignation.java	2009-05-02 14:23:22 UTC (rev 26339)
@@ -86,6 +86,10 @@
         return getGuest().getJob();
     }
 
+    public JobType getGuestJobType() {
+        return getGuest().getJob().getJobType();
+    }
+
     public Table getSeatTable() {
         return getSeat().getTable();
     }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl	2009-05-02 13:33:51 UTC (rev 26338)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl	2009-05-02 14:23:22 UTC (rev 26339)
@@ -1,4 +1,5 @@
 package org.drools.solver.examples.nqueens.solver;
+    dialect "java"
 
 import org.drools.solver.core.score.calculator.SimpleScoreCalculator;
 import org.drools.solver.core.score.constraint.UnweightedConstraintOccurrence;
@@ -46,14 +47,40 @@
 end
 
 // 2 doctors at each table but NOT two of the same kind
+rule "twoDoctorsPerTable"
+    when
+        $table : Table();
+        not (
+            SeatDesignation(guestJobType == JobType.DOCTOR, seatTable == $table, $firstJob : guestJob)
+            and SeatDesignation(guestJobType == JobType.DOCTOR, seatTable == $table, guestJob != $firstJob)
+        );
+    then
+        insertLogical(new UnweightedConstraintOccurrence("twoDoctorsPerTable",
+                $table));
+end
+
+// This is to avoid score traps. The score function should for example give an insentive
+// to put it 1 doctor at a table without doctors even though 2 doctors are needed.
+// This extra rule can be avoided by weighting the broken constrainst of the other rule
+rule "atLeastOneJobTypePerTableScoreGuider"
+    when
+        $table : Table();
+        $jobType : JobType();
+        not SeatDesignation(guestJobType == $jobType, seatTable == $table);
+    then
+        insertLogical(new UnweightedConstraintOccurrence("tableWithoutJobTypeShouldBePunishedExtra",
+                $table, $jobType));
+end
+
 // 2 socialites at each table
 // 2 sports stars at each table but NOT two of the same kind
 // 2 teachers at each table
 // 2 programmers at each table but NOT two of the same kind
 
 
-// Each person MUST have someone (left or right) who has the same hobby.
-//rule "leftOrRightHasHobbyInCommon"
+// Each person must share a hobby with his/her left neighbour
+// (so also the same or another hobby with his/her right neighbour)
+//rule "leftHasHobbyInCommon"
 //    when
 //        $leftSeat : Seat();
 //        $rightSeat : Seat(leftSeat == $leftSeat);
@@ -61,7 +88,7 @@
 //        $rightDesignation : SeatDesignation($rightGuest : guest, seat == $rightSeat);
 //        HobbyPractician(guest == $leftGuest, $leftHobby : hobby);
 //        not HobbyPractician(guest == $rightGuest, hobby == leftHobby);
-// TODO this is bugged because they have to have every hobby in common and both and right seat have to
+// TODO this is bugged because they have to have every hobby in common
 //    then
 //        insertLogical(new UnweightedConstraintOccurrence("leftOrRightHasHobbyInCommon",
 //                $leftDesignation, $rightDesignation));




More information about the jboss-svn-commits mailing list