Regarding this particular question from my initial message:

> Any thoughts from anyone about what would be involved in modifying the Jena code base to support this?

It looks like what I'm asking for would be reasonably easy. It looks like the high-level steps would be:

 * Modify the rule representation to store a numeric priority
 * Define a rule syntax modification for how to state a numeric priority
 * Modify the rule parser to parse out the numeric priority and put it
   into the rule representation
 * In RETEConflictSet, write a new method to choose a rule to fire
   based on these priorities.  The place to call that method (hopefully
   the only place needed) would be in RETEConflictSet.fireOne.

So I guess I'll add the following question: Does that sound right to those to know the code well?

Cheers,
David


On 10/5/2016 6:15 PM, David Martin wrote:
Hi Niels,

Thanks for the excellent observations/suggestions. Yes, I think you are right that we could adopt these techniques that leverage what's provided in the basic RETE algorithm, which are already implemented in Jena. However, we strongly prefer a more streamlined approach. For one thing, the "bookkeeping" clauses and assertions in the rules can get to be really cumbersome and can seriously impact the readability of the rules, and can be hard for the rules author to wrap his head around once you get beyond a few rules. Rules ease-of-authoring is a big requirement for us.

So we've concluded that we want an approach that's very easy for the rules writer to read and think about, and more tightly integrated with rule-firing choices that happen under the hood.

We've thought a little bit about using the techniques you've mentioned to support a preprocessing approach. That is, the rules author would simply write the numeric priorities, but some kind of preprocessor would generate the bookkeeping clauses and assertions just before (or just after) the rules are loaded. That might work out pretty well, but I'd still like to find out if the Jena gurus think this could be done in a more elegant fashion by modifying the existing Java rule-firing code. (And if anyone has already worked on this.)

Best regards,
David


On 10/5/2016 3:57 PM, Niels Andersen wrote:
David,

Could you put the priority into the rule and then let the rule completion trigger the next set of rules?

Another option is to create the rule so that each rule tests to see if there are any overlapping rules that have a higher priority.

Niels

-----Original Message-----
From: David Martin [mailto:[email protected]]
Sent: Wednesday, October 5, 2016 15:28
To: [email protected]
Subject: Adding priorities to Jena rules?

Hi all,

We are working on a system that employs Jena rules, and we're finding it would be extremely valuable to have a capability for specifying rule priorities. We are using the forwardRETE reasoning mode.

What we're thinking of would be the ability of the rules author to assign a numeric priority to each rule. When the system chooses a rule to fire, if there are multiple possibilities, one of the rules with the highest numeric priority is chosen.

Priorities have been added in various ways to many different rules reasoning systems. Indeed, Wikipedia's article on RETE mentions rule priorities as one of the typical considerations used in conflict resolution.

My questions:

Is there anything like this already in Jena, which I am not yet aware of?

Has anyone ever designed or implemented an approach to support priorities in Jena rules?

Is this something that might be on the roadmap for future evolution of Jena rules?

Any thoughts from anyone about what would be involved in modifying the Jena code base to support this?

Finally, in the current implementation, is the ordering of rules (order in which the rules have been loaded) decisive in conflict resolution?

Thanks!
David



Reply via email to