>If no-loop is used with Rule 1 instead of lock-on-active, the rule will go
>into an infinite loop. I don't understand why no-loop doesn't work. Any
>guidance?
no-loop won't work because of Rule2. It modifies Stack and that reactivates
Rule1. No-loop will ignore only modifications to current set of data
(current tuple).

>If lock-on-active is used on Rule 1 and Rule 2 (instead of no-loop), Rule 2
>is never activated. It's interesting that no-loop works in Rule 2, but not
>in Rule 1.
this is because both rules are part of the MAIN agenda-group. With the input
data you have, when Rule1 increases the size of the Stack only then can
Rule2 fire however it won't since lock-on-active will discard its
activations.

On Mon, Jan 26, 2009 at 7:28 PM, Dan Seaver <dan.sea...@ge.com> wrote:

>
> I am familiar with both of these rule attributes. However, no-loop doesn't
> work in all cases, and lock-on-active needs a fairly fine-grained setup of
> activation groups or ruleflow groups in many circumstances. Also,
> lock-on-active can not block selective activations, it blocks all
> activations. So the activations you don't want to block have to go in a
> separate rule that doesn't have lock-on-active set.
>
> I think it would be useful for many in the group to see an example of
> appropriate use of these attributes, as well as possible solutions for when
> these attributes are inappropriate to use.
>
> Here are two rules that apply:
> rule "Rule 1"
>        lock-on-active true
>         when
>                board : Board (thickness == 1)
>                stack : Stack (location == "A")
>        then
>                 stack.addBoard(board);
>                update(stack);
>                System.out.format ("Sorted: %s added to Stack %s\n", board,
> stack);
> end
>
> rule "Rule 2"
>        salience 1
>        no-loop true
>        when
>                stack : Stack (size > 3)
>        then
>                stack.setStatus("Overflowing");
>                update (stack);
>                System.out.format ("Stack %s\n", stack);
>                for (Board stackBoard : stack.getBoards()) {
>                        System.out.format ("%20s\n", stackBoard);
>                }
> end
>
> I've attached an Eclipse project that contains these rules for anyone that
> wants to play around with it.
>
> If no-loop is used with Rule 1 instead of lock-on-active, the rule will go
> into an infinite loop. I don't understand why no-loop doesn't work. Any
> guidance?
>
> If lock-on-active is used on Rule 1 and Rule 2 (instead of no-loop), Rule 2
> is never activated. It's interesting that no-loop works in Rule 2, but not
> in Rule 1.
>
> Dan
>
>
> Mark Proctor wrote:
> >
> > see no-loop or the more powerful lock-on-active.
> >
> > Mark
> > Dan Seaver wrote:
> >> Sounds like a very good idea. If you go forward with this, I'd love to
> >> see
> >> your method for solving the following type of problem:
> >>
> >> I need to update a particular object without causing the rule to
> re-fire.
> >>
> >> Say I have two classes, Stack and Board. I need to choose the Stack to
> >> put
> >> each Board, so one of these sorting rulles would look like this:
> >>
> >> when
> >>    board : Board (thickness == 1)
> >>    stack : Stack (location == "A")
> >> then
> >>    board.setStack(stack);
> >>    update(board);
> >> end
> >>
> >> The problem is the update statement puts the rule back in the Agenda to
> >> be
> >> fired again, thus an infinite loop. My solution in general has been to
> >> use a
> >> Collection to track boards that have been processed, but it seems to be
> >> alot
> >> of overhead. I'm not pleased by my solution.
> >>
> >> when
> >>    board : Board (thickness == 1)
> >>    stack : Stack (location == "A")
> >>    processed : NamedCollection(name == "BoardsSorted", collection not
> >> contains board)
> >> then
> >>    board.setStack(stack);
> >>    update(board);
> >>    processed.add(board);
> >>    update(processed);
> >> end
> >>
> >> Also, the NamedCollection needs to be created, which I'm doing within
> the
> >> ruleset, which adds a somewhat meaningless to Business Analysts rule.
> >> Though
> >> I could create the NamedCollection in Java and add it to WorkingMemory
> >> prior
> >> to firing the rules, I'd like the rulesets to take care of themselves.
> >>
> >> My actual problem set is laced with many solutions that need to update
> >> objects. Even if the object is not directly related to the rule
> criteria,
> >> a
> >> map to the object needs to be created in the RHS so the LHS has a
> >> reference
> >> to the object being updated, thus posing the same problem as above.
> >>
> >> Your insights would be greatly appreciated.
> >>
> >>
> >> Mark Proctor wrote:
> >>
> >>> I'm going to try an informal experiment for the 4th of February at 5PM
> >>> GMT (Date/Time subject to change), we will run an online Drools Clinic
> >>> in the form of a Webinar. So the idea here isn't of a 60 minute
> >>> presentation, but really more of a 60 minute interactive Q&A where we
> >>> will use the desktop to assist in some explanations talking through
> code
> >>> or examples. What do people think?
> >>>
> >>> Ideally we would have a set of pre-determined questions, with some
> adhoc
> >>> ones on the day too. Feel free to start listing your Qs here. I want to
> >>> avoid "What's  WorkingMemory" type questions, but other than that,
> >>> anything is game. Also if anyone has anything cool they would like to
> >>> discuss about how they have used Drools, or just general interesting AI
> >>> ideas, then that's fine too - happy for this just to turn into a fun
> >>> geek chat too.
> >>>
> >>> Mark
> >>>
> >>> _______________________________________________
> >>> rules-users mailing list
> >>> rules-users@lists.jboss.org
> >>> https://lists.jboss.org/mailman/listinfo/rules-users
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users@lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
> http://www.nabble.com/file/p21671931/tests.zip tests.zip
> --
> View this message in context:
> http://www.nabble.com/Drools-Community-Clinic-Feb-4th-5PM-GMT-tp21623144p21671931.html
> Sent from the drools - user mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to