[rules-users] Better way to run each rule once?

James Owen jco2009 at att.net
Fri Oct 9 19:28:21 EDT 2009


Greetings:

I have watched this thread with interest as person after person had  
another solution.  Perhaps mine would be the simplest.  If we stop to  
think about what IS a rulebase and remember that it is part of the AI  
approach and originally intended to solve extremely complex problems  
then the answer (OK, the answer to me without sufficient information)  
is that this is not a rulebase problem. The whole thing "sounds like"  
a procedural problem where values are modified and rules are fired  
only once.  (Remember - I don't have the whole project requirements  
nor what was really needed in front of me.)  This is not a rulebase  
(think AI, complex) problem at all.  That, together with the  
revelation that there are no Thing objects asserted on the RHS (and  
probably not any objects at all) means that this is not a forward nor  
backward chaining problem.  It is procedural and should have been  
solved with Java, C, C++ or something of that nature.

OK, preaching time is over.  Back to work, Serfs!!  :-)

One last thing.  Considering that the quality of the October Rules  
Fest went WAY up (the best, maybe, since the Dartmouth Conference in  
1956) and the registrations went down, I get the feeling that geeks  
either are not interested in this kind of thing OR that the geeks can  
not get the money to go to a conference.  The money for going to a  
conference seems to go to the Marketing departments and Business  
Analysts, not geeks.  After all, we (the geeks, techies, IT guys,  
whatever the nomenclature is in your particular company) are supposed  
to learn this stuff on our own.  In my opinion, it can be done that  
way with 10 to 15 years devotion to the art and science of AI in  
general and RBS in particular.  Now, all that being said, maybe you  
(the geek) need to take a weeks vacation, spend your own money and  
come to ORF 2009.  It could jolly well be the last one for a while.   
So, like Woodstock, if you missed it, you missed it.  There never was  
another one of the quality and magnitude.  And only those who were  
there could talk about what happened and why it was so totally awesome.

SDG
James Owen
Founder October Rules Fest
Senior Consultant / Architect KBSC
http://www.kbsc.com
http://www.OctoberRulesFest.org
Twitter: OctRulesFest
Blogs:
http://JavaRules.blogspot.com [Rulebased Systems Blog]
http://ORF2009.blogspot.com [October Rules Fest Blog]
http://exscg.blogspot.com/ [Expert Systems Consulting Group Blog]

"If I have seen a little further it is by standing on the shoulders of  
giants."
Sir Isaac Newton in a letter to Robert Hooke, 5 Feb 1676

Come to October Rules Fest and stand on the shoulders of the Giants of  
the industry; if only for a week.



On Oct 9, 2009, at 4:46 PM, Dave Schweisguth wrote:

> Fellow Droolers,
>
> On Fri, Oct 09, 2009 at 09:33:38AM +0100, Anstis, Michael (M.) wrote:
>> From: Dave Schweisguth <dave at schweisguth.org>
>>> Each of our rules modifies the fact it matches. We'd like to run  
>>> each of
>>> those rules exactly once, not reactivating them when a fact changes.
>>> [...]
>>
>> You could look into using a sequential RETE network
>>
>> http://blog.athico.com/2007/07/sequential-rete.html
>>
>> http://www.redhat.com/docs/manuals/jboss/jboss-soa-4.2/html/JBoss_Rules_
>> Manual/ch02s05s10.html
>>
>> But as Greg suggests, better understanding your use-case might  
>> furnish
>> other ideas.
>
> First, SequentialOption seems to be exactly what I was looking for;  
> many
> thanks. I set it and removed my AgendaFilter and my tests all pass,  
> and
> faster.
>
> Nonetheless here's the use case for those interested: My principal  
> facts are
> objects which I'll call Things which have an ID, a bunch of properties
> (unmodifiable fields), and a bunch of named numeric attributes which  
> to keep
> things simple I'll treat as a Map<String, Long>. The goal of the  
> rules is to
> calculate the attributes.
>
> A typical rule looks like
>
>    when thing: Thing(description matches ".*leaves.*")
>    then modify (thing) { attributes.green = 100 }
>
> Clearly one wants a rule like this to run only once. Since in a  
> given rules
> session there are multiple rules like this, no-loop wasn't  
> sufficient; after
> one rule fired it would activate another already-run rule on the  
> same Thing,
> and then vice versa, forever. With all the rules in the same  
> ruleflow group
> lock-on-active was too much in that it allowed only one rule to run.  
> (It
> occurs to me now that I might have made each rule no-loop and run it  
> in a
> new session; fortunately I don't seem to have to try that now.)
> SequentialOption seems to fit this use case perfectly. Of course  
> I'll be
> interested if anyone has a still better way to address it.
>
> Side note: Wolfgang, you were wondering why my AgendaFilter needed the
> Identifiable interface. You can see from the above that if I wanted to
> prevent a rule from firing more than once on the same Thing, I'd  
> need to
> recognize the Thing after the rule fired and its attributes (which  
> affect
> .equals and .hashCode) changed. It occurs to me now that I could  
> just have
> used object identity (==), since rules don't assert new Things. A  
> form of
> equals which considered only Thing's ID would also have been more  
> correct
> than my hashCode-like solution. Fortunately I no longer need this  
> approach
> at all.
>
> Thanks all for your interest and support!
>
> Cheers,
>
> -- 
> | Dave Schweisguth                           http://schweisguth.org/~dave/ 
>  |
> | Home: dave at schweisguth.org            Work: http://www.nileguide.com/ 
>  |
> | For compliance with the NJ Right to Know Act: Contents partially  
> unknown |
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091009/2594c24c/attachment.html 


More information about the rules-users mailing list