Hi Raphael, 

There are multiple concerns mixed here, I don't know if this post would benefit 
of being cutted in at least 2 : 
1- How drools works : read about RETE algorithm (wikipedia is a good start) and 
about drools-expert (core module that contains the engine, first chapter of the 
doc explain various things about how it works, how you shoud use, and when you 
should use or not rules engines). 
2- How to mix rules (written by business users I guess) with another 
optimisation module? For that point the solution will be some architectural 
design to be as much efficient as possible to stay within the 1 minute. It is 
highly dependant of what you are using in the optimisation module (especially 
the KPI form), and/or if you need to call the rules in the middle of solving of 
not. 

So, let's go with you case : 


> I am currently playing with Drools, and trying to build rules in Java from my 
> own Rule objects, with the help of the lang.api. 

So you have your own Rule list somewhere. 
You don't plan to use drools langage to define them ? 
What they look like ? (if you can share at least the structure) 



> Actually, there is a optimization-team that already worked on that and came 
> up with their own solution. 


> They also evaluated Drool-planner for the "planning" part but went another 
> direction for several reasons. 

This would be interresting to know these reasons. 


>I am only working here into transforming the complex user-filled rules into 
>"forbid" pairs as an input 
>to the optimizer. 
> 

>I might use drools-planner for this. 

Don't use planner only to generate pairs. You don't need planner there, drools 
'basic' will do the job . 
If you use planner, use it for you whole optim problem, and feed it with all 
yours "complex user-filled rules". 
Using planner for that will let you write at most any kind of criteria/KPI or 
contraints. 


> NoT a stream, but yes, this is a service that will stay up and act as a 
> method : 
> Return the list of forbids for a given list of activities and resources. 
> 
>If I have two rule A and B that may produce the same forbid pairs, I want to 
>produce this pair only once. 

>For that, I will use inference and produce a : 
> 

>insert(new Forbid(ressource, activity)) 
> 

>Then, in each rule, I will check that this forbid is not already present. 

If the problem is generating a Set of Forbid pairs, you should conlude your 
rules by adding in a Set (in a kind of response object), and not inserting at 
all (and remove you check in each rule, except If you use them for more than 
that). 



>So my question is : 
>Will Drools "learn" from preivous processings and "learn" that rule A matches 
>more often than rule B ? 
> And so will it promote A to be processed first ? 
>Even if I flush the working memory between two calls ? 

Calling "fireAllRules" will fire all possible rules, whatever their execution 
order. 
It is not processed "by rules", see RETE algo. 



Vincent 
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to