[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