Saturday, August 22, 2009

NExpert Review (MacTech)

A while back James Owen did a blog on "full opportunistic backward chaining". I've since found this old NExpert Object article, entitled "PROGRAMMING IN NEXPERT" that gives quite a nice overview including an explanation of NOTKNOWN and UKNOWN for opportunistic backward chaining in NEXPERT.


NEXPERT has two basic values that any datum may have: NOTKNOWN and UNKNOWN. NEXPERT uses UNKNOWN as the "reset" value. Whenever a datum's value is needed and it is currently UNKNOWN, then NEXPERT will switch to backward chaining to attempt to establish a value from the data already available. If this is unsuccessful then the user is queried, via the Question Window, for a value. NOTKNOWN on the other hand, is used to mean that the user has been questioned and does not know the answer. NOTKNOWN allows default reasoning to be done and prevents NEXPERT from continuing to ask for a value that the user does not know.
Once the system reaches a rule that has some UNKNOWN datum in it, the user will be prompted for a value (see the example in Figure 3 below). At this point the user can access the multi-level Explanation Facility (via the WHY? and HOW? Buttons ), which is automatically built from the static forward and backward chains already in the rule-base."


  1. I'm working on a Nexpert project migration to Drools and I believe some of the biggest challenges is just migrate the concept of Backward Chaining in Nexpert there.

    As the Nexpert documentation mentions it implements @HYPO (hypothesis) which is a boolean representing the status of a @LHS (LHS as known in the Drools). If the conditions in LHS are true @HYPO becomes true. If not, false. There is a third, UNKNOWN.

    The surprise comes in the treatment of validations of @LHS when it contains @HYPO to be validated. The inference tool puts those rules in the Agenda for verification, if they have not been validated via Forward Chaining or have already left the Agenda.

    This BC can not have limits unless it is parameterized with instruction in the archives of knowledge (knowledge base files). There is also parameterized control loops.

    Still, the engine can apply BC or FC, also depend on the parameters even at runtime.

    Another function is not less important is the 'Reset': he 'turn off' the assumptions involved in BC (make @HYPO false) recursively to validate the whole chain of reasoning without erasing the values formed or started to session.

    In this dual role, Reset plus delete the data that form the hypothesis, is used 'ResetFrame' command.

    In my project this ResetFrame command does not exist ResetFrame then it becomes easier to apply the Reset in Drools, although a decision on application design instead of using only one command in the file. Drl.

    I'm adapting the project rules Nexpert that have BC to implement a prototype to validate and facilitate the conversion of Nexpert for Drools. This has been particularly difficult but I believed in the tool and I think BC will mature a bit more on Drools.

    Take this opportunity to put this here because it has good visibility, and if anyone has any contribution would be very good.

    Some suggest? tks

  2. Please contact me directly, mproctor at codehaus dot org. I'd be very interested in long term seeing what we can do to make this easier. We've just added BC, but it's more prolog style derivation queries, which is a little different to NExpert BC.