lunes, 23 de marzo de 2009

Programación de Sistemas Expertos

En informática la programación es un proceso por el cual se escribe el denominado código fuente en un lenguaje de programación, el mismo se prueba, se depura y se mantiene. Al interior de la informática, los programas son los elementos que, derivados de un algoritmo, forman el código fuente, que es el conjunto de las instrucciones que ejecuta el hardware de una computadora para realizar una tarea determinada. Para el desarrollo de programas de cierta envergadura o complejos, con ciertas garantías de calidad, es conveniente seguir alguno de los modelos de proceso del software, donde la programación es sólo una de las etapas para el desarrollo del software. Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa un algoritmo. Debe considerarse que la secuencia de instrucciones en sí es la que debe ser finita, no el número de pasos realizados como la ejecución de ellas. Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Según el investigador Niklaus Wirth, un programa está formado por algoritmos y estructura de datos.

Existe una tendencia a considerar como equivalentes el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de medianos y grandes proyectos. El proceso de creación del software es una tarea destinada a la ingeniería que cuenta con los siguientes pasos: (1) Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea. (2) Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita. (3) Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase. (4) Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable. (5) Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación debería resultar inmediata. (6) Probar el programa. Consiste en realizar pruebas de funcionalidad al programa. (7) Instalar el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar. La ingeniería del software se encuentra centrada en los pasos de planificación y diseño de productos software o programas con calidad, mientras que la programación artesanal plantea que la realización de un programa consiste únicamente en escribir el código fuente.

Los sistemas expertos pueden ser considerados como el primer producto verdaderamente operacional de la inteligencia artificial. Son programas computacionales diseñados para actuar como un especialista humano en un dominio particular o área de conocimiento. En este sentido, pueden considerarse como intermediarios entre el experto humano, que transmite su conocimiento al sistema, y el usuario que lo utiliza para resolver un problema con la eficacia del especialista. El sistema experto utilizará para ello el conocimiento que tiene almacenado y algunos métodos de inferencia. A la vez, el usuario puede aprender observando el comportamiento del sistema. Es decir, los sistemas expertos se pueden considerar simultáneamente como un medio de ejecución y transmisión del conocimiento. Lo que se intenta, de esta manera, es representar los mecanismos heurísticos que intervienen en un proceso de descubrimiento. Estos mecanismos forman ese conocimiento difícil de expresar que permite que los expertos humanos sean eficaces calculando lo menos posible. Los sistemas expertos contienen ese “saber hacer”.

Los sistemas expertos constituyen quizás el área de la inteligencia artificial más conocida y ampliamente aplicada a problemas prácticos. La idea general sobre la cual se basan dichos sistemas, es que la experticia se puede descomponer en un conjunto de reglas o proposiciones, las cuales pueden verse como pedazos aislados de conocimiento que se encadenan o relacionan a partir de un procesamiento lógico. Este modelo es comparable con el modelo Euclidiano el cual parte de un conjunto de axiomas básicos y a partir de un mecanismo de razonamiento, aplicado sobre dicho conjunto, se pueden generar teoremas, propiedades, etc. En otro sentido, menos técnico, los sistemas expertos pueden definirse como sistemas capaces de emular la experticia de un experto humano en la resolución de un problema, brindando una solución similar a la que daría cualquier experto en la materia de trabajo.

Los sistemas expertos se componen de cuatro elementos fundamentales: (1) Base de conocimiento. Contiene las reglas sobre las cuales se construyen las soluciones a los problemas. Cada base de conocimiento es específica al dominio del conocimiento en el cual el sistema se especializa, por ejemplo: la medicina, la matemática, el diseño de circuitos, etc. (2) Base de hechos o axiomas. Contiene todas las afirmaciones o axiomas iniciales a partir de las cuales, y con ayuda de la reglas de la base de conocimiento, se puede encontrar la solución al problema planteado. (3) Motor de inferencia. También denominado intérprete de reglas, es el elemento central del sistema experto y se encarga de realizar el proceso de inferencia a partir de los elementos contenidos en la base de conocimiento y en la base de hechos. (4) Adicionalmente puede existir una base de datos con información puntual sobre problemas específicos anteriormente resueltos por el sistema, y que se usa como información adicional en el proceso de inferencia. La característica central de un sistema experto es que separa los conocimientos almacenados, en una base de conocimiento, del programa que los controla, el motor de inferencia. Los datos propios de un determinado problema se almacenan en una base de datos particular denominada base de hechos. Una característica adicional deseable, y a veces fundamental, es que el sistema sea capaz de justificar su propia línea de razonamiento de forma inteligible por el usuario.

Algunas diferencias entre un sistema experto y un programa convencional son: (1) la tarea que realiza un sistema experto fue anteriormente realizada por un especialista humano entendido en la temática. (2) Los sistemas basados en conocimiento son mantenidos por ingenieros del conocimiento y por expertos humanos. El mantenimiento de los programas convencionales lo llevan a cabo los programadores. (3) La base de conocimiento de un sistema experto es legible y fácil de modificar. (4) La estructura global de los programas convencionales descansa fundamentalmente en los algoritmos, mientras que la de los sistemas basados en conocimiento se basan sobre todo en heurísticas. Se puede observar otra diferencia importante entre la programación convencional y la programación simbólica describiendo como trabajan los ingenieros del conocimiento. La ingeniería del conocimiento se ocupa tanto del desarrollo del software para sistemas expertos como del análisis del modo en el que los expertos humanos resuelven problemas. Los ingenieros del conocimiento colaboran con los expertos humanos y les ayudan a describir su conocimiento y las estrategias de inferencia de modo tal que puedan codificarse. Así, un ingeniero del conocimiento combina grandes dosis de psicología cognitiva con técnicas de programación simbólica para el desarrollo de sistemas expertos.

A modo de conclusión se puede mencionar que las discrepancias principales entre la programación convencional y la simbólica son las siguientes: (1) La programación convencional trabaja con algoritmos mientras que la programación simbólica trabaja con heurísticas. (2) La programación convencional utiliza bases de datos con direccionamiento numérico mientras que la programación simbólica utiliza bases de conocimiento estructuradas simbólicamente en una memoria de trabajo global. (3) La programación convencional está orientada al procesamiento numérico mientras que la programación simbólica está orientada el procesamiento simbólico. (4) La programación convencional cuenta con un procesamiento secuencial y por lotes mientras que la programación simbólica cuenta con un procesamiento bastante interactivo. (5) La programación convencional no tiene un mecanismo de explicación de su procesamiento mientras que la programación simbólica cuenta con un mecanismo sencillo de explicación de su ejecución.

Guillermo Choque Aspiazu
Diciembre 1 de 2008

No hay comentarios: