miércoles, 21 de noviembre de 2012

Proceso de desarrollo de sistemas expertos

7.1 Estructura básica del entorno

Para el desarrollo de un sistema experto, se recomienda utilizar un esquema “incremental de prototipos”, en el cual el sistema experto resuelve primeramente un problema simple. La evaluación del sistema permite refinar la Base de Conocimientos y desarrollar una segunda versión, capaz de resolver problemas de mayor complejidad o enfrentarlas en forma más apropiada.

 • El desarrollo incremental presenta la siguiente evolución:
 - Prototipo inicial
 - Prototipos intermedios
 - Prototipo de trabajo
 - Modelo productivo
 - Sistema comercial.

 • El desarrollo de un sistema experto comprende las siguientes etapas (si bien en casos especiales algunas pueden no considerarse): - Identificación

 - Conceptualización
 - Formalización
 - Implementación
 - Prueba
 - Integración
 - Mantenimiento.

 • Identificación. Los desarrolladores y expertos identifican los problemas y subproblemas, formulan los objetivos globales del sistema y definen las necesidades de hardware y software. En esta etapa se estudia también la relación costo-beneficio esperada.

 • Conceptualización. A partir de su interacción con el experto, el desarrollador define los objetos y sus interrelaciones, los mecanismos de solución de problemas y los datos que el experto utiliza en dichas soluciones.

• Formalización. Los conceptos y relaciones identificados se expresan formalmente utilizando algún mecanismo de representación dado por las herramientas disponibles y las características propias del problema.

 • Implementación. El conocimiento formalizado se incorpora al sistema experto, utilizando alguna herramienta de desarrollo, para convertir el conjunto de reglas en un programa computacional. El conocimiento almacenado se organiza de forma de reflejar el mecanismo de razonamiento del experto. El resultado de esta etapa es un programa factible de ser probado.

 • Prueba. Se evalúa el desempeño del sistema experto, revisando su capacidad para plantear soluciones a problemas y cumplir los requisitos impuestos por los expertos. La evaluación la llevan a cabo los expertos quienes sugieren aspectos en que el sistema debe ser mejorado. En esta etapa se inicia el desarrollo incremental. Dependiendo del resultado de las pruebas, será necesario volver a la Implementación o inclusive a etapas anteriores.

• Integración. Una vez terminado el desarrollo del sistema experto comercial, éste se integrará a su entorno de trabajo, lo cual incluye la conexión a bases de datos, equipos e instrumentos, y la capacitación de los usuarios. 

• Mantenimiento. Esta etapa considera la modificación de la Base de Conocimientos, lo que dependiendo del sistema puede ser realizado por un usuario experto o el desarrollador.

7.2 Lenguaje de representación del conocimiento


Las herramientas que pueden utilizarse para el desarrollo de un sistema experto se clasifican en: - Herramientas o entornos especializados (KEE, OPS5, Nexpert, G2).

 - Lenguajes de programación orientados al desarrollo de aplicaciones de Inteligencia Artificial (Lisp, Prolog, Smalltalk).

- Lenguajes de programación tradicional (Fortran, C, C++).

 • La elección de la herramienta dependerá de los recursos disponibles, las capacidades de los desarrolladores y las características de la aplicación, por ejemplo, si existen requerimientos de tiempo real.

7.3 Inferencia y control


• IF/PROLOG. Prolog para ambientes de tiempo real.
 • FORTH
 • Personal Consultant. Basado en LISP y desarrollado por Texas Instruments. Los hechos se representan como triplas objeto-atributovalor, con factores de confianza; el motor de inferencias emplea encadenamiento hacia atrás. 
• PICON (Process Intelligent Control). Primer sistema experto comercial desarrollado inicialmente en Lisp y después reprogramado en C. Ha sido utilizado en numerosas aplicaciones incluyendo sistemas de energía, petroquímica e industria aerospacial.
 • G2. Desarrollado por Gensym Corp. inicialmente en Common Lisp, se ha constituido en un estándar mundial. Ofrece un ambiente gráfico orientado al objeto para crear aplicaciones inteligentes relacionados con monitoreo, diagnóstico y control de eventos dinámicos en línea. Ofrece un lenguaje natural y estructurado para crear reglas, modelos y procedimientos. Incluye ejecución recursiva de reglas y procedimientos.

7.4. Editor de bases de conocimiento


Las bases de conocimiento se han clasificado en dos grandes tipos: Bases de conocimiento leíbles por máquinas, diseñadas para almacenar conocimiento en una forma legible por el computador, usualmente con el fin de obtener razonamiento deductivo automático aplicado a ellas.

Contienen una serie de datos, usualmente en la forma de reglas que describen el conocimiento de manera lógicamente consistente. Operadores lógicos como Y (conjunción), O (disyunción), condición lógica y negación son utilizada para aumentarla desde el conocimiento atómico.

En consecuencia la deducción clásica puede ser utilizada para razonar sobre el conocimiento en la base de conocimiento. Este tipo de bases de conocimiento son utilizadas por la Web semántica Bases de conocimiento leíbles por Humanos están diseñadas para permitir a las personas acceder al conocimiento que ellas contienen, principalmente para propósitos de aprendizaje. Estas son comúnmente usadas para obtener y manejar conocimiento explicito de las organizaciones, incluyen artículos, white papers, manuales de usuario y otros.

El principal beneficio que proveen las bases de conocimiento es proporcionar medios de descubrir soluciones a problemas ya resueltos, los cuales podrían ser aplicados como base a otros problemas dentro o fuera del mismo área de conocimiento. El más importante aspecto de una base de conocimiento es la calidad de la información que esta contiene.

Las Mejores Bases de Conocimiento tienen artículos cuidadosamente redactados que se mantiene al día, un excelente sistema de recuperación de información (Motor de Búsqueda), y un delicado formato de contenido y estructura de clasificación. Una Base de Conocimiento puede usar una ontología para especificar su estructura(tipos de entidades y relaciones) y su esquema de clasificación. Una ontología, junto con un grupo de instancias de sus clases constituyen una Base de Conocimiento. Determinando qué tipo de información es capturada, y dónde se encuentra la información en una base de conocimiento es algo que es determinado por los procesos que respaldan al sistema. Una estructura robusta de procesos es la columna vertebral de cualquier Base de Conocimiento.

Algunas Bases de Conocimiento tienen un componente de inteligencia artificial. Este tipo de Bases de Conocimiento pueden sugerir soluciones a problemas esporádicos en la retroalimentación por el usuario, y son capaces de aprender de la experiencia (sistemas expertos). Representación de Conocimiento, Razonamiento automatizado y argumentación son las áreas activas de la investigación de la inteligencia artificial.

7.5. Editor de interfaces de desarrollo y usuario

La Interfaz de Usuario, en adelante IU, de un programa es un conjunto de elementos hardware y software de una computadora que presentan información al usuario y le permiten interactuar con la información y con el computadora. También se puede considerar parte de la IU la documentación (manuales, ayuda, referencia, tutoriales) que acompaña al hardware y al software. Si la IU está bien diseñada, el usuario encontrará la respuesta que espera a su acción. Si no es así puede ser frustrante su operación, ya que el usuario habitualmente tiende a culparse a sí mismo por no saber usar el objeto.

Los programas son usados por usuarios con distintos niveles de conocimientos, desde principiantes hasta expertos. Es por ello que no existe una interfaz válida para todos los usuarios y todas las tareas. Debe permitirse libertad al usuario para que elija el modo de interacción que más se adecúe a sus objetivos en cada momento. La mayoría de los programas y sistemas operativos ofrecen varias formas de interacción al usuario. Existen tres puntos de vista distintos en una IU: el del usuario, el del programador y el del diseñador (analogía de la construcción de una casa).

Cada uno tiene un modelo mental propio de la interfaz, que contiene los conceptos y expectativas acerca de la misma, desarrollados a través de su experiencia. El modelo permite explicar o predecir comportamientos del sistema y tomar las decisiones adecuadas para modificar el mismo. Los modelos subyacen en la interacción con las computadoras, de ahí su importancia. Modelo del usuario: El usuario tiene su visión personal del sistema, y espera que éste se comporte de una cierta forma. Se puede conocer el modelo del usuario estudiándolo, ya sea realizando tests de usabilidad, entrevistas, o a través de una realimentación.

Una interfaz debe facilitar el proceso de crear un modelo mental efectivo. Para ello son de gran utilidad las metáforas, que asocian un dominio nuevo a uno ya conocido por el usuario. Un ejemplo típico es la metáfora del escritorio, común a la mayoría de las interfaces gráficas actuales. Modelo del diseñador: El diseñador mezcla las necesidades, ideas, deseos del usuario y los materiales de que dispone el programador para diseñar un producto de software. Es un intermediario entre ambos. El modelo del diseñador describe los objetos que utiliza el usuario, su presentación al mismo y las técnicas de interacción para su manipulación.

Consta de tres partes: presentación, interacción y relaciones entre los objetos (Figura 1). La presentación es lo que primero capta la atención del usuario, pero más tarde pasa a un segundo plano, y adquiere más importancia la interacción con el producto para poder satisfacer sus expectativas.

La presentación no es lo más relevante y un abuso en la misma (por ejemplo, en el color) puede ser contraproducente, distrayendo al usuario.

La segunda parte del modelo define las técnicas de interacción del usuario, a través de diversos dispositivos.

La tercera es la más importante, y es donde el diseñador determina la metáfora adecuada que encaja con el modelo mental del usuario. El modelo debe comenzar por esta parte e ir hacia arriba. Una vez definida la metáfora y los objetos del interfaz, los aspectos visuales saldrán de una manera lógica y fácil.

7.6. Herramientas de depuración y traza

Es un sistema usado para probar y depurar (eliminar los errores) de otros programas (el programa "objetivo"). El código a ser examinado puede alternativamente estar corriendo en un simulador de conjunto de instrucciones (ISS), una técnica que permite gran potencia en su capacidad de detenerse cuando son encontradas condiciones específicas pero será típicamente algo más lento que ejecutando el código directamente en el apropiado (o el mismo) procesador. 

Algunas depuradores ofrecen dos modos de operación - la simulación parcial o completa, para limitar este impacto. Si es un depurador de nivel de fuente o depurador simbólico, comúnmente ahora visto en entornos de desarrollo integrados, cuando el programa "se estrella" o alcanza una condición predefinida, la depuración típicamente muestra la posición en el código original. Si es un depurador de bajo nivel o un depurador de lenguaje de máquina, muestra la línea en el fuente desensamblado (a menos que también tenga acceso en línea al código fuente original y pueda exhibir la sección apropiada del código del ensamblador o del compilador). 

Un "estrellamiento" sucede cuando el programa no puede continuar normalmente debido a un error de programación. Por ejemplo, el programa pudo haber intentado usar una instrucción no disponible en la versión actual del CPU o haber intentado tener acceso a memoria protegida o no disponible. Típicamente, los depuradores también ofrecen funciones más sofisticadas tales como correr un programa paso a paso (un paso o animación del programa), parar el programa (breaking), es decir, pausar el programa para examinar el estado actual en cierto evento o instrucción especificada por medio de un breakpoint, y el seguimiento de valores de algunas variables. Algunos depuradores tienen la capacidad de modificar el estado del programa mientras que está corriendo, en vez de simplemente observarlo. También es posible continuar la ejecución en una posición diferente en el programa bypaseando un estrellamiento o error lógico. 

La importancia de un buen depurador no puede ser exagerada. De hecho, la existencia y la calidad de tal herramienta para un lenguaje y una plataforma dadas a menudo puede ser el factor de decisión en su uso, incluso si otro lenguaje/plataforma es más adecuado para la tarea.[cita requerida] La ausencia de un depurador, una vez estando acostumbrado a usar uno, se ha dicho que "hace que usted se sienta como un hombre ciego en un cuarto oscuro buscando un gato negro que no está allí".1 Sin embargo, el software puede (y a menudo) se comporta diferentemente corriendo bajo un depurador que normalmente, debido a los cambios inevitables que la presencia de un depurador hará a la temporización interna de un programa de software.

Como resultado, incluso con una buena herramienta de depuración, es a menudo muy difícil rastrear problemas de tiempo de corrida en complejos sistemas distribuidos con múltiples hilos.


No hay comentarios:

Publicar un comentario