Jess, un motor de regles d’inferència per a JAVA

Dissenyar un sistema expert per a solucionar un problema molt especialitzat sempre ha sigut una tasca molt complicada, degut a que l’informàtic que programa l’eina deu arribar a comprendre, al mateix nivell que l’expert en la materia, el problema que es pretén resoldre. Un sistema d’estes característiques normalment està compost per nombroses regles, excepcions i arbres de decisió amb la finalitat de poder donar una resposta, versemblant a com ho podria fer un expert, a partir d’unes dades d’entrada. S’utilitzen per a problemes molt especialitzats. En l’àmbit de  la medicina  hi han molts casos. Per exemple, es pot dissenyar un sistema expert per a decidir quin va ser el millor tractament antibiòtic per a una persona amb una infecció i característiques particulars. Per exemple, una persona amb les següents característiques:

  • Edat: 45 anys.
  • Sexe: varó.
  • Diagnòstic: cistitis.
  • Malaltia de base: Diabetes.
  • Factors de risc: sondatge uretral
  • Infecció recurrent: Si

Davant estes entrades, el sistema expert deuria ser capaç de recomanar l’antibiòtic més adient per  tractar de manera efectiva la infecció d’esta persona perquè no es tornaren a repetir els brots. Per a prendre esta decisió es deurien tindre en compte dades sobre quins són els microorganismes d’infecció normalment associats a l’enfermetat de diagnòstic així com les seues taxes de resistència (informació microbiològica de laboratoris) pròpies de l’àrea sanitaria junt a les recomanacions internacionals de publicació anual respectives i altres paràmetres rellevants per a la resolució efectiva del problema.

Habitualment per dissenyar i programar este tipus de sistemes s’han emprat llenguatges i eines de programació diferents de les tradicionals per construir software (programació estructurada, imperativa, orientada a objectes etc.).

La principal distinció  entre un sistema expert i un tradicional, orientat a la resolució de problemes, és el mode mitjançant el qual la lògica pròpia de la part de l’expert és codificada. En les aplicacions tradicionals, la lògica de l’expert està codificada tant en el programa com en les estructures de dades que s’empren.

Pel contrari en una aproximació basada en un sistema expert tota la lògica que té a vorer amb l’expert solament està codificada en les estructures de dades; no en el programa.  En el programa soles es declaren les regles d’interacció i inferència que hi ha entre cada una d’estes estructures. Estes regles són regles lògiques independents del domini i per tant el benefici d’esta separació es òbvia.

Els llenguatges de programació més habituals per a este tipus de problemes provenen del camp de la intel·ligència artificial. Són normalment llenguatges lògics i/o declaratius tipus prolog, mycin, lisp, clips, jess etc… Molts d’ells tenen ja una llarga història de moltes dècades (LISP any 58, prolog any 72, clips any 85 …).  Han demostrat ser llenguatges molt adecuats per alguns tipus de problemàtiques com la que ara estem descrivint, però són un fracàs comercial per construir i solucionar de manera productiva la majoria de programari que necessita i demanda el mercat.

Hi tinc un especial interés per Jess ja que està escrit en Java i permet fer ús de l’API de la plataforma Java. És un llenguatge de script que et permet construir programari amb capacitat de "raonament" emprant el coneixement que se li especifica a mode de regles declaratives. Jess és xicotet, lleuger i un dels motors de regles més ràpids existents. CLIPS (És liure i està fet amb C) és la inspiració per a Jess i per a molts altres sistemes per construir sistemes experts. La sintaxi de Jess és molt pareguda a la de CLIPS. Per tant, si estàs familiaritzat amb CLIPS no vas a trobar grans diferències en el seu ús, no obstant Jess té particulartitats específiques.

Açò és el que diuen en la web de jess (http://herzberg.ca.sandia.gov/jess/):

"Jess uses an enhanced version of the Rete algorithm to process rules. Rete is a very efficient mechanism for solving the difficult many-to-many matching problem (see for example "Rete: A Fast Algorithm for the Many Pattern/ Many Object Pattern Match Problem", Charles L. Forgy, Artificial Intelligence 19 (1982), 17-37.) Jess has many unique features including backwards chaining and working memory queries, and of course Jess can directly manipulate and reason about Java objects. Jess is also a powerful Java scripting environment, from which you can create Java objects, call Java methods, and implement Java interfaces without compiling any Java code."

Hi ha disponible un plugin per l’entorn Eclipse per poder programar de manera còmoda amb JESS. L´Ãºnic problema d’esta eina (a pesar de ser debades) és que no és lliure:

"Jess is not licensed under the GPL, the LPGL, the BSD license, or any other free software or open source license. Redistribution of the Jess source code under any free software or open source license is prohibited under this agreement. "

Un llibre recomanable per a programar amb esta eina és "Jess In Action (JIA)" ,està escrit pel propi creador de Jess. 

Leave a Reply

Your email address will not be published. Required fields are marked *