No I don't think you need to follow miss manners. Miss manners is designed
to stress rule engines for performance profiling reasons, so probably not
ideal to emulate !

I am not quite across what you are doing, but I can take a wild stab... (I
hope no one gets hurt)...

Well in the first rule when you match a Task to a Slot and then modify,
instead assert a new object which is a tuple of the Task and Slot
combination. Then have a 2nd rule which checks that combination - if its
bad, it retracts that combination. If its OK, then it does the assignment
(if it wasn't done before), and then retracts those Tasks/Slots so they are
not considered again. Can something like that work? Or did I just take out
someone eye (I can hear the screaming).

Michael.


On 1/27/06, Robert Jaemmrich <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> is it possible (or wise ;-) to use drools in a scheduling application?
>
> I want to place Tasks into Timeslots. Placement is dependant on certain
> constraints (hard or maybe soft) and ressources. Each slot can contain
> one task.
>
> E.g. I have some tasks {t1,t2,t3} to place on slots {s1,s2,s3,s4}.
>
> Constraints are defining which slots a task may be placed into
> (c1{t1;s1..s4}, c2{t2;s1,s4}) or define a task sequence
> (task1.slotNumber < task2.slotNumber).
>
> My naive "newbie approach" is to define two rules like this:
>
>   <rule name="Assign Next" no-loop="yes">
>     <parameter identifier="task">
>       <class>Task</class>
>     </parameter>
>     <parameter identifier="slot">
>       <class>Slot</class>
>     </parameter>
>     <java:condition>
>         slot.getTask() == null
>     </java:condition>
>     <java:condition>
>         task.getSlot() == null
>     </java:condition>
>     <java:consequence>
>                 System.out.println("Placing "+task.getName()+" on
> "+slot.getName());
>                 task.setSlot(slot);
>                 slot.setTask(task);
>                 drools.modifyObject(slot);
>                 drools.modifyObject(task);
>     </java:consequence>
>   </rule>
>
>   <rule name="Reset">
>     <parameter identifier="task">
>       <class>Task</class>
>     </parameter>
>     <parameter identifier="constraint">
>       <class>Constraint</class>
>     </parameter>
>     <java:condition>
>         task.getSlot() != null
>     </java:condition>
>     <java:condition>
>         !constraint.isOK(task)
>     </java:condition>
>     <java:consequence>
>                 System.out.println("Resetting ... ");
>                 Slot slot = task.getSlot();
>                 task.setSlot(null);
>                 drools.modifyObject(task);
>                 slot.setTask(null);
>                 drools.modifyObject(slot);
>     </java:consequence>
>   </rule>
>
> It assigns tuples of "Slot" and "Task" first and checks if they are ok
> (constraint.isOK) second. This leads to an infinite loop flipping
> between the two rules.
>
> Do I have to use a more "Miss Manners"ish approach of implementing some
> sort of backtracking mechanism by myself? I think I have to use some
> kind of depth search to avoid wasting huge quantities of workingMemory ..?
>
> Any help would be appreaciated! ;-)
>
>
> TIA,
>
> Robert
>

Reply via email to