I'm doing an expert system for a highly complex high energy physics detector
(CERN->ATLAS->Pixel Detector->Detector Control System).
In principle the detector is a complex machine with a rather hierarchical
The idea is to use a Drools based expert system to inform the operator of
the Detector about what to do in case of a problem. The system itself is
controlled by something that we call a "Finite State Machine" which is
reducing the complex operation of the detector to a number of simple
As the Finite State Machine does not suggest, what to do, if something goes
wrong, the expert system should do that.
In order to do so, the expert system shall display "solution advices" to the
Detector operator. As there can be many unrelated problems at the same time,
we use a tree-structure to show, where in the Detector the problem happened.
If a rule gets activated by a fact (in my case a process parameter of the
detector, e.g. a temperature), the corresponding node in the tree is being
highlighted by a dedicated icon. Once the facts change and the activation is
cancelled, we remove the highlighting icon, so that the tree only shows the
current activations (we don't need logging here, as this is done elsewhere).
This works absolutely fine for us, BUT:
We can't FIRE the activations, as this would immediately remove them from
the agenda, which in turn would remove them from our tree => no operator
would see them.
At first I thought, that NOT-FIRING those activations wouldn't hurt, as we
just wrote the "solution" on the RHS of the rule and parsed this RHS by
ourselves. This way, we displayed the solution belonging to a given
activation as long as it was still on the agenda.
You can see, that the main problem of this is that one CANNOT do things
PrintSolution("Reason for problem is a over-temperature of: " + $temp +
on Module: " + $moduleName);
In our case we could still parse the code, but would be unable to access the
local variables $temp and $moduleName (example) without actually firing the
Firing the rule on the other hand would cancel it's activation, rendering
our display tree useless.
I think the thing that would be most usefull for us would be a way to fire a
rule "silently", without notifying the agenda about it (so that the
activation would NOT be removed).
I'm not sure whether I was able to explain the problem sufficiently, but
maybe someone has an idea how to handle the situation.
Thanks very much!
View this message in context:
Sent from the drools - user mailing list archive at Nabble.com