De opkomst van regelgebaseerde systemen in Java
Kennissystemen en met name regel gebaseerde systemen bestaan al een lange tijd. Toch hebben dergelijke systemen nooit kunnen doorbreken en in doorsnee automatiseringssystemen zul je ze ook niet aantreffen. Helemaal uit het oog zijn ze zeker niet verdwenen. Op het gebied van kennisrepresentatie wordt er veel verwacht van Business Rules Markup Language (BRML) waarbij kennis en beslisregels in XML worden gemodelleerd. Ook hebben de grote spelers in de IT-markt op zijn minst onderzoeksprojecten op het gebied van rule-engines. IBM heeft al lange rijd CommonRules, Sun heeft een Java Rule Engine API (JSR 94) en JBoss heeft onlangs Drools overgenomen.
Er zijn drie redenen om bij de ontwikkeling van een informatiesysteem te kiezen voor een regel gebaseerd systeem. Ten eerste kan de kennis dermate complex zijn dat uitschrijven in een methode leidt tot een brij van geneste if-then statements. De onderlinge samenhang van de regels wordt niet bepaald door de volgorde waarin deze geformuleerd zijn, maar door het gebruikte redeneeralgoritme. Ten tweede kan de kennis aan verandering onderhevig zijn. Wat in OO termen separation of concerns heet kan ook op kennis worden toegepast. De programmacode om gegevens te persisteren wordt in aparte objecten of zelfs in aparte componenten (bij multi-tier architecturen) ondergebracht. Door de kennisregels van de algemene programmabesturing te scheiden wordt de onderhoudbaarheid hiervan vergroot. Ten derde kan een juiste kennisrepresentatie de inzichtelijkheid en de controleerbaarheid van de gemodelleerde kennis vergroten. Code inspection by peers wordt gebruikt om de kwaliteit van programma’s te verhogen. Analoog hieraan zou inspectie van de gebruikte business logica door materiedeskundigen de correctheid van een informatiesysteem kunnen verhogen.
Behalve onbekendheid zijn er nog meer redenen waarom in de praktijk weinig tot geen echte regelgebaseerde systemen gebruikt worden. De eerste is dat de complexiteit van de kennis over het algemeen erg mee valt. De meeste acceptatiesystemen bij verzekeraars bevatten niet veel regels, maar wel niet te modelleren uitzonderingen. Zo zal iemand van middelbare leeftijd zijn middenklasse auto zonder problemen verzekerd krijgen. Iemand van 18 zal met zijn peperdure sportauto worden afgewezen. Tenzij die laatste het zoontje van een directeur is die zakelijk een grote portefeuille bij de verzekeringsmaatschappij heeft.
Ook op het gebied van kennisrepresentatie is er nog een wereld te winnen. Over het algemeen in een informaticus geen materiedeskundige en een materiedeskundige geen informaticus. Toch moeten deze twee het eens worden over de juistheid en compleetheid van de kennis die in informatiesystemen wordt verwerkt. Representatie van kennis in een XML variant zoals BRML is voor een materiedeskundige moeilijk te volgen, maar kennissystemen die met natuurlijke taal om kunnen gaan bestaan nog niet. Een simpel voorbeeld hoe een regel in Drools wordt gerepresenteerd maakt dit duidelijk:
<rule-set name="cheese rules" xmlns="http://drools.org/rules" xmlns:java="http://drools.org/semantics/java"> <rule name="Bob Likes Cheese"> <parameter identifier="bob"> <class>org.drools.examples.simple.Bob</class> </parameter> <java:condition>bob.likesCheese() == true</java:condition> <java:consequence> System.out.println( "Bob likes cheese." ); </java:consequence> </rule> </rule-set>
Jess, een andere Java rule engine, gebruikt een Lisp-achtig scripting taal om regels in te specificeren.
Toch lijkt het er op dat het gebruik van regelgebaseerde systemen in de toekomst zal toenemen. Dit komt voornamelijk doordat ontwikkelomgevingen of applicatieservers rule-engine functionaliteit zullen gaan ondersteunen. Ontwikkelaars zullen deze vanzelf opnemen in hun tool-set . Ook de aandacht voor business logica en de noodzaak deze explicieter te modelleren draagt hieraan bij. Kennissystemen in de betekenis zoals deze oorspronkelijk bedacht zijn zal dit niet opleveren, daarvoor staat een business rule te ver van een kennisregel.
Referenties



Het is trouwens niet waar dat er geen rule engines zijn die natuurlijke taal begrijpen - ik heb een paar jaar geleden een indrukwekkende demonstratie gehad bij Pecoma. Daar was jaren aan gewerkt en er hangt ook een indrukwekkend prijskaartje aan, een reden dat we uiteindelijk naar Jess zijn gaan kijken (waar ik wel fan van ben, trouwens).
Levi Hoogenberg - augustus 8, 2006 19:54
Pecoma heeft inderdaad een erg sterke positie op het gebied van verwerken van natuurlijke taal. De systemen die ze maken zijn volgens mij meer gebaseerd op case based reasoning dan op rule based reasoning.
Leo Blommers - augustus 14, 2006 10:04
Zijn systemen als het berichtenregelsysteem in MS outlook of als in thunderbird ook varianten van dergelijke systemen? Of hebben deze weer een andere noemer?
Ivo - april 8, 2008 11:07
De berichtenregelsystemen in mail programma’s zijn inderdaad voorbeelden van regel gebaseerde systemen. De voordelen zijn ook meteen duidelijk: het onderhoud vindt door de domein expert plaats (de domein expert is in dit geval de gebruiker die precies weet welk mailtje in welke mailbox terecht moet komen) en de kennisregels zelf zijn los getrokken van de rest van de code.
Leo Blommers - april 8, 2008 12:03