+ All Categories
Home > Documents > INDICE - roa.ult.edu.curoa.ult.edu.cu/bitstream/123456789/235/1/Folleto IA completo.pdf · Se han...

INDICE - roa.ult.edu.curoa.ult.edu.cu/bitstream/123456789/235/1/Folleto IA completo.pdf · Se han...

Date post: 28-Sep-2018
Category:
Upload: nguyenmien
View: 215 times
Download: 0 times
Share this document with a friend
174
INDICE CAPITULO I: INTRODUCCION A LA INTELIGENCIA ARTIFICIAL. ........................ 1 1.1. Análisis del término Inteligencia Artificial (I.A.). ..................... 1 1.2. Surgimiento del término Inteligencia Artificial. ......................... 3 1.2.1. Evolución histórica. ................................................. 3 1.3. La Inteligencia Artificial y los modelos computacionales. ............... 5 1.4. El supuesto subyacente. .................................................. 6 1.5. Técnicas de I.A. ......................................................... 6 1.6. Criterios para el éxito. ................................................ 10 1.7. Aplicaciones de la I.A. ................................................ 10 CAPITULO II: FORMAS DE REPRESENTACION DEL CONOCIMIENTO. ...................... 13 2.1. Definición de Forma de Representación del Conocimiento. ................. 13 2.2. Clasificación de las formas de representación del conocimiento.¡ERROR! MARCADOR NO DEFINI 2.3. La lógica como Forma de Representación del Conocimiento.¡ERROR! MARCADOR NO DEFINIDO.4 2.3.1. Lógica proposicional. ................... ¡Error! Marcador no definido.4 2.3.2. Cálculo de predicados. .................. ¡Error! Marcador no definido.5 2.3.3. Lógica no monotónica. ................... ¡Error! Marcador no definido.6 2.4. Redes semánticas. ................................ ¡ERROR! MARCADOR NO DEFINIDO.7 2.4.1. Planteamiento de un problema. ........... ¡Error! Marcador no definido.7 2.4.2. Definición. ............................. ¡Error! Marcador no definido.7 2.4.3. Características generales. .............. ¡Error! Marcador no definido.8 2.4.4. Redes semánticas particionadas. ..................................... 20 2.4.5. Manipulación del conocimiento representado. ......................... 21 2.4.6. Criterios sobre el dominio de aplicación. ........................... 23 2.5. Marcos o armazones (Frames). ............................................ 23 2.5.1. Planteamiento de un problema. ....................................... 23 2.5.2. Definición. ......................................................... 24 2.5.3. Características generales. .......................................... 25 2.5.4. Manipulación del conocimiento representado. ......................... 25 2.5.5. Criterios sobre el dominio de aplicación. ........................... 28 2.6. Guiones (Scripts). ...................................................... 29 2.6.1. Planteamiento de un problema. ....................................... 29 2.6.2. Definición. ......................................................... 29 2.6.3. Características generales. .......................................... 29 2.6.4. Manipulación del conocimiento representado. ......................... 30 2.6.5. Criterios sobre el dominio de aplicación. ........................... 31 2.7. Reglas de producción. ................................................... 31 2.7.1. Planteamiento de un problema. ....................................... 31 2.7.2. Definición. ......................................................... 32 2.7.3. Manipulación del conocimiento representado. ......................... 32 2.7.4. Criterios sobre el dominio de aplicación. ........................... 35 2.8. Strips. ................................................................. 35 2.8.1. Planteamiento de un problema. ....................................... 36 2.8.2. Definición. ......................................................... 36 2.8.3. Manipulación del conocimiento representado. ......................... 38 2.8.4. Criterios sobre el dominio de aplicación. ........................... 38 EJERCICIOS PROPUESTOS ........................................................ 38 CAPITULO III: METODOS DE SOLUCION DE PROBLEMAS. .............................. 43 3.1. Introducción. .......................................................... 43 3.2. Pasos para resolver un problema. ........................................ 44 3.2.1. Primer paso: definición precisa del problema. ...................... 44 3.2.1.1. Tipos de espacios de búsqueda................................... 45 3.2.1.2. Representación del espacio de búsqueda.......................... 49 3.2.2. Segundo paso: análisis del problema. ............................... 50 3.2.2.1. ¿Se puede descomponer el problema?............................... 50 3.2.2.2. ¿Es posible ignorar o deshacer pasos para la solución?........... 50 3.2.2.3. ¿Es predecible el universo del problema?......................... 51 3.2.2.4. ¿Se desea una solución cualquiera o la mejor solución al problema?................................................................. 51 3.2.2.5. ¿Es consistente el conocimiento disponible para resolver el problema?................................................................. 52
Transcript

INDICE CAPITULO I: INTRODUCCION A LA INTELIGENCIA ARTIFICIAL. ........................ 1

1.1. Análisis del término Inteligencia Artificial (I.A.). ..................... 1 1.2. Surgimiento del término Inteligencia Artificial. ......................... 3 1.2.1. Evolución histórica. ................................................. 3

1.3. La Inteligencia Artificial y los modelos computacionales. ............... 5 1.4. El supuesto subyacente. .................................................. 6 1.5. Técnicas de I.A. ......................................................... 6 1.6. Criterios para el éxito. ................................................ 10 1.7. Aplicaciones de la I.A. ................................................ 10

CAPITULO II: FORMAS DE REPRESENTACION DEL CONOCIMIENTO. ...................... 13

2.1. Definición de Forma de Representación del Conocimiento. ................. 13 2.2. Clasificación de las formas de representación del conocimiento.¡ERROR! MARCADOR NO DEFINI2.3. La lógica como Forma de Representación del Conocimiento.¡ERROR! MARCADOR NO DEFINIDO.4 2.3.1. Lógica proposicional. ................... ¡Error! Marcador no definido.4 2.3.2. Cálculo de predicados. .................. ¡Error! Marcador no definido.5 2.3.3. Lógica no monotónica. ................... ¡Error! Marcador no definido.6

2.4. Redes semánticas. ................................¡ERROR! MARCADOR NO DEFINIDO.7 2.4.1. Planteamiento de un problema. ........... ¡Error! Marcador no definido.7 2.4.2. Definición. ............................. ¡Error! Marcador no definido.7 2.4.3. Características generales. .............. ¡Error! Marcador no definido.8 2.4.4. Redes semánticas particionadas. ..................................... 20 2.4.5. Manipulación del conocimiento representado. ......................... 21 2.4.6. Criterios sobre el dominio de aplicación. ........................... 23

2.5. Marcos o armazones (Frames). ............................................ 23 2.5.1. Planteamiento de un problema. ....................................... 23 2.5.2. Definición. ......................................................... 24 2.5.3. Características generales. .......................................... 25 2.5.4. Manipulación del conocimiento representado. ......................... 25 2.5.5. Criterios sobre el dominio de aplicación. ........................... 28

2.6. Guiones (Scripts). ...................................................... 29 2.6.1. Planteamiento de un problema. ....................................... 29 2.6.2. Definición. ......................................................... 29 2.6.3. Características generales. .......................................... 29 2.6.4. Manipulación del conocimiento representado. ......................... 30 2.6.5. Criterios sobre el dominio de aplicación. ........................... 31

2.7. Reglas de producción. ................................................... 31 2.7.1. Planteamiento de un problema. ....................................... 31 2.7.2. Definición. ......................................................... 32 2.7.3. Manipulación del conocimiento representado. ......................... 32 2.7.4. Criterios sobre el dominio de aplicación. ........................... 35

2.8. Strips. ................................................................. 35 2.8.1. Planteamiento de un problema. ....................................... 36 2.8.2. Definición. ......................................................... 36 2.8.3. Manipulación del conocimiento representado. ......................... 38 2.8.4. Criterios sobre el dominio de aplicación. ........................... 38

EJERCICIOS PROPUESTOS ........................................................ 38

CAPITULO III: METODOS DE SOLUCION DE PROBLEMAS. .............................. 43

3.1. Introducción. .......................................................... 43 3.2. Pasos para resolver un problema. ........................................ 44 3.2.1. Primer paso: definición precisa del problema. ...................... 44 3.2.1.1. Tipos de espacios de búsqueda................................... 45 3.2.1.2. Representación del espacio de búsqueda.......................... 49

3.2.2. Segundo paso: análisis del problema. ............................... 50 3.2.2.1. ¿Se puede descomponer el problema?............................... 50 3.2.2.2. ¿Es posible ignorar o deshacer pasos para la solución?........... 50 3.2.2.3. ¿Es predecible el universo del problema?......................... 51 3.2.2.4. ¿Se desea una solución cualquiera o la mejor solución al problema?................................................................. 51 3.2.2.5. ¿Es consistente el conocimiento disponible para resolver el problema?................................................................. 52

3.2.2.6. ¿Cuál es el papel del conocimiento?.............................. 52 3.2.2.7. ¿Requiere la interacción con una persona?........................ 52

3.2.3. Tercer paso: Aplicar la mejor técnica de I.A. para el problema particular. ................................................................ 54

3.3. Métodos de búsqueda a ciegas. ........................................... 54 3.3.1. Algoritmo del museo británico. ...................................... 54 3.3.2. Búsqueda primero a lo ancho. ........................................ 54 3.3.3. Búsqueda primero en profundidad. .................................... 55 3.3.4. Búsqueda en árboles y/o. ............................................ 55 3.3.5. Búsqueda en sistemas de producción. ................................. 56 3.3.5.1. Búsqueda con encadenamiento hacia adelante (enfoque guiado por datos).................................................................... 56 3.3.5.2. Búsqueda con encadenamiento hacia atrás (enfoque guiado por objetivos)................................................................ 57 3.3.5.3. Búsqueda bidireccional........................................... 60

3.3.6. Búsqueda por diferencias. ........................................... 60 3.3.7. Búsqueda de soluciones múltiples. ................................... 61

3.4. Búsqueda heurística. .................................................... 63 3.4.1. Definición de heurística. ........................................... 63 3.4.2. Búsqueda por el incremento mayor (hill-climbing). ................... 64 3.4.3. Búsqueda por el mejor nodo (best-first search). ..................... 65 3.4.4. Búsqueda heurística en árboles y/o o algoritmo AO*. ................ 67

3.5. Planificación. .......................................................... 68 3.5.1. Planificación usando pila de metas. ................................. 70 3.5.2. Planificación no lineal usando un conjunto de metas. ................ 74 3.5.3. Planificación jerárquica. ........................................... 75 3.5.4. Aplicaciones prácticas de la planificación. ........................ 76

3.6. Teoría de juegos. ....................................................... 76 3.6.1. Conceptos principales. .............................................. 77 3.6.2. La partida como un árbol. .......................................... 79 3.6.3. Procedimiento MINIMAX. ............................................. 79 3.6.4. Procedimiento alfa-beta. ............................................ 81 3.6.5. Refinamientos adicionales. .......................................... 83 3.6.6. Limitaciones de MINIMAX. ............................................ 85

EJERCICIOS PROPUESTOS ........................................................ 85

CAPITULO IV: SISTEMAS BASADOS EN EL CONOCIMIENTO. ........................... 89

4.1. Definición de Sistema Experto. .......................................... 89 4.2. Caracterización de los Sistemas Expertos. ................. ..............90 4.2.1. Comparación entre la experticidad humana y la artificial. ........... 90 4.2.2. Comparación entre los programas convencionales y los S.E. ........... 91 4.2.3. Rasgos de un S.E. ................................................... 91 4.2.4. Requerimientos para emplear los S.E. ................................ 92

4.3. Aplicaciones de los S.E. ................................................ 92 4.4. Desarrollo de un S.E.................................................... 93 4.4.1. Etapas del desarrollo de un S.E. .................................... 94 4.4.2. Adquisición del conocimiento. ....................................... 96 4.4.2.1. Fuentes de adquisición del conocimiento.......................... 96 4.4.2.2. Secuencia de trabajo del ingeniero de conocimientos.............. 96 4.4.2.3. Determinación de los conceptos y las relaciones entre ellos...... 97 4.4.2.4. Automatización de la adquisición del conocimiento................ 98

4.4.3. Estados en el desarrollo de un Sistema Experto. ..................... 99 4.5. Implementación del shell de los S.E. ...........¡ERROR! MARCADOR NO DEFINIDO.00 4.5.1. Implementación de la Máquina de Inferencia.¡Error! Marcador no definido.00 4.5.2. Implementación de la Interface con el Usuario.¡Error! Marcador no definido.01

4.6. Tratamiento de la incertidumbre. ................¡ERROR! MARCADOR NO DEFINIDO.02 4.6.1. Fuentes de incertidumbre. .............. ¡Error! Marcador no definido.02 4.6.2. Enfoques para representar la incertidumbre.¡Error! Marcador no definido.02 4.6.2.1. Regla de Bayes y Regla de Bayes modificada.¡Error! Marcador no definido.03 4.6.2.2. Teoría de la confirmación o certidumbre......................... 105 4.6.2.3. Teoría de Cohen..................... ¡Error! Marcador no definido.06 4.6.2.4. Conjuntos difusos y lógica difusa... ¡Error! Marcador no definido.06

4.6.3. Requerimientos del razonamiento con incertidumbre.¡Error! Marcador no definido.074.6.4. Manipulación de la incertidumbre en los sistemas expertos.¡Error! Marcador no def

4.7. Razonamiento basado en casos. .............. ¡Error! Marcador no definido.08 4.7.1. Diferencias con el Razonamiento Basado en Reglas (R.B.R).¡Error! Marcador no defi

4.8. Solución cooperativa de problemas. ......... ¡Error! Marcador no definido.11

BIBLIOGRAFÍA .................................... ¡ERROR! MARCADOR NO DEFINIDO.13

PREFACIO La Inteligencia Artificial (I.A.) ha devenido en los últimos años en una de las ramas de las Ciencias de la Computación más difundidas y para las que se ha dedicado un gran esfuerzo, por los beneficios que reporta en la solución de problemas donde es necesaria, principalmente, la manipulación de información simbólica, en aquellos problemas en los que aparece la subjetividad para resolverlos o en los que la información a manipular es incompleta o borrosa, entre otros. Los lenguajes de programación llamados convencionales permiten la creación de sistemas computacionales para la solución de problemas con la ayuda de la computadora. En ocasiones es necesario, sin embargo, diseñar sistemas que imiten la forma de pensar del hombre para acometer la solución de problemas de la práctica que presentan estas dificultades, por lo que ha sido necesaria la creación de técnicas de programación que garanticen la solución de los mismos con un mínimo de esfuerzo y recursos. Se han diseñado e implementado lenguajes de programación, como PROLOG y LISP, que satisfacen las necesidades impuestas a los programadores en la solución de tales problemas de la computación y con ellos se han diseñado algunos de los sistemas de la I.A. más conocidos. A estos lenguajes se les conoce como lenguajes de I.A. Esto no significa que con los lenguajes convencionales no se logre la implementación de estas técnicas, sino todo lo contrario. Muchos de los grandes sistemas de la I.A. que se han hecho populares, por los problemas que resuelven, han sido programados en FORTRAN, PASCAL, BASIC y otros. El objetivo de este libro es introducir al lector en el fascinante mundo de la I.A., a través de sus técnicas, de las características de los problemas a resolver, así como dar las ideas generales para enfrentar la solución de los mismos desde el punto de vista algorítmico. El mismo será usado, por tanto, como texto básico en el curso de I.A. que reciben los estudiantes de la carrera de Ciencias de la Computación. El Capítulo I se dedica a introducir al lector en la I.A., haciéndose un análisis del surgimiento del término I.A., así como de las técnicas computacionales usadas para resolver los problemas antes mencionados. El Capítulo II hace referencia a los diferentes tipos de Formas de Representación del Conocimiento más utilizados en la práctica, enfatizando en las características de cada una de ellas y dando algunas ideas de cómo afrontar la implementación de las mismas en la programación de sistemas de I.A. Una vez explicadas las formas de representar y manipular el conocimiento, se estudian en el Capítulo III los Métodos de Solución de Problemas que la I.A. impone: se explican los pasos para resolver un problema, los diferentes métodos de búsqueda de la I.A. y se introducen algunos tipos de planificación, así como nociones de la teoría de juegos. Una de las aplicaciones más populares de la I.A. lo constituyen los Sistemas Expertos. Ellos han sido aplicados a un sinnúmero de problemas como lo son la detección de reservas minerales, el diagnóstico médico, la detección de fallas en procesos industriales, entre otros. El Capítulo IV se dedica al estudio de las particularidades del desarrollo de estos sistemas. Al final de cada capítulo, el lector encontrará un grupo de ejercicios propuestos que le servirán para recapitular los conocimientos y habilidades adquiridos con este curso. No son necesarios conocimientos previos de I.A. ni de los lenguajes de I.A. El lector deberá, sin embargo, dominar elementos de algoritmización. Una de las ramas de la I.A. que ha tenido un gran desarrollo en los últimos años lo constituyen las Redes Neuronales Artificiales. En el libro no se brinda información sobre este tema, de interés para muchos investigadores, por considerar obligada su introducción en un texto aparte, que brinde todos los detalles, desde el punto de vista teórico y práctico, del desarrollo de tales herramientas muy útiles en el reconocimiento de patrones, en la clasificación y otras aplicaciones. No se hace alusión a otras tendencias actuales de la I.A., como el desarrollo de sistemas en cooperación, y algunas otras sólo se mencionan. La idea es, precisamente, la de un curso introductorio a la I.A., por lo que se tratan aspectos básicos generales que deben ser conocidos por aquellas

personas que, de alguna manera, han de aplicar estas novedosas técnicas de la computación en la solución de problemas concretos. Sirva, pues, este libro como material para el estudio de la I.A. Los autores.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

1

CAPITULO I: INTRODUCCION A LA INTELIGENCIA ARTIFICIAL.

1.1. Análisis del término Inteligencia Artificial (I.A.). En la literatura especializada no existe aún ninguna definición única y rigurosa para el término “Inteligencia Artificial”. Por otra parte, quienes trabajan en esta esfera de la Ciencia de la Computación utilizan expresiones ambiguas como: máquina de inferencias, ingeniería de conocimiento, reglas de producción, redes semánticas, entre otras. Realmente existe un estado de opinión nebuloso que contribuye muy poco al progreso de este campo. Por tanto se hace necesario esclarecer las ideas principales sobre qué se conoce por Inteligencia Artificial. Como sabemos, los problemas que se presentan comunmente en la práctica pueden ser algorítmicos tratables, algorítmicos no tratables y no algorítmicos. En estos últimos no es posible encontrar un algoritmo para su solución. Esto nos indica que se debe reconsiderar la noción determinística desarrollada de algoritmo por una noción más flexible que incluya métodos de aproximación a la solución de un problema, como los que pone en práctica el ser humano cuando se halla ante problemas para los cuales no posee un algoritmo específico de solución. Estos métodos se caracterizan por los siguientes rasgos fundamentales: no siempre nos conducen al resultado, no siempre el resultado es único y no siempre dan un resultado óptimo. La introducción de tales métodos en el diseño y programación de algoritmos computacionales es tarea del área de la I.A. Los problemas algorítmicos tratables se pueden resolver con las técnicas tradicionales. Los algorítmicos no tratables, llamados también NP-completos, son aquellos para cuya solución existen algoritmos no deterministas que se ejecutan de manera tratable, pero que hasta el momento se duda de que pueda existir un algoritmo determinista que los resuelva de manera tratable. Las técnicas de I.A. nos permiten resolver algunos de estos problemas, como son:

- Problema del viajante: Se tienen n ciudades y las distancias entre ellas y se desea saber el recorrido de una persona por todas las ciudades con la mínima distancia.

- Colorear un grafo con la cantidad mínima de colores sin que dos nodos adyacentes tengan el mismo color.

- Problema de la mochila: Dada una mochila con una capacidad en peso dada y una cantidad de objetos, cada uno de ellos con su peso y un valor dados, determinar qué objetos echar en la mochila sin sobrepasar su peso y de manera que almacene el mayor valor.

- Determinar el mayor subgrafo completo dentro de un grafo dado.

En el caso de los problemas no algorítmicos, las técnicas de I.A. ayudan también a resolverlos. Tales son, por ejemplo, el diagnóstico médico, la traducción automática, detección de fallas, problemas de pronóstico y generación automática de planes. Otro que no logra resolverse completamente, pero sí de una manera parcial (para determinadas subclases de fórmulas) es la

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

2

determinación de la validez de una fórmula del cálculo de predicados de primer orden. Los primeros trabajos que realizaron las computadoras consistían en la ejecución de laboriosos cálculos numéricos, donde superaron todo lo imaginablemente previsto. Por tanto, era tentador explorar también la ejecución de otros trabajos intelectuales como jugar al ajedrez, demostrar teoremas, traducir idiomas. Sin embargo, había una diferencia entre estos tipos de trabajos y los primeros que se hicieron. El grupo de labores al que pertenecía el cálculo numérico, contenía tareas que podían ser explicadas en detalle por las personas que las realizaban. Mientras que en el otro grupo, era muy difícil detallar cómo se ejecutaban, pues eran complejas y difíciles de analizar con las técnicas algorítmicas, por ejemplo, la decisión del movimiento que debe hacerse en un juego de ajedrez o cómo determinar que dos oraciones distintas significan lo mismo. El intento de abordar este otro grupo de tareas difíciles de realizar a través de las computadoras marcó el origen de la Inteligencia Artificial, como un campo más de la Ciencia de la Computación. Sin embargo, el término Inteligencia Artificial para ese naciente campo computacional en vez de ayudar a esclarecer sus propósitos y métodos, provoca sombras y obstáculos en su camino de desarrollo. Primero, porque el nombre es nebuloso. Si la inteligencia natural todavía no está definida con precisión, mucho menos lo estaría la artificial. En consecuencia, todo trabajo realizado por un artefacto, que de alguna manera ejecute una actividad intelectual, debería también denominarse Inteligencia Artificial. En esta clasificación entrarían, con plena justicia, la calculadora y el ábaco. ¿Qué es entonces la Inteligencia Artificial?. Segundo, porque ese nombre evoca futuros tan lejanos que sugiere quimeras, nada útil ni en el presente actual, ni en el cercano. Y tercero, porque en la frase Inteligencia Artificial está contenida una competencia con el hombre, que se siente amenazado de ser sustituido en lo que considera su valor más humano: el intelecto. Por estas razones se levantó en sus inicios una barrera en contra de este nombre y de todo lo que él significa. No obstante el uso histórico acuñó el nombre de Inteligencia Artificial para ese campo de la Ciencia de la Computación. Una forma de comprender qué se entiende por Inteligencia Artificial hoy en día, es buscar rasgos distintivos. En esta dirección, el Laboratorio de Inteligencia Artificial de Standford clasificó los campos de trabajo computacionales de acuerdo con el tipo de información que manejan y con el tipo de método que emplean para procesar esa información. El resultado se muestra en la figura 1.1.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

3

TIPO DE

PROCESAMIENTO TIPO DE INFORMACION

Numérica Simbólica o no numérica

Algorítmico I) Cálculo científico tradicional II) Procesamiento de datos

Heurístico III) Grandes simulaciones numéricas que requieren suposiciones para reducir los estados posibles

INTELIGENCIA ARTIFICIAL

Fig. 1.1. Clasificación de los campos computacionales.

Ejemplos de problemas dentro de estos campos son:

I) Resolver sistemas de ecuaciones, hallar el máximo común divisor de dos enteros, etc.

II) Buscar los artículos sobre una determinada información y buscar una subcadena en una cadena.

III) Métodos de MonteCarlo: son métodos que usan generación de números aleatorios. Estos métodos se usan para el cálculo aproximado de una integral, en problemas de optimización, de cálculo del mínimo de una función, etc.

El cuadrante que ocupa la Inteligencia Artificial se contrapone diagonalmente a lo algorítmico y numérico, pero tiene amplias fronteras de contacto con los campos que poseen fuertes componentes heurísticas y no numéricas. De manera que todo el conjunto conforma la herramienta de trabajo llamada computación. La Inteligencia Artificial aborda problemas poco estructurados, donde no se conoce de antemano cuál es el mejor método para resolverlo. Hay que descubrir, si acaso, alguna solución. Esta es la razón de la palabra heurística cuyo significado se asocia a búsqueda. La esencia de la palabra heurística es contraria a la de algoritmo en el sentido de que ella es un camino para buscar lo nuevo, mientras el algoritmo es un camino para realizar lo ya muy bien conocido. Así se comprende que el paradigma primario para la resolución de problemas en Inteligencia Artificial sea la búsqueda de la solución orientada por la heurística, para tratar de reducir la explosión combinatoria que genera la búsqueda de todos los caminos posibles que se presenta en la mayoría de los problemas reales. Este enfoque, aunque tampoco se puede tomar como una definición, permite al menos ubicar el campo de trabajo de la Inteligencia Artificial respecto a los otros campos de la computación. Otros autores han hablado en relación a este vocablo.

Según Schildt un “programa inteligente” es uno que muestra un com-portamiento similar al humano cuando se enfrenta con un problema. No es necesario que el programa resuelva realmente el problema de la misma forma que el hombre.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

4

Alan Turing se expresa análogamente al señalar que “si durante el intercambio entre una computadora y el usuario, este último cree que está intercambiando con otro humano, entonces se dice que el sistema es inteligente”. Esto se conoce como el Test de Turing y fue formulado en 1950. “Pasará mucho tiempo hasta que un computador pase el test de Turing. Algunos creen que nunca será posible”. Para Forsyth la I.A. se relaciona con problemas que han escapado de una caracterización matemática. Para Cuena, mientras la computación tradicional se basa en el empleo de algoritmos en los cuales el conocimiento y el procedimiento de solución están integrados en un proceso unificado, los sistemas de Inteligencia Artificial utilizan procedimientos standards que permiten modificar los procesos sin tener que modificar el conocimiento. Para Rich, la I.A. es el estudio de cómo lograr que los computadores hagan cosas que, por el momento, las personas hacen mejor. Esta definición es algo efímera debido a que hace referencia al estado actual de la Ciencia de la Computación. Sin embargo, la rapidez con que puede variar el significado de esta definición no es en absoluto tanta como pudiera pensarse. Ejemplo: En el cálculo numérico la máquina aventaja sustancialmente al hombre, pero en la traducción automática el hombre supera a la máquina considerablemente.

La I.A. es una rama de la Ciencia de la Computación dedicada a la creación de hardware y software que imita el pensamiento humano. Su principal objetivo es llevar a la computadora las amplias capacidades del pensamiento humano y, para ello, se convierten a las computadoras en “entes inteligentes” con la creación de software que les permite imitar algunas de las funciones del cerebro humano en aplicaciones particulares. El fin no es reemplazar al hombre, sino proveerlo de una herramienta poderosa para asistirlo en su trabajo. La I.A. se ocupa de la representación, adquisición y procesamiento de conocimientos de forma automatizada, de la arquitectura de los programas para estas actividades y de los lenguajes en los que se expresan tales programas. La modelación computacional de los procesos cognoscitivos es también un área de interés de la Inteligencia Artificial. Además se incluyen la percepción, la comprensión y síntesis del lenguaje natural, la robótica inteligente, la modelación del razonamiento, la programación automática y otras más, todas ellas de naturaleza no numérica y todavía del dominio de la heurística.

1.2. Surgimiento del término Inteligencia Artificial. En el año 1956, durante un congreso en Dartmouth (U.S.A.) se propuso el término de Inteligencia Artificial para agrupar a todos los métodos, técnicas e intentos de simular el intelecto humano en la computadora. Casi todos los especialistas están de acuerdo con esto, y quien acuñó este término fue el matemático John McCarthy (creador del LISP), profesor del Instituto de

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

5

Tecnología de Massachusetts. Además de McCarthy, son considerados padres de esta disciplina Marvin Minsky también del Instituto de Tecnología de Massachusetts y Herbert Simon y Allen Newell de la Universidad de Carnegie-Mellon. Desde su surgimiento, la I.A. ha tenido muchos críticos como Hebert Dreyfus, Joseph Weizenbaum , John Searle, los cuales ven a la I.A. como un fraude o una ciencia ilegítima.

1.2.1. Evolución histórica. Como rama de la Ciencia de la Computación, la I.A. ha evolucionado tanto en la formalización, como en la implementación de sus técnicas. Un resumen cronológico de su desarrollo puede ser el siguiente:

Cronología del desarrollo de la I.A.

1936 - Turing formaliza el concepto de computadora de propósito general. 1945 - Von Neumann concibe el diseño de “programa almacenado” para

computadoras digitales. 1946 - Aparece ENIAC, primera computadora digital de propósito general

dedicada. 1950 - Turing describe su test para conocer si una máquina es “inteligente”. 1955 - Bernstein desarrolla el primer programa para jugar ajedrez. 1956 - McCarthy organiza la conferencia de Dartmouth e introduce el

término Inteligencia Artificial. Newell, Shaw y Simon desarrollan el Logic Theorist, primer programa de Inteligencia Artificial exitoso.

1957 - McCarthy desarrolla el LISP (primer lenguaje de Inteligencia Artificial). Newell, Shaw y Simon comienzan los trabajos para encontrar un solucionador general de problemas (GPS). Chomsky introduce transformaciones gramaticales para modelar la sintaxis de los lenguajes naturales.

1965 - Feigenbaum desarrolla DENDRAL (primer Sistema Experto). Dreyfus publica el artículo “Alchemy and Artificial Intelligence”.

1966 - Quillian desarrolla las redes semánticas. 1967 - Greenblatt desarrolla MacHack, el primer programa de ajedrez

profesionalmente competente. 1970 - Aparece “Learning Structural Descriptions from Examples” de

Winston (primer artículo que se dedicó al Aprendizaje Automatizado). Colmerauer desarrolla el lenguaje de programación PROLOG.

1972 - Es desarrollado MYCIN, primer Sistema Experto en utilizar reglas de producción. Winograd completa el SHRDLU, un programa para el procesamiento de lenguaje natural.

1974 - En su artículo “A framework for representing knowledge” Minsky define los marcos.

1975 - El MIT inventa la máquina LISP, primera especializada en I.A. 1982 - Aparece una teoría sobre visión desarrollada por Marr.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

6

Comienzan las investigaciones de los japoneses y la Quinta generación.

1986 - Se introduce la primera Máquina Conexionista por Thinking Machines Corporation. Aparece la primera microcomputadora de 32 bits.

1987 - Primera Conferencia Internacional sobre Redes Neuronales Artificiales.

1988 - Primera computadora ajedrecista Hitech.

El desarrollo de la I.A. pudiera enmarcarse en las siguientes etapas:

- Oscura (década del 50) : Surgen la Redes Neuronales Artificiales (R.N.A.). - De la razón (década del 60) : Desarrollo de la lógica y los demostradores de

teoremas. - Romántica (década del 70) : Surgimiento de los Sistemas Expertos. - Ilustración (década del 80) : Desarrollo del aprendizaje automatizado o

extracción automatizada del conocimiento. - Renacimiento gótico (década del 90) : Resurgimiento de las R.N.A.

Los trabajos iniciales dentro del campo de la I.A. estuvieron dirigidos a emular el proceso del pensamiento humano. Resultados relevantes fueron el intento de Newell, Shaw y Simon de crear un Solucionador General de Problemas (GPS), así como el éxito alcanzado a fines de la década de los 50 e inicios de los años 60 por Rosemblatt al crear los Perceptrons. En ambos casos, otros autores se encargaron de demostrar las limitaciones de ambos intentos. En 1973 Gödel demostró que era imposible la matematización del proceso de razonamiento lo cual anulaba la posibilidad de crear, al menos en el presente, un GPS como el pensado por Newell, Shaw y Simon. Minsky y Papert en los años 60 mostraron las serias limitaciones del funcionamiento de un perceptron simple a través del problema clásico del XOR. Es por esto que a esta etapa se le denominó oscura. Sin embargo, en América los trabajos en I.A. siguieron otra dirección. Se planteaba que, si bien no existía una teoría universal de la inteligencia, sí era posible crear inteligencias especializadas. En esta época se comenzó a dar más importancia al papel del conocimiento que a los métodos potentes de solución de problemas, todo lo cual llevó a la reactivación de los trabajos en este campo. Causas del vigor de la IA en la década de los 80. La I.A. cobró vigor en la década de los 80, debido al éxito alcanzado por los Sistemas Expertos, al proyecto japonés de Quinta Generación, el cual originó un gran avance tecnológico y al éxito del uso de técnicas de I.A. en problemas concretos como el reconocimiento de patrones, la robótica, la visión, etc. Líneas de desarrollo de la IA en la actualidad El desarrollo de la I.A. ha seguido dos líneas principales: la simbólica y la subsimbólica. La primera se caracteriza por desarrollar modelos que describen, formalizan e implementan aspectos sistematizables del conocimiento en forma explícita (Sistemas Expertos, Razonamiento basado en casos, etc). La otra se basa en los enfoques no representacionales de la I.A.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

7

(R.N.A., algoritmos genéticos y sistemas difusos). El cálculo subsimbólico se basa en el uso de representaciones analógicas, el conocimiento se reparte entre diversas componentes del sistema que están enlazadas y que pueden funcionar en paralelo. Finalmente es necesario mencionar uno de los problemas fundamentales que enfrenta actualmente la I.A.: el problema del aprendizaje automatizado, para el que no existe actualmente una solución eficiente.

1.3. La Inteligencia Artificial y los modelos computacionales. El desarrollo de la I.A. es, realmente, una etapa cualitativamente superior dentro del progreso de la Ciencia de la Computación. Es importante, por tanto, analizar la relación existente entre la I.A. y los modelos computacionales convencionales. Existen diferentes modelos computacionales, entre los que podemos mencionar:

- Programación procedural: Un programa es una secuencia de instrucciones que transforman los datos para alcanzar la solución de un problema.

- Programación funcional: Un programa es considerado una función matemática que describe una relación entre una entrada y una salida.

- Programación lógica: Un programa es un conjunto de cláusulas de Horn que declaran lógicamente el conocimiento sobre el dominio de un determinado problema.

- Programación orientada a objetos: Un programa es un modelo físico que simula el comportamiento de una parte real o imaginaria del mundo. En lugar de describir esa parte del mundo por medio de operadores y estructuras de datos, funciones o ecuaciones matemáticas, se construye literalmente un modelo físico del mismo.

La programación lógico/funcional y la programación orientada a objeto son dos alternativas diferentes a los problemas relacionados con el concepto de estado de la programación procedural. En la primera alternativa el enfoque es eliminar el concepto de estado, mientras que en la programación orientada a objeto es elevar el concepto de estado al primer plano. Estos paradigmas difieren entre sí, pero tienen en común que los programas están dirigidos a alcanzar la solución del problema dado. Es por ello que en todo modelo computacional se identifican dos elementos básicos: la forma utilizada para describir el conocimiento sobre el dominio de la aplicación que se modela y el método utilizado para manipular este conocimiento en busca de un objetivo concreto. En forma general un modelo computacional se puede expresar como:

modelo computacional = formalismo + método de solución

Con el formalismo se describe el conocimiento que se tiene sobre el dominio del problema. Abarca tanto la descripción como la forma en que se almacena la información a procesar. Con el método de solución se brindan los operadores y las estructuras de control que permiten resolver el problema.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

8

En los paradigmas de programación convencionales, las dos componentes del modelo no se pueden separar. Para modificar el conocimiento o el método de solución hay que cambiar el programa completo. En la actualidad el conocimiento ha desplazado del papel principal al método de solución, siendo el factor determinante. Es por esto que las fronteras entre ambas componentes se delimitan cada vez más. El desarrollo de estas componentes se realiza mediante las técnicas de I.A., generándose de esa forma nuevos modelos computacionales para la solución de problemas. La I.A. se dedica al estudio de nuevas formas de representación del conocimiento, métodos de solución de problemas, razonamiento con incertidumbre y otras. El área donde la programación y la IA se aproximan más es en la programación automática, en la que se combinan las técnicas de resolución de problemas con una BD que contiene información, tanto del dominio de la tarea como del conocimiento de la programación, para producir un sistema que genere programas automáticamente. Los sistemas de programación automática difieren en la forma en que aceptan las descripciones de los programas que deberían escribir. Una de las áreas de la I.A. donde más éxito se ha alcanzado es el desarrollo de Sistemas Expertos (S.E.), que son programas que resuelven problemas de un dominio de aplicación concreto de manera similar a como lo haría un experto humano en esa materia. 1.3.1. Los SE como un ejemplo de modelo computacional. La experticidad en un dominio dado se caracteriza por una alta calidad y elevados resultados en las tareas de solución de problemas en el dominio. Un experto humano resuelve problemas en su área de experticidad más rapidamente, con más precisión y menos conciencia sobre su plan de acción que un novato. Para alcanzar este nivel de ejecución el experto requiere gran cantidad de conocimiento de varios tipos, y vías altamente efectivas de usar este conocimiento. Los tipos de conocimiento que un experto necesita son sobre los objetos y procesos que aparecen en el dominio, esquemas y métodos generales de solución de problemas, y sobre clases específicas de problemas en el dominio y los métodos que han sido probados como efectivos para los problemas de cada clase. Teniendo en cuenta lo anterior el experto artificial o Sistema Experto requiere al menos de dos componentes esenciales: la Base de Conocimiento (B.C.), que contiene el conocimiento sobre el problema y la Máquina de Inferencia (M.I.), que contiene los métodos para manipular dicho conocimiento. Podemos ver entonces al Sistema Experto como un modelo computacional:

S.E. = B.C. + M.I.

La B.C. almacena el conocimiento en una determinada notación, conocida como forma de representación del conocimiento (F.R.C.), lo cual constituye el

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

9

formalismo de este modelo. La M.I., por su parte, implementa los métodos de solución del problema (M.S.P). Un S.E. es entonces:

S.E.= F.R.C. + M.S.P.

Como hemos visto, el S.E. es un modelo computacional nuevo. La independencia de sus dos componentes permite modificar una de ellas sin alterar la otra.

1.4. El supuesto subyacente. Como estudiamos en la sección 1.1, el campo de aplicación de la I.A. aborda problemas que procesan, fundamentalmente, información de tipo simbólico. Veamos primeramente cuáles son nuestras suposiciones subyacentes acerca de la inteligencia. Newell y Simon (1976) definieron el sistema de símbolos físicos como sigue:

“Un sistema de símbolos físicos consiste en un conjunto de entidades llamadas símbolos, que son patrones físicos que pueden existir como componentes de otro tipo de entidad llamada expresión (o estructura de símbolos). Así una estructura de símbolos está compuesta por un número de ocurrencias (o marcas) de símbolos relacionados de alguna manera física (por ejemplo estando uno a continuación del otro). En cualquier momento el programa contendrá una colección de estructuras de símbolos. Además de estas estructuras, el sistema contiene también una colección de procesos que operan sobre unas expresiones para producir otras expresiones: procesos de creación, modificación, reproducción y destrucción. Un sistema de símbolos físicos es una máquina que produce, a lo largo del tiempo, una colección evolutiva de estructuras de símbolos. Tal sistema existe en un mundo de objetos de forma más amplia que las expresiones simbólicas por sí mismas”.

Por otro lado, se formula la hipótesis del sistema de símbolos físicos de la siguiente manera: Un sistema de símbolos físicos posee los medios necesarios y suficientes para acciones inteligentes en general. Parece que no hay manera de probar o refutar esta hipótesis con fundamentos lógicos, por lo que ella debe estar sujeta a validación empírica, o sea, a la experimentación. En cada investigación se selecciona una tarea que requiere inteligencia, se propone un programa para resolverla y se ensaya. La evidencia a favor de la hipótesis no solamente viene desde áreas donde era más probable encontrarla como los juegos, sino también de áreas como la percepción visual, donde parecía más posible la existencia de procesos no simbólicos. Es posible que la hipótesis sea parcialmente verdadera, o sea, que existan problemas que no puedan ser modelados por el sistema de símbolos físicos. Sólo tiempo y esfuerzo nos lo dirán. Esta hipótesis tiene importancia porque forma la base de la creencia de que es posible construir programas que puedan realizar tareas inteligentes que actualmente realizan las personas. 1.5. Papel del sentido común. De modo que alcanzar una IA comprende tres tareas:

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

10

i) Desarrollar un lenguaje para expresar el conocimiento. Como uno de los principios de la IA es que se pueda expresar explícita y declarativamente el conocimiento para que se pueda usar por diversos programas, este lenguaje debe poseer ambas cualidades.

ii) Desarrollar un conjunto de procedimientos para manipular (usar) el conocimiento.

iii) Construir la base de conocimiento, o sea, codificar el conocimiento en el lenguaje desarrollado en (i) de modo que una persona o una máquina le pueda aplicar los mecanismos de razonamiento desarrollados en (ii).

A pesar de los grandes esfuerzos invertidos en (i) y (ii) actualmente la mayoría de los programas llamados inteligentes sólo poseen una inteligencia aparente, limitada o externa, pues su conocimiento solamente le permite actuar ante situaciones previstas. Otro rasgo que los caracteriza es que modelan el conocimiento especializado de individuos aislados. Para poder salvar esta limitante es necesario determinar por qué los humanos pueden enfrentar situaciones nuevas. Los hombres poseen diversas formas para responder a situaciones nuevas cuando éstas aparecen: - pedir consejos a alguien que conozca sobre el tema, - consultar literatura sobre el tema,

- usar conocimiento general incluido el sentido común (muchos consideran que el sentido común se deriva del almacenamiento masivo de conocimiento y de la habilidad para acceder rápidamente al conocimiento relevante),

- comparar con situaciones similares aunque no relacionadas con la que apareció.

Todos estos caminos están cerrados a los programas inteligentes actuales: ellos no comprenden realmente bien el lenguaje natural, no poseen conocimiento de carácter general y su conocimiento no incluye información sobre otros dominios de aplicación que no sea para el que está preparado. Una vía para abrir estos caminos es fortalecer el esfuerzo que se invierte en (iii), lo cual significa crear bases de conocimientos 10 ó 100 mil veces mayores que las que se crean actual-mente para los sistemas expertos. Esta BC contendría hechos y métodos de solución problemas generales, así como una amplia recopilación de ejemplos y hechos específicos, y reglas para definir analogías entre situaciones. Esta BC se distinguiría por su amplitud y no tanto por su tamaño. A esta nueva visión del desarrollo de la IA se le denomina IA distribuida, pues en los sistemas inteligentes desarrollados bajo esta concepción existirán numerosos agentes cada uno con determinado conocimiento pero que COOPERAN en la solución de los problemas.

1.5. Técnicas de I.A.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

11

Para la resolución de problemas de I.A. se requieren técnicas que difieren de las convencionales. En esta sección estudiaremos las características de estas técnicas. Los programas de I.A. requieren de conocimiento. En compensación por esta arrolladora ventaja, el conocimiento tiene algunas propiedades menos deseables como son:

- ser voluminoso. - ser difícil de caracterizar y modelar con precisión. - estar cambiando constantemente.

Una técnica de I.A. es un método para explotar el conocimiento, que debería ser representado de tal manera que:

- Capte generalizaciones: No es una Base de Datos. No debe ser necesario

representar cada situación individual, sino que se agrupen las situaciones que compartan propiedades importantes. Si no tiene esta característica se necesitaría más espacio del disponible y más tiempo del que tenemos para mantenerlo actualizado.

- Pueda ser comprendido por los especialistas que lo proporcionan. - Deba ser modificable fácilmente. - Pueda ser usado en muchas situaciones diversas, incluso si no es total-

mente preciso o completo. - Pueda ser usado para extenderse a sí mismo.

Los lenguajes básicos para la implementación de las técnicas de I.A. son LISP y PROLOG por las facilidades que brindan para el tratamiento simbólico, entre otras razones. LISP permite diseñar las estructuras de datos y los algoritmos que los manejan de una manera muy eficiente. PROLOG, a su vez, tiene muy buen poder expresivo, permitiendo una formulación bastante natural y directa en la solución de muchos problemas. En esto, los lenguajes procedurales son muy malos. No se debe confundir las técnicas de I.A. con software de I.A. Se deben diferenciar dos aspectos fundamentales:

- Software para el desarrollo de aplicaciones con técnicas de I.A. Ejemplo: el shell de un sistema experto, máquina de inferencia más in-

terface con el usuario, puede ser escrito en cualquier otro lenguaje. De hecho, el LISP y el PROLOG son malos para implementar shells debido a su eficiencia computacional.

- Aplicaciones en el campo de I.A. Ejemplos: Sistemas Expertos, traductores, demostradores de teoremas es-

pecíficos, etc. Para los traductores es mejor usar LISP y para los de-mostradores de teoremas, es mejor el PROLOG.

Es posible resolver problemas de I.A. sin usar técnicas de I.A., aunque las soluciones no son muy buenas. A su vez, es posible aplicar técnicas de I.A. a problemas que no son de I.A. Para intentar caracterizar las técnicas de I.A., analicemos varios enfoques del problema del titafor que van aumentando en complejidad, uso de generalizaciones, claridad del conocimiento y extensividad de su enfoque.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

12

Programa 1: Estructura de datos: Se tiene un tablero expresado como un vector de 9 elementos que se corresponden con las posiciones del mismo de la siguiente forma: 1 2 3 4 5 6 7 8 9 y donde el valor 0 indica casilla en blanco, el 1 casilla ocupada por el jugador X y el 2 casilla ocupada por el jugador O. Además se tiene una tabla de movimientos que es un vector de 39 elementos, cada uno de los cuales es a su vez un tablero. Algoritmo: Para hacer un movimiento proceder a lo siguiente: 1. Considerar al vector que representa el tablero como un número de base 3 y convertirlo a decimal. 2. Usar el número calculado en el paso 1 como un índice de la tabla de movimientos y acceder al vector almacenado allí. 3. El vector seleccionado en el paso 2 representa el estado del tablero después de hacer el movimiento. Por tanto, el tablero debe hacerse igual a dicho vector. Comentarios:

- Eficiente en términos de tiempo y juego óptimo. - Ocupa mucho espacio para almacenar la tabla. - Alguien tiene que hacer mucho trabajo para construir todas las entradas

del tablero. - Es poco probable que se entren todas las entradas sin error. - Si se quiere ampliar el juego, por ejemplo a tres dimensiones, hay que

hacer el programa nuevamente. Además la tabla de movimientos sería de 327 elementos lo cual sobrepasa la capacidad de memoria de las computadoras.

Conclusión: Esta técnica no es de I.A. Programa 2: Estructura de datos: Se tiene un tablero representado en forma similar al del programa 1, pero ahora el valor 2 indica casilla en blanco, el 3 casilla ocupada por el jugador X y el 5 casilla ocupada por el jugador O. Además se tiene una variable entera Turno, que indica el movimiento a realizar: 1 para el primer movimiento y así sucesivamente, hasta 9 para el último. Algoritmo: Necesita tres procedimientos: - Hacer2: Intenta colocar dos X (O) en una fila. Primero intenta jugar en el

centro del tablero. Si no puede, intenta las casillas que no están en las esquinas.

- Posgana(p): Devuelve 0 si el jugador p no puede ganar en el siguiente

movimiento. En caso contrario, devuelve la casilla que constituye un movimiento ganador. Se llama, en primer lugar, para ver si podemos ganar

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

13

y cómo. Si se puede, realizaremos ese movimiento. Si no, llamaremos a posgana otra vez para ver si el oponente puede ganar en el siguiente movimiento. Si puede ganar, debemos bloquearlo. Posgana opera comparando una a una cada fila, columna y diagonal. Debido a la forma en que se enumeró, se puede comprobar esto, fácilmente, multiplicando sus casillas. Si el producto es 18 (3*3*2), X puede ganar y si es 50 (5*5*2) puede ganar O. Después de hallar la fila ganadora se comprueba cada elemento de la misma para determinar cuál de ellos es el blanco.

- Ir(n): Realiza una jugada en la casilla n. El algoritmo realiza los movimientos impares, si juega X o los pares, si juega O. La estrategia para cada turno es como sigue: Turno=1 Ir(1) {esquina superior izquierda} Turno=2 Si tablero[5] es blanco, ir(5), si no ir(1) Turno=3 Si tablero[9] es blanco, ir(9), si no ir(3) Turno=4 Si posgana(X) no es 0, entonces ir(posgana(X)) {bloquear la victoria

del adversario}, si no ir(hacer2) Turno=5 Si posgana(X) no es 0, entonces ir(posgana(X)) {gana}. Si no, si

posgana(O) no es 0 entonces ir(posgana(O)) {bloquear la victoria} y si no, si tablero[7] es blanco entonces ir(7), si no ir(3). {Intentamos hacer una horquilla}

Turno=6 Si posgana(O) no es 0 entonces ir(posgana(O)). Si no, si posgana(X) no es 0 entonces ir(posgana(X)) y si no ir(hacer2)

Turno=7,8 ó 9 Si posgana(nosotros) no es 0 entonces ir(posgana(nosotros)). Si no, si posgana(oponente) no es 0 entonces ir(posgana(oponente)) y si no ir a cualquier casilla.

Comentarios:

- No es tan eficiente respecto al tiempo como el primer programa, pues debe comprobar varias condiciones antes de realizar cada movimiento.

- Es más eficiente respecto al espacio, pues no necesita almacenar la enorme tabla de movimientos.

- Es más fácil de entender su estrategia o cambiarla si se desea. - La estrategia aún ha sido calculada de antemano por el programador.

Cualquier fallo de éste, aparecerá en el programa. - No se puede generalizar a un dominio diferente como el titafor

tridimensional. Conclusión: Esta técnica no es de I.A. Programa 3: Estructura de datos: Se tiene un vector de 9 elementos que representa el tablero, una lista de los tableros que pueden resultar del próximo movimiento y un número que representa una estimación de la posibilidad de que un movimiento nos conduzca a la victoria final. Algoritmo: Para decidir el siguiente movimiento: 1. Mirar cuáles son los tableros resultantes de cada uno de los movimientos

que se pueden realizar a partir del tablero actual.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

14

2. Decidir qué tablero es el mejor. 3. Realizar la jugada que conduce a ese tablero y asignar el valor de esa

jugada óptima como valor del tablero actual. 4. Para decidir cuál tablero es el mejor, de un conjunto de tableros, realizar

lo siguiente para cada uno de ellos: a) Analizar si es jugada ganadora. Si lo es, calificarla como la mejor

jugada, dándole un valor muy alto. b) De lo contrario, considerar todos los movimientos que el oponente

pueda realizar a continuación. Analizar cuál de ellos es peor para nosotros (llamando recursivamente a este procedimiento). Suponer que el oponente hará el movimiento que es peor para nosotros (el mejor para él). Cualquiera que sea el valor del peor movimiento, asignarlo como valor del tablero que estamos considerando.

c) El mejor tablero será aquel que tenga el mayor valor. Comentarios: Este procedimiento se llama procedimiento minimax, puesto que examina un árbol de movimientos posibles suponiendo que para cada nivel intentamos maximizar la posibilidad de ganar, mientras que el oponente intenta minimizar dicha posibilidad. Requiere mucho más tiempo que los anteriores, pues tiene que examinar el árbol de todos los movimientos posibles antes de hacer cada movimiento. Pero es superior en algo importante: puede ampliarse para manejar juegos más complicados, para los cuales el enfoque de enumeración exhaustiva de dichos programas se desmorona completamente. También se puede ampliar con una variedad de conocimientos específicos sobre otros juegos y sobre la forma de jugarlos. Por ejemplo, en vez de considerar todos los movimientos posibles en el siguiente turno, se puede tener en cuenta sólo un subconjunto razonable, determinado por medio de algún algoritmo sencillo y, en vez de analizar cada serie de movimientos hasta que el jugador gane, puede examinar hasta una profundidad fija y evaluar el mérito o valor del tablero resultante, usando los criterios estáticos apropiados. Conclusión: Esta es una técnica de I.A. Para problemas muy pequeños es menos eficiente que otros métodos más directos, pero puede usarse en situaciones en las que esos métodos fallarían. En el Capítulo 3, abordaremos con más profundidad este procedimiento. Este problema ilustra tres importantes técnicas de I.A.:

- Búsqueda: Proporciona una forma de resolver los problemas que no permiten enfoques más directos, así como una estructura en la que pueden encajar cualquiera de las otras técnicas más directas disponi-bles.

- Uso del conocimiento: Proporciona una forma de resolver problemas complejos, explotando las estructuras de los objetos involucrados.

- Abstracción: Proporciona una forma de separar las características y variaciones importantes de aquellas que no la tienen, pues de lo contrario, desbordarían cualquier proceso.

Analicemos otro ejemplo. Veamos, primeramente, un programa para ordenar un arreglo de números utilizando el método de ordenación quicksort.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

15

Estructura de datos: Se tiene un arreglo A de n números. Algoritmo: Recibe como argumento a A. 1. Si existen en A al menos dos valores distintos, entonces

a) Sea val el mayor de los dos primeros distintos. b) Particionar A en dos subarreglos

i) A1 ... Ak-1 los menores que val. ii) Ak ... An los mayores o iguales que val.

2. Llamar recursivamente al algoritmo pasándole como argumento el arreglo de A1 a Ak-1.

3. Llamar recursivamente al algoritmo pasándole como argumento el arreglo de Ak a An.

4. Retornar el arreglo A, el cual ya está ordenado.

Comentarios: Este procedimiento ejecuta una tarea general para una gran variedad de datos de entrada. Ordenar una lista sólo requiere comparar dos números y si son mayores, invertirlos. Veamos ahora el siguiente programa para calcular la derivada de una función de una variable.

1. Si f(x) es de la forma u(x) + v(x), entonces retornar Der(u(x)) + Der(v(x)). 2. Si f(x) es de la forma u(x) - v(x), entonces retornar Der(u(x)) - Der(v(x)). 3. Si f(x) es de la forma u(x) * v(x), entonces retornar v(x) * Der(u(x)) + u(x) * Der(v(x)). 4. Si f(x) = x, entonces retornar 1. 5. Si f(x) = c y c es una constante numérica, entonces retornar 0. y así sucesivamente para cada caso.

Comentarios: Este procedimiento ejecuta tareas específicas para pocas entradas, pues a partir de patrones en un formato de entrada devuelve la salida deseada. Calcular la derivada de una función requiere un conocimiento más extensivo de los métodos a usar según la entrada. Podemos, por lo tanto, considerarlo un programa inteligente. Los programas inteligentes son programas basados en el conocimiento.

1.6. Criterios para el éxito. Saber si estamos en presencia de un programa inteligente no es un problema sencillo. A veces, sin embargo, es posible lograr una medida bastante precisa de la ejecución de un programa. Por ejemplo, un programa para jugar ajedrez puede obtener una puntuación de ajedrez de la misma forma que un humano. Existen hoy en día programas que han obtenido puntuaciones más altas que la mayoría de los jugadores humanos. DENDRAL es un sistema experto que analiza componentes orgánicos para determinar su estructura. Es difícil obte-ner una medida de comparación con los químicos humanos, pero ha produ-cido análisis que han sido publicados como resultados originales de investigación.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

16

Al empezar a diseñar un programa de I.A. deberíamos intentar especificar lo mejor posible los criterios de éxito para ese programa particular funcionando en su dominio restringido. Esto es lo mejor que podemos hacer por el momento.

1.7. Aplicaciones de la I.A. Son innumerables los campos de aplicación de las técnicas de I.A. Ejemplos de ellos son los siguientes:

- Juegos. Fueron precisamente, las primeras aplicaciones de la I.A., pues constituían una excelente demostración de que las computadoras podían realizar actividades inteligentes. Actualmente se han desarrollado múltiples programas para jugar al ajedrez, las damas, resolver el cubo de Rubik, entre otros.

- Solución general de problemas. Para la solución de problemas no algorítmicos o intratables computacionalmente la I.A. ofrece una alternativa eficiente. Se han desarrollado, de esta forma, demostradores de teoremas, simplificadores de fórmulas matemáticas, planificadores, entre otros.

- Sistemas Expertos. Constituye hoy en día el área de aplicación de la I.A. de mayor éxito. Los sistemas expertos permiten almacenar y utilizar el conocimiento de uno o varios expertos humanos en un dominio de aplicación concreto. Su uso incrementa la productividad, mejora la eficiencia en la toma de decisiones o simplemente permite resolver problemas cuando los expertos no están presentes. Muchos son los ejemplos de sistemas expertos desarrollados. Entre ellos: MYCIN (para el diagnóstico médico), PROSPECTOR (para la detección de yacimientos minerales), DENDRAL (para el análisis de la estructura de sustancias químicas), etc.

- Procesamiento de lenguaje natural. Los programas de procesamiento de lenguaje natural utilizan las técnicas de I.A. para permitir que las computadoras comprendan y generen interfaces en lenguaje natural, lo cual haría más fácil el uso de estos programas por el usuario. La comprensión del lenguaje natural incluye el análisis de la sintaxis o gramática, la semántica o significado y el contexto del lenguaje. Un ejemplo de programas de procesamiento de lenguaje natural son los traductores de idiomas.

- Visión. La visión por computadora comprende el análisis y evaluación de la in-formación visual. El uso de las técnicas de I.A. permite a las computa-doras examinar imágenes reales e identificar sus objetos y rasgos. Un sistema típico está compuesto por una cámara de video que capta las imágenes, un convertidor analógico-digital que envía las señales a la computadora y un software de I.A. que, mediante técnicas de búsqueda y reconocimiento de patrones, analiza la imagen. Un ejemplo de aplicación es el análisis de fotografías aéreas.

- Robótica.

Inteligencia Artificial. - Introducción a la Inteligencia Artificial.

17

La robótica es el campo de la ingeniería dedicada a simular ciertas capacidades físicas del hombre. Los robots no pueden actuar ante situaciones cambiantes y tomar decisiones si no se dotan de softwares de I.A. Un robot dotado de inteligencia puede decidir cambiar el orden de la secuencia de sus operaciones, eliminar algunos pasos o modificar alguno de ellos. Para eso se dotan a los robots de sensores de presión, temperatura, de luz, de cámaras de video, etc., además de softwares para la toma de decisiones. Al incorporar la I.A. a los robots aumenta su flexibilidad y utilidad.

- Educación. La I.A puede ser usada en la educación y el entrenamiento, mediante la creación de programas que actúan como tutores inteligentes. Los tutoriales convencionales son rígidos en el sentido de que sus textos son fijos para todos los estudiantes. Al dotarlos de técnicas de I.A., ellos son capaces de variar su contenido en dependencia del conocimiento, habilidad e inteligencia del estudiante. Por otro lado, pueden proveerse de interfaces en lenguaje natural e incluso pueden adquirir nuevo conocimiento automáticamente en interacción con el tutor humano.

- Programación automática. El desarrollo de un software tiene varias etapas. La primera consiste en la definición del problema y el objetivo a resolver. Luego se diseña funcionalmente el software, identificando los datos, los procesos y sus interrelaciones. Por último, se implementa en un lenguaje de programación concreto y se compila, llevándolo a código de máquina. La programación automática, o sea, la automatización del proceso de desarrollo de softwares significa permitirle al programador especificar qué es lo que quiere, en lugar de cómo se debe realizar. Con la programación automática se han obtenido muchos beneficios: reducción de errores, incremento de la complejidad de los sistemas que se implementan y liberación del programador de los detalles de implementación, dirigiendo su atención al estudio profundo del problema, lo que le permite llegar a soluciones más rápidas y correctas.

Bibliografía [Ric88] - Inteligencia Artificial , Elaine.Rich, 1ra edición. [Bell] - Modelos Computacionales Avanzados. Rafael Bello. [Garc] - Cibernética Matemática, Luciano García.

RESUMEN

Este capítulo da a conocer al lector los tipos de problemas que pueden resolverse en la Inteligencia Artificial, diferenciándolos de los paradigmas anteriores. Desarrolla además los tipos de técnicas que son útiles para resolver esos problemas, el cómo sabremos cuándo hemos logrado construir un programa inteligente, la evolución histórica que esta rama de la ciencia ha tenido, sus líneas de desarrollo y sus campos de aplicación.

Inteligencia Artificial. -Formas de representación del conocimiento.

21

CAPITULO II: FORMAS DE REPRESENTACIÓN DEL CONOCIMIENTO. Como analizamos en el capítulo anterior, los programas inteligentes se basan en el conocimiento. Por tanto, es necesario estudiar cómo realizar el almacenamiento del mismo, determinando cuál será su forma de representación. Para realizar el almacenamiento del conocimiento se determina su representación, lo cual no es más que el proceso de estructurar el conocimiento sobre un problema de manera que sea más fácil de resolver. En este capítulo se analizan algunas de las técnicas para realizar esta representación, es decir se mostrarán los diferentes tipos de Formas de Representación del Conocimiento más utilizados en la práctica, como las Redes Semánticas, la Lógica, los Frames, Scripts, Reglas de Producción y Strips; además de sus características generales y de cómo se razona con ellas, es decir, cómo afrontar la implementación de las mismas en la programación de sistemas de I.A.

2.1. Definición de Forma de Representación del Conocimiento. Llamamos Forma de Representación del Conocimiento (F.R.C.) a la notación usada para representar el mismo, es decir la manera en que se almacena. En los primeros intentos de escritura de programas que permitiesen interfaces en lenguaje natural, se hizo obvia la necesidad de una manera para representar una gran colección de hechos estructurados de forma compleja. Consideremos la cantidad de conocimiento que debe usarse para permitir que un programa “comprenda” el siguiente texto sencillo: “Juan decidió visitar a Guillermo. Condujo hasta su casa, pero vio que todas las luces estaban apagadas, por lo que, en vez de ello, fue al cine.” Y contestar preguntas como las siguientes: ¿Vio Juan a Guillermo?, ¿Qué casa estaba oscura?, ¿Quién fue al cine?. El problema de la comprensión de un texto en lenguaje natural es difícil por la gran cantidad de conocimiento que debe representarse y manipularse. Por un lado está el conocimiento perteneciente a la interfaz del programa y por otro el conocimiento sobre la sintaxis y vocabulario del lenguaje mismo. Es útil separar estos dos aspectos tanto como sea posible, pues ambos son muy difíciles. Las representaciones que estudiaremos pueden usarse tanto en sistemas que tratan con entradas en lenguaje natural como en aquellos que no lo hacen. No existe actualmente una F.R.C. general, capaz de ser usada con éxito en todo tipo de aplicación. Ante un problema de un dominio específico es necesario realizar la selección de la F.R.C. más adecuada a dicho problema. Para realizar esta selección debemos tener en cuenta los siguientes criterios: - Debe describir los hechos importantes acerca del dominio del problema y exponer las

restricciones de manera natural, reflejando la estructura de los objetos, los hechos y las relaciones entre ellos.

- El conocimiento almacenado debe ser completo (expresar todo lo necesario) y conciso (expresar los hechos de forma eficiente).

- Debe suprimir detalles, manteniendo sólo los hechos necesarios.

Inteligencia Artificial. -Formas de representación del conocimiento.

22

- El conocimiento almacenado debe ser transparente, o sea, comprendido con facilidad. - Debe facilitar el cálculo, o sea, que almacene y recupere información rápidamente. - Debe ser manipulable por una computadora. - Debe aceptar conocimiento empírico, teórico o heurístico, y combinar el conocimiento

declarativo con el procedural, de acuerdo a los requerimientos de la aplicación.

2.2. Clasificación de las formas de representación del conocimiento. Las F.R.C. pueden clasificarse en: Declarativas: Donde la mayor parte del conocimiento se representa como una colección estática de hechos junto con un pequeño conjunto de procedimientos generales para manipularlos. Ejemplos de ellas son: - Lógica (Proposicional, Cálculo de predicados, No Monotónica, etc.). - Redes semánticas (Semantic Networks). - Marcos o armazones (Frames). - Guiones (Scripts). Procedurales: Donde la mayor parte del conocimiento se representa como procedimientos para usarlo. - Reglas de producción. - Strips. Las F.R.C. declarativas tienen las siguientes ventajas:

- Cada hecho sólo necesita almacenarse una vez, sin importar el número de maneras diferentes en que pueda usarse.

- Es fácil añadir nuevos hechos al sistema sin cambiar los otros hechos ni los procedimientos pequeños.

Como ventajas de las F.R.C. procedurales podemos señalar:

- Es fácil representar el conocimiento sobre cómo hacer cosas. - Es fácil representar el conocimiento que no encaja bien en muchos esquemas

declarativos simples, como por ejemplo razonamientos por defecto y probabilísticos. - Es fácil representar conocimiento heurístico de cómo realizar las cosas

eficientemente.

2.3. La lógica como Forma de Representación del Conocimiento. La F.R.C. más antigua es, precisamente, la lógica. El formalismo lógico es muy atractivo, pues ofrece un mecanismo potente para derivar nuevos conocimientos a partir de hechos conocidos: la deducción matemática. Analicemos, en primer lugar, el uso de la lógica proposicional como forma de representar la clase del conocimiento acerca del mundo real, que puede necesitar un sistema de I.A.

2.3.1. Lógica proposicional.

Inteligencia Artificial. -Formas de representación del conocimiento.

23

Una de las estructuras más importantes de nuestro pensamiento es la proposición. Los procesos de pensamiento más importantes asociadas a ella son las operaciones proposicionales y la deducción proposicional. La parte de la lógica que estudia las operaciones proposicionales y la deducción proposicional se denomina Lógica o Cálculo Proposicional. A las proposiciones se le asocian los valores veritativos 1, para verdadero y 0, para falso. Las operaciones proposicionales principales, presentes en nuestro pensamiento, son la negación, la conjunción, la disyunción, la condicional y la bicondicional. Estas determinan el valor veritativo de una proposición en términos de los valores veritativos de sus proposiciones componentes. Los hechos del mundo real pueden representarse fácilmente mediante el uso de proposiciones, como se muestra en la figura 2.1. Es de noche. esnoche Está haciendo sol. haciendosol Si es de noche, entonces no está haciendo sol. esnoche ⇒ ¬ haciendosol

Fig. 2.1. Algunos hechos simples en el cálculo proposicional. En el cálculo proposicional se definen las fórmulas bien formadas (fbf). La interpretación de una fbf no es más que una asignación de valores veritativos a las variables proposicionales que ocurren en ella. El estudio de los procesos de deducción lógica de proposiciones es un objetivo central de la lógica. Ellos consisten en el establecimiento de la verdad de una proposición, partiendo de la verdad de otras proposiciones. La demostración en sí, está constituida por una sucesión ordenada de proposiciones, cada una de las cuales constituye un paso de la demostración. Cada paso debe estar lógicamente justificado. Los métodos de justificación lógica están constituidos por las reglas de inferencia. Ejemplos de éstas son: el modus ponens, introducción de la conjunción y de la disyunción, prueba del contrarrecíproco y reducción al absurdo. Para una profundización del estudio del cálculo proposicional consulte [Gar90]. Como hemos visto, la lógica proposicional está dotada de una determinada capacidad expresiva (fbf) e inferencial (deducción), resultando muy atractiva por lo sencillo de su manipulación. Consideremos ahora la siguiente inferencia clásica: Todos los hombres son mortales. Sócrates es un hombre. Sócrates es un mortal. Tratemos de demostrar la validez de esta simple inferencia a partir del cálculo proposicional. El esfuerzo resultará en vano, pues se trata, desde el punto de vista proposicional, de tres proposiciones elementales donde no es posible expresar la cuantificación.

Inteligencia Artificial. -Formas de representación del conocimiento.

24

Por lo tanto, el cálculo proposicional no constituye un estudio completo de las formas expresivas e inferenciales que son fundamentales, tanto en el lenguaje natural como en el matemático. Nos vemos precisados entonces, al empleo de un cálculo de mayor capacidad expresiva e inferencial.

2.3.2. Cálculo de predicados.

El estudio de las propiedades operatorias de los operadores lógicos de cuantificación universal, ∀( ), y existencial, ∃( ), se lleva a cabo en la parte de la lógica conocida con el nombre de Cálculo de Predicados. En la lógica de predicados podemos representar los hechos del mundo real como declaraciones escritas como fbf. Un ejemplo de esto se muestra en la figura 2.2.

Sultán es un perro. perro(Sultán) Los humanos son hombres o mujeres. ∀(x) [humano(x) ⇒ (hombre(x) ∨ mujer(x))] Todos los hombres tienen una madre. ∀(x) ∃(y) madre(y,x) Fig. 2.2. Algunos hechos simples en el Cálculo de Predicados.

Con la aparición de las funciones proposicionales y la cuantificación, es decir, fórmulas con variables libres y ligadas que toman valores en un dominio o universo de discurso dado, el concepto de interpretación en el cálculo de predicados se define a partir de cómo se interpreta cada elemento que conforma su alfabeto. La principal motivación para elegir una lógica como F.R.C. es que se dispone de una forma sencilla, y buena, de razonar sobre ese conocimiento. La determinación de la validez de una fórmula en el cálculo proposicional es directa, aunque puede ser intratable computacionalmente. Sin embargo, en el cálculo de predicados no existe un algoritmo para determinar la validez de una fórmula, por lo que el cálculo de predicados es indecidible. No obstante, existe un pseudoalgoritmo compuesto por dos procedimientos: unificación y resolución, que permiten determinar si una fórmula es un teorema de la teoría, si realmente lo es. Pero no existe ninguna garantía de que el proceso se detenga si no es un teorema. Este resultado negativo tiene poco efecto directo en una ciencia como la I.A. que busca métodos positivos para realizar sus propósitos. A pesar de la indecibilidad del cálculo de predicados, éste puede servir aún como forma útil de representar y manipular algunas clases de conocimiento que podrían necesitar los sistemas de I.A.

Para un estudio más detallado del cálculo de predicados puede consultar [Gar90]. Desafortunadamente, la lógica de predicados no proporciona una buena forma de representar y manipular determinado tipo de información, como por ejemplo:

- “Hoy hace mucho calor”. ¿Cómo pueden representarse los grados relativos de calor?

Inteligencia Artificial. -Formas de representación del conocimiento.

25

- “La gente de cabello rubio suele tener los ojos azules”. ¿Cómo puede representarse la cantidad de certeza?

- “Si no hay evidencia de lo contrario, suponga que todos los adultos que encuentra saben leer”. ¿Cómo podemos representar que un hecho debería inferirse de la ausencia de otro?

- “Es mejor tener más piezas en el tablero de las que tiene el oponente”. ¿Cómo podemos representar esta clase de información heurística?

Al empleo de la lógica en el procesamiento automatizado del conocimiento se le hacen las siguientes críticas:

- Que la lógica no es lo bastante expresiva. - Que la lógica no puede tratar conocimiento incompleto, incierto, impreciso e

inconsistente. - Que los algoritmos para manipular conocimiento, obtenidos de la lógica son

ineficientes.

Tales críticas se deben, en gran parte, a una concepción errónea de que la lógica abarca solamente la lógica clásica (proposicional y de predicados). Este no es el caso. Hay muchas otras lógicas, la mayoría de las cuales fueron diseñadas específicamente para superar ciertas deficiencias de la lógica clásica. Entre ellas están:

- lógica de clases múltiples. - lógica de situación. - lógica no monotónica. - lógica de valores múltiples. - lógica borrosa. - lógica modal. - lógica temporal. - lógica epistemológica. - lógica de orden superior. - lógica intensional.

Un análisis sobre de cada una de estas lógicas puede verse en [BDSE]. Analicemos sólo una de ellas. 2.3.3. Lógica no monotónica.

A diferencia de la lógica monotónica, en la no monotónica la adición de un aserto a una teoría puede invalidar conclusiones obtenidas anteriormente. El razonamiento no monotónico es apropiado en las siguientes cirscunstancias: - Cuando el conocimiento es incompleto, pues deben hacerse suposiciones por defecto

que pueden invalidarse cuando se disponga de más conocimiento. Veamos el siguiente ejemplo de razonamiento por defecto:

“Tití es un pájaro. Pedro dejó la ventana de la habitación abierta y Tití ha escapado. Tití no puede volar porque tiene las alas recortadas.” Inicialmente supusimos que:

[Tití es un pájaro ∧ no se sabe que no puede volar] ⇒ Tití puede volar

Inteligencia Artificial. -Formas de representación del conocimiento.

26

Por tanto, el conjunto de creencias hasta este momento es: Tití es un pájaro ∀(x)[(x es un pájaro ∧ no se sabe que x no puede volar) ⇒ x puede volar] Tití puede volar

Al informarse de que Tití no puede volar, se rectifica la creencia obtenida. El conjunto de creencias ahora es:

Tití es un pájaro ∀(x) [x es un pájaro ∧ no se sabe que x no puede volar] ⇒ puede volar Tití no puede volar

- Cuando el universo del discurso está cambiante.

No se ocupa del razonamiento por defecto en presencia de conocimiento incompleto, sino del razonamiento con conocimiento no actualizado.

- En la resolución de problemas donde se realicen suposiciones temporales. En muchos problemas prácticos se hacen suposiciones temporales que le permiten al

hombre alcanzar una solución “posible”. Estas suposiciones serán validadas o anuladas posteriormente. Por ejemplo: para celebrar una reunión con los estudiantes, primero se hace una suposición de un día y una sesión. Todas las consecuencias que se derivarían de la realización de la reunión ese día se suponen temporalmente, hasta determinar la hora concreta. Luego, se comprueba el horario de los estudiantes y de los que deben asistir a dicha reunión para determinar la hora.

Como hemos visto en esta sección, los métodos para representar el conocimiento usando los formalismos lógicos son muy útiles para representar hechos simples. Su principal ventaja es que pueden combinarse con mecanismos de inferencia potentes y sencillos, tales como la deducción y resolución, que facilitan el razonamiento con los hechos. Pero los objetos de esas representaciones son tan simples que no pueden describir con facilidad la mayor parte de la compleja estructura del mundo. En la resolución de problemas cuya naturaleza es deductiva es aconsejable usar la lógica simbólica. Sin embargo, la mayoría de los problemas reales son de naturaleza inductiva. Es necesario entonces, estudiar otras F.R.C más complejas.

2.4. Redes semánticas.

Las redes semánticas fueron introducidas por Ross Quillian (1968) en su tesis de Ph.D. Se diseñaron originalmente como una forma de representar los significados de las palabras en idioma inglés.

2.4.1. Planteamiento de un problema.

En la práctica, nos encontramos con problemas donde es necesario representar el conocimiento a través de los conceptos, sus rasgos y las relaciones que pueden establecerse entre ellos. Por ejemplo, ¿cómo representar todo el conocimiento acerca del concepto de silla?. El concepto de silla está caracterizado por un conjunto de rasgos como que es un mueble, que tiene asiento, etc. Además existen otros conceptos que pueden considerarse como especializaciones de él, tal es el caso de una silla concreta, la cual a su vez tiene

Inteligencia Artificial. -Formas de representación del conocimiento.

27

propietario, color, está cubierta de un determinado material y posee, además, los rasgos del concepto de silla. Esta relación entre conceptos puede complicarse tanto como se desee ampliar el dominio de conocimiento y no constituye una organización jerárquica. El problema radica entonces, en definir una F.R.C. adecuada para este tipo de conocimiento.

2.4.2. Definición.

Una red semántica consiste de puntos llamados nodos, conectados por enlaces llamados arcos que describen las relaciones entre los nodos. Los nodos representan objetos, conceptos, eventos, acciones o atributos. Los arcos pueden definirse de varias formas, dependiendo de la clase de conocimiento representado, por ejemplo, arcos comunes usados para representar jerarquías son esun y partede. La forma de representar una red semántica es un grafo orientado cuyos arcos son etiqueteados con los nombres de las relaciones. Veamos en la figura 2.3 la red semántica que describe el problema inicial.

Fig. 2.3. Red semántica que describe el concepto de silla.

Analicemos otro ejemplo. Supongamos que tenemos el siguiente conocimiento expresado a través de los siguientes hechos:

1) Víctor es un pingüino. 2) Todos los pingüinos son pájaros. 3) Todos los pájaros son animales. 4) Todos los mamíferos son animales. 5) Todos los perros son mamíferos. 6) Sultán es un sato. 7) Todos los satos son perros. 8) Una raza de perro es el pastor. 9) A Víctor le agrada Sultán y a Sultán le agrada Víctor. 10) Un pájaro puede volar. 11) Un perro puede correr.

Mueble

Silla Persona Asiento

es_un

es_parte_de

Mi-silla Yo propietario

es_un

Cuero

Marrón

color

instancia

cubierta_de

Inteligencia Artificial. -Formas de representación del conocimiento.

28

Como podemos ver los hechos 2, 3, 4, 5, 7 y 8 encierran relaciones del tipo esun. Los hechos 10 y 11 son relaciones de propiedad. El 1 y el 6 reflejan instancias de un concepto y el hecho 9 encierra relaciones entre individuos. Vea la red semántica que representa este conocimiento en la figura 2.4.

Fig. 2.4. Un ejemplo de red semántica

Como hemos visto todo programa Prolog compuesto por hechos puede ser llevado a una red semántica. Luego veremos cómo llevar las reglas (con cuantificadores).

2.4.3. Características generales. La representación del conocimiento en una red semántica es tan fascinante y potente como compleja. Las redes se caracterizan por:

- El conocimiento se representa por nodos en un grafo no jerárquico, por lo que todos los nodos tienen la misma importancia y cualquiera puede ser usado como punto de partida.

- Los nodos están organizados de modo que tipos similares de conocimiento son adyacentes.

- Las relaciones establecidas por los conceptos de un tipo dado son heredadas a través de la jerarquía por todos los subtipos. Ej: en la red semántica de la fig. 2.5, elefante hereda características de animal superior (es un animal, tiene cabeza y patas).

Una vez construida la red semántica, ella puede ser usada en la solución de problemas. Por ejemplo, la red semántica de la figura 2.5 puede responder a las siguientes preguntas: - ¿Puede moverse Fred?

puede

Animal

es_un

Pájaro Volar

Pingüino

es_un

Mamíferopuede

es_un

Perro

agrada

Correr

agrada

es_un

Pastor

Sultán

instancia

instancia

Sato Victor

es_un es_un

Inteligencia Artificial. -Formas de representación del conocimiento.

29

- ¿Quién tiene patrón de color rayado? - ¿Qué color tiene Jumbo? - ¿Tiene patas la ameba?

Fig. 2.5. Un ejemplo de red semántica.

Cada transición de un nodo a otro incrementa la similaridad, en cada paso de un nodo a otro se analizan todos los nodos adyacentes para ver cual ofrece más evidencia. La mayoría de los modelos de redes usan una lista de índices que ayudan a seleccionar el nodo de entrada en la red para cada situación. En el peor caso la búsqueda en la red degenera como si se buscara en una lista. Las relaciones es-un, parte-de, y otras permiten heredar información. Un sistema de redes semánticas típico tiene un conjunto de procedimientos para la manipulación de las estructuras (añadir y eliminar nodos y enlaces), y para atravesar el grafo en varias formas. También permite al usuario construir su propio procedimiento de búsqueda. La significación de representar una red semántica como un grafo etiquetado dirigido es que permite realizar ciertas clases de inferencias usando simplemente técnicas de búsqueda en grafos; esta representación permite otras clases de inferencias, como por ejemplo, preguntar cómo están relacionados dos nodos y responder encontrando un camino en el grafo entre ellos. Un concepto importante es la herencia de relaciones. Asumamos que la relación R se cumple para los objetos A y B (A R B) y la relación S para (B S C). ¿Hay relación entre los objetos A y C? Esto dependerá de lo que representen las relaciones R y S. Ej: Se puede inferir que: Fred tiene cabeza pues Fred instancia elefante es_un animal_superior tiene cabeza.

Ser viviente

es_un

Animal Ameba

Tigre

es_un Moverse puede

es_un

es_un

Animal Superior

tiene

tiene

cabeza

patas

cerebro tiene

color

rayado es_un

Elefante Gris color

Jumbo Fred

instancia instancia

Inteligencia Artificial. -Formas de representación del conocimiento.

30

Pero: Sam casado con Kare es una mujer. Un caso particular de herencia de relaciones es la transitividad.

Si A R B R C ¿Se cumple A R C? No. Ej: Sam le_gusta Kare le_gusta Pepe. Aspectos a tener en cuenta en el razonamiento. - Procedimiento de añadir y eliminar nodos y arcos. - Mecanismo de recorrido en el grafo teniendo en cuenta las relaciones heredadas y

transitivas. - Selección del nodo punto de partida. La cantidad de detalle que puede incluir la red depende del tipo de problema que debe ser resuelto. Si se requiere un estudio más detallado puede agregarse a la red más información, mediante la inclusión de nuevos arcos o nodos. Un ejemplo puede verlo en la figura 2.6.

Fig. 2.6. Un ejemplo de red semántica ampliada.

Hay que tener cuidado cuando un objeto hereda propiedades de varias rutas. Ej de red conflictiva.

Fig. 2.7. Un ejemplo de red semántica conflictiva. Sin información adicional no hay manera de resolver el conflicto. ¿Yogui habla o hace rugidos? En la próxima sección estudiaremos cómo implementar una red semántica para que pueda responder a las preguntas anteriores.

2.4.4. Redes semánticas particionadas.

Animal Superior Posee

Piel

Cabeza

Patas

Personaje animado Español

Yogui oso rugidos

es_un

es_un

vocalización

vocalización

Inteligencia Artificial. -Formas de representación del conocimiento.

31

La representación del conocimiento usando redes semánticas presenta el problema de cómo manejar la cuantificación. Una forma de resolverlo es particionar la red semántica en espacios, cada uno de los cuales se corresponde con el ambiente de una o varias variables. Gary Hendrix, introduce el concepto de red semántica particionada agrupando conjuntos de nodos y arcos que especifican espacios que diferencian las relaciones existentes entre los objetos. Los nodos pueden estar relacionados aún cuando pertenezcan a espacios diferentes. Supongamos se tiene el siguiente conocimiento:

“Sultán es un perro y Pedro, un cartero. Sultán mordió a Pedro”. y se quiere representar en una red semántica. Esto puede hacerse usando una única red (figura 2.8). El nodo M representa una mordedura concreta.

Fig. 2.8. Red semántica correspondiente a “Sultán mordió a Pedro”.

Supongamos ahora que se tiene lo siguiente: “Todos los perros han mordido a Pedro”.

En el cálculo de predicados puede expresarse así:

∀(P)[Perro(P) ⇒ Mordedura(P,Pedro)]

Para representar este hecho, necesitamos cuantificar universalmente la variable P. Esto puede hacerse usando la red semántica particionada mostrada en la figura 2.9. El nodo E es un elemento del conjunto de declaraciones generales DG. En este conjunto cada elemento tiene como atributos: FORMA que indica la relación afirmada y tantas conexiones como variables cuantificadas universalmente existan. Las restantes variables que se encuentran en la FORMA se suponen cuantificadas existencialmente.

Fig. 2.9. Red semántica particionada correspondiente a “Todos los perros han mordido a Pedro.”

Perro Mordedura Cartero

Sultán Pedro M agresor víctima

instancia instancia instancia

FORMA

DG Perro Mordedura Cartero

instancia instancia instancia instancia

Pedro

P M E agresor víctima

Inteligencia Artificial. -Formas de representación del conocimiento.

32

Si tenemos: “Todos los perros han mordido a un cartero”. o su fórmula equivalente: ∀(P) [Perro(P) ⇒ ∃(C) (Cartero(C) ∧ Mordedura(P,C))] se obtendría la red semántica particionada de la figura 2.10. Note cómo el cartero C se incluye ahora en FORMA, pues en este caso no es un cartero concreto sino que es una variable cuantificada existencialmente. Las redes semánticas particionadas se usan, además de para representar la cuantificación, en la comprensión del lenguaje natural. Fig. 2.10. Red semántica particionada correspondiente a “Todos los perros han

mordido a un cartero”.

2.4.5. Manipulación del conocimiento representado. Naturalmente, las redes semánticas no pueden representarse en la forma vista anteriormente en el interior de un programa. En vez de ello, se representan usualmente por medio de alguna estructura de memoria atributo-valor. Por ejemplo en el lenguaje PROLOG se representan las relaciones como predicados binarios: esun(silla,mueble), cubiertade(misilla,cuero), etc. Una vez expresado el conocimiento como un programa PROLOG, se usan el principio de resolución SLD y la búsqueda primero en profundidad, propios del lenguaje, para resolver problemas usando dicho conocimiento. A su vez, el conocimiento expresado en los predicados de un programa PROLOG puede representarse por medio de redes semánticas. Ejemplos:

- hombre(marcos). puede escribirse como esun(marcos,hombre) y representarse como tal.

- tanteo(rojo, azul, [17,3]). puede lograrse creando un nodo adicional J para representar un juego específico y relacionando con él a cada uno de los tres elementos del hecho PROLOG. (Ver figura 2.11).

DG Perro Mordedura Cartero

instancia instancia instancia instancia

Pedro P M E agresor víctima

Inteligencia Artificial. -Formas de representación del conocimiento.

33

Fig. 2.11. Representación de un hecho PROLOG mediante una red semántica Si quisiéramos representar una red semántica en LISP, lo haríamos fácilmente mediante el uso de las listas de propiedades de los átomos, donde cada nodo sería un átomo, los arcos serían propiedades y los nodos en los otros extremos de los arcos serían los valores. Podríamos representar en LISP la red semántica de la figura 2.3 como se muestra en la figura 2.12.

ATOMO LISTA DE PROPIEDADES Silla ((esun Mueble)) Mi_silla ((esun Silla) (color Marrón) (cubiertade Cuero) (propietario Yo)) Yo ((esun Persona)) Asiento ((espartede Silla)) Fig. 2.12. Representación en LISP de una red semántica.

Un sistema basado en redes semánticas debe tener un conjunto de procedimientos para manipular las estructuras de datos (añadir nuevos nodos y arcos) y para extraer información (recorrido y búsqueda). Este sistema debe ser capaz de contestar preguntas como: si una clase es subclase de otra (ejemplo:¿un perro es un pájaro?), si un objeto dado posee cierta propiedad (ejemplo:¿puede un pingüino volar?), permitiendo, por supuesto, la herencia de propiedades. En un lenguaje procedural, para poder contestar a estas preguntas, es necesario implementar la red semántica en una estructura de datos que permita el acceso a los nodos y el análisis de sus arcos. Pudiera pensarse en usar listas enlazadas, arreglos, árboles de búsqueda balanceados, pero éstos no nos permitirían el acceso directo a los nodos, lo que restaría eficiencia. Esta dificultad pudiera eliminarse usando una tabla hash cuyas entradas serían los nodos de la red. Estos nodos podrían ser, por ejemplo, clases de objetos compuestos del nombre del nodo y de un apuntador a la lista de sus arcos. Esta lista puede estar formada por objetos consistentes en el nombre de la relación, el apuntador al nodo relacionado mediante ella y el apuntador al próximo elemento de la lista. Conjuntamente con esto, sería necesario implementar la función hash y métodos para resolver las colisiones entre los nodos en la tabla. Para contestar a una pregunta, se determinaría el nodo a tomar como punto de partida y se explorarían sus enlaces para ver si se tiene conocimiento de la pregunta en cuestión. Una propuesta de declaraciones en Turbo Pascal para las estructuras de datos sería:

Rojo

Azul tanteo equipo

visitante

es_un

Juego

Juego_A 17-3

equipo_local

Inteligencia Artificial. -Formas de representación del conocimiento.

34

const Maxnodos = 100; {Máximo número de nodos permitidos} type IndiceNodo = 1..MaxNodos; Cadena30 = string[30]; PNodo = ^TNodo; PArco = ^TArco; TArco = object nombre: Cadena30; nodo : PNodo; prox : PArco; {...} end; TNodo = object nomobj: Cadena30; arcos : PArco; procedure explora; {Explora sus arcos} {...} end; THash = object tabla: array[IndiceNodo] of PNodo; function indhash(nombre:Cadena30):PNodo; {Devuelve el apuntador al nodo en la tabla hash sin colisión} procedure insertanodo(nodo:PNodo); {...} end;

Ahora tenemos el siguiente problema: ¿cómo podemos responder si un objeto es subclase de otro?, o sea, ¿cómo podemos heredar propiedades?. Si entre los nodos hay un arco directo no hay problema. Si no existiera dicho arco, hay que implementar un procedimiento de búsqueda a través de esa relación. Por ejemplo, para determinar si Nodo1 está relacionado mediante R con Nodo2, siendo R una relación heredable:

1) Generar una cola formada por Nodo1 y todos los nodos relacionados con él mediante R.

2) Si la cola está vacía entonces TERMINAR y RETORNAR NO. 3) a) Nodo:= primer nodo de la cola. b) Remover a Nodo de la cola. c) Si Nodo = Nodo2 entonces TERMINAR y RETORNAR SI. d) Adicionar a la cola todos los nodos relacionados mediante R con No-do. e) Ir al paso 2).

2.4.6. Criterios sobre el dominio de aplicación. En sus inicios (finales de los años 50 e inicios de los 60), las redes semánticas fueron utilizadas en sistemas de traducción automática. El primero de ellos, se desarrolló en la Universidad de Cambridge donde se definió un diccionario conceptual de 15000 entradas a partir de 100 tipos de conceptos primitivos. Las redes semánticas han sido utilizadas además, en: En el procesamiento (comprensión) del lenguaje natural.

Inteligencia Artificial. -Formas de representación del conocimiento.

35

Las redes semánticas son útiles para representar los contenidos de una oración declarativa típica. Ej: Jonh le dio el libro a Mary.

agente beneficiario Ej: John es más alto que Bill y mide 72 cm.

altura altura

mayor La programación y aprendizaje automáticos. Para sintetizar respuestas. Memoria asociativa

Se han empleado, además, en programas de aplicación de la I.A., tales como, PROSPECTOR, el cual es un sistema experto en Geología Mineral. Por sus características, las redes semánticas han sido propuestas como un mecanismo para simular algunas de las propiedades asociativas de la memoria humana.

2.5. Marcos o armazones (Frames). La representación del conocimiento mediante marcos fue propuesta por Marvin Minsky en 1974 en su artículo “A framework for representing knowledge”.

2.5.1. Planteamiento de un problema.

Dar

John

Mary

Acción

L

Libro representa el libro concreto dado a Mary

John Bill

A1 A2

72

Inteligencia Artificial. -Formas de representación del conocimiento.

36

En un taller de reparación de automóviles se lleva un control de los vehículos que asisten al taller. La información que se almacena sobre cada vehículo incluye el tipo de vehículo, su chapa, el tipo de motor (gasolina o petróleo), la provincia, el tipo de propiedad (privada o estatal), la cantidad de ruedas, el número de veces que ha asistido al taller y la fecha de la última reparación. Se desea automatizar la manipulación de esta información, por lo que se hace necesario almacenarla de alguna manera. La forma más fácil es hacerlo mediante un fichero, pero esto presenta las siguientes deficiencias:

- En muchos artículos algunos campos tienen igual valor. Ejemplo: en el atributo número de ruedas siempre se tienen los valores 2, 3, 4, 6, 8, 10 ó 12, y el tipo de motor tiene sólo dos valores posibles.

- Existen campos redundantes, pues ellos pueden ser calculados a partir de otros. Ejemplo: la provincia puede ser determinada a partir de la chapa.

- No es posible definir en el mismo fichero, conjuntamente con el campo, la validación del mismo. Ejemplo: a partir del tipo de motor y la fecha en que el taller comenzó a dar mantenimiento a esa clase de motor, se pudiera validar la fecha de la última reparación.

Se necesita una F.R.C. que sea capaz de:

- reducir la cantidad de información almacenada (por ejemplo para este caso: agrupar los vehículos de acuerdo a los valores posibles para algunos atributos),

- validar el valor de los atributos, - calcular dinámicamente el valor de un atributo cuando éste se necesite, - modificar directamente el valor de un atributo cuando se asigne un nuevo valor

a otro (por ejemplo, cuando se actualice el valor de la última fecha de reparación, se debe incrementar automáticamente el número de veces que el vehículo ha sido atendido),

- etc. Hasta el momento, ninguna de las F.R.C. estudiadas cumple estos requisitos.

2.5.2. Definición. Un marco es una estructura de datos compleja que contiene información acerca de un objeto. La información almacenada en el marco se distribuye en diferentes campos llamados ranuras o aspectos y cada una de ellas contiene la información sobre un atributo del objeto o un apuntador a otro marco.

Ejemplos: 1- Marco: Empleado Nombre Edad (entre 16 y 65) Piernas (2 por defecto) Ocupación 2- Marco: Hombre de familia Nombre Edad (entre 16 y 120) Estado civil (genérico: casado)

Inteligencia Artificial. -Formas de representación del conocimiento.

37

Cónyuge (Apuntador al marco Mujer de familia)

Se denomina ejemplificación de un marco a uno con sus ranuras llenas.

Ejemplos de ejemplificaciones de los marcos anteriores son: 1- Marco: Empleado Nombre: Jesús López Edad: 32 Piernas: 2 Ocupación: Programador 2- Marco: Hombre de familia Nombre: Jesús López Edad: 32 Estado civil: casado Cónyuge: (Apuntador a la ejemplificación para Mujer de familia de Mariela Pérez)

Podemos ver entonces al marco como una clase de entidades y a una ejemplificación de él como una entidad particular (objeto). Note que una manera natural de programar los marcos es a través de objetos. Ralación Frame - Programación Orientada a Objetos (POO): Tantos los marcos como la POO proponen organizar el conocimiento en términos de objetos, pero en los marcos se hace más énfasis en la representación (las ranuras y sus facetas) mientras que la POO hace un mayor énfasis en el cálculo (pase de mensajes). La representación orientada a objetos se distingue también por el hecho de que los objetos se comunican entre sí a través de los mensajes. Los dos formalismos pueden ser combinados en el sentido que un frame puede ser visto como una clase de objeto en el cual las ranuras son tópicos acerca de los que se pueden enviar mensajes y las facetas son tipos de mensajes (el contenido de una faceta es un método para responder el mensaje).

A cada ranura se le puede asociar varios tipos de información, llamados facetas de la ranura, entre las cuales están:

Valor: almacena el valor para la ranura. Ejemplo: la ranura Nombre de los marcos Empleado y Hombre de familia. Valor por defecto: contiene un valor inicial o valores usados comúnmente para la faceta Valor. Ejemplo: la mayoría de las personas empleadas poseen dos piernas y salvo se conozca otra cosa, se puede pensar como normal tal afirmación. Usualmente se utilizan valores por defecto cuando no se dispone de conocimiento de lo contrario. En ocasiones el valor por defecto se puede usar como el valor inicial de la faceta Valor. Genérico: Es una propiedad asociada a una clase de entidades, de tal forma que cada entidad de la clase posee esa propiedad. Ejemplo: Casado en el marco Hombre de familia. Restricciones: contiene un conjunto de expresiones lógicas que tienen que ser verdaderas para el valor almacenado en la faceta Valor. Ejemplo: la ranura Edad en el marco Empleado. Las restricciones a analizar pueden ser más complejas y pueden referirse a valores de otras ranuras del marco actual o incluso de otro marco. Ejemplo: supongamos que al marco Empleado le agregamos una ranura Sexo y que

Inteligencia Artificial. -Formas de representación del conocimiento.

38

hacemos las consideraciones laborales en nuestro país. La condición de la edad va a depender, entonces, de si es hombre o mujer el empleado. Procedimiento: contiene un procedimiento para calcular el valor que debe ser almacenado en la faceta Valor. Demon: contiene un procedimiento que se ejecuta automáticamente cuando se cambia el valor almacenado en la faceta Valor. Es importante pues permite mantener la consistencia interna de la información. Ejemplos:

- Un demon asociado a la ranura Edad del marco Empleado que se activará si se trata de rellenar con un valor fuera del rango de 16 a 65. El demon puede pedir explicación al usuario de la causa de la violación y actuar según la explicación dada.

- Al rellenarse la ranura de Estado civil en Hombre de familia con el valor casado, se puede activar un demon que ejemplifique otro marco de Mujer de familia para el cónyuge.

Tanto los procedimientos como los demons son escritos, normalmente, como programas en lenguajes procedurales de alto nivel. Explicación: almacena documentación sobre la ranura.

Hemos mencionado 7 facetas de una ranura. No necesariamente, cada ranura debe tenerlas todas. Eso depende de cada problema en particular. En general, se puede plantear que la información almacenada usando como F.R.C. a los marcos tiene cuatro niveles de detalle: el marco, las ranuras del marco, las facetas de cada ranura y el valor almacenado en cada faceta.

2.5.3. Características generales. Los marcos pueden ser organizados en una jerarquía, para lo cual es suficiente incluir en ellos una o más ranuras que contengan un enlace al marco padre en la jerarquía, del cual él es una instancia. Una manera sencilla de lograr este enlace es colocar el nombre del marco padre en una ranura que podemos llamar, por ejemplo, Padre. Cada marco padre define una clase. Todos los marcos de una clase comparten la información almacenada en el marco padre. Esta información común es almacenada en ranuras llamadas ranuras propias del marco. Además, cada clase puede especificar un conjunto de ranuras que tienen que ser evaluadas en cada instancia de la clase. A ellas se les denomina ranuras miembros. Esta estructura jerárquica permite compartir información a través de la herencia. Un ejemplo de una jerarquía de marcos puede verse en la figura 2.11. El marco Mesa hereda todas las características contenidas en las ranuras del marco Mueble y además tiene sus características propias. Lo mismo ocurre con el marco Mi buró. Note cómo la ranura Padre sirve para indicar el marco padre en la jerarquía.

A través del establecimiento de una jerarquía de marcos es que se puede compartir información por varias entidades, sin necesidad de tener que repetirla.

Inteligencia Artificial. -Formas de representación del conocimiento.

39

Frame: mueble

Frame: mesa

Frame: mi buró

Fig. 2.11. Un ejemplo de una jerarquía de marcos.

2.5.4. Manipulación del conocimiento representado. En muchas aplicaciones que utilizan marcos, el tipo de una entidad no siempre es conocido. Por ejemplo: podríamos conocer el nombre, edad y disposición de una familia, pero ignorar si la entidad corresponde a un padre de familia, madre de familia, soltero o soltera. El sistema debe tratar entonces, de encontrar el marco que empareje con las propiedades conocidas de esa entidad. A este proceso de búsqueda se le denomina emparejamiento. Los sistemas de marcos se utilizan a menudo como componentes de sistemas de reconocimiento de patrones. Ej: un sistema de frame podría constar de un conjunto de frames para representar cada una de las letras del alfabeto, descritas por la cantidad de líneas rectas, arcos, esquinas, etc. El reconocimiento de patrones implica el empare-jamiento de un conjunto de valores asociados a una entidad con los valores requeridos para rellenar los slots de un marco. En algunos casos puede no encontrarse un emparejamiento exacto. Los valores de algunas ranuras pueden no conocerse o estar fuera de los límites establecidos. En estos casos es necesario encontrar el mejor emparejamiento. La selección de un marco candidato se realiza de varias formas: de manera arbitraria, comenzando por la parte superior de la jerarquía, utilizando información contextual, etc. Cuando se ha seleccionado el candidato, el sistema se ejemplifica rellenando el mayor número posible de ranuras, usando la información conocida. Pudiera incluso pedirse infomación adicional para intentar rellenar más ranuras. Posteriormente, se calcula un valor de emparejamiento que indica su grado de idoneidad. Podría ser, por ejemplo, 1 si se han llenado todas las ranuras, 0.5 para la mitad o el grado de idoneidad podría calcularse según la importancia de la ranura. Si este valor calculado es suficientemente alto para la aplicación concreta (mayor que cierto valor prefijado para dicha aplicación), el sistema no seguirá buscando más marcos candidatos. De lo contrario, continúa la búsqueda de un mejor candidato.

Clase: mueble

clase: mesa

Inteligencia Artificial. -Formas de representación del conocimiento.

40

Los sistemas de marcos deberían tener las siguientes propiedades deseables: - Ser capaz de identificar eficazmente los predecesores y la descendencia de un marco

dado. - Permitir al usuario entrar fácilmente un valor de cualquier marco en todo momento. - Iniciar, donde sea apropiado, la ejemplificación de otros marcos. Por ejemplo: al

ejemplificar el marco Persona con el valor casado para la ranura Estado civil, debe iniciarse la ejemplificación del marco para el cónyuge.

- Responder rápidamente ante una inconsistencia. - Permitir el razonamiento analógico. - Permitir al usuario fijar el valor de emparejamiento deseado.

Aspectos en el razonamiento - Búsquedas de los frames candidatos. - Función para determinar el grado de emparejamiento. - Selección del frame de mayor emparejamiento. Una posible implementación de marcos en LISP puede desarrollarse a través de las listas de asociación. La ventaja es que ellas pueden ser fácilmente extendibles usando las primitivas CONS y APPEND. Anidando listas de asociación obtenemos una posible forma de representar los marcos, según se muestra en la figura 2.12. Note que en el nivel superior aparece el nombre del marco y sus ranuras. Cada ranura, a su vez, tiene la forma de una lista de asociación, donde la clave es el nombre de la ranura y los valores de asociación son las facetas, las cuales vuelven a tener la misma estructura, esta vez con clave nombre de la faceta y, como valores de asociación, los valores de la faceta.

( <nombmarco> (<ranura1> (<faceta1> <valor1> <valor2> ... ) (<faceta2> <valor1> <valor2> ... ) ... ) (<ranura2> (<faceta1> <valor1> <valor2> ... ) (<faceta2> <valor1> <valor2> ... ) ... ) ... )

Fig. 2.12. Una implementación en LISP de los marcos.

En la figura 2.13 se muestra la ejemplificación del marco Empleado usando la implementación en LISP explicada anteriormente.

( Jesus-Lopez ( Es-un (Valor Empleado) ) ( Nombre (Valor Jesus Lopez) ) ( Edad (Valor 32)

Inteligencia Artificial. -Formas de representación del conocimiento.

41

(Condicion CHEQUEO-EDAD) ) ; CHEQUEO-EDAD es una función que chequea el rango de la edad.

( Piernas (Valor-por-defecto 2) ) ( Ocupacion (Valor Programador) ) )

Fig. 2.13. Ejemplificación en LISP del marco Empleado.

La implementación de las funciones necesarias para la manipulación del conocimiento representado en los marcos, según esta propuesta, debe incluir el acceso a los valores de las ranuras, el manejo de cada tipo de faceta, la inclusión de nuevos datos, la herencia de propiedades, entre otras. Para un análisis más detallado de estas implementaciones puede consultar [GCL84]. Si quisiéramos implementar los marcos en un lenguaje procedural como Turbo Pascal podríamos usar las estructuras de datos siguientes:

const MaxRanuras = 50; {Máximo número de ranuras permitidas} type IndiceRanuras = 1..MaxRanuras; TipoFaceta = (valordefecto, generico, condicion, proced, demons, explicacion); Cadena30 = string[30]; PFaceta = ^TFaceta; TFaceta = object prox: PFaceta; case tipo: TipoFaceta of valordefecto,generico: (valini:TipoDato); condicion,proced,demons: (funcion:ApTipoFunc); explicacion: (expl:string); {...} end; PRanura = ^TRanura; TRanura = object nombre: Cadena30; valor: TipoDato; facetas: PFaceta; {métodos que permitan llenar la ranura, tomar el valor de una ranura, asignarle facetas, entre otros} end; PMarco = ^TMarco; TMarco = object nombre: Cadena30; ranuras: array[IndiceRanuras] of PRanura; procedure insertaranura(nomb:Cadena30); function devuelveranura(indice:IndiceRanura):PRanura; {...} end; TipoDato es un objeto abstracto que representa el tipo de dato del valor de una ranura y ApTipoFunc es un puntero a una función o procedimiento, en dependencia de los requerimientos de la aplicación concreta.

Inteligencia Artificial. -Formas de representación del conocimiento.

42

Un sistema de marcos organizado jerárquicamente debe permitir la herencia de propiedades. La herencia es un proceso de inferencia que permite deducir información implícita, que no está explícitamente representada en el marco en cuestión. Supongamos que se tiene un objeto Obj y el nombre de una propiedad (ranura) P y se desea saber el valor de esa propiedad o error si no la tiene. Para ello, podríamos realizar lo siguiente:

1) Generar una cola compuesta por Obj. 2) Si la cola está vacía, entonces TERMINAR y RETORNAR ERROR. 3) a) X:= primer elemento de la cola. b) Remover a X de la cola.

c) Si X tiene una ranura de nombre P, entonces TERMINAR y RETORNAR EL VALOR.

d) Adicionar a la cola todos los objetos que son padres de X en la jerarquía. e) Ir al paso 2).

2.5.5. Criterios sobre el dominio de aplicación. Los frames deben ser usados donde sea necesario tener descripciones estructurales complejas para describir adecuadamente el dominio de la aplicación, pues un frame ofrece una representación estructurada de un objeto o una clase de objetos. Los frames son buenos para almacenar el conocimiento sobre los elementos de un dominio de aplicación que tienen una descripción estereotipada. Los frames son especialmente fuertes para permitir que la información común se almacene de modo compartido para múltiples frames. Sin embargo, ellos no ofrecen directamente facilidades para describir cómo se usará el conocimiento almacenado. Cuando se tiene un conocimiento jerárquico, la FRC más adecuada son los frames por permitir la herencia de propiedades. Los marcos son útiles para:

- Inferir hechos no observados sobre situaciones nuevas. Cuando se hace un emparejamiento entre una entidad y un marco, el sistema es capaz de inferir la existencia de una entidad del tipo representado por ese marco, conjuntamente con sus características, incluyendo tanto las propiedades genéricas como los valores por defecto. Por ejemplo: un programa con acceso a un marco Habitación podría inferir la existencia en ella de una puerta, aunque no se halla hablado explícitamente de ella, pues este hecho está incluido en ese marco. La certidumbre con la que esta inferencia puede hacerse, está relacionada con el valor de emparejamiento calculado, como se explicó en la sección 2.5.4.

- Verificación de inconsistencias y omisiones en un cuerpo de conocimiento. Un ejemplo de verificación de inconsistencias es el siguiente: si se dice que una persona es un empleado, pero se sabe que tiene 3 años de edad, entonces esta información puede utilizarse para señalar la posibilidad de un error, pues no se corresponde con las restricciones para la ranura Edad del marco Empleado. Por otro lado, si una situación concreta, que parece corresponder en casi todas las ranuras con un marco dado, se aleja en una de ellas, es probable que corresponda a un aspecto importante y deberíamos actuar ante ella. Ejemplo: si se supone que una silla tiene 4 patas y una silla concreta tiene sólo 3, la misma podría necesitar un arreglo.

Inteligencia Artificial. -Formas de representación del conocimiento.

43

- Realizar inferencias por analogía. Ejemplo: si se ha dicho al sistema que “la persona Pepe es como una concretera” y la ejemplificación de la concretera en el marco Vehículo tiene en la ranura del peso un valor muy alto, entonces el sistema puede utilizar un razonamiento analógico y colocar un valor relativamente alto en la ranura del peso del marco Persona cuando se ejemplifique para Pepe.

Los marcos tienen las siguientes ventajas:

- El agrupamiento de propiedades en un conjunto de entidades se realiza de forma natural, en el sentido de que las personas están familiarizadas con este enfoque.

- La estructura en marcos permite realizar una taxonomía del conocimiento. - Incluyen el tratamiento de valores por defecto y propiedades genéricas. - Se puede representar fácilmente tanto el conocimiento declarativo como el

procedural. - Permiten el razonamiento por analogía.

Sin embargo, tienen la desventaja de que, por el momento, no existe una teoría formal de marcos, lo que trae como consecuencia que los mecanismos para la inferencia y verificación de consistencia no se basan en una semántica bien definida. Esta F.R.C. ha sido utilizada en tareas de predicción y monitoreo. Por otro lado, ha dado buenos resultados en problemas de tipo constructivo tales como el diseño. Los sistemas de marcos se han utilizado, además, como componentes de sistemas de reconocimiento de patrones. Ejemplo: un sistema de marcos podría constar de un conjunto de marcos para representar cada una de las letras del alfabeto, descritas por la cantidad de líneas rectas, arcos, esquinas, etc. El reconocimiento de patrones implica, entonces, el emparejamiento de un conjunto de valores asociados a una entidad con los valores requeridos para rellenar las ranuras de un marco. Se han desarrollado lenguajes que permiten al usuario construir sistemas de marcos, tales como el FRL (Frame Representation Language) desarrollado por R.B. Roberts y P. Goldstein en el M.I.T. en 1977, el OWL (One World Language) desarrollado por Szolovits y otros en 1977 y el KRL (Knowledge Representation Language) desarrollado por Bobrow y Winograd en 1977 y 1979. Ejemplos de sistemas basados en marcos son: UNITS (Smith y Friedland, 1980) para su aplicación en biología molecular, el WHEEZE (Smith y Clayton, 1980) que realiza diagnósticos médicos de la función pulmonar y AM (Lenat, 1982) para crear automáticamente nuevos conceptos matemáticos. El dominio de aplicación del sistema AM son los números naturales y los teoremas, tales como la factorización y el producto de números primos. Cada marco del sistema representa un concepto matemático. La función principal de AM es completar las ranuras de los marcos para descubrir un nuevo concepto.

2.6. Guiones (Scripts). Los guiones fueron desarrollados por Schank y Abelson en 1977.

2.6.1. Planteamiento de un problema. Una gran parte del conocimiento usado en el proceso de razonamiento cotidiano es fijo y bien conocido. Este se basa en la exposición de situaciones típicas, ritualizadas e

Inteligencia Artificial. -Formas de representación del conocimiento.

44

invariantes, a lo que se le denomina conocimiento estereotipado. Un ejemplo de aplicación de este tipo de conocimiento, muy usado actualmente con el empleo de la computadora, es la generación de historietas, animados, etc. La actuación de cada uno de los sujetos que intervienen en estos materiales contiene un volumen considerable de este tipo de conocimiento. El problema radica, entonces, en la representación de todos los elementos (sujetos, objetos y acciones) que intervienen en estas secuencias de eventos estereotipados.

2.6.2. Definición. Los guiones son estructuras de datos complejas designadas para almacenar el conocimiento sobre una secuencia estereotipada de acciones. Este conocimiento abarca los sujetos que intervienen en estas acciones, los eventos que la forman, el orden en que se desarrollan éstos, el papel que desempeña cada sujeto en los eventos, etc. Un guión es una F.R.C. similar a un marco, pero en lugar de describir un objeto, el guión describe una secuencia de eventos o acontecimientos que ocurren comúnmente. Los guiones están compuestos por un conjunto de ranuras que contienen toda la información necesaria sobre las acciones que se describen. Estas ranuras son:

- Sitio (Setting): es el lugar donde ocurren los eventos. - Sujetos (Roles): son los sujetos que actúan en los eventos descritos. - Objetos (Props): son los objetos que aparecen en los eventos descritos. - Condiciones (Conditions): son las condiciones que deben cumplirse antes de que los eventos se realicen.

- Escenas (Scenes): describen los eventos. - Resultados (Results): son condiciones que existen una vez concluidos los eventos.

2.6.3. Características generales. El conocimiento estereotipado que se desea representar está compuesto por varias escenas. Se le denomina escena al conjunto de episodios que describe cómo ocurre una actividad importante. Un episodio es una cadena de eventos que, generalmente, ocurren en un mismo lugar y en una secuencia determinada. Por ejemplo: la escena “viajar en ómnibus” está compuesta por los episodios “montar al ómnibus”, “pagar el ómnibus” y “llegar al destino”. A su vez, el episodio “pagar el ómnibus” se compone de los eventos “sacar el dinero”, “echar el dinero en la alcancía” y “ubicarse en un lugar del ómnibus”. Un ejemplo de un guión típico es la visita a un restaurante.

GUION RESTAURANTE Sitio: Restaurante de autoservicio y su contorno. Sujetos: Cliente (C), Dependiente (D), Cajero (J). Objetos: Contadora, bandeja, comida, dinero. Condición: C tiene hambre, C tiene dinero. Escena 1: “Entrada al restaurante” - C entra al restaurante. - C se pone en cola ante la contadora. - C lee el menú en la pared y decide qué pedir.

Inteligencia Artificial. -Formas de representación del conocimiento.

45

El episodio “C entra al restaurante” puede estar formado por los eventos “abrir la puerta” y “dirigirse a la línea de servicio”. Escena 2: “Tomar los alimentos” - C toma la bandeja vacía. - C le pide a D los alimentos. - D coloca los alimentos en la bandeja. - C le paga a J. Escena 3: “Comer los alimentos” - C toma la bandeja con los alimentos. - C coloca la bandeja en una mesa vacía. - C ingiere los alimentos. Escena 4: “Salida del restaurante” - C se levanta de la mesa. - C abandona el restaurante. Resultados: C no tiene hambre, C tiene menos dinero, C está satisfecho o no, C

está demasiado lleno.

Otro Script puede representar las actividades que se desarrollan en el metro. GUIÓN METRO Sitio: El metro y su contorno. Sujetos: Patrón (PAT), Cajero (CAJ), Conductor (COND), Maquinista (MAQ),

Pasajero (PAS). Objetos: Moneda (MON), Boletín (BOL), Asiento en la estación (ASIE), Coche

(COCH), Tren, Asiento en el coche (ASIC). Condición: PAS necesita viajar o PAS quiere pasear. Las escenas pricipales del Script $METRO son: "entrar en la estación y esperar en la plataforma", "entrar al tren y llegar al destino" y "abandonar la estación de destino". Resultados: PAS llegó a su destino.

2.6.4. Manipulación del conocimiento representado. Un guión puede ser activado emparejando su nombre, sus condiciones, objetos, sitio o alguna combinación de ellos. A los guiones que sirven para invocar a otros guiones se les llama guiones iniciadores. Existen cuatro tipos de guiones iniciadores, los cuales son:

a) invocación por precondición (PH o Precondition Header): se invoca a un guión cuando se menciona una de sus condiciones. Ejemplo: La expresión “Juan tiene hambre” es un PH para el guión Restaurante.

b) invocación como instrumento (IH o Instrumental Header): cuando un guión puede ser interpretado como instrumento para invocar a otros guiones. Ejemplo: Del texto “Juan tomó el metro para ir al restaurante” se podrían invocar el guión Metro o el guión Restaurante. Primeramente se invocaría al guión Restaurante, pues el guión Metro constituye un IH, es decir, el metro es un instrumento para llegar al restaurante. Una estrategia apropiada es almacenar un puntero al guión Metro, de forma que pueda accederse a él más tarde si es necesario.

Inteligencia Artificial. -Formas de representación del conocimiento.

46

c) invocación como local (LH o Local Header): se invoca a un guión cuando se menciona el sitio donde ocurren sus acontecimientos. Ejemplo: La oración “Juan fue al cine Cuba” es un LH para invocar al guión Cine.

d) invocación directa (DH o Direct Header): se hace una alusión directa a un guión concreto. Es la primera que se chequea si ocurre. Ejemplo: En el texto “Juan realizó un paseo en metro” el guión Metro es un DH.

Al implementar las invocaciones es útil exigir que una situación concreta tenga, al menos, dos guiones iniciadores. Con esto se evitan invocaciones innecesarias. Los guiones pueden representarse a través de un sistema de marcos. El guión en sí, es un marco cuyas ranuras son el sitio, los sujetos, los objetos, las condiciones, las escenas y los resultados. Las ranuras correspondientes a las escenas contienen apuntadores a otros marcos, que recogen la información particular de las escenas.

2.6.5. Criterios sobre el dominio de aplicación. Los guiones están diseñados para almacenar situaciones en las cuales el comportamiento de los sujetos actuantes está tan estilizado, que raramente surge la necesidad de analizar un plan. Ellos son útiles para: - Predecir acontecimientos que no se han observado explícitamente.

Supongamos, por ejemplo, la siguiente historia: “Juan fue para el restaurante ano-che. Pidió un bistec. Al pagarlo, notó que se le acabó el dinero. Corrió a casa porque había empezado a llover”. Ante la pregunta ¿Cenó Juan anoche?, un programa, usando el guión Restaurante podría responder que sí. A pesar de no decirse explícitamente, esto es posible, pues todos los acontecimientos de la historia corresponden a la secuencia de eventos descritos por el guión y por tanto, el programa podría inferir que la secuencia entera ha ocurrido normalmente.

- Proporcionar una forma de construir una interpretación única y coherente a partir de una colección de observaciones. Consideremos, por ejemplo, la siguiente historia: “Juan salió a almorzar. Se puso en cola. El dependiente le dio los alimentos y él se fue para una mesa a comérselos”. Consideremos ahora la pregunta: ¿Por qué el dependiente le dio los alimentos?. El guión proporciona dos respuestas posibles:

⋅ Porque Juan le pidió los alimentos. (Se obtiene retrocediendo en la cadena causal de eventos del guión Restaurante).

⋅ Para que Juan le pagara los alimentos al cajero. (Se obtiene avanzando en la cadena causal para encontrar qué acontecimiento permite la acción del dependiente).

- Centrar la atención sobre acontecimientos inusuales. Consideremos, por ejemplo, la siguiente historia: “Juan fue a un restaurante. Se puso en cola. Miró el menú y no le gustó. Se puso bravo y salió”. La parte importante es el lugar donde esta historia se aparta de la secuencia de acontecimientos esperada en un restaurante. Juan no se puso bravo porque se puso en cola. Se puso bravo porque no le gustó el menú. Una vez que se interrumpe el guión, éste no puede usarse para predecir otros acontecimientos. Sin embargo, sí pueden predecirse los acontecidos antes de la interrupción.

Inteligencia Artificial. -Formas de representación del conocimiento.

47

Los guiones están designados para almacenar situaciones en las cuales el comportamiento de los sujetos actuantes está tan estilizado que raramente surge la necesidad de analizar un plan. Como los SCRIPTS permiten describir la secuencia de eventos que definen una situación estereotipada, ellos son útiles en la predicción de lo que sucederá en cierta situación aún sin observar algunos eventos. Esta F.R.C. ha sido utilizada en aplicaciones para el procesamiento del lenguaje natural y en la representación, procesamiento y generación de historietas. Ejemplos de sistemas basados en guiones son: SAM (Cullingford, 1981) para comprender artículos de periódicos e IPP (Lebowitz, 1980) orientado a los problemas de integración de analizadores sintácticos de lenguaje natural y a la actualización de la memoria.

2.7. Reglas de producción.

Las reglas de producción fueron introducidas en 1943 por Post. Las reglas de producción son la FRC más popular, y para la cual se han desarrollado más herramientas comerciales.

2.7.1. Planteamiento de un problema. Una de las principales preocupaciones del personal médico y paramédico en una Unidad de Cuidados Intensivos en cualquier hospital es el diagnóstico de enfermedades y la selección de la conducta terapéutica. La realización rápida y certera, tanto del diagnóstico como del tratamiento, implica, en primer lugar, la posible eliminación de la afección, con lo que se salvaría la vida del paciente y, por otro lado, la reducción de los costos en la utilización de los medicamentos y del equipamiento. Para la realización del diagnóstico y del tratamiento, el médico utiliza los conocimientos recogidos en los libros de Medicina y la experiencia adquirida en sus años de trabajo. Todo este conocimiento tiene la forma de condiciones necesarias para que esté presente una determinada enfermedad, así como para aplicar un tratamiento específico. El problema radica, entonces, en cómo representar este conocimiento.

2.7.2. Definición. Una regla de producción consta de un par ordenado (A,B), representado en el cálculo proposicional como A ⇒ B, donde A representa el antecedente y B el consecuente de la regla. Una regla de producción se interpreta de la siguiente manera: si se satisface el antecedente, entonces se cumple el consecuente. Esta manera de interpretar una regla permite considerarla como una unidad relativamente independiente de conocimiento. Las reglas de producción pueden adoptar varias formas:

a) Si condición P entonces conclusión C. b) Si situación S entonces acción A.

Inteligencia Artificial. -Formas de representación del conocimiento.

48

c) Si condición C1 entonces no condición C2.

Los antecedentes de las reglas, independientemente de la forma que éstas adopten, pueden ser simples o compuestos. Los compuestos se forman uniendo varias condiciones simples por medio de las conectivas lógicas. Algunos ejemplos de reglas de producción son:

- Si el paciente tiene manchas rojas y fiebre y está en edad escolar, entonces tiene varicela.

- Si un animal tiene los ojos enfocados hacia delante y tiene dientes y tiene garras, entonces es un carnívoro.

- Si el paciente tiene fiebre menor de 38° y no padece de gastritis, entonces adminístrele una aspirina.

- Si la temperatura del horno es mayor que 120°C o es menor que 70°C, entonces ajustar válvula de presión.

- Si el análisis de la glicemia es normal, entonces no hay riesgo de hipoglicemia. - Si el automóvil no arranca y llega combustible a los cilindros, entonces el sistema

de inyección no está funcionando correctamente.

Como puede verse, los dos primeros ejemplos corresponden al caso a), los ejemplos tercero y cuarto, corresponden al caso b) y los dos últimos, al caso c).

2.7.3 Criterios sobre el dominio de aplicación Las reglas pueden ser comprendidas fácilmente y tienen suficiente fuerza expresiva para: - representar reglas de inferencia dependientes del dominio - representar especificaciones de comportamiento - almacenar el conocimiento que pueda ser expresado como heurística experimental - expresar conocimiento orientado a un objetivo - expresar relaciones causales

Las reglas de producción han sido utilizadas con éxito como FRC para tareas de diagnóstico, diseño (configuración de computadoras), planificación, problemas deductivos, etc. Pero son inadecuadas para: definir términos, describir objetos y describir relaciones estáticas entre objetos.

2.7.4. Manipulación del conocimiento representado. Sistemas de producción En 1943, Post propuso los sistemas de producción (sistemas basados en reglas) como un mecanismo computacional de carácter general. Se usan para la manipulación del conocimiento representado en reglas de producción. Un S.P. consta de tres componentes básicos:

a) Base de datos (B.D.). Es la componente principal del S.P. Se utiliza como memoria de trabajo, pues en ella se almacenan los datos iniciales e intermedios, obtenidos de la aplicación de las reglas, para el logro del objetivo propuesto.

b) Conjunto de reglas. Las reglas de producción operan sobre la memoria de trabajo. Cada regla tiene una condición que es o no satisfecha por los datos de la B.D. Típicamente una regla

Inteligencia Artificial. -Formas de representación del conocimiento.

49

tiene una parte izquierda, la cual tiene que ser verdadera de acuerdo a la información existente en la memoria de trabajo para poder usarla, y una parte derecha, que realiza acciones o actúa sobre la memoria de trabajo, añadiendo nuevos hechos a la B.D. El que la parte izquierda de una regla se satisfaga puede establecerse por referencia a la B.D. y/o preguntando al usuario del sistema de producción.

c) Intérprete. Tiene como función llevar a cabo el proceso de inferencia. Este último comprende las siguientes tareas:

- Seleccionar las reglas a aplicar. - Verificar de entre estas reglas, cuáles se satisfacen. - Ejecutar las acciones especificadas por estas reglas.

En un esquema clásico se recorren todas las reglas buscando una a aplicar. Cuando se encuentra tal regla, se aplica, lo cual en muchos casos provoca cambios en la B.D. El conjunto de reglas se sigue recorriendo hasta que se soluciona el problema (se alcanza el objetivo) o no es posible invocar más reglas, constituyendo ésta la condición de terminación. El procedimiento básico de un intérprete puede ser representado así:

1) MEMORIA_TRAB := Base de Datos inicial 2) Mientras que MEMORIA_TRAB no satisfaga la condición de terminación:

a) Seleccionar alguna regla R, del conjunto de reglas que puedan ser aplicadas.

b) MEMORIA_TRAB:= MEMORIA_TRAB ∪ Resultados de aplicar R.

Para la selección de las reglas se usan varias estrategias: encadenamiento hacia delante, encadenamiento hacia atrás, entre otras, las cuales serán estudiadas en el capítulo siguiente. Se le llama estrategia de control a seleccionar las reglas y mantener la historia de la secuencia de reglas ya aplicadas. En la mayoría de las aplicaciones la información de que dispone la estrategia de control no es suficiente para permitir seleccionar la regla más apropiada. La dificultad surge cuando en el conjunto de reglas de producción hay más de una regla cuya precondición se satisface, en este caso ¿cuál se debe seleccionar?. A esto se le llama estrategia de resolución de conflictos. La estrategia de solución de conflictos puede usar diferentes criterios: usar la regla más específica, usar la regla más recientemente usada, usar la regla menos recientemente usada. Por ejemplo, suponga que se seleccionaron las siguientes reglas:

- Si una inversión desciende de su valor en libros, entonces congelar la inversión hasta su recuperación.

- Si una inversión desciende de su valor en libros, entonces liquidarla. Como se observa, los antecedentes de ambas son el mismo. La estrategia de resolución de conflictos debe decidir cuál de las dos aplicar. Existen diversas estrategias: establecer orden en los datos, clasificar las reglas por prioridad de ejecución, ejecutar la regla más recientemente instanciada o la última y aplicar meta-reglas. Métodos para la selección de reglas de producción: • Búsqueda a través de todas comparando los antecedentes.

Inteligencia Artificial. -Formas de representación del conocimiento.

50

Desventajas: Ineficiencia y número grande de reglas. • Indexación. Ej: en el ajedrez podría hacerse una tabla hash que agrupe con el mismo

índice todas las reglas que describan un aposición dada del tablero. Pero este emparejamiento sencillo le quita generalidad a las reglas.

Desventajas: Compromiso entre facilidad al escribir las reglas y emparejamiento simple. Ej: Prolog indexa las reglas por los predicados que contiene.

• Cuando en las reglas no aparecen descripciones exactas de situaciones particulares (emparejamiento con variables) se desata un complejo proceso de búsqueda. Ej: similitud estructural en las reglas: reglas que comparten antecedentes comunes se almacenan juntas y la unificación se hace una sola vez.

felino(x) ^ mamífero(x) ^ tiene_manchas(x) leopardo(x) felino(x) ^ mamífero(x) ^ tiene_rayas(x) tigre(x)

• Cuando las condiciones de una regla no están descritas explícitamente en el estado actual, se requiere emparejamiento complejo y aproximado. Ej: reconocimiento del habla, donde el nudo de fondo y las diferencias en el modo de hablar de una persona implican variabilidad física en la señal y p.t. emparejamiento aproximado.

Ej: ELIZA (Weizenbaum 1966) uno de los primeros programas de IA que simula el comportamiento de un sicólogo. Empareja los antecedentes de la regla con la última sentencia del usuario y genera una respuesta utilizando el lado derecho. Ej. Mi hermano se preocupa por mí.

Dos respuestas: - ¿Quién más de tu familia se preocupa por tí? - Cuéntame algo más de tu familia.

Mi {miembro de familia} es Y ¿Quién más de tu familia es Y? X {miembro de familia} Y Cuéntame algo más acerca de tu familia.

Además tiene reglas para cuando no empareje con ninguna. Ej: Háblame más de eso. Las reglas no emparejan sentencias completas, sólo partes de ellas.

Resolución de conflictos. • Preferencias basadas en reglas

- Considerando el orden: seleccionar la 1ra que aparece (Prolog) u otro. - Dar prioridad a las reglas especiales por encima de las generales. Se detecta que una

es más general si tiene la precondición de la otra y algo más ó si tiene las mismas precondiciones pero con más ocurrencias de variables.

• Preferencias basadas en objetos: ordenar las reglas según la importancia de los objetos emparejados. Ej: ELIZA contenía algunas palabras claves con su importancia (todo el mundo (1), yo (2),....).

Antes: Yo sé que todo el mundo se ríe de mí..... en vez de responder lo que encuentra por yo: dice saber que todo el mundo se ríe de usted, contesta por todo el mundo ¿está pensando en alguien en particular?

• Preferencias basadas en estados. Se aplican todas las reglas y se evalúan los nuevos estados mediante una heurística seleccionando el mejor.

Para mejorar la búsqueda se usan reglas de control las cuales se exploran antes que las otras. Estas contienen conocimientos acerca de qué estados son preferibles, qué reglas aplicar en una situación dada, el orden de los subobjetivos, etc. Ej: - Dados A y P las reglas donde no aparece x son inútiles. - Si un subobjetivo contiene lijar y pintar debe hacerse primero lijar. Al conocimiento de control se le llama metaconocimiento metareglas.

Inteligencia Artificial. -Formas de representación del conocimiento.

51

Sea el siguiente sistema de diagnóstico de averías de un automóvil, representado en reglas de producción:

R1: Si el motor no gira y la batería no está descargada, entonces pedir al usuario que compruebe el motor de arranque.

R2: Si no hay chispa, entonces pedir al usuario que compruebe los puntos esenciales del encendido.

R3: Si el motor gira y no arranca, entonces pedir al usuario que compruebe el encendido.

R4: Si el motor no gira, entonces pedir al usuario que compruebe la batería. R5: Si la batería está descargada, entonces pedir al usuario que cargue la batería y

pruebe nuevamente. ...... Rn: ...

Supongamos que el intérprete de reglas recorre éstas buscando una, cuyo antecedente sea satisfecho por la B.D., y entonces ejecuta el consecuente de tal regla. Si el consecuente pide alguna información al usuario, entonces se genera un mensaje adecuado para que el usuario haga las comprobaciones necesarias y la B.D. se nutre de los resultados de tales comprobaciones. Supongamos, además, que para la base de reglas anterior en la B.D. se encuentra el hecho “el motor no gira”. El intérprete recorre las reglas y reconoce que tal hecho concuerda con el antecedente de R4. Al ejecutar el consecuente pide información al usuario: ¿La batería está descargada (S/N)?. Si la respuesta es negativa, entonces se incorpora como nuevo hecho a la B.D. que la batería no está descargada. La B.D. actual es entonces:

“el motor no gira” “la batería no está descargada”

Supóngase que el intérprete sigue su recorrido a partir de R5,...,Rn,R1,... para encontrar la primera regla satisfecha por la B.D. (en este caso R1). El proceso continúa hasta que se ejecute una regla con una "salida" o bien la B.D. permanezca sin cambios a través de un ciclo (recorrido) completo. Una dificultad con esta F.R.C. es que si bien a medida que crece el número de reglas crece el conocimiento del sistema, también se hace más difícil la búsqueda. Una solución parcial a este problema es descomponer la B.D. inicial en varias subbases que puedan ser procesadas de manera independiente. Además de descomponer la B.D. es necesario descomponer, por supuesto, la condición de terminación en varias subcondiciones, una para cada subbase. Un caso especial de esta descomposición es expresarla como una conjunción de las subcondiciones componentes. Los sistemas de producción que pueden descomponer su B.D. y la condición de terminación reciben el nombre de Sistemas de Producción Descomponibles.

El procedimiento básico para un S.P. descomponible es el siguiente:

1) MEM_TRAB := Base de Datos inicial 2) DMEM_TRAB:= {MEM_TRABi} (* Conjunto de las subbases en que se

descompuso la B.D. inicial *) 3) Mientras que existan elementos de DMEM_TRAB que no satisfagan la

condición de terminación:

Inteligencia Artificial. -Formas de representación del conocimiento.

52

a) Seleccionar j tal que MEM_TRABj no satisface condición de termi-nación.

b) DMEM_TRAB:= DMEM_TRAB \ {MEM_TRABj} c) Seleccionar una regla R que pueda ser aplicada a MEM_TRABj. d) D:= Resultado de aplicar R a MEM_TRABj

e) DD:= {Di} (* Descomposición de D *) f) DMEM_TRAB:= DMEM_TRAB ∪ DD

Analicemos mediante un ejemplo cómo funciona este procedimiento. Supongamos que nuestro problema consiste calcular la integral simbólica de una determinada función matemática. La B.D. inicial está constituida, entonces, por la expresión que se desea integrar y la condición de terminación sería que en ella no aparezca el símbolo de integral. El conjunto de reglas estará formado por las reglas del Análisis Matemático para la integración, tales como, la regla de la suma, integración por partes, reglas de sustitución, etc, así como las reglas de integración de las funciones primitivas. ( ) integral

x x x dx

x x x dx

sen

( sen )

+

+

2

2

a resolver

MEMORIA_ TRAB:=

DMEM_ TRAB:= posición

MEM_ TRAB :

{ } descom

DMEM_ TRAB:= { }

x x dx x dx

x x dx

x dx

sen ,

sen

∫ ∫∫∫

=

2

2

j

Inteligencia Artificial. -Formas de representación del conocimiento.

53

Se selecciona la regla de integración por partes

D:= -

DD:= { -

-

MEM_ TRAB :

MEM_ TRAB :

.

+

, }

DMEM_ TRAB:= { , , } nueva descomposición

DMEM_ TRAB:= { - , }

D:=

DD:= { }

DMEM_ TRAB:= { , , }

DMEM_ TRAB:= { , }

D:=

DD:= {

x x x dx

x x x dx

x x x dx x dx

x dx

x x x dx

xx

x x x x dx

x dx

x x xx

x

cos cos

cos cos

cos cos

cos

cos

sensen

sen cos

sen cos

∫∫

∫ ∫∫

∫∫

=

=

2

2

2

2

3

3

j

j

3

33

3

}

DMEM_ TRAB:= {

, , }x x x xsen cos−

Todos los elementos de DMEM_TRAB cumplen la condición de terminación.

2.7.4. Criterios sobre el dominio de aplicación. Las reglas de producción son la F.R.C. más popular, y para la cual se han desarrollado más herramientas comerciales. Como F.R.C., las reglas de producción han sido utilizadas exitosamente en tareas como el diagnóstico médico y de fallas, la planificación, el diseño, la solución de problemas de pronóstico, configuración de computadoras, por sólo mencionar algunas. Sin embargo, las reglas de producción son inadecuadas para la definición de términos, la descripción de objetos, así como de relaciones estáticas entre ellos. Los S.P. tienen como propiedades fundamentales las siguientes:

- Modularidad: Cada regla de producción constituye una unidad de conoci-miento pequeña y relativamente independiente.

- Incrementalidad: Se pueden añadir nuevas reglas de producción sin alterar las existentes.

- Modificabilidad: Es fácil modificar las reglas existentes. - El crecimiento del conocimiento del sistema es directamente propor-cional a la

cantidad de reglas del mismo. - Transparencia: Constan de un mecanismo de explicación que permite, en cada

momento, justificar la solución encontrada. - Refinamiento: El conocimiento almacenado puede ser constantemente re-

finado.

Inteligencia Artificial. -Formas de representación del conocimiento.

54

2.8. Strips. Este formalismo fue desarrollado a finales de la década del 60 para el subsistema de planificación del robot SHAKEY.

2.8.1. Planteamiento de un problema. En este epígrafe trataremos un problema clásico: el mundo de bloques. Este problema puede plantearse de la siguiente manera: Hay una superficie plana sobre la cual pueden colocarse bloques. Existe cierto número de bloques cúbicos, todos del mismo tamaño. Pueden apilarse uno encima del otro. Hay un brazo de robot que puede manipular los bloques. El brazo del robot sólo puede sostener un bloque a la vez. Cada bloque puede tener como máximo un único bloque encima de él, no entendiendo por esto que no pueda tener 3 bloques: uno encima del segundo y el segundo encima del tercero. Supongamos que se tiene sobre una mesa, una distribución inicial de tres bloques, como se muestra en la figura 2.14. Se desea elaborar un sistema que determine la secuencia de acciones a realizar por el brazo del robot para transformar dicha distribución en la mostrada en la figura 2.15. A B A B C C Fig. 2.14. Distribución inicial Fig. 2.15. Distribución deseada

2.8.2. Definición. La planificación es la generación de una secuencia de acciones o programa de acción para un agente, como por ejemplo el brazo de un robot. Estas acciones cambian de un estado del universo sobre el que se desarrolla la planificación a otro. Al igual que en las reglas de producción, los STRIPS transforman la descripción de un estado en otra. Un strip está compuesto por:

- Condiciones (Precondición): son los enunciados que deben cumplirse en un estado dado para poder ejecutar una acción expresada mediante una regla determinada.

- Lista de literales a ser eliminados (Suprimir): contiene los enunciados que dejan de ser válidos al aplicarse dicha regla.

- Lista de literales a ser añadidos (Añadir): contiene los enunciados que se hacen válidos en el nuevo estado una vez aplicada dicha regla.

Cualquier enunciado que no esté incluido en las listas Suprimir o Añadir de un strip se supone que no queda afectado por él. Esto significa que, al especificar cada strip, no necesitamos considerar los aspectos del dominio que no se relacionan con él.

Inteligencia Artificial. -Formas de representación del conocimiento.

55

Naturalmente, debe usarse algún otro mecanismo distinto de la simple demostración de teoremas para calcular las descripciones completas de los estados después de haber realizado las acciones. La esencia de esta F.R.C. es: Si la acción A transforma el estado S1 en el estado S2, entonces una proposición P es verdadera en el estado S2, si y sólo si P está en la lista Añadir de A o P es verdadera en S1 y no está en la lista Suprimir de A.

Analicemos el ejemplo del mundo de bloques, planteado anteriormente. Para transformar la distribución inicial (figura 2.14) en la deseada (figura 2.15) se necesitan definir una serie de acciones:

COGER(x): Coger el bloque x que está encima de la mesa y sostenerlo. Para

ello, el bloque x debe estar encima de la mesa, el brazo del robot debe estar vacío y el bloque x no debe tener ningún bloque encima.

DEJAR(x): Dejar el bloque x encima de la mesa. Para ello, el brazo del robot debe estar sosteniendo al bloque x.

APILAR(x,y): Colocar el bloque x encima del bloque y. Para ello, el brazo del robot debe estar sosteniendo al bloque x y encima de y no debe existir ningún bloque.

DESAPILAR(x,y): Quitar el bloque x de encima del bloque y. Para ello, el bloque x debe estar encima del bloque y, el brazo del robot debe estar vacío y el bloque x no debe tener bloques encima.

Estas acciones se representan por medio de las siguientes reglas STRIPS:

COGER(x) Precondición: ENMESA(x) ∧ BRAZOVACIO ∧ DESPEJADO(x) Suprimir: ENMESA(x) ∧ BRAZOVACIO Añadir: SOSTENIDO(x)

DEJAR(x) Precondición: SOSTENIDO(x)

Suprimir: SOSTENIDO(x) Añadir: ENMESA(x) ∧ BRAZOVACIO

APILAR(x,y) Precondición: DESPEJADO(y) ∧ SOSTENIDO(x) Suprimir: DESPEJADO(y) ∧ SOSTENIDO(x) Añadir: ENCIMA(x,y) ∧ BRAZOVACIO

DESAPILAR(x,y) Precondición: ENCIMA(x,y) ∧ DESPEJADO(x) ∧ BRAZOVACIO Suprimir: ENCIMA(x,y) ∧ BRAZOVACIO Añadir: SOSTENIDO(x) ∧ DESPEJADO(y)

Las tres componentes de cada regla STRIP se definen usando algunos predicados básicos. Para este universo los predicados básicos más frecuentes son: DESPEJADO(x): el bloque x no tiene bloques encima. SOSTENIDO(x): el brazo del robot está sosteniendo al bloque x. ENCIMA(x,y): el bloque x está encima del bloque y.

Inteligencia Artificial. -Formas de representación del conocimiento.

56

ENMESA(x): el bloque está colocado directamente sobre la mesa. BRAZOVACIO: el brazo del robot está vacío.

B A C

Fig. 2.16. Estado que resulta de aplicar COGER(B) al estado de la Fig. 2.14.

El estado de la distribución inicial mostrada en la figura 2.14 puede describirse

como: ENMESA(A) ∧ ENMESA(B) ∧ ENMESA(C) ∧ BRAZOVACIO ∧ DESPEJADO(A) ∧ DESPEJADO(B) ∧ DESPEJADO (C)

Al aplicar la regla COGER(x) y sustituyendo a x por B se obtiene el estado que se muestra en la figura 2.16, el cual puede describirse como: ENMESA(A) ∧ ENMESA(C) ∧ DESPEJADO(A) ∧ DESPEJADO(B) ∧ DESPEJADO(C) ∧ SOSTENIDO(B)

2.8.3. Manipulación del conocimiento representado. Un sistema de planificación ha logrado encontrar una solución a un problema cuando ha hallado una secuencia de operadores que transforman el estado inicial en el estado meta. Esto se hace mediante un emparejamiento directo de las descripciones de los estados y la forma en que puede resolverse depende de la manera en que se representen las descripciones de los estados. Para esto se usan las F.R.C. estudiadas anteriormente o una combinación de ellas. Una F.R.C. muy usada es la lógica de predicados por los mecanismos deductivos que facilita. Para ver si el predicado P(x) se satisface en el estado inicial, preguntamos si podemos demostrar P(x) a partir de los asertos que describe el estado inicial y de los axiomas que definen el modelo del mundo. Por ejemplo: si el brazo del robot está sosteniendo algún bloque, entonces no está vacío. Si se construye esta prueba, el proceso de resolución termina. Si no, se propone una secuencia de operadores que puedan resolver el problema. Esto se hace de la misma manera, tratando de demostrar P(x) a partir los axiomas y de la descripción de los estados que se derivaron aplicando los operadores STRIPS. El lenguaje ideal para implementar la solución de este problema usando esta F.R.C. es, entonces, el PROLOG. El problema del mundo de bloques planteado pudiera, también, implementarse utilizando el lenguaje LISP. Para ver detalles de esta implementación, consulte [GCL84]. Un sistema de planificación debe poder notar cuándo está explorando un camino que nunca puede conducir a solución o que, al menos, parece improbable. Esto se hace podando cualquier camino que conduzca a un estado desde el cual no puede alcanzarse el estado meta. Por ejemplo, supongamos un suministro de pinturas

Inteligencia Artificial. -Formas de representación del conocimiento.

57

blanca, rosada y roja. Queremos pintar una habitación de forma que las paredes sean de color rojo claro y el techo blanco. Podríamos producir pintura rojo claro, mezclando el rojo con el blanco, pero entonces no se podría pintar el techo. Por tanto este enfoque debe abandonarse y mezclar la roja con la rosada. También se pueden podar caminos que, aunque no impiden una solución, no nos llevan más cerca de la solución que el lugar desde donde empezaron.

2.8.4. Criterios sobre el dominio de aplicación. Esta F.R.C. es muy usada en el diseño de sistemas de planificación. Los primeros sistemas de este tipo fueron escritos en lenguajes diseñados al efecto, como por ejemplo: PLANNER y CONNIVER en 1972 y POPLER en 1973. El primer planificador escrito en PROLOG fue WARPLAN en 1974 que incluía, entre los dominios de problemas que resolvía, el mundo de bloques. En muchos otros casos han sido utilizados lenguajes típicos de I.A. A pesar de esto, esta F.R.C. no es apropiada para resolver determinado tipo de problemas, pues presentan las siguientes limitaciones:

- No se pueden crear o destruir objetos del universo fácilmente. - Las acciones no se pueden aplicar a la vez sobre objetos diferentes, sólo a cada

objeto individualmente.

EJERCICIOS PROPUESTOS 1- Para cada uno de los siguientes conjuntos de frases, indicar el formalismo que facilite mejor la representación del conocimiento dado en ellas para responder a la cuestión propuesta. Explicar brevemente la elección. a) Los bombones son caramelos. Los diabéticos no deberían tomar azúcar. Guillermo es diabético. ¿Debería Guillermo comer bombones? b) Al ir al cine, usualmente se compra una entrada, se da la entrada al encargado y

luego se va a encontrar un asiento. Se compran palomitas antes de ir al asiento. Al finalizar la película se abandona el cine. Juan fue al cine. ¿Compró Juan una entrada? 2- Suponga que tiene un programa PROLOG en el cual ha representado la información de la figura 2.17. ¿Qué conocimiento adicional debería incluir para hacer que las propiedades puedan heredarse hacia los niveles más bajos de la jerarquía?. Por ejemplo, ¿cómo podría responder a la cuestión de si el rabo es parte del pastor?. 3- Represente en una red semántica el conocimiento expresado a través de los siguientes hechos:

Inteligencia Artificial. -Formas de representación del conocimiento.

58

a) Todos los animales son seres vivos. b) Todos los animales pueden moverse. c) Las amebas son animales. d) Todos los animales superiores son animales. e) Todos los animales superiores tienen cabeza y tienen patas. f) La cabeza de los animales superiores tiene cerebro. g) Los tigres son animales superiores. h) Los tigres tienen color rayado. i) Los elefantes son animales superiores. j) Todos los elefantes son de color gris. k) Federico es un elefante. l) Jumbo es un elefante. 4- Represente el siguiente conocimiento por medio de una red semántica: “Un petrobono es un tipo de emisión. Las emisiones pertenecen al mercado de dinero, así como a los valores de renta fija. Por otra parte, este tipo de emisión posee diversos valores como: valor nominal, valor de compra y valor de venta.” 5- Construir un marco que sea apropiado para almacenar datos acerca de estudiantes en un sistema de registros de estudiantes. Tratar de incorporar distintas facetas. 6- Construir un marco que almacene la información correspondiente al problema planteado en la sección 2.5.1. 7- Construir un guión para ir al cine. 8- Construir un guión para la secuencia de acontecimientos implicados en la matrícula y graduación de un curso de computación. Ser vivo esun

Inteligencia Artificial. -Formas de representación del conocimiento.

59

Animal esun esun Animal compañía Ganado esun esun Perro Gato esun esun Pastor Sato Perro espartede espartede Cabeza Rabo espartede espartede Orejas Ojos

Fig. 2.17. Información contenida en un programa PROLOG mediante hechos. 9- Dado el conocimiento expresado en la figura 2.18, represéntelo usando la F.R.C. más adecuada.

Persona

estudiante trabajador

empleado directivo

Inteligencia Artificial. -Formas de representación del conocimiento.

60

Fig. 2.18. Conocimiento jerárquico sobre la clasificación de una persona.

10- Dada la siguiente base de conocimientos expresada en reglas de producción, analizar la respuesta que daría a las siguientes preguntas, suponiendo que el intérprete de reglas siempre analiza partiendo de la primera regla que aparece. R1: Si X es un animal, entonces X es un ser viviente. R2: Si X es un animal, entonces X puede moverse. R3: Si X es un animal superior, entonces X es un animal. R4: Si X es un animal y X tiene cabeza y X tiene patas, entonces X es un animal superior. R5: Si X es un animal superior, entonces X tiene cabeza. R6: Si X tiene cabeza, entonces X tiene cerebro. R7: Si X es un elefante o X es un tigre, entonces X es un animal superior. R8: Si X es un tigre, entonces X tiene patrón rayado. R9: Si X es un elefante, entonces X es gris. Inicialmente la Base de Datos contiene los hechos: Jumbo es un elefante. Federico es un elefante. Preguntas: a) ¿Federico tiene cerebro? b) ¿Es el elefante de color verde?

Bibliografía 1. IA, E. Rich, pág. 213-234 2. Crash course in AI and ES, Louis E. Frenzel, pág.37-40 3. Modelos Computacionales Avanzados. Rafael Bello, pág. 80, 88-90 4. Bases de Datos y Sistemas Expertos, Tomo II, pág. 500-507

59

CAPITULO III: MÉTODOS DE SOLUCIÓN DE PROBLEMAS.

En el capítulo anterior estudiamos diferentes formas en que se puede representar el conocimiento en los sistemas de I.A. En este capítulo analizaremos los distintos métodos de solución de problemas (M.S.P.) que permitirán manipular el conocimiento representado en esas formas.

3.1. Introducción. Dado un sistema de I.A., donde el conocimiento está representado en una de las formas estudiadas, se desea resolver un determinado problema de un dominio D bajo un conjunto de ciertas condiciones C. Solucionar este problema significa encontrar una solución x ∈ X que satisfaga el conjunto de condiciones C, donde X es el conjunto de todas las soluciones posibles a dicho problema. Este proceso de solucionar un problema se realiza mediante una búsqueda en el espacio X. Existen tres esquemas básicos de solución de problemas:

- Esquema de producción. - Esquema de reducción. - Esquema de reducción débil.

Analicemos cada uno de estos esquemas. Esquema de Producción: En este esquema el problema a solucionar se representa en un espacio de estados y su solución se reduce a la búsqueda en este espacio. Los conceptos principales en este esquema son:

- Estados: situaciones en que se pueden encontrar los objetos que caracterizan al problema durante su solución.

- Movimientos: acciones legales que permiten pasar de un estado del problema a otro.

- Función de evaluación de estados: asigna a un estado un estimado heurístico del esfuerzo necesario para alcanzar una solución desde este estado.

- Función de selección de movimientos: selecciona uno o más de los movimien-tos aplicables.

- Función de selección de estados: selecciona el estado a partir del cual debe continuar la búsqueda.

Encontrar la solución de un problema significa, entonces, descubrir algún camino entre el estado inicial y el final. El procedimiento general de un esquema de producción es:

1) Inicializar: Determinar, a partir del problema, el estado inicial S0 y colocarlo como raíz del árbol de búsqueda. Aplicar la función de selección de movimientos a S0 y generar sus estados descendientes.

60

2) Prueba: Examinar si el árbol de búsqueda contiene alguna solución, o sea, si uno de los estados generados es el estado final, entonces TERMINAR y EXITO. En caso contrario aplicar la función de evaluación a cada uno de los estados generados.

3) Generar:

a) Si los recursos computacionales están agotados o no existen en el árbol estados sin procesar, entonces TERMINAR y FALLO, en caso contrario continuar.

b) Aplicar la función de selección de estados a los estados del árbol de búsqueda para seleccionar uno de ellos.

c) Aplicar la función de selección de movimientos al estado seleccionado.

d) Generar los nuevos estados aplicando los movimientos seleccionados.

e) Repetir desde el paso de prueba.

La construcción de la función de evaluación de estados para un problema concreto requiere del uso de conocimiento sobre ese problema. No siempre se dispone de dicho conocimiento, por lo que no siempre es posible definir esta función. La existencia o no de esta función trae por consecuencia que los métodos de búsqueda se dividan en dos tipos:

- Búsqueda a ciegas: no se dispone de conocimiento para definir la función de evaluación de estado.

- Búsqueda heurística: se puede definir la función de evaluación de estado. Dentro de estos dos tipos existen diferentes métodos de búsqueda, los cuales están determinados por la forma en que se construyen las funciones de selección de estados y de movimientos. Entre estos métodos podemos señalar:

Métodos de búsqueda a ciegas (Brute-Force searches): - Algoritmo del museo británico.

- Primero en profundidad (depth-first). - Primero a lo ancho (breadth-first). - Búsqueda en árboles y/o. - Búsqueda en sistemas de producción. - Búsqueda bidireccional. - Búsqueda por diferencias. - Búsqueda de soluciones múltiples.

Métodos de búsqueda heurística: - Búsqueda por el incremento mayor (hill-climbing). - Búsqueda por el mejor nodo o algoritmo A* (best-first). - Búsqueda heurística en árboles y/o o algoritmo AO*.

Otros métodos de búsqueda pueden estudiarse en [Ric88].

61

Esquema de reducción: En este esquema el problema se descompone en varios subproblemas, los cuales se resuelven de manera independiente y luego se combinan sus soluciones para obtener la solución del problema original. Existen dos tipos de movimientos: un conjunto de movimientos de reducción que se encarga de la descomposición de un estado en otros que se supone sean más fáciles de manejar que el original y el otro constituye un conjunto de movimientos terminales que resuelven el problema completamente. Los conceptos principales de este esquema, así como su procedimiento general son similares a los del esquema de producción, pero las funciones de evaluación de estado, selección de estados y selección de movimientos se basan en consideraciones diferentes. Es usual representar los problemas que se resuelven con este esquema mediante árboles y/o (and/or). Esquema de reducción débil: Este esquema está orientado a tareas de planificación.

3.2. Pasos para resolver un problema.

Para resolver un problema debemos seguir los siguientes pasos:

- Definir el problema con precisión: especificar el espacio del problema, los operadores para moverse en dicho espacio y los estados inicial y final o meta.

- Analizar el problema: determinar las características del problema para seleccionar las técnicas que pueden resolverlo.

- Aislar y representar el conocimiento necesario para resolver el problema. - Escoger la(s) mejor(es) técnica(s) y aplicarla(s) al problema particular.

3.2.1. Primer paso: definición precisa del problema. El primer paso hacia el diseño de un sistema para resolver un problema es la creación de una descripción formal y manejable de dicho problema, o sea, la definición del espacio de búsqueda de las soluciones.

3.2.1.1. Espacios de búsqueda. Un espacio de búsqueda no es más que el ambiente o espacio de todas las soluciones posibles donde se realiza la búsqueda de una solución. Está formado por un conjunto de nodos que constituyen soluciones parciales o posibles del problema y un conjunto de operadores que permiten movernos de un nodo a otro. El proceso de búsqueda de una solución consiste, entonces, en encontrar una secuencia de operadores que transformen el nodo inicial en el final. Existen tres tipos de espacios de búsqueda:

- Espacio de estado. - Espacio de reducción de problemas. - Árboles de juego.

62

Analicemos cada uno de estos tipos. Espacio de estado. Veamos un ejemplo: Consideremos el problema de “jugar al ajedrez”. Nuestro objetivo no sólo es jugar la partida, sino ganar la misma. Es necesario, en primer lugar, especificar cuál es la posición inicial del tablero de ajedrez (nodo inicial), las reglas que definen los movimientos legales en este juego y qué posiciones del tablero representan una victoria para un jugador u otro (nodos finales). Además debemos hacer explícita la meta de no solo jugar una partida de ajedrez, sino también ganar dicha partida si podemos. Una forma de describir la posición inicial del tablero puede ser mediante una matriz de 8x8, donde cada elemento es un símbolo que representa la pieza del ajedrez que está situada en la posición de apertura del ajedrez. Nuestra meta podría ser tratar de llegar a una posición del tablero, en la cual el oponente no pueda realizar ningún movimiento legal y su rey esté amenazado. Los movimientos legales proporcionan la manera de llegar desde el estado inicial hasta el estado meta. Pueden describirse como un conjunto de reglas donde la parte izquierda describa una posición del tablero que debe coincidir con la actual y la parte derecha describa la nueva posición del tablero una vez ejecutado dicho movimiento. Existen diversas maneras de describir estas reglas:

1) Tableroi Tableroj

donde Tableroi es una matriz de 8x8 que representa, por ejemplo, la posición inicial del tablero y Tableroj es otra matriz de 8x8 que representa, por ejemplo, el tablero del ajedrez con todas sus piezas en su posición inicial y el movimiento P4R realizado. Como puede verse, esta representación requiere una regla separada para cada una de las 10120 posiciones posibles del tablero, lo cual presenta tres dificultades: nadie puede proporcionar el conjunto de tales reglas, pues esto requeriría mucho tiempo, es difícil lograrlo sin cometer errores y ningún programa puede manejar fácilmente todas esas reglas aunque se usen tablas hash para encontrar de forma rápida las reglas relevantes para cada movimiento. El solo hecho de almacenar tantas reglas crea dificultades.

2) Peón blanco en casilla(columna 4, fila 2) y Casilla(columna 4, fila 3) está vacía y Casilla(columna 4, fila 4) está vacía

Esta representación minimiza los problemas mencionados en la forma anterior. Mientras más claro podamos escribir las reglas, menos trabajo tendremos para proporcionarlas y más eficiente será el programa que las use. Realmente lo que hemos hecho es definir el problema de jugar al ajedrez como un problema de movimientos a través de un espacio de estado, donde cada estado

Mover peón blanco desde casilla (columna 4,fila 2) a casilla(columna 4,fila 4)

63

corresponde a una posición válida del tablero. Podemos jugar al ajedrez empezando en un estado inicial, usando un conjunto de reglas para movernos de un estado a otro, intentando finalizar en uno de entre un conjunto de estados finales. En cada momento el proceso de resolución del problema puede encontrarse en un estado particular. El conjunto de todos los estados posibles para un problema concreto se denomina espacio de estado. Definir un problema significa, entonces, especificar:

- el espacio de estados que contiene todas las configuraciones posibles de los objetos relevantes y el conjunto de operadores que permiten movernos en dicho espacio. Naturalmente es posible definir este espacio sin enumerar, explícitamente, todos los estados que contiene, como veremos más adelante.

- el estado inicial. - uno o más estados finales que serán aceptados como solución al problema.

Veamos otro ejemplo. Supongamos que queremos encontrar en un mapa la ruta de una ciudad a otra. En este caso, el espacio de estados es la colección de todas las ciudades. El estado inicial sería la ciudad de partida y el estado final es la ciudad de llegada. Las restantes ciudades representan estados intermedios del problema. Los operadores para moverse de un estado a otro son precisamente los caminos existentes entre las ciudades. El proceso de encontrar la ruta consistiría, nuevamente, en la búsqueda de un camino entre el estado inicial y el final. Analicemos ahora un ejemplo diferente a los anteriores: el problema de los jarros de agua, el cual consiste en que se tienen dos jarros de agua de 3 y 4 litros respectivamente. Ninguno de los jarros tiene marca de medición y se puede usar una bomba para llenar de agua los mismos. ¿Cómo poner exactamente 2 litros de agua en el jarro de 4 litros?. El espacio de estados puede describirse como el conjunto de pares de enteros (x,y) tales que x=0,1,2,3,4 y y=0,1,2,3; x representa el número de litros de agua del jarro de 4 litros y y representa el número de litros de agua del de 3 litros. El estado inicial es (0,0), pues inicialmente los jarros están vacíos y el estado final es (2,n) para cualquier valor de n, pues el problema no especifica cuántos litros deben quedar en el jarro de 3 litros. Los operadores para moverse de un estado a otro pueden describirse de la siguiente manera:

1. (X,Y | X<4) → (4,Y) Llenar el jarro de 4 litros. 2. (X,Y | Y<3) → (X,3) Llenar el jarro de 3 litros. 3. (X,Y |X>0) → (X-D,Y) Verter D litros de agua del jarro de 4 litros. 4. (X,Y | Y>0) → (X,Y-D) Verter D litros de agua del jarro de 3 litros. 5. (X,Y | X>0) → (0,Y) Vaciar el jarro de 4 litros en el suelo. 6. (X,Y | Y>0) → (X,0) Vaciar el jarro de 3 litros en el suelo. 7. (X,Y | X+Y≥4 y Y>0) → (4,Y-(4-X)) Verter agua del jarro de 3 litros en el jarro

de 4 litros hasta que el jarro de 4 litros esté lleno.

8. (X,Y | X+Y≥3 y X>0) → (X-(3-Y),3) Verter agua del jarro de 4 litros en el jarro de 3 litros hasta que el jarro de 3 litros esté lleno.

64

9. (X,Y | X+Y≤4 ∧ Y>0) → (X+Y,0) Verter todo el contenido del jarro de 3 litros en el jarro de 4 litros.

10. (X,Y | X+Y≤3 ∧ X>0) → (0,X+Y) Verter todo el contenido del jarro de 4 litros en el jarro de 3 litros.

En la práctica, las reglas 3 y 4 deben omitirse, pues aunque representan acciones que están permitidas en el dominio del problema, no tiene sentido aplicarlas, ya que no nos acercan a la solución del mismo porque D no se puede medir. Por supuesto, para resolver este problema de los jarros de agua, es necesario implementar un mecanismo que seleccione la regla cuya parte izquierda concuerde con el estado actual, genere los nuevos estados y así sucesivamente, hasta alcanzar el estado final. Estos métodos los estudiaremos en las próximas secciones. En [Bra86] pueden verse las representaciones gráficas de los espacios de estado para los problemas del mundo de bloques y del rompecabezas de 8 piezas. Un espacio de estado es, justamente, otro formalismo para representar el conocimiento. Se representa, usualmente, mediante un árbol donde cada nodo corresponde a un estado particular del problema y cada arco corresponde a un operador de transición de estados. La solución del problema puede ser definida, entonces, como una búsqueda de un camino entre el nodo correspondiente al estado inicial y el nodo correspondiente al estado final o meta. La forma en que se represente cada estado varía considerablemente de problema en problema. Por ejemplo, en el ajedrez puede ser una matriz de 8x8 donde cada elemento tiene el caracter que representa la pieza situada en esa posición; en el problema del camino entre las ciudades podría ser una cadena con el nombre de la ciudad y en el problema de los jarros de agua podemos usar dos enteros. Si el problema que queremos resolver es más complicado, podemos usar una de las F.R.C. estudiadas en el capítulo anterior para representar cada estado individual. Conclusión: Para proporcionar una descripción formal de un problema es necesario:

- Definir un espacio de estado que contenga todas las configuraciones posibles de los objetos relevantes. Naturalmente es posible definir este espacio sin enumerar explícitamente todos los espacios que contiene.

- Especificar uno o más estados de ese espacio que constituyan los estados iniciales.

- Especificar uno o más estados que serían aceptados como soluciones al problema (estados metas).

- Especificar un conjunto de reglas que describen las acciones disponibles (operadores).

El problema entonces puede resolverse usando las reglas de combinación con una estrategia de control adecuada (proceso de búsqueda), para movernos a través del espacio del problema hasta encontrar un camino desde el estado inicial hasta el estado meta.

65

Espacio de reducción de problema. A diferencia del espacio de estado, en este espacio el nodo inicial o nodo raíz del árbol representa el problema original que se desea resolver, los nodos finales o metas constituyen problemas que pueden resolverse mediante una primitiva simple y los restantes nodos representan subproblemas en que puede descomponerse un determinado problema. Los arcos serían, entonces, operadores que permiten descomponer un problema en un conjunto de subproblemas. Existen dos tipos de nodos. Si sólo basta con resolver uno de los subproblemas en que se descompuso un nodo dado para resolver éste, el nodo se denomina nodo O (or). Si por el contrario, deben ser resueltos todos los subproblemas en que se descompuso el nodo, éste se denomina nodo Y (and). Este tipo de espacio de búsqueda se representa, usualmente, mediante un árbol y/o, el cual no es más que un árbol que contiene nodos del tipo Y y nodos del tipo O. Una solución de un problema sería, entonces, un subárbol que comienza en el nodo raíz y que contiene siempre una de las ramas de los nodos O y todas las ramas de los nodos Y hasta llegar a uno o varios nodos terminales. En este tipo de espacio es conveniente representar aquellos problemas que pueden ser descompuestos fácilmente en subproblemas, como por ejemplo, la generación de estructuras químicas, la integración simbólica y el razonamiento lógico. En la figura 3.1 se muestra un ejemplo sencillo de un problema representado mediante un árbol y/o. El problema de adquirir un televisor puede descomponerse en dos subproblemas: robarlo o tratar de adquirirlo mediante una vía legal. Esta última puede descomponerse a su vez en dos subproblemas, los cuales deben ser resueltos para poder resolver el problema original.

Fig. 3.1. Árbol y/o para el problema de adquirir un televisor.

Analicemos otro ejemplo. Supongamos que tenemos el mapa representado en la figura 3.2, donde se muestra un conjunto de ciudades y los caminos existentes entre ellas. Se desea encontrar un camino desde la ciudad 1 a la 11. Existen dos vías para lograr este camino: una pasando por la ciudad 6 y la otra pasando por la ciudad 7. Pero el subproblema de encontrar un camino por la primera vía

Adquirir un TV

Robar un TV Ganar dinero Comprar un TV

66

significa encontrar un camino entre las ciudades 1 y 6 y un camino entre las ciudades 6 y 11. Lo mismo ocurre para el subproblema de encontrar el camino por la segunda vía. Una porción del árbol y/o correspondiente a esta descomposición del problema original puede verse en la figura 3.3.

1 2 3

4 5 6 7 8 9

10 11

Fig. 3.2. Un mapa compuesto de 11 ciudades.

Por otro lado, ¿cómo podríamos representar el problema de la integración simbólica en un árbol y/o? Esto se realizaría, fácilmente, situando como nodo inicial la integral que se desea resolver. Los operadores de reducción del problema serían, por ejemplo, la regla de la integral de la suma y la integración por partes, las cuales generarían los nodos intermedios del árbol y las reglas que permiten calcular la integral de funciones primitivas, las cuales generarían los nodos terminales. Estos nodos, a su vez, serían funciones que no contienen el símbolo integral.

67

Camino 1-11 Camino 1-11 vía 6 Camino 1-11 vía 7 Camino 1-6 Camino 6-11 Camino 1-7 Camino 7-11

Camino 6-11 vía 8 Camino 6-11 vía 9

Camino 6-8 Camino 8-11 Camino 6-9 Camino 9-11 Nodos Terminales Fig. 3.3. Porción del árbol AND/OR correspondiente al problema de la fig. 3.2.

Árboles de juego. Un caso especial de los árboles y/o son los árboles de juego, donde participan dos jugadores. En un árbol de juego el nodo raíz representa la posición inicial del juego y los nodos terminales representan posiciones del juego donde un jugador gana, pierde o hace tablas. Los operadores son, precisamente, los movimientos legales que pueden realizarse en dicho juego. Este tipo de árbol se caracteriza por tener en el primer nivel a los nodos que se derivaron de movimientos del primer jugador y en el segundo nivel, a los que se derivaron de movimientos del segundo jugador y así sucesivamente se van alternando por niveles. ¿Por qué un árbol de juego es un árbol y/o? Desde el punto de vista de un determinado jugador, los nodos que permiten generar sus movimientos son nodos O, pues basta seleccionar sólo uno que conduzca a la victoria. Sin embargo, los nodos que permiten generar los movimientos de su oponente son nodos Y, ya que él debe analizarlos a todos para poder neutralizar a su oponente. En la figura 3.4 se muestra una porción del árbol de juego del titafor. Este espacio de búsqueda tiene 362 880 nodos. Estas magnitudes demuestran la necesidad de utilizar métodos de búsqueda eficientes.

AND AND

AND AND

OR

OR

68

3.2.1.2. Representación del espacio de búsqueda. Hemos representado a los tres tipos de espacios de búsqueda estudiados en la sección anterior, en forma de árbol. Sin embargo, con frecuencia, el proceso de generación de los nodos sucesores produce un mismo nodo más de una vez, lo que implica que en la búsqueda del camino a la solución, éste se procese varias veces. En este caso, es mejor representar el espacio de búsqueda mediante un grafo orientado.

Estado inicial

Movs. Jugador A

Movs. Jugador B

Fig. 3.4. Porción del árbol de juego del titafor. Una forma simple de realizar una estrategia de búsqueda es atravesando un árbol. Se expande cada nodo del árbol mediante las reglas de producción para generar un conjunto de nodos sucesores, cada uno de los cuales puede expandirse a su vez, continuando hasta que se encuentra un nodo que representa la solución. Sin embargo, con frecuencia, este proceso genera el mismo nodo formando parte de diversos caminos y por tanto, es procesado más de una vez. En este caso es mejor explorar un grafo orientado. En el problema de los jarros de agua es fácil ver cómo un mismo nodo es generado más de una vez (figura 3.5). El grafo correspondiente a este espacio de búsqueda puede verse en la figura 3.6. Note cómo usando un grafo no se necesita repetir los nodos.

x

x

x

x

x

x

o x

o x

o x

o x

x o

x

x o

x

x

o

x

x o

69

Fig. 3.5. Porción del espacio de búsqueda del problema de los jarros de agua representado en forma de árbol. Fig. 3.6. Porción del espacio de búsqueda del problema de los jarros de agua representado en forma de grafo.

En la creación del grafo, antes de incorporar un nodo N, deben realizarse los siguientes pasos:

1) Examinar el conjunto de nodos que se ha creado hasta ahora para ver si ya existe el nuevo nodo.

2) Si no existe añadirlo al grafo como si fuera un árbol. 3) Si ya existe, entonces realizar las siguientes acciones:

a) Hacer que el nodo que se está expandiendo apunte al nodo ya existente, que corresponda a su sucesor en vez de uno nuevo. El nuevo puede simplemente descartarse.

b) Si se está registrando el mejor camino a cada nodo, comprobar si el nuevo camino es mejor o peor que el antiguo. Si es peor no hacer nada. Si es mejor grabar el nuevo camino como el correcto para llegar al nodo y propagar el cambio correspondiente por los nodos sucesivos que sean necesarios.

El buscar en un grafo reduce el esfuerzo que se invierte en explorar un camino varias veces, pero requiere un esfuerzo adicional para comprobar si el nodo ya se ha generado. El hecho de si este esfuerzo es justificado depende del problema concreto. Un problema que se puede presentar y que hay que tener en cuenta es la presencia de ciclos en el grafo.

( 0 , 0 )

( 4 , 0 ) ( 0 , 3 )

( 4 , 3 ) ( 0, 0 ) ( 1 , 3 ) ( 4 , 3 ) ( 0 , 0 ) ( 3 , 0 )

( 0 , 0 )

( 4 , 0 ) ( 0 , 3 )

( 1 , 3 ) ( 4 , 3 ) ( 3 , 0 )

70

Hemos descrito la búsqueda como el proceso de recorrer un árbol o un grafo, donde cada nodo representa un punto en el espacio del problema. Pero, ¿cómo representaremos cada nodo individual? Por ejemplo, en el ajedrez puede ser una matriz en la que cada elemento tenga el carácter que representa la pieza en esa posición y en el problema de los jarros de agua podemos usar dos enteros. Si el problema es más complicado usaremos una FRC estudiada en el tema anterior.

3.2.2. Segundo paso: análisis del problema. Para escoger la técnica de I.A. más apropiada para resolver un problema es necesario analizar el mismo teniendo en cuenta los siguientes aspectos:

- ¿Se puede descomponer el problema en un conjunto de subproblemas independientes más pequeños o más fáciles?

- ¿Es posible en la solución del problema ignorar o deshacer pasos mal hechos?

- ¿Es predecible el universo del problema? - ¿Se desea una solución cualquiera o la mejor solución al problema? - ¿Es consistente el conocimiento disponible para resolver el problema? - ¿Cuál es el papel del conocimiento? - ¿Se requiere la interacción con una persona?

En las próximas secciones explicaremos cada uno de estos aspectos. 3.2.2.1. ¿Se puede descomponer el problema?. Los problemas que se pueden descomponer en un conjunto de subproblemas se pueden solucionar usando la técnica de divide y vencerás (divide and conquer). Sin embargo, estas técnicas generalmente no pueden usarse en aquellos problemas no descomponibles, aunque a veces es posible usarlas para generar una solución aproximada y, entonces, arreglarla para reparar los errores causa-dos por las interacciones existentes entre los subproblemas.

Un ejemplo de problema es la integración simbólica. Un ejemplo de problema no descomponible es el mundo de bloques.

3.2.2.2. ¿Es posible ignorar o deshacer pasos para la solución?. En relación con este aspecto existen tres clases de problemas:

1. Ignorables: En ellos los pasos dados incorrectamente para la solución del

problema pueden ignorarse. Un ejemplo es la demostración de un teorema matemático. Supongamos que comenzamos demostrando un lema que pensamos es útil, pero después nos damos cuenta que no era de ninguna ayuda. Cualquier regla que pudo haberse aplicado, todavía puede aplicarse. Podemos simplemente ignorar lo hecho y lo único que se ha perdido es el esfuerzo.

2. Recuperables: En ellos los pasos dados incorrectamente para la solución del problema pueden deshacerse. Un ejemplo es el rompecabezas de 8 piezas, el

71

cual consiste en que se tiene una bandeja en la que se colocan ocho baldosas cuadradas. El noveno cuadrante sobrante queda sin cubrir. Cada baldosa tiene un número sobre ella. Una baldosa que esté adyacente al espacio en blanco puede deslizarse a dicho espacio. El juego consiste en, dadas una posición inicial y una posición final (usualmente las baldosas en orden consecutivo con el espacio en blanco en el centro), transformar la posición inicial en la final, desplazando las baldosas. Al intentar resolver este problema, podemos realizar un movimiento tonto. Los errores cometidos pueden enmendarse, retrocediendo para deshacer cada paso incorrecto. Lógicamente hace falta memorizar el orden de los pasos realizados para poder corregirlos. Note que esto no fue necesario en el caso anterior.

3. Irrecuperables: En ellos los pasos dados incorrectamente para la solución del problema no pueden deshacerse. Un ejemplo es el juego del ajedrez. Si se realiza un movimiento estúpido, no se puede ignorar ni retroceder al principio de la partida. Lo único que puede hacerse es tratar de realizar la mejor jugada a partir de la situación actual. Necesitan aplicar mucho esfuerzo en la toma de decisiones. Usualmente se analiza por adelantado una secuencia de pasos antes de dar el primero.

3.2.2.3. ¿Es predecible el universo del problema?. En los problemas donde es posible predecir qué ocurrirá (problemas de resultados ciertos), pueden usarse las técnicas de planificación, las cuales permiten generar una secuencia de operadores que conducen con certeza a una solución. Sin embargo, existen problemas donde esto no es posible. En ellos las técnicas de planificación generan como máximo una secuencia de operadores que conducen a una solución con una buena probabilidad. Ejemplo de problema de resultados ciertos: en el del rompecabezas de 8 piezas, cada vez que se hace un movimiento sabemos exactamente qué pasará, por lo que se puede planificar una secuencia completa de movimientos y saber de antemano el resultado. Ejemplo de problema de resultados inciertos: en el juego Bridge (la brisca), para decidir qué carta jugar no podemos planificar la partida completa, pues no sabemos qué cartas tienen los restantes jugadores ni qué jugadas ellos harán. Lo mejor que se puede hacer es investigar distintos planes y evaluar las probabilidades de llegar a una buena puntuación, seleccionando la mayor. Uno de los tipos de problemas más difíciles son los irrecuperables de resultados inciertos. Ej: el Bridge.

72

3.2.2.4. ¿Se desea una solución cualquiera o la mejor solución al problema?. Los problemas en los que se desea encontrar el mejor camino a la solución son más difíciles de resolver que aquellos donde basta encontrar una solución cualquiera, pues mientras los primeros requieren búsqueda exhaustiva, los segundos pueden resolverse eficientemente usando técnicas heurísticas. Un ejemplo de problema donde basta encontrar una solución se expone a continuación. Supongamos que se tiene el siguiente conjunto de hechos:

1. Marcos era un hombre. 2. Marcos era pompeyano. 3. Marcos nació en el año 40 d.C. 4. Todos los hombres son mortales. 5. Todos los pompeyanos murieron en la erupción del volcán en el año 79

d.C. 6. Ningún mortal tiene más de 150 años. 7. Hoy estamos en el año 1995 d.C.

y se desea responder a la pregunta ¿está vivo Marcos?. Representándolos en lógica de predicados y realizando inferencias se llega fácilmente a una respuesta. Note que en este caso existen dos caminos para llegar a la respuesta de que Marcos no está vivo. Uno de ellos se obtiene utilizando los hechos 1,3,4,6 y 7 y el otro, utilizando 2,5 y 7. No importa cuál de ellos se tome, lo que importa es la respuesta a la pregunta. Un ejemplo donde se desea encontrar la mejor solución es el problema del vendedor ambulante, también conocido como el agente viajero, el cual consiste en que un vendedor tiene una lista de ciudades, cada una de las cuales debe ser visitada solamente una vez. Existen carreteras directas entre cada par de ciudades de la lista. Se debe encontrar el camino más corto que debería seguir el vendedor para visitar todas las ciudades, comenzando por una cualquiera y retornando a ella misma. En este caso, es necesario analizar todos los caminos posibles para tomar el mejor de ellos. 3.2.2.5. ¿Es consistente el conocimiento disponible para resolver el problema?. Hay problemas donde el conocimiento que se usa es completamente consistente. Un ejemplo de ellos es: dado los siguientes axiomas de un grupo multiplicativo,

1. X⋅Y está definido ∀X,Y elementos del grupo. 2. (X=Y ∧ Y=Z) ⇒ X=Z 3. X=X 4. (X⋅Y)⋅Z = X⋅(Y⋅Z) 5. I⋅X=X ∀X, donde I es el elemento identidad del grupo. 6. X-1⋅X = I, donde X-1 es el inverso de X. 7. X=Y ⇒ Z⋅X=Z⋅Y 8. X=Y ⇒ X⋅Z=Y⋅Z

73

se desea demostrar que ∀X X⋅I=X. Sin embargo, existen problemas que tienen inconsistencias. Un ejemplo es el problema de la diana, el cual consiste en que un hombre está de pie a 50m de una diana y quiere dar en el blanco con una pistola que dispara a una velocidad de 500 m/s. ¿A qué distancia debe apuntar por encima del blanco?. Razonemos: la bala tarda 0.1s en alcanzar el blanco, suponiendo que viaja en línea recta. La bala cae a una distancia d:

d = 1/2gt2 = 1/2(9.8)(0.1)2 = 0.049 m = 4.9 cm. Si el hombre apunta 4.9 cm por encima del blanco daría en la diana. Pero se ha supuesto que la bala viaja en línea recta, lo que entra en conflicto conque viaja en una parábola.

3.2.2.6. ¿Cuál es el papel del conocimiento?. Existen problemas donde se necesita conocimiento sólo para restringir la búsqueda. Por ejemplo, en el problema del ajedrez, suponiendo potencia de computación ilimitada, se necesita de poca cantidad de conocimiento: sólo reglas para describir los movimientos legales del juego y un proceso de búsqueda adecuado. Usar conocimiento adicional sobre táctica y buena estrategia, ayudaría a restringir la búsqueda de la solución y acelerar la ejecución del programa. Sin embargo, hay problemas que necesitan gran cantidad de conocimiento tan sólo para reconocer una solución. Ejemplo: explorar los periódicos de Estados Unidos para decidir quién está apoyando a los demócratas o a los republicanos en una elección próxima. El programa tendría que saber cosas como los nombres de los candidatos de cada partido, el hecho de que si quiere bajar los impuestos apoya a los republicanos, el hecho de que si quiere educación para las minorías apoya a los demócratas, etc. Mucho conocimiento, a veces, se usa para acotar la búsqueda, pero otras para reconocer una solución.

3.2.2.7. ¿Requiere la interacción con una persona?. Teniendo en cuenta este aspecto podemos distinguir dos tipos de problemas:

- Solitario, en el cual se le da a la computadora una descripción del problema y ella produce una respuesta sin comunicación intermedia y sin petición de una explicación de su razonamiento. Ejemplo: para demostrar un teorema matemático usando resolución, lo único que se desea es saber si existe una.

- Conversacional, para proporcionar asistencia adicional a la computadora y/o proporcionar información adicional al usuario. Ejemplo: en problemas como el diagnóstico médico, el programa debe ser capaz de explicar su razonamiento, pues si no, no será aceptado por los médicos.

3.2.2.8. ¿La solución es un estado o una ruta?. Ejemplo de un estado: El presidente del banco comió un plato de ensalada de pasta.

74

Si se aíslan las componentes existen varias interpretaciones de: banco, comió un plato, ensalada de pasta (contiene pasta pero “comida de perros” no contiene perros). Se realiza una búsqueda de todas la interpretaciones hasta encontrar la de esta oración. Solo interesa esta interpretación. Ejemplo de ruta: Las jarras de agua. No me interesa el estado final sino la consecuencia de operaciones.

3.2.3. Tercer paso: Aislar y representar el conocimiento necesario para resolver el problema. Ya en las secciones anteriores se estudió este tema. 3.2.4. Cuarto paso: Aplicar la mejor técnica de I.A. para el problema particular. Para poder escoger la mejor técnica de I.A. a aplicar en el proceso de resolución de un problema particular es necesario estudiar, primeramente, las distintas técnicas de búsqueda que existen. A esto, precisamente, nos dedicaremos en las siguientes secciones de este capítulo. 3.3. Métodos de búsqueda a ciegas. La búsqueda a ciegas es una colección de procedimientos usados para buscar en un espacio de estados de manera exhaustiva pero ciega. Estos procedimientos se consideran métodos débiles, pues imponen restricciones mínimas a la búsqueda, en general son técnicas de solución de problemas de propósito general y pueden describirse independientemente de cualquiera sea el dominio del problema. Estos métodos usan solamente la información estructural y no hacen ninguna distinción cualitativa entre los nodos, respecto a su posibilidad de encontrarse sobre el camino deseado. En consecuencia, para los problemas con un extenso espacio de estados, la cantidad de alternativas que deben explorarse es tan grande que hace que su uso sea computacionalmente imposible. El número de nodos a explorar crece, en general, exponencialmente con la longitud del camino que representa la solución del problema. Esto genera una explosión combinatoria que estos métodos son incapaces de superar. No obstante, continúan formando el núcleo de la mayoría de los sistemas de I.A. Las cuatro técnicas de búsqueda a ciegas más usadas son: primero a lo ancho, primero en profundidad, encadenamiemto adelante (forward chaining) y encadenamiento hacia atrás (backward chaining). Ellas pueden ser combinadas, por ejemplo, el encadenamiento hacia adelante puede ser primero en profundidad o primero a lo ancho. 3.3.1. Algoritmo del museo británico. Este procedimiento demuestra cuán ineficiente puede resultar un algoritmo de búsqueda. Consiste en colocar a un mono delante de una máquina de escribir y que presionando aleatoriamente las teclas genere todos los trabajos de

75

Shakespeare existentes en el museo. Para generar una frase de 18 caracteres tendría una probabilidad de 1 en 2718. De esta forma, el procedimiento consiste en generar todas las soluciones posibles y comprobar cuál es la correcta. Con un tiempo suficiente logra encontrar la solución optimal, sólo que es intratable computacionalmente.

3.3.2. Búsqueda primero a lo ancho. Una búsqueda primero a lo ancho (breadth-first) genera y explora primero todos los sucesores del nodo raíz. Si no se encuentra la meta, pasa a los sucesores del segundo nivel y así sucesivamente por niveles. Suponiendo que el objetivo a alcanzar es el nodo 7, el recorrido primero a lo ancho del espacio de búsqueda que se muestra en la figura 3.7, es 1-2-3-4-5-6-7. Este método simboliza a un explorador bastante conservador.

1 2 3 4 5 6 7 8 9 10 11 12

Fig. 3.7. Un ejemplo de espacio de búsqueda. Si el número máximo de hijos (o ramas) de un nodo es b y la profundidad de la solución es d, entonces el número de nodos en el nivel d es bd y la cantidad de tiempo usada en la búsqueda es en el caso peor:

1 + b + b2 + ... + bd, Para grandes valores de d, puede ser aproximada por bd. Es por esto que la complejidad temporal de este método de búsqueda es O(bd), lo cual es una función exponencial de d. Este método tiene como ventaja que siempre encuentra el camino más corto a la solución, si ésta existe, aún en el caso de que el espacio de búsqueda sea infinito, por eso la búsqueda primero a lo ancho siempre encuentra una solución óptima para esa medida. El método es efectivo cuando el factor de ramificación, o sea, el número promedio de hijos de un nodo, es pequeño, pues entonces la cantidad de nodos por niveles será pequeña y es mejor explorar un nivel antes de pasar al siguiente. Sin embargo, tiene las siguientes desventajas:

- Necesita mucha memoria. Como cada nivel del árbol tiene que ser almacenado completamente para poder generar el próximo nivel y la

76

cantidad de memoria es proporcional al número de nodos almacenados, su complejidad espacial es también O(bd).

- Requiere mucho trabajo, especialmente si el camino más corto a la solución es muy largo, puesto que el número de nodos que necesita examinar se incrementa exponencialmente con la longitud del camino.

- Los operadores irrelevantes o redundantes incrementarán grandemente el número de nodos que deben explorarse.

Además, este método puede llevar a una búsqueda exhaustiva. Ella es particularmente inapropiada en situaciones donde hay muchos caminos que conducen a soluciones, pero cada uno de ellos es muy largo. En tales situaciones es muy probable que sea más rápida la búsqueda primero en profundidad. Una forma de implementación de este método es usar un conjunto de caminos candidatos:

- Si el primer camino está encabezado por un nodo objetivo, ésta es la solución del problema.

- Si no, a) Remover el primer camino del conjunto de caminos candidatos, generar el

conjunto de todas las posibles extensiones un nivel más de este camino y añadir las mismas al final del conjunto.

b) Repetir el proceso.

Tomando el ejemplo mostrado en la figura 3.7 este proceso se desarrollaría como sigue:

a) Conjunto de caminos candidatos (CCC) inicial [[1]] b) Generando las extensiones de [1] [[2,1] , [3,1]] c) Al remover el primer camino candidato y generar sus extensiones:

[[4,2,1] , [5,2,1]] se obtiene el nuevo CCC: [[3,1] , [4,2,1] , [5,2,1]] d) Removiendo y generando nuevamente las extensiones [[6,3,1] , [7,3,1]] se

obtiene el CCC: [[4,2,1] , [5,2,1] , [6,3,1] , [7,3,1]]

e) Así sucesivamente son obtenidos los siguientes conjuntos hasta llegar a: [[7,3,1] , [8,4,2,1] , [9,4,2,1] , [10,5,2,1], [11,6,3,1]]

En este caso el camino inicial tiene como cabeza el nodo objetivo y el proceso termina en esta solución.

Como en los caminos del CCC hay mucha información repetida se puede emplear un árbol. El árbol equivalente al CCC del paso (d) es: t(1, [t(2, [h(4), h(5)] ), t(3, [h(6), h(7)] )] )

El procedimiento anterior puede escribirse en el lenguaje PROLOG como sigue:

busq_ancho([[Nodo|Resto]|_],[Nodo|Resto]):- meta(Nodo). busq_ancho([[Nodo|Resto]|Otros],Solucion):- bagof([M,Nodo|Resto],(sucesor(Nodo,M), not miembro(M,[Nodo|Resto])), NuevoCamino),

77

append(Otros,NuevoCamino,Camino1), !, busq_ancho(Camino1,Solucion).

En caso de que Nodo no tenga sucesor, entonces busq_ancho([[Nodo|Resto]|Otros],Solucion):- busq_ancho(Otros,Solucion).

Aquí meta/1 es un hecho que indica el nodo objetivo, miembro/2 es un predicado que determina si un elemento es miembro de una lista, sucesor/2 indica el sucesor de un nodo dado y append/3 concatena dos listas. En [IPN88] puede verse otra implementación de este algoritmo en PROLOG y una en LISP.

3.3.3. Búsqueda primero en profundidad. La búsqueda primero en profundidad (depth-first) explora, primeramente, el nodo raíz y luego genera el sucesor de éste ubicado en la rama más a la izquierda. Si este nodo es el objetivo, entonces hemos encontrado el camino. Si no, se continúa extendiendo este camino tomando siempre el primer sucesor. Si el nodo no tiene más sucesores, se pasa al siguiente sucesor de su predecesor, o sea, se retrocede al nivel anterior para tomar el otro sucesor y así sucesivamente, hasta alcanzar el objetivo o hasta que se realice un corte a alguna profundidad determinada. El recorrido primero en profundidad del espacio de búsqueda mostrado en la figura 3.7 como el objetivo se alcanza en el nodo 7 es: 1-2-4-8-9-5-10-3-6-11-7. Este método simboliza a un explorador que toma riesgos. La ventaja de este método está en la eficiencia que se alcanza en el uso de la memoria. Si la longitud máxima de una rama del árbol es d nodos, como sólo se necesita almacenar el camino actual, entonces la complejidad espacial del algoritmo es O(d). En la práctica la búsqueda por este método se limita por el tiempo y no por el espacio. La desventaja del método es que si existen ramas infinitas, puede no encontrar la solución al problema, aún teniéndola. Es por esto que, en ocasiones, se requiere que se defina un corte a una profundidad arbitraria para evitar, lo más posible, caer en caminos o lazos infinitos. Si la profundidad de corte seleccionada c es menor que la profundidad de la solución d, el algoritmo terminará sin encontrar una solución, mientras que si c > d, se paga un precio alto, O(bc), en términos del tiempo de ejecución, donde b es el número máximo de hijos (o ramas). Si no existe el peligro de que el espacio de búsqueda tenga caminos infinitos pero sí pueden aparecer lazos (el espacio de búsqueda no es un árbol sino un grafo) una alternativa al corte es incluir un detector de ciclos (chequeo de nodos repetidos). El procedimiento anterior puede escribirse en el lenguaje PROLOG como sigue:

busq_prof(Nodo,[Nodo]):- meta(Nodo). busq_prof(Nodo,[Nodo|Solucion]):- sucesor(Nodo,Nodo1), busq_prof(Nodo1,Solucion).

78

Aquí meta/1, nuevamente, es un hecho que indica el nodo objetivo y sucesor/2 indica el sucesor de un nodo dado. En [Bra86] e [IPN88] pueden verse otras implementaciones de este algoritmo en PROLOG, usando corte de profundidad y chequeo de existencia de ciclos. En [IPN88] puede verse además una realizada en LISP. La búsqueda primero en profundidad es mejor cuando el nodo objetivo está situado en la porción inferior izquierda del árbol de búsqueda, mientras que la búsqueda primero a lo ancho es mejor cuando el nodo objetivo está situado en la porción superior derecha de dicho árbol, según se muestra en la figura 3.8. Algunos autores recomiendan seleccionar entre la búsqueda primero en profundidad (BPP) y la primero a lo ancho, la primera de ellas, a no ser que exista alguna información que aconseje lo contrario. Una variante del método de búsqueda primero en profundidad es la búsqueda iterativa primero en profundidad (BIPP). Esta consiste en realizar una búsqueda primero en profundidad con corte 1, luego otra para el corte 2 y así sucesivamente, incrementando en uno la profundidad de corte, hasta encontrar la solución. Como este método nunca genera un nodo hasta que todos los nodos de los niveles anteriores han sido generados y examinados, se garantiza encontrar la solución óptima. Además, como en cada momento se está ejecutando una búsqueda primero en profundidad, la complejidad espacial es O(d). Aunque parezca lo contrario, se puede demostrar que la complejidad temporal es O(bd), al igual que en la búsqueda primero a lo ancho. La razón de esto es que como el número de nodos, en un nivel dado del árbol, crece exponencialmente con la longitud del camino o profundidad, casi todo el tiempo se gasta en el nivel más profundo. El recorrido de este método para la figura 3.7 es 1-2-3-1-2-4-5-3-6-7.

En la figura 3.8 se compara el orden de generación de los nodos del árbol por los tres métodos analizados. * * * 1* *2 1* *4 1,3* *2,6 3* 4* *5 *6 2* 3* *5 *6 4* 5* *7 *8 Búsqueda primero Búsqueda primero Búsqueda iterativa a lo ancho en profundidad primero en profundidad Figura 3.8. Generación de nodos por tres métodos de búsqueda.

79

3.3.4. Búsqueda en árboles AND/OR. Los algoritmos para búsqueda primero a lo ancho y primero en profundidad en árboles AND/OR son similares a los anteriormente estudiados, sólo se diferencian en la verificación de las condiciones de terminación. Cada vez que se genera un nodo o un grupo de nodos, el algoritmo tiene que chequear si se satisfacen las condiciones de terminación de acuerdo al tipo de nodo, ya sea Y u O. La siguiente figura muestra una comparación de los dos métodos de búsqueda

Fácil para ambas Mejor: a lo ancho Mejor: en Difícil para profundidad ambas

3.3.5. Búsqueda en sistemas de producción. Cuando el conocimiento se encuentra representado utilizando reglas de producción es usual utilizar dos métodos de búsqueda. La búsqueda se puede hacer desde un estado inicial a un estado objetivo, o sea, desde las evidencias a las conclusiones, en este caso se denomina búsqueda con encadenamiento hacia adelante (forward chaining) o enfoque guiado por datos (datadriven). También podrá realizarse en dirección contraria, comenzando desde el estado objetivo aplicando movimientos inversos hasta alcanzar un estado inicial, o sea, el razonamiento se realiza desde una hipótesis (objetivo) hasta las evidencias necesarias para refutar o confirmar esa hipótesis, y en cada movimiento inverso se puede generar un subobjetivo, a este método se le llama Búsqueda con encadenamiento hacia atrás (backward chaining) o enfoque guiado por objetivos (goaldriven). Aunque no hay una diferencia formal entre un sistema de producción que trabaja sobre un problema en una dirección hacia adelante y uno que trabaja en dirección contraria, es conveniente hacer esta distinción explícita. Cuando un problema tiene intuitivamente claro los estados y los objetivos, y además se decide emplear las descripciones de estos estados como la base de datos del sistema de producción, entonces se dice que el sistema de producción es con encadenamiento hacia adelante. En este caso las reglas se aplican a la descripción de estados para producir nuevas descripciones de estado. Estas reglas son llamadas F-reglas. Si se decide usar las descripciones de los objetivos como base de datos, y las reglas son aplicadas a las descripciones de los objetivos para producir descripciones

80

de subobjetivos, el sistema de producción es con encadenamiento hacia atrás y las reglas se denominan B-reglas. Los pares de términos Forward - backward, Datadriven - goaldriven, y Bottom up - top down expresan esencialmente la misma distinción, ellos sólo difieren generalmente por el área en que se usan. El primer par es más usado en los sistemas basados en reglas, el segundo por lo general en la solución de problemas y el último par, en tareas de análisis sintáctico (parsing). En estos momentos, ellos son virtualmente intercambiables. Los primeros autores en usar los términos bottom up y top down fueron Cheatham y Sattley en el trabajo "Syntax Directed Compiling" (1964), y Griffiths y Detrick en el trabajo "On the relative efficience of context-free grammar recognizes" (1965). Newel, Shaw y Simons usaron los términos forward y backward en "Empirical Explorations with the logic theory machine" (1957). En el trabajo "Element of Psychology" (1958) se usó por primera vez el término goal-directed. Por último, data-driven fue empleado por Bobrow y Norman en "Some Principles of Memory Schemata". Estudiemos con profundidad estos métodos de búsqueda, así como una combinación de ambos.

3.3.5.1. Búsqueda con encadenamiento hacia adelante (enfoque guiado por datos).

En la búsqueda con encadenamiento hacia delante se comienza a construir el árbol situando como raíz al estado inicial. El siguiente nivel del árbol se genera encontrando todas las reglas cuyas partes izquierdas concuerden con el nodo raíz y usando sus partes derechas para crear los nuevos estados. De esta manera el proceso continúa hasta generar un estado que concuerde con el estado meta. En este método las reglas son sólo aplicables si su parte condición es satisfecha por la B.D. El siguiente procedimiento da la idea algorítmica de un módulo de aplicación de reglas sencillo que está basado en este enfoque.

Procedimiento generar:

1) Identificar el conjunto S de reglas aplicables. 2) Mientras S no sea vacío,

a) Seleccionar una regla R de S. b) Aplicar R, generando los nuevos estados y añadiéndolos a la B.D. c) Si se generó el estado objetivo entonces TERMINAR y EXITO. d) Si no, llamar nuevamente al procedimiento generar. e) Eliminar R de S y anular el efecto de aplicar R.

Este proceso de encadenamiento hacia delante tiene un carácter no determinístico, pues el ordenamiento de las reglas aplicadas no está explícitamente definido en el caso de que el conjunto de reglas aplicables esté formado por más de una regla. Ellas forman, precisamente, el llamado conjunto conflicto. En el capítulo anterior mencionamos algunas técnicas de resolución de conflictos en los sistemas de producción.

81

Este procedimiento genera nuevos hechos a partir de la BD usando las reglas y luego los añade.

Base de reglas

R1: Si X es divisible por 12, entonces X es divisible por 6. R2: Si X es divisible por 20, entonces X es divisible por 10. R3: Si X es divisible por 6, entonces X es divisible por 2. R4: Si X es divisible por 10, entonces X es divisible por 5.

Supóngase que sabemos que algún número N es divisible por 12 y por 20 y que el problema es determinar si N es divisible por 5. Comenzamos entrando esos datos a la BD:

Base de Datos inicial N es divisible por 12. N es divisible por 20.

Analicemos el ejemplo. Ya tenemos la base de reglas y la B.D. inicial y el problema a resolver. Comencemos a aplicar el procedimiento generar, suponiendo que el sistema siempre escoge la primera regla que aparece:

S={R1,R2}. Se selecciona R1.

Ahora la B.D. es: N es divisible por 12. N es divisible por 20. N es divisible por 6.

Ningún hecho concuerda con el estado objetivo. Se llama de nuevo a generar. S1={R2,R3}.

R1 no está incluido en S1 porque su aplicación no cambiaría el estado en curso de la B.D. Se aplica ahora R2 y la B.D. es:

N es divisible por 12. N es divisible por 20. N es divisible por 6. N es divisible por 10.

Nuevamente llamamos a generar. S2={R3,R4}.

R1 y R2 no están en S2 porque no son aplicables. Se selecciona ahora a R3 y la B.D. es:

N es divisible por 12. N es divisible por 20. N es divisible por 6. N es divisible por 10. N es divisible por 2.

Al llamar nuevamente a generar, S3={R4}.

82

Se aplica R4 y se llega a la solución del problema. Un listado de cómo se consiguió esta solución da el orden en que se utilizaron las reglas: R1, R2, R3, R4. El procedimiento finaliza realizando lo siguiente:

- Anula el efecto de R4, es decir, elimina N es divisible por 5 de la B.D. - Elimina R3 de S2. - Anula el efecto de R3, eliminando N es divisible por 2 de la B.D. - Se continúa en el ciclo del paso 2). - Se selecciona R4 de S2 y se aplica.

Se obtiene otra solución: R1, R2, R4. El proceso continúa hasta que se hayan establecido todas las maneras de poder conseguir la solución. El espacio de búsqueda para este problema está representado en la figura 3.9. Note cómo en este espacio cada operador de transición de estados es precisamente una regla de producción.

Estado inicial R1 R2

R2 R3 R1 R4 E → éxito E R3 R4 R2 R3 R4 E E R4 R4 R4 E E E Fig. 3.9. Espacio de búsqueda del ejemplo del encadenamiento hacia delante.

En algunas aplicaciones el listado de las reglas podría utilizarse como plan para conseguir un objetivo en un área de aplicación que fuera modelada por el sistema de producción. En tal caso, podría ser útil identificar el camino más corto desde el estado inicial al objetivo. Ventajas del enfoque guiado por datos

- Simplicidad - Puede utilizarse para proporcionar todas las soluciones a un problema dado.

Desventajas

El comportamiento del sistema, al intentar solucionar un problema, puede ser ineficaz y puede parecer también desatinado porque algunas de las reglas ejecutadas podrían no estar relacionadas con el problema en cuestión. En el ejemplo estudiado las reglas 1 y 3 no nos acercan a la solución del problema.

83

3.3.5.2. Búsqueda con encadenamiento hacia atrás (enfoque guiado por objetivos).

En el encadenamiento hacia atrás se comienza a construir el árbol situando como raíz al estado objetivo. El siguiente nivel del árbol se genera encontrando todas las reglas cuyas partes derechas concuerden con el nodo raíz y usando las partes izquierdas para crear los nuevos estados. Todas estas son las reglas que generarían el estado que queremos si pudiésemos aplicarlas. Este proceso continúa hasta generar un estado que concuerde con el estado inicial. En este enfoque el sistema centra su atención, únicamente, en las reglas que son relevantes para el problema en cuestión. En él el usuario comienza especificando un objetivo mediante la declaración de una expresión E cuyo valor de verdad hay que determinar. La siguiente función da la idea algorítmica de un módulo simple de aplicación de reglas que utiliza este enfoque.

función validar: Tiene como entrada a una expresión X. 1) Resultado:= falso 2) Identificar el conjunto S de reglas aplicables que tengan a X en su parte

derecha. 3) Si S es vacío, entonces pedir al usuario que añada reglas a la base. 4) Mientras Resultado sea falso y S no sea vacío,

a) Seleccionar y eliminar una regla R de S. b) C:= parte izquierda de R. c) Si C es verdadero en la B.D., entonces Resultado:= verdadero. d) Si C no es ni verdadero ni falso en la B.D., entonces

i) Llamar a validar pasándole como argumento a C. ii) Si validar retornó verdadero, entonces Resultado:= verdadero.

5) RETORNAR VERDADERO.

Para ejecutar esta función, el usuario pregunta por el valor de verdad de validar tomando como argumento la expresión E, donde E puede ser, por ejemplo, “N es divisible por 5”. Lo primero que hace esta función es identificar todas las reglas que tienen a E en el miembro derecho suponiendo que se hacen sustituciones apropiadas. Si no existen tales reglas, se pide al usuario que proporcione alguna. Si hay más de una regla, el sistema selecciona una, usando alguna estrategia de resolución de conflictos. Cuando una regla es seleccionada, su parte condición C es verificada con respecto a la B.D. Si C es verdadera en la B.D., entonces se establece la verdad de E y el proceso puede terminar con éxito. Si C es falsa en la B.D., entonces no se puede utilizar R para establecer la verdad de E y se selecciona otra regla de S. Si C es desconocida (es decir no es verdadera ni falsa en la B.D.), entonces se le considera como nuevo subobjetivo y se intenta establecer su valor de verdad llamando recursivamente a validar con C como argumento. Si validar(C) es verdadero, entonces la regla R es aplicable, se establece la verdad de E y el proceso puede terminar con éxito. Si validar(C) es falso, entonces se selecciona otra regla de S. Así, el proceso opera hacia atrás a partir del objetivo, intentando alcanzar subobjetivos que puedan establecer dicho objetivo por sí mismos.

84

Analicemos el ejemplo estudiado en la sección anterior, considerando las reglas y la B.D. inicial utilizados en el ejemplo del tópico anterior. Supongamos nuevamente que se quiere determinar si N es divisible por 5.

S={R4}, pues R4 es la única regla con X es divisible por 5 en el miembro derecho.

Se genera entonces el subobjetivo N es divisible por 10 mediante la sustitución de N por X en la parte condición de R4. Como N es divisible por 10 no es ni verdadera ni falsa en la B.D. se llama a validar tomando como argumento la expresión “N es divisible por 10”.

S1={R2}. Se genera el subobjetivo N es divisible por 20 que es verdadero en la B.D. Así la llamada inicial a validar termina con verdadero. Los sistemas guiados por objetivos preguntan tanto al usuario como a la B.D. al determinar la verdad de un subobjetivo. Así, el usuario no necesita entrar todos los datos disponibles inicialmente, sino que puede esperar hasta que el sistema pida datos. Si se requieren todas las maneras de establecer E, se elimina de la condición del ciclo en el paso 4) Resultado=falso y se deja sólo S no es vacío. La función validar es simple, en el sentido de que supone que las partes izquierdas de las reglas constan de declaraciones únicas, o sea, que no contienen conectivas lógicas. Es necesario, entonces, extender esta función si se desea trabajar con este método de búsqueda. El encadenamiento hacia atrás tiene como ventaja que no solicita datos ni aplica reglas que no estén relacionadas con el problema en cuestión. Este enfoque es el método que se ha de elegir si se utiliza un sistema de producción para comprobar una hipótesis concreta. Sin embargo, puede utilizarse para comprobar cada hipótesis posible, proporcionando por tanto, todas las respuestas que se pueden hacer utilizando el enfoque guiado por datos. Nótese que en ambos métodos de búsqueda pueden usarse las mismas reglas, tanto para razonar hacia delante desde el estado inicial como para razonar hacia atrás desde el estado objetivo. Dependiendo de la topología del espacio del problema, puede ser significativamente más eficiente la búsqueda en un sentido que en otro. Tres factores influyen en esto:

- ¿Existen más estados iniciales posibles o más estados finales?. Preferiríamos movernos desde un conjunto de estados lo más pequeño posible hacia el conjunto de estados mayor, y por tanto, más fácil de encontrar. Un ejemplo que ilustra esto es el siguiente: es más fácil conducir desde un lugar desconocido a nuestra casa que desde ella a ese lugar desconocido. Existen muchos más lugares que nos ayudan a llegar a nuestra casa de los que nos

85

pueden ayudar a llegar al lugar desconocido. Si podemos llegar a cualquiera de ellos podemos llegar a casa fácilmente. Por tanto si nuestra posición de partida es nuestra casa y nuestra meta el lugar desconocido, es mejor razo-nar hacia atrás. Otro ejemplo es la integración simbólica, donde el estado inicial es una fórmula que tiene el símbolo integral y el estado meta es un conjunto de fórmulas que no tengan el símbolo integral. Luego empezamos con un único estado inicial y un enorme número de estados metas. Es mejor razonar hacia delante, usando las reglas de integración a partir de la fórmula inicial, que empezar con una expresión arbitraria libre de integrales, usando las reglas de diferenciación e intentar generar la integral inicial. En los sistemas de diagnóstico hay pocas metas posibles, por lo que es mejor usar el encadenamiento hacia atrás. Sin embargo, en el juego del ajedrez la única alternativa posible es utilizar el encadenamiento hacia delante, pues el número de hipótesis en este caso es virtualmente ilimitado.

- ¿En qué dirección el factor de ramificación, o sea, el promedio de nodos hijos

es mayor? Nos gustaría avanzar siempre en la dirección en que éste sea menor. Un ejemplo es el problema de demostrar teoremas. Nuestros estados iniciales son un pequeño conjunto de axiomas y los estados finales los teoremas a demostrar. Ninguno de estos conjuntos es significativamente más grande que el otro. Consideremos, entonces, el factor de ramificación. A partir de un conjunto pequeño de axiomas podemos derivar un número muy elevado de teoremas. Usando el otro enfoque de este elevado número de teoremas debe regresarse a un pequeño número de axiomas. El factor de ramificación es significativa-mente mayor si vamos hacia delante, desde los axiomas hasta los teore-mas, que al revés. Por lo tanto, es mejor razonar hacia atrás. De hecho, los matemáticos ya se han dado cuenta de esto. Uno de los primeros programas de I.A., el Lógico Teórico (Newell 1963) usaba el razonamiento hacia atrás para demostrar diversos teoremas del primer capítulo de los Principia de Russell y Whitehead.

- ¿Se le pedirá al programa que justifique su proceso de razonamiento? Es

importante avanzar en la dirección que concuerde más con la forma en que piensa el usuario. Por ejemplo, los doctores se niegan a aceptar el consejo de un programa de diagnóstico que no pueda explicar su razonamiento. MYCIN, un S.E. que diagnostica enfermedades infeccio-sas, razona hacia atrás para determinar la causa de la enfermedad del paciente. Para ello usa reglas tales como “si el organismo tiene el siguiente conjunto de características determinadas por los resultados del laboratorio, entonces es probable que el organismo sea X”. Al razonar hacia atrás puede responder a preguntas como ¿por qué debería realizar esa comprobación que acaba de pedir? y tendría respuestas como “porque ayudaría a determinar si el organismo X está presente”.

3.3.5.3. Búsqueda bidireccional. La búsqueda bidireccional es una combinación de las dos búsquedas anteriores. Consiste en realizar simultáneamente una búsqueda con encadenamiento hacia adelante desde el estado inicial y una búsqueda con encadenamiento hacia atrás

86

desde el estado objetivo, hasta que ambas se encuentren en un estado común en la frontera de ambas búsquedas. El camino a la solución se obtiene, entonces, concatenando el camino desde el estado inicial con el inverso del camino desde el estado objetivo. Para poder garantizar que ambas búsquedas se encuentren al menos una de ellas debe seguir la estrategia de la búsqueda primero a lo ancho. La utilización de este método exige, además, que los operadores del problema sean invertibles. Suponiendo que las comparaciones para identificar estados comunes pueden ser hechas en un tiempo constante por nodo, la complejidad temporal es O(bd/2), ya que cada búsqueda sólo necesita llegar hasta la mitad de la profundidad de la solución. La complejidad espacial es también O(bd/2), pues una de las búsquedas usa la estrategia de búsqueda primero a lo ancho. Recuerde que b es el máximo número de hijos (o ramas) de los nodos y d, la profundidad de la solución. Este método parece atrayente si el número de nodos de cada paso crece exponencialmente con el número de pasos que se dan. Resultados empíricos sugieren que para buscar a ciegas, esta estrategia es realmente efectiva. Desafortunadamente, otros resultados sugieren que para una búsqueda heurística lo es mucho menos, pues puede ocurrir que las búsquedas no se encuentren y se necesite más trabajo que el que habría dado realizar una sola de ellas. En un programa construido cuidadosamente pudiera emplearse con éxito.

3.3.6. Búsqueda por diferencias. Se han estudiado estrategias hacia delante y hacia atrás. A veces son útiles estrategias mixtas. Con ellas se resuelven, en 1er lugar, las partes principales y luego se vuelve atrás a resolver los “pequeños” problemas que surgen al “pegar” los trozos grandes. La idea esencial de este método de búsqueda es que la acción a ejecutar se selecciona sobre la base de examinar las diferencias entre lo que se tiene y lo que se quiere, lo cual se puede representar por:

1) Examinar lo que se tiene. Estado actual:= Estado inicial. 2) Comparar el estado actual con el estado meta. Si no hay diferencias,

entonces TERMINAR y EXITO. 3) Determinar qué operador (u operadores) son posibles para reducir las

diferencias. 4) Aplicar sucesivamente los operadores encontrados hasta hallar uno que

sirva y generar el nuevo estado actual. 5) Ir al paso 2).

El proceso de análisis por reducción de diferencias se centra en la detección de diferencias entre el estado actual y el estado meta. Una vez que se ha aislado una diferencia, debe encontrarse un operador que pueda reducirla. Pero quizás el operador no pueda aplicarse al estado actual. Por tanto, estableceremos un subproblema que consiste en llegar a un estado en que pueda aplicarse dicho operador y quizás este operador no produzca el estado meta deseado. Entonces

87

tenemos el segundo subproblema de llegar desde el estado producido por el operador hasta el estado meta. Pero si la diferencia se ha escogido correctamente y el operador es efectivo para reducirla, debería ser más fácil resolver los dos subproblemas que el problema original. El proceso de reducción de diferencias puede aplicárseles recursivamente. Para enfocar la atención del sistema en los problemas mayores deben asignarse niveles de prioridad a las diferencias y considerarse primero las de mayor prioridad. Uno de los sistemas de solución de problemas, el desarrollado por Newel, Shaw y Simon, se basa en este método. A este sistema se le llamó Solucionador General de Problemas (GPS). El GPS usa una técnica para identificar alguna F-regla a partir de una descripción de estado, S, y un objetivo, G. El proceso de identificación primero intenta calcular una diferencia entre S y G. Este proceso de cálculo de diferencias se resuelve por una función que tiene que ser escrita especialmente para cada dominio de aplicación. Las diferencias son usadas para seleccionar F-rules relevantes accediendo a una "tabla de diferencias" en la cual las F-rules están asociadas con las diferencias. Las F-rules asociadas con una diferencia son aquellas F-rules que son relevantes para reducir esa diferencia. Es necesario definir una tabla de diferencias para cada dominio de aplicación. La esencia de este procedimiento es la siguiente: dadas las descripciones del estado inicial S y el objetivo G,

Procedimiento GPS: Toma como argumento al objetivo G. 1) Mientras S no sea equivalente a G

a) D:= una diferencia entre S y G. b) R:= una regla (F-rule) relevante para reducir D. c) C:= parte izquierda o precondición de R. d) Llamar a GPS tomando como argumento a C. e) S:= resultado de aplicar R a S.

Algoritmo de búsqueda por diferencias (AMF) 1. Comparar actual con objetivo. Si no existen diferencias entre ellos TERMINAR. 2. Seleccionar la diferencia más importante y reducirla haciendo lo siguiente hasta

que se llegue a un éxito o a un fracaso: a) Seleccionar un operador O aún no intentado que sea aplicable a la diferencia

actual. Si no existe O devolver FRACASO. b) Intentar aplicar O a ACTUAL. Generar las descripciones de los 2 estados O-

antes que es un estado donde se satisfacen las precondiciones de O y O-FINAL, el estado que resulta de la aplicación de O al estado O-ANTES.

c) PRIMERA_PARTE := AMF(ACTUAL, O-ANTES)-> llamado recursivo que devuelve boolean. ULTIMS_PARTE:=AMF(O-FINAL, OBJETIVO)

d) Si PRIMERA_PARTE Y ULTIMA_PARTE son exitosas anotar un éxito y devolver el resultado de la concatenación de los operadores de PRIMERA_PARTE y ULTIMA_PARTE.

88

Los análisis de reducción de diferencias se basan en un conjunto de reglas STRIPS que pueden transformar un estado del problema en otro. Estas reglas están formadas por las precondiciones (condiciones que deben cumplirse para poder aplicarla) y los resultados. Analicemos el ejemplo de un dominio sencillo de un robot. Supongamos que están disponibles los siguientes operadores STRIPS:

- EMPUJAR(obj,loc) Precondición: EN(robot,obj) ∧ GRAN(obj) ∧ DESPEJAR(obj) ∧ BRAZOVACIO Suprimir: EN(robot,locant) ∧ EN(obj,locant) Añadir: EN(obj,loc) ∧ EN(robot,loc)

- LLEVAR(obj,loc)

Precondición: EN(robot,obj) ∧ PEQUEÑO(obj) Suprimir: EN(robot,locant) ∧ EN(obj,locant) Añadir: EN(obj,loc) ∧ EN(robot,loc)

- CAMINAR(loc)

Precondición: ninguna Suprimir: EN(robot,locant) Añadir: EN(robot,loc)

- COGER(obj)

Precondición: EN(robot,obj) ∧ BRAZOVACIO Suprimir: BRAZOVACIO Añadir: SOSTENER(obj)

- DEJAR(obj)

Precondición: SOSTENER(obj) Suprimir: SOSTENER(obj) Añadir: BRAZOVACIO

- COLOCAR(obj1,obj2)

Precondición: EN(robot,obj2) ∧ SOSTENER(obj1) Suprimir: SOSTENER(obj1) Añadir: ENCIMA(obj1,obj2) ∧ BRAZOVACIO

Los predicados usados son los siguientes: EN(robot,obj): el robot está situado al lado del objeto. GRAN(obj): el objeto es de un tamaño grande. PEQUEÑO(obj): el objeto es de un tamaño pequeño. DESPEJAR(obj): el objeto no tiene nada encima. EN(robot,loc): el robot está en una determinada localización. SOSTENER(obj): el brazo del robot está sosteniendo al objeto. ENCIMA(obj1,obj2): el objeto obj1 está encima del objeto obj2. BRAZOVACIO: el brazo del robot está vacío.

La tabla de diferencias que describe qué operador u operadores reducen las distintas diferencias es la siguiente:

89

EMPUJAR LLEVAR CAMINAR COGER DEJAR COLOCAR Mover objeto x x Mover robot x Despejar objeto x Poner objeto sobre objeto x Vaciar brazo x x Sostener un objeto x

Supongamos, ahora, el siguiente problema del robot: mover un escritorio de una habitación a otra con dos objetos encima de él. Estos objetos deben moverse también. En el estado inicial el robot está en una determinada posición con su brazo vacío. La principal diferencia entre el estado inicial y el meta es la situación del escritorio. Para reducir esta diferencia puede escogerse LLEVAR o EMPUJAR. Supongamos que se escoge LLEVAR. Al intentar satisfacer sus precondiciones, dos diferencias más deben reducirse: la situación del robot y el tamaño del escritorio. La situación del robot puede reducirse aplicando CAMINAR, pero no hay operador que permita cambiar el tamaño de un objeto, ya que el escritorio es un objeto grande y se necesita que sea pequeño. Por lo tanto, debe escogerse EMPUJAR. El progreso del resolutor de problemas en este punto es:

A B C D ----------------

Inicio EMPUJAR Meta Hay que reducir las diferencias entre A y B y entre C y D. EMPUJAR tiene cuatro precondiciones, que generan dos diferencias, pues ya el escritorio es grande y el brazo se supone vacío. Podemos llevar al robot a la posición correcta usando CAMINAR y la superficie del escritorio puede despejarse usando dos veces COGER. Después del primer COGER, el intento de realizar el segundo produce otra diferencia: el brazo debe estar vacío. Puede usarse DEJAR para reducir esta diferencia. Después del segundo COGER, debemos nuevamente aplicar DEJAR para que el brazo esté vacío. Una vez realizado EMPUJAR, el estado del problema está cerca de la meta, pero no del todo. Para poner los objetos nuevamente en el escritorio podemos usar COLOCAR. El progreso del resolutor de problemas en este punto es:

Inicio Meta

A B C E D Inicio CAMINAR COGER DEJAR COGER DEJAR EMPUJAR COLOCAR Meta La diferencia final entre C y E puede reducirse usando CAMINAR para llevar al robot de regreso a los objetos, seguido de COGER, LLEVAR y COLOCAR dos veces. Hemos omitido el análisis de las diferencias. Su orden puede ser crítico, por lo que es importante reducir primero las diferencias principales. La secuencia de operadores final sería la siguiente:

90

Inicio A B C | | | | | | | ... CAMINAR COGER DEJAR COGER DEJAR EMPUJAR Meta E D ... | | | | | | | | | CAMINAR COGER LLEVAR COLOCAR CAMINAR COGER LLEVAR COLOCAR

En problemas complejos, el número de permutaciones de las diferencias es muy grande y las tablas de diferencias pueden ser inmensas. Existen técnicas en las cuales se extiende este enfoque de reducción de diferencias para problemas complejos. Una de ellas es la planificación, la cual estudiaremos más adelante.

3.3.7. Búsqueda de soluciones múltiples. En ocasiones necesitamos encontrar más de una solución al problema que queremos resolver. Esta búsqueda podemos implementarla de dos formas:

- Removiendo el camino de búsqueda encontrado. Este método consiste en lo siguiente: 1) Encontrar una solución utilizando algún método de búsqueda.

2) Eliminar del árbol de búsqueda todos los nodos que forman parte del camino encontrado a la solución.

3) Ir al paso 1). - Removiendo el último nodo del camino.

Este método es similar al anterior. Su única diferencia radica en que en vez de eliminar el camino encontrado, se elimina sólo el último nodo de este camino, repitiéndose nuevamente el proceso.

3.4. Búsqueda heurística. Analicemos el problema del vendedor ambulante. Para resolverlo usando alguna de las técnicas de búsqueda a ciegas estudiadas, se exploraría el árbol de todos los posibles caminos y se devolvería aquel de menor longitud. Si existen N ciudades, el número de caminos diferentes entre ellas es (N-1)!. Explorar cada camino nos tomaría un tiempo proporcional a N y, por tanto, el tiempo total sería proporcional a N!. Tomando 10 ciudades tardaríamos un tiempo de 10!=3 628 000 para solucionar el problema. Este fenómeno se llama explosión combinatoria. Para solucionar eficientemente la mayoría de los problemas difíciles, a menudo es necesario comprometer los requerimientos de movilidad y sistematicidad y construir una estructura de control que, aunque no nos garantice que encontremos la mejor respuesta, por lo menos proporcione una respuesta suficientemente buena.

91

3.4.1. Definición de heurística. La palabra heurística viene del griego heuriskein que significa descubrir. Ella es también el origen de eureka, que se deriva de la famosa exclamación de Arquímedes eureka (“lo encontré”), que lanzó al descubrir un método para determinar la pureza del oro. Otro libro dice que fue cuando Arquímedes salió desnudo corriendo por la calle gritando eureka cuando descubrió el principio de flotación mientras estaba en el baño. Feigenbaum y Feldman la definen así: “Una heurística (regla heurística o método heurístico) es una regla para engañar, simplificar o para cualquier otra clase de ardid, la cual limita drásticamente la búsqueda de soluciones en grandes espacios de solución”. La posibilidad de efectuar la búsqueda de una forma más eficiente se basa en el uso de alguna información específica para el problema a solucionar. Esta información, aunque imprecisa e incompleta, permite distinguir cuáles de los nodos dirigen mejor el avance hacia la meta y permite realizar este avance siempre en la dirección que momentáneamente tiene la mejor perspectiva. Se llama búsqueda heurística a los métodos de búsqueda que usan este tipo de información. Precisamente por esto a estos métodos, generalmente, se les llaman métodos fuertes. Las técnicas heurísticas son como las guías turísticas: son buenas cuando apuntan a direcciones interesantes y son malas cuando apuntan a callejones sin salida. Usando buenas técnicas heurísticas, podemos esperar lograr buenas soluciones a problemas difíciles, como el del vendedor ambulante, en un tiempo menor que el exponencial. Analicemos un ejemplo de heurística. Supongamos que un hombre se encuentra en una extensa llanura y tiene sed. Caminando ha llegado a una pequeña elevación que es la única en esa región y se sube a ella. Su objetivo es, por supuesto, encontrar agua. Desde la elevación el hombre observa el panorama que se presenta en la figura 1. ¿Qué dirección debe seguir para hallar el agua?. Evidentemente la vegetación verde es un indicio de que en esa zona hay humedad, por lo que es muy probable que exista agua en la superficie o subterránea. Por otro lado, el movimiento de animales puede indicar que ellos se dirigen allí a beber, por lo que, posiblemente, el agua está en la superficie. El hombre, al usar esta información, puede decidir dirigirse primero hacia el norte, y si no encuentra solución, o sea, no halla agua, dirigirse al oeste. En este caso, la vegetación verde y el movimiento de animales han sido utilizadas como heurística.

NORTE

Vegetación verde Movimiento de animales

OESTE

Vegetación verde

ESTE

Vegetación amarilla

SUR

HOMBRE

92

Fig. 3.10. Panorama visto por el hombre desde la elevación. Argumentos a favor del uso de técnicas heurísticas

- Sin ellas estaríamos atrapados en la explosión combinatoria. - Pocas veces necesitamos la solución óptima, usualmente una buena

aproximación satisface nuestras exigencias. De hecho, en la vida real las personas, generalmente, no buscan la mejor solución a un problema; tan pronto como encuentran una, abandonan la búsqueda. Por ejemplo, al tratar de parquear un carro, cuando se encuentra un espacio disponible se parquea, aunque más adelante exista uno mejor.

- Aunque las aproximaciones producidas por ellas pueden, en el peor de los casos, no ser muy buenas, los peores casos surgen raramente en el mundo real.

Esto conduce a otra forma de definir la I.A., como el estudio de técnicas para resolver problemas exponencialmente difíciles en un tiempo polinomial explotando el conocimiento sobre el dominio del problema. Formas de incorporar la información heurística en un procedimiento de búsqueda

- En las reglas mismas. Por ejemplo, las reglas para el problema del ajedrez pueden describir no solamente el conjunto de movimientos legales, sino también un conjunto de movimientos “sensatos” según el escritor de las reglas.

- Como una función heurística que evalúe los estados individuales del problema y determine hasta qué punto son deseables. Las funciones heurísticas bien diseñadas guían eficientemente el proceso de búsqueda en la dirección más provechosa. El programa que las utilice puede intentar minimizar dicha función o maximizarla según sea apropiado. Ejemplos de funciones heurísticas son las siguientes: Ajedrez: la ventaja de piezas nuestras sobre el oponente. Rompecabezas de 8 piezas: el número de baldosas colocadas correctamente.

Vendedor Ambulante: la suma de las distancias recorridas hasta ahora o tomar la distancia más pequeña de entre las de los sucesores del nodo actual. Titafor: Puntuación otorgada de la siguiente forma: un punto para cada fila, columna o diagonal en donde podamos ganar y en la que tengamos una pieza y dos puntos para cada fila, columna o diagonal que sea posible ganadora y en la que tengamos 2 piezas.

93

El papel exacto de las funciones heurísticas se estudiarán en cada uno de los métodos de búsqueda heurística.

3.4.2. Búsqueda avara (greedy). Este método consiste en realizar en cada momento la transición hacia el estado que se encuentre más cerca del estado objetivo. Para esto se define una función heurística que estime el costo de llegar de un estado al estado objetivo. Esta función heurística h puede ser cualquiera, pero debe cumplir que h(n) = 0 si n es el nodo objetivo. Ejemplo: Búsqueda de la ruta más corta entre las ciudades Santiago y Morón. (Ver figura 3.11. ) Supongamos que h es la distancia en línea recta entre las dos ciudades. La ruta sería: Stgo, Bayamo, Holguín, Morón. En general este método tiene un comportamiento bastante bueno y logra la solución de forma rápida. Deficiencias de la búsqueda avara

- No siempre la solución encontrada es la óptima. Ver ejemplo anterior. Note que esta ruta no es la óptima (la mejor sería Santiago, Bayamo, Tunas, Camagüey, Morón que tiene 32 km menos).

- Es incompleta, pues puede recorrer una ruta infinita y nunca llegar a la solución. Ejemplo: si se quisiera la ruta entre Matanzas y Morón, la función heurística aconseja tomar primero C.Habana. que conduce a un callejón sin salida pues se mantiene todo el tiempo entre estas dos ciudades. Este problema de que puede no terminar nunca, se debe a que como el algoritmo sólo almacena el estado actual no tiene manera de saber dónde ha estado y puede caer en un ciclo. Una forma de solucionar esta dificultad es mantener una lista de estados visitados y nunca revisitar uno de éstos, lo cual garantiza que el algoritmo terminará siempre que el espacio de estados del problema sea finito.

94

Distancia en línea recta a Morón: Stgo( 366), Contramaestre(374), Palma(329), Bayamo(253), Holguín(178), Tunas(193), Camagüey(101), C.Hab(224), Mtzas(226), Las Villas(299), San Luis(160). Figura 3.11. Problema de la ruta entre Stgo y Morón.

3.4.3 Búsqueda por el mejor nodo (best-first search). La búsqueda por el mejor nodo es una forma de combinar las ventajas de las búsquedas en profundidad y de anchura en un único método. En cada paso del proceso de búsqueda por el mejor nodo, seleccionamos el más prometedor de aquellos nodos que se han generado hasta el momento. Esto se realiza aplicando una función heurística apropiada a cada uno de ellos. Entonces expandimos el nodo elegido usando las reglas para generar a sus sucesores. Si uno de ellos es una solución podemos terminar. Si no, todos esos nodos se añaden al conjunto de nodos generados hasta ahora. Se selecciona de nuevo el más prometedor y el proceso continúa. Lo que sucede usualmente es que se realiza un proceso de búsqueda en profundidad mientras se explora una rama prometedora. Como ocasionalmente no se encuentra solución, se explora otra rama previamente ignorada y que ahora parece más prometedora. En este método de búsqueda la función heurística que estima los méritos de cada nodo generado está definida como:

f(n) = g(n) + h(n), donde g(n) es una medida del costo del camino desde el nodo inicial al nodo actual n y h(n) es un estimado del costo adicional de llegar desde el nodo n al nodo meta. g(n) no es, necesariamente, el costo del camino óptimo desde el nodo inicial al nodo actual, pues puede haber caminos mejores no recorridos todavía. g(n) simplemente se calcula como la suma de los costos de los arcos del camino actual. La función h(n), sin embargo, es típicamente heurística y explota el conocimiento sobre el domino del problema, ya que el “mundo” entre el nodo n y el meta no ha sido explorado. Por supuesto, no existe un método general para construir h(n), sino que depende del problema particular. Al algoritmo de búsqueda que utiliza la función f(n) se le llama algoritmo A. Este algoritmo no garantiza encontrar el camino óptimo a la solución, pues éste sólo calcula un estimado del costo para alcanzar el nodo objetivo.

Stgo

Morón

Bayamo

Tunas

Holguín

Camagüey

Mtzas C. Hab.

Las Villas

Contramaestre

Palma

San Luis

Ciego

75 140

151

118

111

99

80 97

101

211

138 85 142

87

92

95

Se puede definir la función f*(n) que, en cualquier nodo n, calcule el costo real del camino óptimo desde el nodo inicial al nodo n (g*(n)) más el costo del camino óptimo desde el nodo n al nodo objetivo (h*(n)), es decir

f*(n) = g*(n) + h*(n), donde h*(n) es una función de evaluación heurística admisible, o sea, ∀n h*(n) es menor o igual que la distancia real mínima a la meta. Es precisamente por esto que el algoritmo que usa este estimador garantiza siempre encontrar, si existe, el camino óptimo a la solución. A este algoritmo se le conoce con el nombre de algoritmo A*.

La figura 3.12 muestra el principio de un procedimiento de búsqueda por el mejor nodo. Los números que aparecen al lado de los nodos son los valores de f(n). Note cómo en cada paso se selecciona el nodo de menor valor de f(n), generando sus sucesores.

Paso 1 Paso 2 Paso 3 A A A (3) B (5) C (1) D (3) B (5) C D (4) E (6) F Paso 4 Paso 5 A A B (5) C D B (5) C D

(6) G (5) H (4) E (6) F (6) G (5) H E (6) F (2) I (1) J

Fig. 3.12. Un ejemplo de búsqueda por el mejor nodo.

Para implementar este algoritmo hay que mantener, además de la lista de nodos visitados, una lista de nodos generados pero no visitados. Esta lista permite al algoritmo retomar un camino que fue abandonado temporalmente por otro que parecía más promisorio. Este método de búsqueda consiste en: el mejor nodo de la lista de nodos generados y no visitados (inicialmente el nodo raíz) se expande generando sus sucesores y se colocan en la lista de nodos visitados; la función de evaluación heurística se aplica a todos los sucesores y ellos son insertados en la lista de nodos no visitados en orden de su costo. En el ciclo siguiente se selecciona el mejor nodo de esta lista para ser procesado.

96

Algoritmo: Nodo:= Nodo Inicial While not Objetivo(Nodo) do

Begin Colocar Nodo en la lista de nodos visitados; Para cada sucesor de Nodo do Insertar en cola de prioridades según f a (Sucesor, f(sucesor)); -> Lista de

nodos no visitados Nodo:= cabeza de la cola de prioridades; End;

Por ejemplo, para el problema del rompecabezas de 8 piezas puede tomarse h*(n) como el número de piezas que no están en su posición final. Otra variante, que contiene más información heurística pero requiere más cálculos, es la suma de las distancias desde la posición actual de cada pieza a su posición correcta. Ejemplo: Veamos nuevamente la figura 3.11. Si usamos como h la misma función anterior y como g la suma de los costos (distancias) de las respectivas carreteras veremos como en este caso, el algoritmo A* sí obtiene la ruta óptima Stgo, Bayamo, Tunas, Camagüey, Morón. El árbol desarrollado está en la figura 3.13.

Figura 3.13. Algoritmo A* para el problema de la ruta Stgo- Morón.

Podemos hacer algunas observaciones interesantes sobre este algoritmo:

- Al incorporar g* en f* no siempre se elige como el siguiente nodo a expandir el que parece más cercano a la meta. Esto es útil si nos preocupa el camino que elijamos. Si sólo nos importa llegar a una solución de la forma que sea, ponemos g*=0 y con esto estamos eligiendo el nodo más cercano a la meta (búsqueda avara). Si queremos encontrar un camino en el menor número de pasos, entonces ponemos el costo de un nodo a su sucesor constante igual a 1.

Stgo 280+366 = 646

Stgo

Bayamo 140+253 = 393

Palma 118+329 = 447

Contramaestre 75+374 = 449

Contram. 291+374 = 665

Tunas 220+193 = 413

Holguín 239+178 = 417

Bayamo 300+253 = 553

San Luis 358+160 = 518

Camagüey 317+101 = 418

Morón

97

Si el costo de los operadores varía, se refleja en cada nodo y se calcula el camino de costo mínimo.

- Cuando h* = 0 y g* = d, donde d es el nivel de profundidad del nodo, el algoritmo A* es idéntico al método de búsqueda primero a lo ancho.

En Bratko puede verse la implementación de este algoritmo en PROLOG, así como su aplicación para el problema del rompecabezas de 8 piezas. En Rich 1era edición pág. 87-93 puede verse bien desarrollado el algoritmo A* para realizar la búsqueda por el mejor nodo en un problema de grafos. La principal desventaja del algoritmo A* es el requerimiento de memoria para mantener la lista de nodos generados no procesados, por lo que, en este aspecto, este algoritmo no es más práctico que la búsqueda primero a lo ancho. Una variante del mismo es:

- Mantener sólo en la lista de nodos no visitados los mejores n nodos. El costo de esta técnica es la pérdida de la solución óptima, pues un nodo malo localmente se puede sacar de la lista y él podría conducir al óptimo global. Esta técnica se conoce como beam search.

3.4.4. Búsqueda heurística en árboles y/o o algoritmo AO*. Para encontrar soluciones en un árbol y/o necesitamos un algoritmo similar al A*, pero con la capacidad de manejar los arcos Y apropiadamente. Este algoritmo debería encontrar un camino desde del nodo inicial a un conjunto de nodos que representan los estados meta. Nótese que puede ser necesario obtener más de un estado meta, pues cada rama de un arco Y puede conducir a su propio nodo meta. Para ver por qué el algoritmo A* no es adecuado para la búsqueda en árboles y/o, consideremos la figura 3.14. Los números representan el valor de f* en cada nodo. El problema radica en que la elección del nodo a expandir no sólo depende del valor de f* en ese nodo, sino también de si ese nodo es parte del mejor camino actual a partir del nodo inicial. El nodo simple más prometedor es C, pero no forma parte del mejor camino actual, pues hay que incluir al nodo D. A (7)

(5) B (3) C (4) D

Fig. 3.14. Un árbol y/o donde no es posible utilizar A*.

98

Los nodos de un árbol y/o pueden ser clasificados en:

- nodos primitivos: son los que se corresponden con problemas que se resuelven directamente.

- nodos muertos: son los que se corresponden con problemas no descomponibles y que no tienen solución.

- nodos intermedios. Para cada uno de ellos el estimado heurístico h*(n) se puede definir como:

- Si n es un nodo primitivo, entonces h*(n) = 0 - Si n es un nodo muerto, entonces h*(n) = ∞ - Si n es un nodo intermedio con j conectores, entonces h*(n) es el mínimo de los

costos calculados para cada uno de los j conectores. Si el conector es Y, entonces su costo es:

(cos ( , ) ( ))*to n n h nk kk

,+∑

donde k es el número de nodos del conector. Si por el contrario, el conector es O, entonces su costo es: costo(n, nk) + h*(nk).

Para estimar la bondad de un nodo sólo se usa h*. No se usa g* como en el algoritmo A*, pues no es posible calcular tal valor único, ya que puede haber muchos caminos para un mismo nodo y además, tampoco es necesario, porque la travesía hacia abajo del mejor camino conocido garantiza que sólo aquellos nodos que estén en el mejor camino serán considerados para la expansión. Si quisiéramos implementar este algoritmo usando un grafo y/o es necesario realizar tres cosas en cada paso:

- Atravesar el grafo comenzando por el nodo inicial y siguiendo el mejor camino actual, acumulando el conjunto de nodos que van en ese camino y aún no han sido expandidos.

- Seleccionar uno de estos nodos no expandidos y expandirlo. Añadir sus sucesores al grafo y calcular h* para cada uno de ellos.

- Cambiar la h* estimada del nodo recientemente expandido para reflejar la nueva información proporcionada por sus sucesores. Propagar este cambio hacia atrás a través del grafo. Para cada nodo que se visita mientras se va avanzando en el grafo, decidir cuál de sus arcos sucesores es más prometedor y marcarlo como parte del mejor camino actual, lo cual cambiará el mejor camino actual.

En Rich 1era edición puede verse los pasos de este algoritmo expresados más detalladamente. Bratko contiene una implementación del mismo en PROLOG. La figura 3.15 muestra un ejemplo de una traza de este algoritmo. Los números entre paréntesis indican el valor de h* en los nodos y los que no tienen paréntesis, indican los costos de los arcos. Los nodos encerrados entre dos círculos son nodos primitivos.

99

El algoritmo AO* no sirve cuando entre los subproblemas hay interacciones. Diferencias entre el algoritmo A* y el AO* En el algoritmo A* el camino deseado de un nodo a otro siempre era el de menor costo. Pero éste no es siempre el caso cuando se está buscando en un árbol y/o. Un ejemplo de esto se muestra en la figura 3.16. El nuevo camino al nodo 5 es más largo que yendo a través del nodo 3. Pero el camino por el nodo 3 no lleva a solución, pues necesita también una solución del nodo 4, la cual no existe. Por tanto el camino a través del nodo 10 es mejor.

Paso 1 Paso 2 a a (2) 1 3 (1) b c (3) Paso 3 Paso 4

a (4) a (6) 1 3 1 3

(3) b c (3) (9) b c (3) 1 1 1 1 d (0) (1) e d (0) e (7) 6

(1) h

Paso 5

a (8) 1 3 (9) b c (5) 1 1 2 1

(0) d (7) e f (2) g (0) 6 2 3

(1) h (0) i j (1)

Fig. 3.15. Una traza del algoritmo AO*.

100

1 2 3 4 nodo muerto 7 8 5 6 9 10

Fig. 3.16. Ejemplo que muestra las diferencias entre A* y AO*.

3.4.5. Búsqueda por ascenso de cima (hill-climbing). [Tomado de Data Mining. Pieter Adriaans, Dolf Zantinge. Addison-Wesley longman 1996 y de IA: un enfoque moderno] Es de ascenso de cima si la función de evaluación de estado expresa calidad y se llama de disminución de gradiente si esta función es de costo. Una popular metáfora para esta búsqueda es el canguro en la niebla. Suponga un canguro en un lugar desconocido con la tarea de encontrar la cima más alta. Como hay poca visibilidad por la niebla, él identifica el punto más alto que él ve y hacia allí salta. Desde esta nueva posición repite el proceso hasta que no haya un punto más alto. Por supuesto, no garantiza el óptimo; depende de las características del relieve concreto. Si el relieve es suave y existe un óptimo visible se llega a él. Pero si es suave y existen muchos puntos similares puede no llegarse. Lo mismo ocurre si existen muchos picos altos y el relieve es muy abrupto. En estos casos se llega a óptimos locales. Una solución es el paralelismo: colocar varios canguros que exploren el espacio de búsqueda. La posibilidad de que uno alcance el punto más alto aumenta. El algoritmo hill-climbing es un algoritmo de mejoramiento iterativo. Ellos se caracterizan porque la misma descripción del estado contiene toda la información necesaria para encontrar una solución. Es irrelevante la ruta a través de la cual se obtiene la solución. La idea básica consiste en empezar con una configuración completa y efectuar modificaciones para mejorar su calidad. Algoritmo

1- Actual:= Estado inicial del problema 2- Siguiente:= sucesor de actual con mayor valor 3- Si valor(siguiente) < valor(actual) entonces Devuelve actual y TERMINAR sino Actual:= siguiente Ir al paso 2.

Este algoritmo termina cuando se llega a un punto donde no se puede obtener un mejor valor. Al implementarse se hace con un ascenso de cima con reinicio

101

aleatorio, es decir, se ejecuta el algoritmo varias iteraciones comenzando desde estados iniciales generados aleatoriamente y se guarda el mejor estado producido. Desventajas:

- Máximos locales: Es una cima cuya altura es inferior a la cima más alta de todo el espacio de estados. Una vez que ha alcanzado un máximo local, el algoritmo para, aunque esta solución esté muy lejos de ser satisfactoria.

- Planicie: son áreas del espacio de estados en donde la función de evaluación básicamente es plana. La búsqueda realizará un paseo al azar. En todos los estados la función de evaluación da un valor muy similar y entonces se escogerá cualquiera.

- Riscos: las laderas de algunos riscos tienen pendientes muy pronunciadas, por lo que es fácil para una búsqueda llegar a la cima del risco; sin embargo puede suceder que la pendiente de la cima se aproxime demasiado gradualmente a un pico. A menos que existan operadores que se desplacen directamente por la cima del risco, la búsqueda oscilará de un lado a otro obteniendo muy poco avance.

Por ejemplo: en el problema de las 8 reinas se empieza con 8 reinas situadas en el tablero y se procede, entonces a desplazar las reinas buscando disminuir la cantidad de posibles ataques. Los operadores serían mover las reinas a otra posición de su columna de manera que la cantidad de ataques sea mínima. 3.5. Planificación. En secciones anteriores describimos el proceso de resolver problemas como una búsqueda a través de un espacio de estados, en el que cada nodo representa una descripción del estado completo del problema y cada operador describe una forma de cambiar dicha descripción completa del estado. Para problemas sencillos como, por ejemplo, el rompecabezas de 8 piezas, el manipular cada vez la descripción completa del estado es fácil y razonable. Sin embargo, para dominios de problemas más complicados, es importante que seamos capaces de trabajar por separado sobre elementos pequeños de un problema y combinar al final las soluciones parciales en una solución completa. Si no podemos hacer esto, el número de combinaciones de los estados de las componentes de un problema se volvería demasiado grande para poderlo manejar en la cantidad de tiempo disponible. Existen dos formas en las que es importante que seamos capaces de realizar esta descomposición. En la primera es importante que, al movernos de un estado del problema al siguiente, no tengamos que recalcular el nuevo estado completo. En vez de ello, queremos considerar sólo aquella parte del estado que puede haber cambiado. No es difícil calcular cómo debería cambiar el estado del rompecabezas de 8 piezas después de cada movimiento, ni significa gran cantidad de trabajo el almacenar explícitamente una nueva copia del estado con los cambios apropiados que se han hecho. Pero si estamos considerando el problema de guiar un robot por una casa, la situación es mucho más compleja. La descripción de un estado sería muy

102

extensa, pues debería incluir dónde está cada objeto en la casa junto con la situación actual del robot. Una acción concreta por parte del robot cambiará sólo una pequeña parte del estado total. Por ejemplo, si el robot empuja una mesa, sólo cambiará la situación de la mesa y de los objetos que estaban sobre ella, pero los restantes objetos no cambiarán. En lugar de escribir reglas que describan transformaciones de un estado completo en otro, preferiríamos escribir reglas que sólo describan las partes del estado afectadas y suponer que el resto permanece constante. La segunda forma importante en que la descomposición puede facilitar la solución de problemas difíciles, es la división de un único problema difícil en varios subproblemas que podemos esperar que sean más fáciles. El algoritmo AO* nos proporciona una manera de hacerlo cuando los subproblemas están completamente separados. Pero existen muchos problemas casi descomponibles, o sea, que pueden dividirse en subproblemas con una pequeña cantidad de interacción. Por ejemplo, el trasladar un conjunto de muebles fuera de una habitación podría descomponerse en trasladar cada objeto por separado, pero si hay un librero detrás de una mesa, debemos mover primero la mesa. Es necesario un método que permita trabajar con este tipo de problema. El uso de métodos que se centran en formas de descomponer el problema original en subpartes apropiadas y en formas de almacenar y manejar las interacciones entre las subpartes conforme se detectan durante el proceso de resolución de problemas se llama Planificación. Al igual que en los sistemas de resolución de problemas estudiados anteriormente, los métodos de planificación necesitan de técnicas para elegir la mejor regla a aplicar, aplicar la regla elegida, detectar cuándo se ha encontrado solución y detectar callejones sin salida. Estos métodos usan generalmente como FRC los strips, donde se estudiaron estas técnicas. La técnica más ampliamente usada para elegir las reglas apropiadas a aplicar es aislar un conjunto de diferencias entre el estado meta deseado y el estado actual, identificando las reglas que reducen esas diferencias. Si hay varias, se explota alguna información heurística para seleccionar entre ellas. Analizaremos estos métodos en el mundo de bloques. Las acciones que se pueden realizar son: COGER(x) Precondición: ENMESA(x) y DESPEJAR(x) y BRAZOVACIO Suprimir: ENMESA(x) y BRAZOVACIO Añadir: SOSTENER(x) DEJAR(x) Precondición: SOSTENER(x) Suprimir: SOSTENER(x) Añadir: ENMESA(x) y BRAZOVACIO APILAR(x,y) Precondición: DESPEJAR(y) y SOSTENER(x) Suprimir: DESPEJAR(y) y SOSTENER(x) Añadir: ENCIMA(x,y) y BRAZOVACIO

103

DESAPILAR(x,y) Precondición: ENCIMA(x,y) y DESPEJAR(x) y BRAZOVACIO Suprimir: ENCIMA(x,y) y BRAZOVACIO Añadir: SOSTENER(x) y DESPEJAR(y) Usaremos los sgtes predicados:

ENCIMA(a,b), ENMESA(a), DESPEJAR(a) [No hay nada sobre a], SOSTENER(a) [el brazo está sosteniendo a] y BRAZOVACIO.

En el mundo de bloques existen diversas declaraciones lógicas verdaderas: [ ∃ x SOSTENER(x)] ¬ BRAZOVACIO --- Si el brazo está sosteniendo algo

entonces no está vacío. ∀ x [ ENMESA(x) ¬ ∃ y ENCIMA(x,y) ]--- Si un bloque está encima de la mesa

entonces no está encima de otro bloque.

∀ x [¬ ∃ y ENCIMA(y,x) DESPEJAR(x) ] --- Cualquier bloque que no tenga encima bloques, está despejado.

Existen varias técnicas de planificación, como por ejemplo:

- Planificación usando pila de metas. - Planificación no lineal usando un conjunto de metas. - Planificación jerárquica. - Planificación no lineal usando la estrategia del menor compromiso. - Planificación por medio de colocación de restricciones. - Planificación mediante tablas de triángulos. - Metaplaneo. - Cajas de plan.

Estudiemos los tres primeros métodos. Explicaciones de los restantes pueden verse en [Ric88].

3.5.1. Planificación usando pila de metas. En este método, el resolutor de problemas usa una única pila que contiene tanto las metas como los operadores que las satisfacen. El resolutor de problemas dispone también de una B.D. que describe la situación actual y un conjunto de operadores descritos en forma de STRIPS (listas precondición, añadir y suprimir). Veamos un ejemplo del mundo de bloques: supongamos que se tienen los estados inicial y meta mostrados en la figura 3.17.

Estado inicial: ENCIMA(B,A) ∧ ENMESA(A) ∧ ENMESA(C) ∧ ENMESA(D) ∧ BRAZOVACIO

Estado meta: ENCIMA(C,A) ∧ ENCIMA(B,D) ∧ ENMESA(A) ∧ ENMESA(D) Estado inicial Estado meta

104

B C B

A C D A D

Fig. 3.17. Un ejemplo del mundo de bloques.

Cuando empezamos a resolverlo la pila de metas es: ENCIMA(C,A) y ENCIMA(B,D) y ENMESA(A) y ENMESA(D) Descompogamos este problema en cuatro subproblemas, uno por cada meta. Las dos metas ENMESA ya están satisfechas en el estado inicial (le llamaremos para abreviar EMAD), por lo que sólo trabajamos con las dos restantes. Dependiendo del orden en que se escojan se pueden crear dos pilas de metas:

(1) (2) ENCIMA(C,A) ENCIMA(B,D) ENCIMA(B,D) ENCIMA(C,A) ENCIMA(C,A) y ENCIMA(B,D) y EMAD ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Para cada paso que haya tenido éxito debe proseguirse con la meta que está en la cima de la pila. Cuando se halla una secuencia de operadores que la satisface, se aplica dicha secuencia a la descripción del estado, produciendo una nueva descripción. A continuación se explora la meta que está en la cima de la pila y se intenta satisfacerla empezando en la situación producida como resultado de satisfacer la primera meta. Este proceso continúa hasta que la pila de metas esté vacía. Al comprobar la última meta, se compara la meta original con el estado final derivado de la aplicación de los operadores escogidos. Si cualquiera de las componentes de la meta no se satisface en ese estado, lo cual podría suceder si se alcanzasen en cierto punto y se deshiciesen más tarde, se reinsertan en la pila las partes de la meta aún no resueltas y se reanuda el proceso. En el ejemplo, supongamos que elegimos la pila 1. La pila 2 también conduce a una solución, de hecho encuentra una tan trivial que no es muy interesante. Miramos si ENCIMA(C,A) es cierto en el estado inicial. Como no lo es, buscamos los operadores que lo pueden hacer cierto: APILAR(C,A). Se coloca éste en lugar de ENCIMA(C,A), pues estamos seguros de que después de aplicar éste, la meta se cumple. La pila sería ahora:

APILAR(C,A) ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Las precondiciones de APILAR se convierten entonces en submetas: DESPEJAR(A) ∧ SOSTENER(C). Las separamos y escogemos una de ellas. Aquí es útil explotar algún conocimiento heurístico. SOSTENER es muy fácil de hacer (basta dejar alguna cosa y coger el objeto deseado) y es muy fácil de deshacer (para cualquier cosa el robot necesita usar el brazo). Si satisfacemos primero SOSTENER y luego lo otro, es probable que entonces SOSTENER no sea cierto. Por tanto, explotamos

105

la heurística de que si SOSTENER es una de las metas, se trate de satisfacer en último lugar. Este tipo de información heurística podría incluirse en las mismas listas precondición de los operadores, escribiendo las metas en el orden en que deben satisfacerse. La pila de metas es ahora:

DESPEJAR(A) SOSTENER(C) DESPEJAR(A) ∧ SOSTENER(C) APILAR(C,A) ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Como DESPEJAR(A) no es cierto y el único operador que lo hace cierto es DESAPILAR(B,A), lo cual puede detectarse fácilmente mirando las listas Añadir de cada operador, la pila de metas es:

ENCIMA(B,A) DESPEJAR(B) BRAZOVACIO ENCIMA(B,A) y DESPEJAR(B) y BRAZOVACIO DESAPILAR(B,A) SOSTENER(C) DESPEJAR(A) y SOSTENER(C) APILAR(C,A) ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD

ENCIMA(B,A) se satisface y lo quitamos de la pila. DESPEJAR(B) no está explícitamente, pero un demostrador de teoremas puede demostrar que se satisface a partir de los predicados iniciales y del axioma del mundo de bloques que dice que cualquier objeto sin bloques encima está despejado. Por eso se quita también de la pila. La tercera precondición de DESAPILAR (BRAZOVACIO) también es cierta y se saca de la pila, junto con la meta combinada, una vez comprobado que se satisface. Como se satisfacen sus precondiciones, aplicamos el operador DESAPILAR(B,A) (usando las listas suprimir y añadir) para producir un nuevo modelo del mundo y lo anotamos en la secuencia de solución propuesta:

ENMESA(A) y ENMESA(C) y ENMESA(D) y SOSTENER(B) y DESPEJAR(A). Anotamos, entonces, este operador en la secuencia de solución propuesta. La pila es ahora:

SOSTENER(C) DESPEJAR(A) y SOSTENER(C) APILAR(C,A)

106

ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Para satisfacer SOSTENER(C) se pueden usar COGER(C) y DESAPILAR(C,x), donde x es cualquier bloque. No podemos saber cuál escoger, por lo que creamos dos ramas del árbol de búsqueda:

(1) (2) ENMESA(C) ENCIMA(C,x) DESPEJAR(C) DESPEJAR(C) BRAZOVACIO BRAZOVACIO ENMESA(C) y DESPEJAR(C) y ENCIMA(C,x) y DESPEJAR(C) y

BRAZOVACIO BRAZOVACIO COGER(C) DESAPILAR(C,x) DESPEJAR(A) y SOSTENER(C) DESPEJAR(A) y SOSTENER(C) APILAR(C,A) APILAR(C,A) ENCIMA(B,D) ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Observe que en la pila (2) x aparece tres veces. Es importante emparejar un mismo objeto con cada una de las x. Por eso es mejor renombrarlas para no confundirse. ¿Cómo el programa decide por dónde seguir?. Nosotros sabemos que COGER(C) es mejor que desapilarlo si C no tiene nada encima, pues para desapilarlo hay que apilarlo, lo que implica una pérdida de esfuerzo. Supongamos que se escoge la alternativa (2). Para satisfacer ENCIMA(C,x) hay que apilar C sobre x. La pila sería:

DESPEJAR(x) SOSTENER(C) DESPEJAR(X) y SOSTENER(C) APILAR(C,x) DESPEJAR(C) BRAZOVACIO ENCIMA(C,x) y DESPEJAR(C) y BRAZOVACIO DESAPILAR(C,x) DESPEJAR(A) y SOSTENER(C) APILAR(C,A) ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Una de las precondiciones de APILAR es SOSTENER(C). Esto es lo que estamos intentando conseguir aplicando DESAPILAR, que requiere APILAR para que se cumpla ENCIMA(C,x). Como hemos regresado a la meta original, este camino es improductivo. Si C hubiese estado sobre otro bloque, se satisface ENCIMA(C,x) sin APILAR y este camino hubiera conducido a una solución. Regresemos, entonces, a la pila (1). ENMESA(C) y DESPEJAR(C) se satisfacen y los quitamos de la pila. Para hacer cierto BRAZOVACIO se puede aplicar APILAR(B,x) o DEJAR(B). Si miramos hacia delante queremos, en último término,

107

poner B sobre D, luego lo más eficiente es hacerlo ahora. El programa podría hacer esto comparando los operadores que están compitiendo con el resto de la pila. Si uno hace alguna de estas metas se escoge éste. Luego aplicamos APILAR(B,D) emparejando a D con x en APILAR. La pila de metas es ahora:

DESPEJAR(D) SOSTENER(B) DESPEJAR(D) y SOSTENER(B) APILAR(B,D) ENMESA(C) y DESPEJAR(C) y BRAZOVACIO COGER(C) DESPEJAR(A) y SOSTENER(C) APILAR(C,A) ENCIMA(B,D) ENCIMA(C,A) y ENCIMA(B,D) y EMAD

Como puede verse DESPEJAR(D) y SOSTENER(B) son ciertas. Se realiza, entonces, APILAR(B,D) y el modelo del mundo es ahora:

ENMESA(A) y ENMESA(C) y ENMESA(D) y ENCIMA(B,D) y BRAZOVACIO

Ya se han satisfecho todas las precondiciones para COGER(C) y se ejecuta. Luego se ejecuta APILAR(C,A). Ahora se empieza a trabajar con la segunda parte: ENCIMA(B,D). Pero ésta ya se satisface, pues anteriormente comparamos con la pila de metas, luego comprobamos la meta combinada y el resolutor de problemas termina, devolviendo el plan:

DESAPILAR(B,A), APILAR(B,D), COGER(C) y APILAR(C,A).

Para problemas más difíciles estos métodos de usar información heurística y de considerar interacciones entre metas no son adecuados. Veamos un ejemplo: Supongamos se tienen los estados inicial y meta mostrados en la figura 3.18.

Estado inicial Estado meta

A C B A B C Estado inicial: ENCIMA(C,A) ∧ ENMESA(A) ∧ ENMESA(B) ∧ BRAZOVACIO Estado meta: ENCIMA(A,B) ∧ ENCIMA(B,C)

Fig. 3.18. Un ejemplo del mundo de bloques ligeramente más difícil. Existen dos formas de comenzar a resolver este problema:

(1) (2)

108

ENCIMA(A,B) ENCIMA(B,C) ENCIMA(B,C) ENCIMA(A,B) ENCIMA(A,B) y ENCIMA(B,C) ENCIMA(A,B) y ENCIMA(B,C)

Supongamos elegimos la alternativa (1). La pila de metas es la siguiente: DESPEJAR(C) BRAZOVACIO DESPEJAR(C) y BRAZOVACIO DESAPILAR(C,A) BRAZOVACIO DESPEJAR(A) y BRAZOVACIO COGER(A) DESPEJAR(B) y SOSTENER(A) APILAR(A,B) ENCIMA(B,C) ENCIMA(A,B) y ENCIMA(B,C)

Podemos eliminar de la pila las metas que ya han sido satisfechas y llegamos a BRAZOVACIO de COGER(A). Para satisfacerla necesitamos DEJAR(C). Podemos continuar quitando elementos hasta que la pila sea:

ENCIMA(B,C) ENCIMA(A,B) y ENCIMA(B,C)

El estado actual es ahora:

ENMESA(B) y ENCIMA(A,B) y ENMESA(C) y BRAZOVACIO y la secuencia de operadores aplicada hasta ahora es:

DESAPILAR(C,A), DEJAR(C), COGER(A) y APILAR(A,B).

Se comienza a trabajar con ENCIMA(B,C). Para esto hay que desapilar A de B y apilar B sobre C. Cuando se alcance la meta ENCIMA(B,C) y se saque de la pila, se habrá ejecutado la secuencia de operadores siguientes:

DESAPILAR(A,B), DEJAR(A), COGER(B) y APILAR(B,C)

El estado del problema será entonces:

ENCIMA(B,C) y ENMESA(A) y ENMESA(C) y BRAZOVACIO

Pero al comprobar ENCIMA(A,B) y ENCIMA(B,C) descubrimos que hemos deshecho ENCIMA(A,B), la cual puede alcanzarse de nuevo aplicando COGER(A) y APILAR(A,B). El plan completo es el siguiente:

1- DESAPILAR(C,A) 6- DEJAR(A)

109

2- DEJAR(C) 7- COGER(B) 3- COGER(A) 8- APILAR(B,C) 4- APILAR(A,B) 9- COGER(A) 5- DESAPILAR(A,B) 10- APILAR(A,B)

Aunque este plan alcanza la meta deseada no lo hace eficientemente. Una situación similar hubiera ocurrido de coger la alternativa (2). Existen dos enfoques para llegar a un buen plan. Uno es repararlo, lo cual es fácil aquí, pues podemos buscar aquellos lugares donde se realiza una operación que se deshace inmediatamente y eliminar a ambas. En el ejemplo, eliminaremos 4 y 5 y luego 3 y 6. El plan resultante es óptimo para este problema. Sin embargo, hay problemas donde estos operadores pueden estar lejos unos de otros, además de que se gasta mucho esfuerzo en producir los pasos para después eliminarlos. Un método de planificación que construye directamente planes eficientes es la planificación no lineal usando un conjunto de metas.

3.5.2. Planificación no lineal usando un conjunto de metas. La idea de este procedimiento es escoger, en primer lugar, el operador que se aplicará último en la solución final y suponer que ya se han satisfecho todas las submetas menos una. Entonces encuentra todos los operadores que podrán satisfacer la submeta final. Naturalmente, cada una de ellas puede tener precondiciones que deben cumplirse, de forma que debe generarse una nueva meta combinada que incluya tanto esas precondiciones como las metas originales. Este procedimiento suele generar un árbol de búsqueda bastante frondoso, pues debe considerar todas las diferentes ordenaciones de las submetas, así como todas las formas en que podría satisfacerse una meta dada. Afortunadamente, por otra parte, muchos de los caminos pueden eliminarse con bastante rapidez. Apliquemos este procedimiento al problema de la figura 3.18. En el primer nivel consideramos dos candidatos para el último operador a realizar. La última cosa a hacer puede ser poner A sobre B o poner B sobre C. Si escogemos poner B sobre C, entonces las precondiciones para esa operación, así como el predicado ENCIMA(A,B) deben ser todos ciertos antes de la operación. Pero el brazo sólo puede sostener un bloque, de forma que no puede sostener B si A está sobre B. Esta inconsistencia puede detectarse mediante un demostrador de teoremas por resolución. Este camino inconsistente puede podarse, de forma que nos quedemos con un solo candidato. Así se analiza todo el problema. Una porción del árbol de búsqueda para este problema usando este método de planificación se muestra en la figura 3.19.

110

Fig. 3.19. Porción del árbol de búsqueda para el problema de la fig. 3.18.

Limitaciones de este algoritmo: - Si las submetas no interaccionan, no tiene importancia el orden en que se

lleven a cabo los pasos de una de ellas con respecto a los pasos de la otra. Entonces todas las permutaciones posibles parecerán razonables y no se podará ninguna, generándose un árbol muy grande. Necesitamos una forma de evitar considerar la mayoría de secuencias de solución, ya que son permutaciones unas de otras, por lo que cualquiera de ellas es adecuada. Este problema se resuelve con el método de planificación no lineal usando la estrategia del menor compromiso.

- Debido a que este método no tiene manera de distinguir entre metas importantes y triviales, puede perder mucho tiempo en los detalles de un plan que podemos descubrir luego que es completamente inadecuado. Para resolver esto, necesitamos un planificador que empiece trazando un plan que satisfaga la parte principal de la meta y llene a continuación los detalles conforme se vayan necesitando. Este método es, precisamente, la planificación jerárquica.

3.5.3. Planificación jerárquica. Para resolver problemas difíciles, un resolutor de problemas puede tener que generar planes largos. Para hacerlo eficientemente, es importante poder eliminar algunos de los detalles del problema hasta haber encontrado una solución a los puntos principales. Entonces puede realizarse un intento de llenar los detalles apropiados. Con este método se resuelve, primeramente, el problema completo, considerando sólo aquellas precondiciones cuyo valor crítico sea el más elevado posible. Estos valores reflejan la dificultad esperada al satisfacer la precondición. Para realizar esto, deben seguirse exactamente los mismos pasos que seguía STRIPS, pero ignorar simplemente las precondiciones inferiores a los puntos críticos; luego se usa el plan construido como un esbozo del plan completo y se consideran las pre-condiciones del siguiente nivel crítico. Continuamos este proceso de considerar

ENCIMA(A ,B)

ENCIMA (B,C)

DESPEJAR (B)

SOSTENER(A)

ENCIMA (B,C)

DESPEJAR (C)

SOSTENER (B)

ENCIMA (A,B)

111

precondiciones cada vez menos críticas hasta haber considerado todas las precondiciones de las reglas originales. Evidentemente, la asignación de valores críticos apropiados es crucial para el éxito de este método. Aquellas precondiciones que no pueda satisfacer ningún operador son, evidentemente, las más críticas. Por ejemplo, si estamos intentando resolver un problema que atañe a un robot que se mueve por una casa y estamos considerando el operador PASARPUERTA, la precondición de que exista una puerta grande para que el robot pueda pasar a través de ella es altamente crítica, pues si no existe, no podemos hacer nada. Sin embargo, la precondición de que la puerta esté abierta es poco crítica si disponemos del operador ABREPUERTA. Dando los valores críticos a las reglas STRIPS, el proceso básico funciona de manera similar a como lo hacen los planificadores no jerárquicos. Hay otras técnicas de planificación como:

- Planificación no lineal usando la estrategia del menor compromiso. - Planificación por medio de colocación de restricciones. - Planificación mediante tablas de triángulos. - Metaplaneo. - Cajas de plan.

Pueden verse explicaciones de ellas en Rich. 3.5.4. Aplicaciones prácticas de la planificación. Algunos planificadores han obtenido resultados convincentes en diversos dominios. Por ejemplo:

DEVISER: en la planificación de actividades espaciales. GARI: en el maquinado de piezas mecánicas. ISIS: en manufactura. KNOBS: en misiones tácticas de fuerzas aéreas.

Ejemplos de planificadores no jerárquicos son STRIPS, HACKER e INTERPLAN. Entre los jerárquicos podemos mencionar ABSTRIPS, que elabora sus planes bajo un esquema de jerarquía en espacios de abstracción, en donde el más alto en jerarquía contiene un plan carente de detalles irrelevantes y el de más baja jerarquía contiene una secuencia completa y detallada de operadores de resolución de problemas. Otros jerárquicos son NOAH, el cual hace abstracción de los operadores de solución de problemas y MOLGEN, que hace abstracción tanto de los operadores como de los objetos en el espacio de problemas.

112

3.6. Teoría de juegos. Los juegos tienen para muchos una inexplicable fascinación, y la idea de que los computadores pudieran jugar ha existido al menos desde que éstos existen. El famoso arquitecto de computadoras Charles Babbage, antes de tiempo, pensó en programar su Máquina Analítica para jugar al ajedrez, y más tarde pensó construir una máquina para jugar al titafor. Dos de los pioneros de la ciencia de la información y de la computación contribuyeron a la incipiente literatura de juegos por computadora: Claude Shannon escribió un artículo en el que describía mecanismos que podían usarse en un programa que jugase al ajedrez y unos años después, Alan Turing describió un programa para este juego, aunque nunca lo construyó. Al principio de los 60, Arthur Samuel tuvo éxito al construir el primer programa importante y operacional para jugar. Su programa jugaba a las damas y, además de jugar las partidas, podía aprender de sus errores y mejorar su actuación. Había dos razones para que los juegos pareciesen ser un buen dominio en el cual explorar la inteligencia de la máquina:

- Proporcionan una tarea estructurada en la que es muy fácil medir el éxito o el fracaso.

- No es obvio que requieran gran cantidad de conocimientos. Se pensó que se podrían resolver por búsqueda directa a partir del estado inicial hasta la posición ganadora.

La primera de esas razones es aún válida, pero la segunda no es cierta para juegos no muy sencillos. Por ejemplo en el problema del ajedrez, se tienen los siguientes datos:

- Factor de ramificación promedio: aproximadamente 35. - En un juego promedio, cada jugador podría hacer 50 movimientos. - Para examinar el árbol completo, hay que examinar 35100 posiciones.

Por lo tanto, es evidente que un programa que realice una simple búsqueda directa del árbol de juego, no podrá seleccionar ni siquiera su primer movimiento durante el período de vida de su oponente. Es necesaria alguna clase de procedimiento de búsqueda heurística. Una manera de ver todos los procedimientos de búsqueda estudiados es que son de generar-y-comprobar. En un extremo, el generador propone soluciones completas y el comprobador las evalúa. En el otro extremo, el generador genera movimientos individuales del espacio de búsqueda, cada uno de los cuales se evalúa por el comprobador, eligiendo el más prometedor de ellos. Para mejorar la efectividad de un programa resolutor de problemas basado en la búsqueda existen dos opciones:

- Mejorar el procedimiento de generación, de forma que se generen sólo buenos movimientos o caminos.

- Mejorar el procedimiento de comprobación para que sólo se reconozcan y exploren los mejores movimientos o caminos.

113

En los programas de juegos es particularmente importante que se hagan ambas cosas. Naturalmente en ellos, como en otros dominios de problemas, la búsqueda no es la única técnica disponible. Por ejemplo, en el ajedrez tanto las aperturas como los finales están casi siempre altamente estudiados, de manera que se juega mucho mejor consultando una tabla en una B.D. que almacene modelos comprobados. Así, para jugar un juego completo pueden combinarse ambas técnicas. Desafortunadamente, para juegos como el ajedrez, no es posible buscar hasta encontrar el estado meta, ni aún disponiendo de un buen generador de movimientos plausibles. En la cantidad de tiempo disponible, sólo es posible buscar menos de 10 movimientos en el árbol (llamados capas en la literatura de juegos). Así, para elegir el mejor movimiento, se utiliza una función de evaluación estática, que usa toda la información disponible para evaluar posiciones individuales del tablero, estimando la probabilidad de que conduzcan a la victoria. Su función es similar a la de h* en el algoritmo A*. Naturalmente, la fun-ción de evaluación estática puede aplicarse, simplemente, a las posiciones generadas por los movimientos propuestos. Pero, como es difícil producir una función realmente buena, es mejor aplicarla tantos niveles hacia abajo en el árbol de juego como el tiempo lo permita. Por ejemplo, Turing propuso una función de evaluación estática para el ajedrez que se basaba en la ventaja de piezas: sumar los valores de las piezas negras (N), los valores de las piezas blancas (B) y calcular B/N. Samuel propuso otra para las damas que consistía en una combinación lineal de funciones simples. Estas funciones consideraban la ventaja de piezas, la capacidad de avance, el control del centro, amenazas dobles y movilidad. A cada una de ellas se le asignaba un peso: C1*ventajapiezas + C2*avance + C3*controlcentro + ..., pero Samuel no conocía los pesos correctos. Para ello usó un mecanismo simple de aprendizaje, en el que se incrementaban los pesos de aquellas componentes que habían sugerido movimientos que condujeron a victorias y decrementaba los que condujeron a derrotas. Pero esto no es fácil, pues pudimos hacer un movimiento muy malo y después el oponente realizar un error y nosotros ganar el juego, por lo que no podemos dar crédito de nuestra victoria a esta jugada mala. No obstante, el programa de Samuel era capaz de derrotar a su creador de vez en cuando. Otra función de evaluación estática para el juego de damas podría ser: 0.7*(MD-DO) + 0.3*(MP-PO), donde MD y DO son el número de damas nuestras y del oponente, respectivamente y MP y PO es la cantidad de las restantes piezas nuestras y del oponente, respectivamente. Hemos discutido las dos componentes importantes de un buen programa de juegos: un buen generador de movimientos plausibles y una buena función de evaluación estática. Ambas deben incorporar gran cantidad de conocimientos sobre el juego concreto que se está jugando. Pero, a menos que estas funciones sean perfectas, también necesitamos un procedimiento de búsqueda que haga posible prever tantos movimientos como sea posible para ver lo que podría ocurrir. Para juegos unipersonales simples puede usarse el algoritmo A*, pero para juegos bipersonales esto es imposible.

114

3.6.1. Conceptos principales. En esta sección sólo consideraremos los juegos entre dos personas con información completa, o sea, los juegos en que los jugadores realizan jugadas alternadamente y ambos conocen completamente lo que han hecho y pueden hacer, pues cada movimiento conduce a un conjunto de estados completamente predecible, como por ejemplo, el ajedrez, las damas, el titafor, etc. No tendremos en cuenta los juegos de azar. La teoría de los juegos es una disciplina, en la cual el objeto de sus investigaciones son los métodos de toma de decisión en las llamadas situaciones de conflicto. La situación se llama de conflicto si en ella chocan los intereses de varias, habitualmente dos, personas que persiguen objetivos opuestos. Imagínese que se quiere jugar una partida de ajedrez con las blancas pero no podemos estar presentes personalmente durante el juego. Se tiene un sustituto que debe desarrollar la partida y cumplir todas las indicaciones, pero él no sabe jugar bien al ajedrez y no es capaz de tomar decisiones independientes. Para que el sustituto pueda desarrollar toda la partida hasta el final, deben dársele tales indicaciones que prevean cualesquiera posiciones posibles en el tablero y determinen para cada posición la jugada que debe hacerse. El sistema completo de estas indicaciones es lo que se conoce como estrategia. La estrategia del jugador constituye la descripción unívoca de su elección en cada situación posible en la que él debe hacer una jugada. Para comprender los principios que constituyen el fundamento de la elección de su estrategia por cada jugador, examinemos un estado particular del juego entre dos personas, en el cual el jugador A puede emplear las estrategias X1, X2, X3 y X4, mientras que el jugador B puede emplear Y1, Y2, Y3 y Y4. Las ganancias que puede alcanzar el jugador A se muestran en la tabla siguiente:

Y1 Y2 Y3 Y4 A(X) X1 7 2 5 1 1 X2 2 2 3 4 2 X3 5 3 4 4 3* X4 3 2 1 6 1 B(Y) 7 3* 5 6

Supongamos que el primer jugador elige la estrategia Xk. La ganancia L(Xk,y) va a depender de la estrategia que elija el segundo jugador. Por ejemplo, con la estrategia X1 las ganancias de A pueden ser 7, 2, 5 ó 1. Esto indica que, independientemente de la respuesta de B a la estrategia X1, la ganancia nunca será menor que 1.

115

L(X1,y)={7,2,5,1} representa la ganancia del primer jugador con la estrategia X1.

Generalizando los razonamientos expuestos vemos que si el jugador A emplea la estrategia Xk, asegura una ganancia A(Xk) igual al menor elemento del conjunto L(Xk,y): A(Xk)=min L(Xk,y) y

En la teoría de juegos se supone que los jugadores obran con suficiente cuidado evitando el riesgo infundado. En este caso, el primer jugador debe elegir la estrategia que maximice A(X). Designando la ganancia garantizada del primer jugador por ALFA y llamándole precio puro inferior del juego, se obtiene: ALFA= max A(x) = max min L(x,y) x x y

En la tabla el valor ALFA está marcado en la columna A(x) por un asterisco (*). Pueden realizarse razonamientos análogos con respecto al segundo jugador. Pero, en este caso, la matriz del juego indica las pérdidas, las que él trata de hacer mínimas. B(Yk)=max L(x,Yk) x Para asegurarse la pérdida menor, el jugador B debe minimizar B(Y). Designando la magnitud de la pérdida por BETA y llamándole precio puro superior del juego, se obtiene: BETA= min B(y) = min max L(x,y) y y x

El valor BETA está marcado con un asterisco en la fila B(y) de la tabla.

3.6.2. La partida como un árbol. Cada partida puede ser representada como un árbol. Como estudiamos en la sección 3.2.1.1, el árbol de juego representa los cursos alternativos que puede tomar dicho juego. Los nodos de tales árboles corresponden a situaciones del juego y los arcos a movimientos. La situación inicial del juego es el nodo raíz y las hojas del árbol corresponden a posiciones terminales. Usando esta representación y considerando que, como se vio en la sección anterior, se puede en cada momento calcular los precios inferior y superior del juego de modo que cada jugador pueda seleccionar la estrategia mejor, el procedimiento a seguir puede basarse en que en cada nivel del árbol se calculen estos precios. Esto garantiza poder decidir por qué rama del árbol en ese momento conviene que el jugador tome. El problema principal es cómo calcular esos precios, para lo cual hay dos variantes. Los precios pueden ser calculados como un estimado a priori de cuán bueno es un estado del juego sin tener en

116

cuenta la bondad de los estados futuros. La otra variante es considerar, al calcular el precio de un estado, sus consecuencias futuras. Obviamente, la segunda vía resulta mejor. Esta última variante presupone generar, a partir de una situación dada que se considerará el nodo inicial, los nodos sucesores de éste hasta cierto nivel de profundidad, para lo cual se pueden usar los métodos de búsqueda ya estudiados. El nivel de profundidad al que se realiza el corte puede ser llegar a una posición final, pero esto sólo es posible en juegos muy simples. Si los nodos hojas no corresponden a posiciones finales es necesario calcular el precio de éstos y propagar los mismos hasta el nodo inicial para entonces aplicar el criterio de los precios superior e inferior por cada jugador. El objetivo al usar un árbol de búsqueda es encontrar un buen primer movimiento, para lo cual generamos un árbol hasta cierta profundidad, la cual estará determinada por ciertas condiciones de terminación basadas en diversos factores, como por ejemplo, un límite de tiempo, límite de almacenamiento, profundidad, etc. Después de terminar la generación del árbol de búsqueda, el cual se diferencia del árbol de juego en que solamente está formado por una parte de éste, se tiene que hacer un estimado del mejor primer movimiento. Este estimado puede hacerse aplicando una función de evaluación estática a los nodos hojas del árbol, la cual mida la bondad de la posición representada en el nodo hoja y luego propagar estos valores hasta el nodo en que es necesario tomar la decisión. Seguidamente se presentan dos procedimientos para hacer esto.

3.6.3. Procedimientos de tomas de decisiones en el juego. 3.6.3.1 Procedimiento MINIMAX. Este procedimiento consiste en lo siguiente: se genera el árbol de búsqueda, tomando como nodo inicial determinada situación de conflicto, o sea, a partir de una posición dada usando el generador de movimientos plausibles, se genera un conjunto de posiciones sucesivas posibles. Luego se evalúan los nodos hojas según algún estimador heurístico, el cual estima las oportunidades de ganar de algún jugador (función de evaluación estática). Este valor representa la bondad de la situación representada en el nodo para uno de los dos jugadores y, a la vez, da una medida de cuán mala es esa situación para el otro. Como uno de los jugadores tratará de alcanzar una posición de alto valor y el otro de un valor bajo, los jugadores son llamados MAX y MIN respectivamente. Cuando MAX juegue, él seleccionará un movimiento que maximice el valor. Por el contrario, MIN seleccionará un movimiento que minimice el valor. Es usual, en el análisis, adoptar el convenio de que posiciones favorables para MAX sean indicadas por valores positivos de la función de evaluación, mientras que posiciones favorables para MIN causen valores negativos y valores cercanos a cero correspondan a posiciones no favorables a ninguno de los jugadores. Teniendo en cuenta estas ideas se puede realizar el proceso de propagación de los valores calculados para los nodos terminales hacia posiciones superiores en el árbol. Supóngase que se van a evaluar los nodos del penúltimo nivel del árbol, o sea, el nivel en que están los nodos cuyos sucesores corresponden a nodos

117

terminales y por eso ya evaluados usando la función de evaluación. Si esos nodos corresponden a una situación en la cual le toca jugar a MAX lo llamaremos MAX-nodo y se le asignará como valor el máximo de las evaluaciones de sus nodos sucesores. Si, por el contrario, corresponden a una situación en la cual está MIN en posición de jugar lo llamaremos MIN-nodo y el valor asignado será igual al mínimo de la evaluación de los nodos sucesores. Se continúan propagando valores nivel a nivel hasta que finalmente se evalúan los nodos sucesores del nodo inicial. Estamos asumiendo que a MAX le toca jugar al inicio, de modo que MAX debe seleccionar como su primer movimiento el que corresponde al sucesor con mayor valor. Esta regla puede ser formalizada de la forma siguiente: denotemos el valor estáti-co de una posición P por v(P) y el valor propagado por V(P). Sean P1,..,Pn las posiciones sucesoras de P. V(P)= v(P) Si P es una posición terminal en el árbol de búsqueda (n=0). V(P)= max V(Pi) Si P es una posición en la que a MAX le toca jugar. i

V(P)= min V(Pi) Si P es una posición en la que a MIN le toca jugar. i Analicemos un ejemplo: Supongamos una función de evaluación estática que devuelve un rango de valores desde -10 a 10, con 10 indicando una victoria para nosotros, -10 para el oponente y 0 para empate. En la figura 3.18, como nuestra meta es maximizar V(Pi), elegimos movernos hacia B, llevando de regreso el valor de B hasta A. Podemos concluir, entonces, que el valor de A es 8, pues nos permite movernos hacia una posición con este valor. Pero como sabemos que la función de evaluación estática no es precisa, es mejor guiar la búsqueda más allá de una sola capa. Hagámoslo en 2 capas. En lugar de aplicar la función de evaluación estática en B, C y D, aplicamos en cada una de ellas el generador de movimientos plausibles, produciendo el conjunto de posiciones sucesoras de cada una de ellas. Aplicando a estas posiciones la función de evaluación estática obtenemos la figura 3.19. Ahora debemos tener en cuenta que es al oponente al que le toca decidir. Supongamos que hacemos el movimiento B. Entonces el oponente debe elegir entre E, F y G. El elige F, pues trata de minimizar el valor de la función estática. Por tanto, si elegimos B desembocamos en una posición muy mala para nosotros. La figura 3.20 muestra el resultado de propagar los nuevos valores hacia la raíz del árbol.

(8) (3) (-2) (9) (-6) (0) (0) (-2) (-4) (-3) Fig.3.20 Búsqueda en una capa Fig. 3.21 Búsqueda en dos capas

A

D C B

A

B C D

E F G H I J K

118

(-2) (-6) (-2) (-4) (9) (-6) (0) (0) (-2) (-4) (-3) Fig. 3.22 Propagación hacia atrás de los valores La maximización y minimización en capas alternas cuando las evaluaciones se envían de regreso a la raíz, corresponden a las estrategias opuestas de ambos jugadores y da a este método el nombre de MINIMAX. Una manera de implementar este procedimiento es la siguiente:

Entrada: Posición actual y el jugador que le toca jugar, ya sea MIN o MAX. Salida: La jugada a realizar o el resultado del juego. 1) Si la posición es terminal para el juego, RETORNAR EL RESULTADO DEL

JUEGO, relativo al jugador que le toca jugar. 2) Si le toca jugar a MIN, entonces:

a) Generar los sucesores de la posición actual. b) Aplicar MINIMAX a cada una de estas posiciones, considerando que al

jugador MAX le toca jugar. c) RETORNAR EL MINIMO DE ESTOS RESULTADOS.

3) Si le toca jugar a MAX, entonces: a) Generar los sucesores de la posición actual. b) Aplicar MINIMAX a cada una de estas posiciones, considerando que al

jugador MIN le toca jugar. c) RETORNAR EL MAXIMO DE ESTOS RESULTADOS.

Una implementación de este procedimiento en PROLOG puede verse en [Bra86].

3.6.3.2 Procedimiento alfa-beta. Supongamos que el factor de ramificación para el juego del ajedrez es 20 y que el nivel de profundidad a explorar es 6 (3 para cada jugador). Entonces, tendremos que evaluar estáticamente 3 200 000 hojas y aplicar el procedimiento MINIMAX a 168 421 nodos intermedios. Suponiendo que se realizan 160 000 evaluaciones por segundo, se necesitarían 22 segundos para analizar 3 movimientos. Extendiendo esta búsqueda a 3 1/2 movimientos, el tiempo se incrementa a 422 segundos, o sea, 7 minutos. Cada jugador sólo puede consumir 3 minutos en cada jugada, por lo que aplicar este procedimiento se hace impracticable. El procedimiento MINIMAX separa completamente el proceso de generación del árbol de búsqueda de la evaluación de la posición. Esta separación lleva a que éste sea ineficiente, pues usualmente no es necesario visitar todas las posiciones

A

B C D

E F G H I J K

Capa minimizante

Capa maximizante

119

en el árbol para calcular correctamente el valor minimax de la posición raíz. Esta deficiencia puede ser reducida considerablemente si se ejecuta la evaluación de los nodos terminales y el cálculo de los valores propagados simultáneamente con la generación del árbol. Esta mejora se basa en la idea siguiente: supongamos que hay dos movimientos alternativos y uno de ellos muestra que es claramente inferior al otro, por lo que no es necesario, entonces, conocer cuán inferior es para tomar la decisión correcta. (>3)

(3) (>-5) (3) (5) (-5) Fig. 3.23 Un ejemplo de árbol de búsqueda para la poda alfa-beta Considerando el árbol de búsqueda de la figura 3.23, supongamos que un nodo terminal se evalúa tan pronto como éste es generado y que se propague su valor en cuanto se pueda. Después de examinar a F, sabemos que el oponente tiene garantizado un tanteo de -5 o menos en C. Pero, como tenemos garantiza-do un tanteo de 3 en A si nos movemos por B, no necesitamos explorar el nodo G. Naturalmente, el podar un nodo puede parecer que no justifique el gasto de grabar los límites y examinarlos, pero si estuviésemos explorando un árbol de 6 niveles, entonces no sólo habríamos eliminado un nodo único sino un árbol entero de tres niveles de profundidad. Esta estrategia modificada se llama poda alfa-beta. Requiere el mantenimiento de dos valores umbrales: uno que representa la cota inferior del valor que puede asignarse en último término a un nodo maximizante, que llamaremos ALFA, y otro que represente la cota superior que puede asignarse a un nodo minimizante, que llamaremos BETA.

Capa maximizante Alfa=3 Beta=5 Capa minimizante 7>5 (3) (5) (4) Capa maximizante (5) (7) (8) Capa minimizante (0) (7) Fig. 3.24. Atajos alfa-beta.

A

B C

D E F G

H

I J NM

K L

A

B C

D E F G

Capa minimizante

Capa maximizante

120

Al realizar la búsqueda representada en la figura 3.24, se explora el árbol entero encabezado por B, y descubrimos que en A podemos esperar un tanteo de 3 como mínimo (ALFA=3). Cuando este valor ALFA se pasa a F nos permite podar L. Veamos por qué. Después de examinar a K, vemos que I proporciona un tanteo máximo de 0, lo que significa que F produce un mínimo de 0, pero esto es menor que el valor ALFA de 3, por lo que no necesitamos explorar más ramas de I. El jugador maximizante sabe que no debe elegir C e I a partir de C, pues ir por B es mejor. Después se examina J que produce un valor de 5 y se le asigna a F, ya que 5 > 0. Este valor se convierte en el valor BETA del nodo C y nos garantiza que el valor de C será 5 o menos. A continuación se expande G y se examina primero M con un valor de 7. Pero ahora se compara 7 con el valor BETA. Como es mayor y el jugador que tiene el turno del nodo C está tratando de minimizar, entonces ese jugador no elegirá G, que conduce a un tanteo de 7 como mínimo, puesto que puede irse por F. Por tanto, no es necesario explorar ninguna de las otras ramas de G. Esta reducción en el esfuerzo de la búsqueda fue alcanzada manteniendo las pistas de las cotas sobre los valores propagados. En general, como los sucesores de un nodo van produciendo nuevos valores, las cotas pueden ser modificadas, pero:

- los valores ALFA de los nodos MAX no pueden decrecer, y - los valores BETA de los nodos MIN no pueden crecer.

Debido a estas restricciones podemos enunciar las reglas siguientes para podar la búsqueda:

a) Puede podarse debajo de cualquier nodo MIN que tenga un valor BETA menor o igual al valor ALFA de sus nodos MAX padres. El valor final propagado de este nodo MIN será entonces el valor BETA. Este valor puede no ser el mismo que el obtenido por una búsqueda MINIMAX completa, pero su uso trae por consecuencia que se seleccione el mismo mejor movimiento.

b) Puede podarse debajo de cualquier nodo MAX que tenga un valor ALFA mayor o igual al valor BETA de cualquiera de sus nodos MIN padres. El valor final propagado de este nodo MAX será entonces el valor ALFA.

Cuando la búsqueda se interrumpe por la regla a) se dice que ocurrió un corte alfa. Si, por el contrario, fue por la regla b) se dice que ocurrió un corte beta. Empleando el procedimiento alfa-beta siempre se realiza un movimiento que es tan bueno como podría haber sido encontrado por el procedimiento MINIMAX, buscando a la misma profundidad pero realizando mucha menos búsqueda. Para ejecutar una poda ALFA-BETA, al menos alguna parte del árbol de búsqueda tiene que ser generado a la profundidad máxima, porque los valores ALFA y BETA se basan en los valores estáticos de los nodos terminales. Por eso, algún tipo de búsqueda primero en profundidad se emplea usualmente al utilizar este procedimiento. Además, la cantidad de cortes que pueden ser hechos durante una búsqueda depende del grado en que los valores ALFA y BETA iniciales aproximen los valores

121

propagados finalmente. El valor final propagado del nodo inicial es idéntico al valor estático de alguno de los nodos terminales. Si este nodo terminal es el primero que se alcanza en la búsqueda primero en profundidad, la cantidad de cortes sería máxima, lo cual provoca que se generen y evalúen una cantidad mínima de nodos hojas. En este procedimiento el número de hojas estáticamente evaluadas es aproximadamente 2bd/2, donde b es el factor de ramificación y d la profundidad del árbol de búsqueda. Si utiliza MINIMAX, hay que evaluar todas las bd hojas. Por lo tanto, utilizando el procedimiento alfa-beta, podemos explorar el doble de la profundidad del árbol con el mismo número de evaluaciones. Si el orden de las ramas del árbol fuera, exactamente, el inverso del correcto, entonces el procedimiento alfa-beta no ahorraría nada. Una manera de implementar este procedimiento es la siguiente:

Entrada: Posición actual, el jugador que le toca jugar, ya sea MIN o MAX, ALFA, BETA, el nivel actual de búsqueda (NIVEL) y la profundidad máxima de búsqueda (MAXPROF).

Salida: La evaluación estática de la posición actual. 1) Si NIVEL = MAXPROF, entonces calcular la función de evaluación estática

en la posición actual y RETORNAR EL RESULTADO. 2) Si al jugador MIN le toca jugar, entonces:

a) Generar una lista de Sucesores de la posición actual. b) Si ALFA > BETA o Sucesores está vacía, entonces TERMINAR y

RETORNAR BETA (poda ALFA). c) BETAc:= ALFA-BETA(Sucesores[1], MAX, ALFA, BETA, NIVEL + 1) d) BETA:= mín(BETA,BETAc) e) Eliminar el primer elemento de la lista Sucesores e ir al paso 2b).

3) Si al jugador MAX le toca jugar, entonces: a) Generar una lista de Sucesores de la posición actual. b) Si ALFA > BETA o Sucesores está vacía, entonces TERMINAR y

RETORNAR ALFA (poda BETA). c) ALFAc:= ALFA-BETA(Sucesores[1], MIN, ALFA, BETA, NIVEL + 1) d) ALFA:= máx(ALFA,ALFAc) e) Eliminar el primer elemento de la lista Sucesores e ir al paso 3b).

Una implementación de este procedimiento en PROLOG puede verla en [Bra86].

La efectividad de ALFA-BETA depende del orden en que se examinen los caminos. Si 1ro se ven los peores caminos no se hará ninguna poda. Pero si conociéramos el mejor camino no se haría ninguna búsqueda. No obstante, es de gran ayuda. Profundización iterativa. Se introdujo en CHESS 4.5 (Slate y Atkin 1977). En lugar de buscar en el árbol de juego con una profundidad fija comienza buscando en una sola capa y luego aplica la función de evolución estática. Entonces hace lo mismo para dos capas, tres, etc. Se llama así porque en cada iteración la búsqueda se hace más profunda. A 1ra vista parece un despilfarro pero tiene sus ventajas:

122

Debido a las restricciones de tiempo, cuando se considere fuera de tiempo, puede cortarse la búsqueda en cualquier momento. En una profundidad fija no puede estimarse el tiempo que se va a llevar.

Si se juzga que un movimiento es superior a sus hermanos en la iteración previa, puede buscarse en él 1ro en la próxima iteración. Con este ordenamiento la poda ALFA-BETA es más efectiva.

Se han desarrollado sistemas para jugar al ajedrez, damas, go, backgammon, poker, othello (tablero de 8x8 con cuadros de dos colores), bridge, dominó, go mo ku y corazones. 3.6.3.3. Refinamientos adicionales. Además de la poda alfa-beta existen otros refinamientos del procedimiento MINIMAX que mejoran su rendimiento: esperando el reposo, búsqueda secundaria y usar movimientos de libro. Esperando el reposo Consideremos el árbol de la figura 3.25 y supongamos que, al expandir el nodo B, obtenemos la figura 3.26. Nuestra estimación del nodo B cambió drásticamente, lo cual pudiera suceder, por ejemplo, en medio de un intercambio de piezas. Al iniciar dicho intercambio la situación del oponente ha mejorado. Si nos detenemos ahí, decidiremos que B no es un buen movimiento. Para asegurarnos de que tales medidas a corto plazo no influyan indebidamente en nuestra elección, deberíamos continuar la búsqueda hasta que no ocurra un cambio tan drástico de un nivel al siguiente. A esto se le llama esperar el reposo. Así podría obtenerse el árbol de la figura 3.27, donde B vuelve a ser un buen movimiento, pues ya se ha realizado la otra mitad del intercambio de piezas.

(-4) (0) (6) (0) (0) (-4) Fig. 3.25 Situación inicial. Fig. 3.26 Situación después de expandir el nodo B.

A

C B

A

B C

E F

123

(6) (0) (6) (7) (5) (6) (7) (6) Fig. 3.27 Situación obtenida al esperar el reposo. Búsqueda secundaria Otra forma de mejorar MINIMAX es realizar una doble comprobación del movimiento elegido, para asegurarnos de que no haya una trampa escondida unos cuantos movimientos más adelante de los que exploró la búsqueda original. Supongamos que elegimos un árbol de juego a profundidad 6 y escogemos un movimiento. Aunque habría sido costoso explorar el árbol completo a profundidad 8, no lo es buscar 2 niveles más en la única rama escogida, para asegurarnos de que es realmente buena. Esta técnica se llama búsqueda secundaria. Usar movimientos de libro En ajedrez, tanto la apertura como los finales, están altamente estilizados. El rendimiento de un programa puede mejorarse considerablemente si se le proporciona una lista de movimientos, llamados movimientos de libro, que deberían realizarse en dichos casos. Usando esta estrategia, conjuntamente con MINIMAX para el medio juego, se obtienen programas muy efectivos.

3.6.4. Limitaciones de MINIMAX. A pesar de todos los refinamientos estudiados, el procedimiento MINIMAX tiene las siguientes limitaciones:

- Susceptible del efecto horizonte. Supongamos, por ejemplo, que hacemos un intercambio de piezas en donde el oponente necesitará dos movimientos para capturar nuestra pieza. En su turno es casi seguro que el oponente realizará el primero de estos movimientos. Pero en nuestro turno podemos realizar un ataque en algún otro lugar y el oponente puede respondernos sin completar el intercambio de piezas y así sucesivamente, durante varias jugadas. Si la búsqueda se detiene en ese punto, nunca notaremos que la pérdida de una pieza nuestra es inevitable. Aunque la búsqueda hasta el reposo suele

Capa minimizante

Capa maximizante

Capa maximizante

A

B C

E F

G H I J

124

ayudarnos a evitar esto, aún es posible, dada la profundidad finita de cualquier búsqueda, arrastar algo importante más allá del horizonte, donde nunca sea notado.

- Se basa principalmente en el supuesto de que el oponente siempre elegirá el movimiento óptimo. Supongamos que estamos perdiendo la partida y que debemos elegir entre dos movimientos, uno de los cuales es ligeramente menos malo que el otro. Si realizando el movimiento más malo es más probable que el oponente cometa un error, nuestra jugada se convertiría en una muy buena. En situaciones similares es mejor correr el riesgo de que el oponente cometa el error. Sin embargo, en este caso el procedimiento MINIMAX no elegirá el movimiento deseado por nosotros. Para tomar correctamente estas decisiones, es importante tener acceso a un modelo del estilo de juego individual del oponente, de forma que pueda estimarse la probabilidad de los diversos errores que éste pudiera cometer. Pero esto es muy difícil de proporcionar.

EJERCICIOS PROPUESTOS 1- Sea el problema del mundo de bloques mostrado en la figura 3.28. Suponga que se tiene definido el operador MOVER(x,y) donde x es un bloque y y puede ser un bloque o la mesa.

a) Represente el espacio de estados. b) ¿Cuál es el recorrido de la búsqueda primero en profundidad?. c) ¿Cuál es el recorrido de la búsqueda primero a lo ancho?. A A B C B C Estado inicial Estado final

Fig. 3.26. Un problema del mundo de bloques.

2- Trazar la ejecución del procedimiento generar del enfoque guiado por datos cuando se intenta determinar si N es divisible por 2 dada la siguiente base de reglas y la B.D. inicial que contiene los hechos N es divisible por 10 y N es divisible por 12.

Base de reglas

R1: Si X es divisible por 12, entonces X es divisible por 6. R2: Si X es divisible por 20, entonces X es divisible por 10. R3: Si X es divisible por 6, entonces X es divisible por 2. R4: Si X es divisible por 10, entonces X es divisible por 5.

125

3- Trazar la ejecución del procedimiento validar del enfoque guiado por objetivos cuando se intenta determinar si N es divisible por 2 dada la base de reglas del ejercicio anterior y la B.D. inicial que contiene los hechos N es divisible por 10 y N es divisible por 12. 4- Supongamos que los tres primeros pasos de la ejecución del algoritmo A* proporcionan la situación mostrada en la siguiente figura, donde A+B significa que el valor de g* en ese nodo es A y el valor de h* es B.

a) ¿Qué nodo se expandirá en el próximo paso?. b) ¿Podemos garantizar que se encontrará la mejor solución?. Paso 1 Paso 2 (1+4) (1+3) (1+4) (1+3) (2+4) Paso 3 (1+4) (1+3) (2+2) (2+4)

5- Supongamos que tenemos un problema que queremos resolver usando un procedimiento heurístico de búsqueda por el mejor nodo. Necesitamos decidir si representarlo como árbol o como grafo. Supongamos que sabemos que, en promedio, cada nodo distinto se generará A veces durante el proceso de búsqueda. Sabemos también que si usamos un grafo nos tomará, en promedio, la misma cantidad de tiempo el comprobar un nodo para ver si ya ha sido generado, que el que toma procesar B nodos si no se realiza ninguna comprobación. ¿Cómo podemos decidir si usar un grafo o un árbol?. 6- Consideremos el árbol de juego mostrado en la figura 3.27. Supongamos que el jugador A es maximizante.

a) ¿Qué movimiento debería elegir? b) ¿Qué nodos no haría falta examinar usando la poda alfa-beta?

A

C B

A

B C

D

A

B C

D E

126

7 6 8 5 2 3 0 2 6 2 5 8 9 2 7- Dos jugadores están frente a una pila de objetos. El primer jugador divide la pila original en dos pilas que no pueden tener la misma cantidad de elementos. Cada jugador alternadamente hace lo mismo. El juego continúa hasta que todas la pilas tengan uno o dos objetos, pues en este punto se hace imposible continuar. El jugador que primero no pueda jugar es el perdedor.

a) Construya el árbol de juego considerando que la pila inicial tiene 7 objetos. b) Si MIN es el primero en jugar, muestre cómo independientemente de lo que

éste haga en el transcurso del juego, MAX siempre gana. c) ¿Es la situación anterior cierta para cualquier cantidad de objetos en la pila

inicial? d) Defina una función de evaluación estática para este juego. e) Aplique los procedimientos MINIMAX y ALFA-BETA al juego.

8- Consideremos el sistema tipo STRIPS al que se le proporciona el conjunto de operadores siguientes:

PASAR-EXAMEN Precondición y Suprimir: IGUAL(grado,x) Añadir: DORMIR-TARDE ∧ IGUAL(grado,x-10) ESCRIBIR-ARTICULO Precondición: IGUAL(grado,x) Suprimir: IGUAL(grado,x) ∧ DORMIR-TARDE Añadir: IGUAL(grado,x+50) También se tienen los siguientes axiomas acerca de su universo: MAYOR(grado,80) ⇒ CAPAZ-DE-GRADUARSE MENOR(grado,80) ⇒ ¬ CAPAZ-DE-GRADUARSE

Supongamos que este sistema está intentando, dada la condición inicial grado = 70, satisfacer la meta DORMIR-TARDE y CAPAZ-DE-GRADUARSE. ¿Cómo podríamos resolverlo mediante el enfoque de planificación usando un conjunto de metas?.

A

B C D

E F G H I J K

L M N O P Q R S T U V W X Y

127

Bibliografía [Ric88]- Inteligencia Artificial , Elaine.Rich, 1ra edición. [Ric2da]-Inteligencia Artificial , Elaine.Rich, 2da edición. [Bell] Modelos Computacionales Avanzados. Rafael Bello. [Frenz]- Crash course for Artificial Intelligence and Expert Systems. Louis Frenzel. [BDSE] - Bases de Datos y Sistemas Expertos, Tomo II. [Ullm] - Data structures and algorithms, Aho, Hopcroft, Ullman. [Bra86] - Prolog programming for AI, Ivan Bratko, epígrafes 15.1,15.2,15.3

Resumen

En este capítulo el lector ha profundizado en los métodos de solución de problemas. Ha conocido los pasos para modelar un problema en I.A., así como las características de los distintos espacios de búsqueda. Ha aprendido además sobre los métodos de búsqueda de soluciones en problemas donde el conocimiento sobre su dominio esté representado en una de las formas estudiadas en el capítulo anterior. Estos métodos de búsqueda como: búsqueda a ciegas, búsqueda heurística, planificación y teoría de juegos, el lector debe saber aplicarlos en la solución de problemas y conocer sus limitaciones, ventajas y desventajas.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

129

CAPITULO IV: SISTEMAS BASADOS EN EL CONOCIMIENTO. En los capítulos anteriores estudiamos las diversas F.R.C. y un gran número de M.S.P. En este capítulo analizaremos cómo utilizar e integrar lo estudiado en los Sistemas Basados en Conocimiento (S.B.C.). Comenzamos el estudio de los sistemas expertos, los cuales han sido uno de los principales éxitos comerciales de la IA y constituyen un modelo computacional de nuevo tipo, pues en ellos están perfectamente delimitadas las dos componentes de un modelo.

4.1. Definición de Sistema Experto. Los expertos son personas que resuelven tipos específicos de problemas. Su habilidad proviene, generalmente, de una vasta experiencia y de un conocimiento detallado, especializado de los problemas que manejan. Se pueden citar como ejemplos los médicos especialistas, intérpretes de datos de satélite, ingenieros expertos que diagnostican y reparan equipos de alta tecnología, entre otros.

El conocimiento de un experto humano presenta dos aspectos:

- Conocimiento formal o público: Está basado en las leyes conocidas de la naturaleza, como por ejemplo las leyes de Newton, y en métodos formales de razonamiento. Este conocimiento está, usualmente, incluido en los libros de texto relativos al tema y, como está formalizado, puede ser transferido a otras personas con relativa facilidad.

- Conocimiento informal o privado: Según el juicio, la opinión o el criterio del experto, consta de sugerencias y de cálculos aproximados. Constituye la parte más importante del conocimiento de los expertos. Se presume que el mejor experto es el que posee un conjunto más rico de este tipo de conocimiento.

La experticidad o pericia es, entonces, el conocimiento tanto público como privado que existe en determinado campo y las habilidades conocidas para resolver problemas dentro de ese campo. El conocimiento privado es el que diferencia a un experto de un novato, pues este último sólo posee conocimiento público sobre dicho campo.

El concepto de Sistema Experto (S.E.) fue introducido por Feigenbaum como consecuencia de la experiencia del proyecto DENDRAL. El surgimiento de estos sistemas está directamente vinculado al cambio de concepción ocurrido a fines de la década del 60, pues de los intentos de emular el pensamiento humano mediante potentes métodos de razonamiento se pasó a dar mayor énfasis a los sistemas de razonamiento de propósito específico. El conocimiento propio de un dominio de aplicación pasó a ser más importante que el M.S.P. empleado. Los Sistemas Expertos (SE) constituyen uno de los éxitos comerciales más importantes de la Inteligencia Artificial. Estos son programas sofisticados de computación que tratan de imitar funciones de un experto en algún dominio

Inteligencia Artificial. - Sistemas basados en el conocimiento.

130

del conocimiento, es decir, manipulan conocimientos de expertos para resolver, eficiente y efectivamente, problemas de un área específica, tal como lo hacen los expertos humanos. Incorporan operativamente el conocimiento de una o varias personas experimentadas. Resuelven problemas de forma “inteligente” y son capaces de explicar y justificar sus respuestas. Son creados para actuar como asistentes “inteligentes” en los procesos de tomas de decisión. El mecanismo que facilita este comportamiento “inteligente” está basado en el uso de los conocimientos. Un experto humano o un programa de computación es más inteligente mientras mayor cantidad de conocimiento posea y emplee. La razón por la que los S.E. pueden alcanzar un comportamiento similar al de los expertos humanos es, precisamente, que usan el conocimiento informal o privado para resolver problemas. Los S.E. pueden ser considerados como una aplicación práctica de los principios de la I.A. Su finalidad y principal actividad no es copiar los procesos mentales humanos en la manera más fiel, sino lograr las mejores respuestas a preguntas de datos reales. Básicamente un S.E. se divide en tres módulos:

- Base de Conocimiento (B.C.): En ella se almacena el conocimiento sobre algún dominio de aplicación mediante alguna F.R.C. Es el corazón del S.E.

- Máquina de Inferencia (M.I.): Implementa algún M.S.P. que manipula el conocimiento almacenado en la B.C. e informaciones sobre estados iniciales, estados actuales de la solución del problema, etc., las cuales procesan dinámicamente en una estructura que se le llama Base de Datos (B.D.) o Memoria de Trabajo.

- Interface con el Usuario (I.U.): Mediante ella el usuario plantea los problemas al S.E., recibe preguntas del mismo y ofrece las explicaciones necesarias. La IU se compone de: Preguntas, Frases y Menúes. Pueden incluir módulos de explicaciones asociadas a cada regla para proveer información suplementaria. Usualmente la información que procesa la IU debe suministrarse con una sintaxis estricta, formateada de alguna forma.

En principio el SE se construía partiendo desde cero, generalmente en Lisp. Luego se vio que tenían bastante en común y así surgen los Shell o armazones. El conjunto formado por la máquina de inferencia y la interface con el usuario recibe el nombre de Sistema Experto Vacío o Esencial (SHELL), y puede ser empleado en la creación de diversos SE siempre que los dominios de aplicación de éstos sean similares respecto al formalismo necesario para representar el conocimiento y la línea de razonamiento que se emplea en la solución de problemas. El concepto de SE vacío apareció en el período 1977-1981. Cada SE vacío define un modelo computacional. La arquitectura del S.E.es mostrada en la figura 4.1. Los shell se caracterizan por:

- No contienen B.C. - La única diferencia entre un S.E. y otro que usen el mismo shell es el

contenido de sus B.C. - Permite procesar B.C. diferentes y crear, por tanto, S.E. diferentes que se

correspondan con la F.R.C. que procesa la M.I. y la I.U.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

131

- Contienen, por lo general, facilidades de edición que permiten entrar el conocimiento con un formato predeterminado y editarlo si se requiere.

- Actúan como un compilador o intérprete en el sentido de que las reglas entradas en el editor son compiladas por el shell y llevadas a un código final que usan la M.I. y la I.U.

SHELL

B.C. M.I.

I.U.

Usuario

Fig. 4.1. Arquitectura de un Sistema Experto.

4.2. Caracterización de los Sistemas Expertos. Los Sistemas Expertos son un tipo de modelo computacional con características especiales por las razones que se describen a continuación.

4.2.1. Rasgos de un S.E.

A pesar de que existen muchas implementaciones de S.E., hay rasgos comunes que los distinguen:

- La acumulación y codificación del conocimiento. La B.C. contiene el conocimiento tanto público como privado que posee el experto para la solución de problemas en un dominio de aplicación concreto. Existen diversas formas de representar ese conocimiento. La selección adecuada de la F.R.C. desempeña un papel muy importante e influye sustancialmente en la efectividad de todo el sistema.

- El conocimiento del S.E. es explícito y accesible. El conocimiento de los expertos es expresado bastante explícitamente en forma de un fichero en la computadora. De esta manera, la B.C. es fácilmente accesible por los expertos y modificada por ellos. La B.C. se almacena de forma independiente a la M.I., por lo que una misma M.I. puede ser utilizada en áreas de aplicación diferentes.

- Alto nivel de experticidad. Es el rasgo más útil. Los S.E. resuelven problemas que requieren años de entrenamiento a los humanos.

- Habilidad para ofrecer facilidades de entrenamiento para personal clave y miembros importantes del grupo. Los S.E. contienen el conocimiento necesario y la habilidad para explicar su proceso de razonamiento

- Puede actuar como una teoría de procesamiento de información. El S.E. permite al usuario evaluar los efectos potenciales de nuevos datos y comprender la relación entre ellos. Igualmente puede evaluar el efecto de nuevas estrategias o procedimientos mediante la inclusión o modificación

Inteligencia Artificial. - Sistemas basados en el conocimiento.

132

de las reglas, o sea, permite analizar cómo se comporta el S.E. ante un cambio de los datos iniciales.

- Es un modelo computacional para ayudar a la toma de decisiones. Los S.E. constituyen un nuevo modelo computacional donde el formalismo para representar el conocimiento es independiente del método de solución empleado.

- Es una memoria institucional. Si la base de conocimientos fue desarrollada a través de la interacción con el personal clave de una institución, entonces esta compilación de conocimientos se convierte en un consenso de opiniones de alto nivel, luego representa la política actual de esa institución.

- Son capaces de tomar decisiones inteligentes en un área de aplicación relativamente estrecha.

- Ellos deben ser capaces de tener atributos similares a los de los expertos humanos como la capacidad de adquirir nuevos conocimientos y perfeccionar el que posee.

- Tienen facilidad de explicación. Los S.E. son capaces de justificar cómo obtuvieron sus conclusiones y explicar el por qué hacen una pregunta. Esto implica exponer las líneas de razonamiento y las operaciones realizadas en cada paso. Precisamente por estas características, los S.E. permiten entrenar a personas no especialistas en el problema que aborda.

4.2.2. Comparación entre la experticidad humana y la artificial.

Al comparar la experticidad humana con la artificial existen aspectos, algunos de los cuales favorecen a los SE y otros a los humanos.

Experticidad humana Experticidad artificial - Puede perderse, pues la vida - Es permanente. humana es limitada. - Impredecible, por razones - Consistente, pues no está

emocionales. relacionada con el estado “físico o mental” del S.E. ni con la frecuencia de su uso.

- Difícil de transferir, pues la - Fácil de transferir. Bastaría educación humana es un proceso copiar un fichero en la largo y costoso. computadora. - Difícil de documentar. - Fácil de documentar. - Costosa, pues los expertos - Relativamente barata. Los S.E. humanos son escasos. son caros para desarrollar, pero

de bajo costo para operar. - Se agota durante un trabajo - Puede trabajar las 24 horas del

intenso. día. - Creativo e imaginativo. - Sin inspiración, se comporta de

modo rutinario. - Adaptable a las condiciones - Se necesita enseñarles todo el

cambiantes. conocimiento, pues las técnicas de aprendizaje automatizado no están lo suficientemente desarrolladas.

- Espectro ancho, pues tiene en - Espectro estrecho, pues aíslan

Inteligencia Artificial. - Sistemas basados en el conocimiento.

133

cuenta las relaciones con el el problema. resto del mundo.

- Conocimiento con sentido común. - Conocimiento técnico.

Podemos concluir que los S.E. no sustituyen a los expertos, sino más bien ayudan a las personas a progresar, participando en actividades más desafiantes intelectualmente, por lo que el conocimiento contenido en un S.E. es una nueva fuente práctica de conocimientos. Ellos frecuentemente son usados como un consultante o ayuda a usuarios expertos o novatos de algún dominio de aplicación.

4.2.3. Comparación entre los programas convencionales y los S.E.

Los programas convencionales pueden ser divididos en: el algoritmo, el cual contiene todo el conocimiento y los datos a los que se le aplica dicho algoritmo. La arquitectura típica de los S.E. es diferente. Ellos están constituidos por el shell y la B.C. Si un programa convencional necesita ser modificado para incluir nueva información, entonces hay que examinar el programa completo hasta encontrar la línea o bloque donde se necesita insertar dicha información. Sin embargo, en los S.E. podemos realizar estas modificaciones fácilmente, pues basta modificar la B.C. y no hay necesidad de afectar la estructura del programa. Esta flexibilidad de los S.E. proporciona una mayor eficiencia en la programación y la comprensibilidad y precisamente, los distingue como un modelo computacional nuevo. Mientras los programas convencionales son usados para llevar a cabo una predeterminada secuencia fija de instrucciones, sin tener “en mente” el fin o la meta de su actividad, los S.E. tienen “en mente” la obtención de ese fin. Los S.E. contienen “hechos” y “medios” de utilización de sus hechos para alcanzar los fines. Además la habilidad para aprender nuevos conocimientos a partir de la experiencia puede ser implementada en forma natural y efectiva por los S.E.

4.2.4. Requerimientos para emplear los S.E.

Para desarrollar un S.E. en un dominio de aplicación concreto deben tenerse en cuenta algunos requerimientos:

- La solución de las tareas en este dominio no requiere de sentido común. - La solución de las tareas sólo requiere el empleo de habilidades

cognoscitivas, no físicas. - Existen expertos genuinos en el dominio de aplicación. - Los expertos pueden articular sus métodos. - Las tareas en este dominio están bien comprendidas pues, en caso

contrario, se necesita desarrollar previamente investigaciones básicas para hallar las soluciones.

4.3 Justificación para desarrollar un SE. Cualquiera de las situaciones siguientes pueden justificar que se desarrolle un

Inteligencia Artificial. - Sistemas basados en el conocimiento.

134

SE: - La solución de las tareas del dominio de aplicación da un resultado de

mucho valor. - La experticidad humana puede perderse. - La experticidad humana escasea. - La experticidad humana se necesita en muchos lugares. - La experticidad humana se necesita en ambientes hostiles.

4.4. Aplicaciones de los S.E.

Los S.E. constituyen uno de los éxitos comerciales más importantes de la I.A. y representan la avanzada en el paso de las técnicas de I.A., desde los laboratorios académicos al ambiente productivo. Son muchas las áreas de aplicación de los S.E. Entre ellas podemos mencionar:

- Interpretación: Inferir la descripción de situaciones a partir de datos sensoriales. Implica el análisis de datos para determinar su significado.

- Predicción: Inferir las consecuencias de situaciones dadas. - Diagnóstico: Inferir el mal funcionamiento de un sistema a partir de

observaciones. - Diseño: Configurar objetos bajo ciertas restricciones. - Planificación: Determinar la secuencia óptima de operadores para

transformar un estado inicial en un estado final. La mayoría de los sistemas de planificación actuales están basados en el método “generar y comprobar”.

- Monitoreo: Comparar observaciones para detectar situaciones esperadas. Implica el análisis continuo de señales y la puesta en marcha de acciones y/o alarmas según proceda.

- Instrucción: Controlar y actuar sobre el comportamiento del estudiante. - Control: Gobernar parcial o completamente el comportamiento de

sistemas.

Algunos S.E. famosos son: MYCIN, desarrollado en la Universidad de Stanford en 1976; PROSPECTOR, creado por Richard Duda, Peter Hard y Rene Reboh en 1978; R1, luego llamado XCON, AL/X, FEL-EXPERT, DIPMETER ADVISOR, entre otros. Los S.E. actuales han alcanzado un gran estado de utilización práctica y una actividad comercial muy lucrativa. Por ejemplo, en 1980 PROSPECTOR descubrió un depósito de molibdeno, cerca del Monte Tolman, en Eastern Washington, que ha sido evaluado en cien millones de dólares. La compañía DEC estableció que el S.E. R1/XCON para el diseño de la configuración de computadoras reporta una ganancia de diez millones de dólares anualmente. Mientras que los costos del desarrollo en cinco años del sistema DIPMETER ADVISOR para la evaluación de la calidad en la perforación de pozos petroleros ha alcanzado la suma de 21.5 millones de dólares, la ganancia por su aplicación para la firma Schlumberger es alrededor de 200 millones de dólares anuales.

Existen decenas de herramientas para la construcción de S.E., ya sea para el esquema de representación del conocimiento como para la M.I., entre las que se encuentran:

- Shells de S.E. Ejemplos: EMYCIN, KAS, ARIES, y otros.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

135

- Herramientas para la construcción de Sistemas Basados en Reglas. Ejemplos: OPS5 y SOAR de la Universidad Carnegie-Mellon, M.1 y S.1 de la Teknowledge, entre otros.

- Lenguajes para la creación de Sistemas Basados en Marcos. Ejemplos: FRL, OWL, KL-ONE, etc.

- Herramientas para construir Sistemas de Programación Lógica. Ejemplos: las versiones de PROLOG FIT de la Universidad de Hamburgo y POPLOG de la Universidad de Sussex.

- Lenguajes para la Programación Orientada a Objetos. Ejemplos: SMALLTALK, BORLAND C++, EIFFEL, entre otros.

4.5 Limitaciones actuales de los SE

A pesar de todo lo anterior, los S.E. presentan algunas limitaciones, como por ejemplo:

- Dominio estrecho de experiencia. - Incapacidad de realizar razonamiento con sentido común. Ej: si se describe

que un paciente tiene 130 años y pesa 40 libras el sistema no puede darse cuenta de la inversión de los datos.

- Las M.I. son demasiado simples y no permiten una visión global de los procesos de inferencia.

- El conocimiento profundo y casual no es explotado. - Rango limitado de la capacidad de explicación. - Posibilidades restringidas de comunicación, pues los lenguajes orientados a

un problema no son flexibles ni lo suficientemente naturales. - Incapacidad del S.E. para reconocer el límite de su habilidad. Constituye la

limitación más seria. No tienen un conocimiento profundo acerca de su propia gestión. No pueden razonar sobre su campo de acción y limitaciones.

- La presencia del Ingeniero del Conocimiento es inevitable. Las herramientas actuales para el desarrollo de los SE no son buenas para:

- realizar la adquisición del conocimiento, - refinar la base de conocimientos, - manipular el conocimiento almacenado usando formas de representación

del conocimiento mixtas y complejas.

4.6 Implementación de un SE vacío. Para desarrollar un sistema experto vacío (shell) es necesario implementar un método de solución de problemas y tener en cuenta cómo se manipula la certidumbre de la información, y además el módulo de interface con el usuario.

4.6.1 Implementación de la MI. La máquina de inferencia (MI) es el módulo de un SE encargado de encontrar la solución a un problema dado a partir del conocimiento almacenado en la base de conocimientos y los datos iniciales del problema. La implementación de la MI depende de la forma de representación elegida para almacenar el conocimiento y del método de solución de problemas seleccionado. La FRC

Inteligencia Artificial. - Sistemas basados en el conocimiento.

136

usada más frecuentemente para crear la base de conocimientos es la regla de producción, en este caso las máquinas de inferencias son implementadas como Sistemas de Producción.

La M.I. está compuesta por: - Método de Solución de Problemas. - Principios de control “ad hoc”. - Mecanismo de explicación. - Técnicas de procesamiento de la información con incertidumbre.

Los distintos M.S.P. existentes fueron estudiados detalladamente en el capítulo 3. Entre los principios de control “ad hoc” utilizados por los S.E. podemos mencionar:

- Agenda. Del proceso de solución del problema, un grupo colateral de

subtareas se crea y/o reorganiza. La creación es invocada por vínculos asociativos que pueden ocurrir de las reglas de razonamiento exacto. Cada tarea posee una lista de justificaciones y cada justificación representa una medida absoluta del valor de dicha razón. Al ser resuelta una subtarea, la tarea parcial en el tope de la pila se considera puede ser resuelta en el próximo paso. Este principio posibilita una efectiva dirección de la aplicación y fue usado, primeramente, por el sistema AM (Lenat 1980).

- Demonios. Este método parte de la idea de demonios que están sentados

silencio-samente observando el proceso de inferencia. Ellos sólo interfieren en este proceso bajo situaciones específicas y predefinidas. El “demonio” es un procedimiento activado por cambios importantes de los resultados presentes o por adición de nuevos datos.

- Inferencia no monótona. Algunos S.E. actuales son capaces de realizar este tipo de inferencia.

Este razonamiento está basado en algunas suposiciones que pueden convertirse posteriormente en inaceptables o irrealizables. Las M.I. no monótonas tienen que ser capaces de reparar adecuadamente la situación actual, una vez que se han destruído las suposiciones iniciales.

- Pizarrón. Es frecuente encontrar un problema que, por ser muy vasto y

complejo, no puede ser resuelto por un solo experto o B.C. La comunicación de la información entre varios expertos o varias B.C., conocidos en este caso como fuentes de conocimientos, se realiza a través de un mecanismo llamado pizarrón. El pizarrón es una estructura, en la que la información importante obtenida de una fuente de conocimiento es “colocada” o escrita. Así, cualquier otra fuente de conocimiento puede referirse a esta información para alcanzar sus objetivos. Cada fuente de conocimiento es responsable de resolver su problema particular, por lo que debe conocer qué clase de información necesita y dónde encontrarla en el pizarrón, pero no le hace falta conocer cómo ésta fue deducida. La comunicación entre las fuentes de conocimiento es indirecta y algo costosa, por lo que se aconseja utilizar este modelo en problemas que puedan ser descompuestos en tareas casi independientes. La

Inteligencia Artificial. - Sistemas basados en el conocimiento.

137

noción de fuentes múltiples de conocimiento se utilizó, por primera vez, en el sistema HEARSAY-II, el cual era capaz de realizar consultas en lenguaje natural a un sistema de B.D. Para el S.E. MDX, el pizarrón sirve como instrumento de comunicación entre varios expertos en diagnóstico, cada uno con una especialidad diferente.

Un SE debe reunir las dos capacidades siguientes, además de cumplir con su tarea fundamental:

- Explicar sus razonamientos: En el diagnóstico los médicos no aceptarán los resultados sino están convencidos del razonamiento que se hizo.

- Adquirir nuevos conocimientos y modificar los antiguos: Una manera de plasmar el conocimiento en un programa es a través de la interacción con el experto humano. Otra forma es que el programa aprenda el comportamiento del experto a partir de los datos en bruto.

Una de las características de los SE es poder explicar su trabajo, principalmente esta posibilidad se presenta en dos aspectos:

- Poder explicar cómo se alcanzó un resultado, esta pregunta la hace el usuario cuando tiene dudas sobre el resultado o desea aprender como se alcanzó.

- Poder explicar por qué se hace una pregunta (esta posibilidad aparece cuando se utiliza como método de solución de problema un método como el encadenamiento hacia atrás), al usuario le interesa saber por qué se le hace una pregunta cuando ésta le parezca irrelevante o en caso que la respuesta requiera un esfuerzo adicional por parte del usuario.

El tipo de mecanismo de explicación más común se basa en el razonamiento retrospectivo, éste explica cómo el sistema alcanzó un estado particular. Otras variantes de explicación son el razonamiento hipotético , donde el sistema explica qué podría haber sucedido al variar algunos de los parámetros usados en el razonamiento; y el razonamiento contrario, donde el sistema explica por qué una conclusión esperada no fue obtenida. El razonamiento retrospectivo se puede implementar por dos vías: a) Secuencia de estados visitados:

Una forma de responder a cómo se alcanzó un resultado es mostrando la secuencia de estados visitados durante la búsqueda de una solución, en este caso pueden eliminarse los estados que provocaron un retroceso en la búsqueda. Similarmente se puede responder a por qué se hace una pregunta presentando la secuencia de estados recorrida y que lleva a la situación donde es necesario preguntar información al usuario.

En ambos casos es conveniente tener una traducción de los estados que facilite la explicación.

Si la MI se basa en un sistema de producción, a éste se le añade una componente para dar las explicaciones. La respuesta a “por qué” es mostrar una cadena de reglas y objetivos que relacionan la información preguntada con la pregunta original del usuario; la respuesta a “cómo” es presentar las reglas y subobjetivos de los cuales se obtiene la conclusión. Nótese como la secuencia de reglas para explicar el “por qué” se puede formar a partir de la pila de objetivos creada durante la búsqueda de la solución con encadenamiento hacia atrás. Para responder al “cómo” es suficiente ver en la memoria de trabajo el número de la regla mediante la cual se alcanzó el

Inteligencia Artificial. - Sistemas basados en el conocimiento.

138

resultado y presentarla, analizar cuáles atributos forman la premisa de esta regla y ver cómo fueron evaluados, si fueron avaluados por una regla se presenta ésta y se repite el proceso hasta llegar a los atributos evaluados por el usuario.

Este estilo de explicación es útil pero difícil de implementar cuando en la secuencia aparecen muchas reglas. Además, la explicación sólo ofrece un agregado de fragmentos de pequeñas inferencias sin sintetizarlas. Otra desventaja de esta forma de explicación es que no siempre todos los especialistas están de acuerdo con las reglas tal y como se han elaborado, pues sólo ven una parte del conocimiento aisladamente.

MYCIN usa el método de secuencia de estados visitados. El módulo de MYCIN que se encarga de la explotación se llama TEIRESIAS. El modelo de sistema de producción es muy general y estos son difíciles de mantener sin algunas restricciones por todo tipo de explicaciones que un humano podría solicitar. SALT es un programa de adquisición de conocimientos que se utiliza en la construcción de SE que diseñan artefactos a través de una estrategia de propuesta y revisión. SALT es capaz de responder a preguntas “ por qué no” (¿por qué no ha asignado el valor x a este parámetro?) y “ qué si” (¿Qué pasaría si lo hace?). Esto ayudaría al proceso de construcción y refinamiento del conocimiento.

b) Justificación Otra variante de explicación se conoce como justificación. En ella la justificación de un resultado presenta los hechos (atributos) que han contribuido a este resultado. La justificación está constituida por un conjunto que contiene los hechos que han establecido o negado el resultado.

Parámetro Valor Marca Contribución

La marca (POS o NEG) indica si el hecho contribuye al resultado por su presencia (POS) o por su ausencia (NEG). La marca no es necesaria cuando el parámetro tiene un valor numérico o de tipo SI/NO. Es decir, la justificación de un resultado no es más que mostrar las unidades de información que han sido tomadas en cuenta durante la búsqueda de la solución, de modo que los expertos pueden rápidamente verificar la validez del razonamiento sin tener que estudiar cada paso de la búsqueda (cada regla de la secuencia). Las ventajas de este método son: - Ofrece una visión general del proceso de búsqueda de la solución. - La justificación puede ser usada por un procedimiento de validación para

chequear la consistencia de la base de conocimientos o detectar las contradicciones entre los datos.

4.6.2 Implementación de la interfaz con el usuario.

Al implementar la interfaz con el usuario se deben tener en cuenta ciertos criterios: - La interfaz permite desarrollar ambientes interactivos con grandes

facilidades para el desarrollo de diálogos, lo cual es muy necesario para hacer y responder a las preguntas ¿Por qué? (Why) y ¿Cómo? (How).

- Se deben poder definir ayudas que puedan ser activadas fácilmente. - Es conveniente tener la posibilidad de crear ventanas, encadenamientos de

ventanas, etc.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

139

- Permitir su interacción con un gran entorno de programación, o sea, con otros sistemas.

4.7. Desarrollo de un S.E.

Para el estudio de cómo desarrollar un S.E. es importante conocer los siguientes conceptos:

- Ingeniería del Conocimiento: Es la disciplina relacionada con la forma en que se organizan, construyen y verifican las B.C. de un S.E.

- Adquisición del Conocimiento: Es el proceso de extracción, codificación y verificación del conocimiento de un experto humano. Si la F.R.C. usada por el S.E. es la Regla de Producción, la extracción se refiere a la formulación de las reglas, la codificación, a la escritura de las mismas en una determinada sintaxis y la verificación, al refinamiento de la B.C. La adquisición del conocimiento es conocida como el “Cuello de Botella” de las aplicaciones de los S.E.

- Ingeniero de Conocimiento (I.C.): Es la persona responsabilizada con desarrollar las tareas de la ingeniería del conocimiento. Debe ser capaz de conocer y comprender los S.E., saber usar las herramientas para crear los mismos, ser un buen programador en un lenguaje de I.A. y un hábil entrevistador.

4.7.1. Etapas del desarrollo de un S.E.

En la construcción de los S.E. es necesario seguir ciertos pasos en aras de lograr la eficiencia del aseguramiento programativo y una mayor agilidad en la confección del sistema en cuestión. Estas etapas son: I) Etapa de identificación.

En esta etapa se caracteriza el problema según sus aspectos más relevantes. Esto incluye las siguientes tareas:

a) Selección de los participantes y determinación del papel a desempeñar por cada uno de ellos.

Antes del proceso de adquisición del conocimiento es necesario determinar quiénes van a participar en el mismo. Lo más usual es que sólo participe un experto y un I.C. No obstante, pudieran participar otros expertos en el tema y más de un I.C. Es necesario, por tanto, asignarle a cada uno de ellos la tarea que va a desempeñar, determinando, por supuesto, el experto y el I.C. jefes.

b) Identificación del problema. Esta tarea es desarrollada por el experto y el I.C de una manera

conjunta. Su objetivo es dar respuesta a las preguntas siguientes: ¿Qué clase de problemas el S.E. debe resolver?

¿Cómo pueden caracterizarse o definirse estos problemas? ¿Cuáles son los subproblemas importantes? ¿Cuáles son los datos con los que va a trabajar el S.E.? ¿Cuáles son los términos importantes y las relaciones entre ellos? ¿Cuál es el formato de la solución y qué conceptos son usados en ella?

Inteligencia Artificial. - Sistemas basados en el conocimiento.

140

¿Qué aspectos de la experticidad humana son esenciales en la solución de estos problemas?

¿Qué situaciones pudieran impedir el logro de las soluciones? ¿Cuáles son los impedimentos que afectan al S.E.?

c) Identificación de los recursos. Esta tarea consiste en identificar los recursos necesarios para adquirir el conocimiento e implementar y probar el sistema. Ejemplos de recursos típicos lo constituyen las fuentes del conocimiento, el tiempo necesario, el equipamiento computacional requerido, el costo del desarrollo del sistema, entre otros.

d) Identificación del objetivo. En esta tarea se identifican los objetivos de la construcción del S.E. Se hace de forma independiente a la identificación del problema, pues es útil separar los objetivos de las tareas específicas del problema a realizar.

II) Etapa de conceptualización.

En esta etapa se definen explícitamente los conceptos y relaciones claves identificados en la etapa anterior. Esta se desarrolla mediante interacciones constantes entre el experto y el I.C. y consume una gran cantidad de tiempo. Para ello es necesario responder a las preguntas siguientes:

¿Qué tipo de datos están disponibles? ¿Qué se da y qué se infiere? ¿Tienen nombres las subtareas? ¿Tienen nombres las estrategias? ¿Existen hipótesis parciales usadas frecuentemente?. ¿Cuáles son éstas? ¿Cómo se relacionan los objetos en el dominio?

¿Se puede establecer una jerarquía y etiquetar relaciones causales, inclusión en conjuntos, relaciones parte-de, etc?

¿Qué procesos intervienen en la solución del problema? ¿Qué retricciones poseen estos procesos? ¿Cuál es el flujo de información?

¿Se puede identificar y separar el conocimiento necesario para resolver el problema del necesario para justificar su solución?

III) Etapa de formalización.

En esta etapa se crea una representación formal, basada en las herramientas de la Ingeniería del Conocimiento, de todas las características analizadas en la etapa anterior. En ella el I.C. desempeña un papel más activo, explicándole al experto los instrumentos existentes y la forma idónea para representar su problema. Como resultado de la misma se obtiene un conjunto de especificaciones parciales que describen cómo el problema puede representarse dentro de la herramienta seleccionada. Para ello se responden las siguientes preguntas: ¿Cuál es el espacio de hipótesis? ¿Qué modelo se va a usar para representar el conocimiento? ¿Los datos son insuficientes, completos, redundantes e inconsistentes? ¿Existe incertidumbre en los datos? ¿La interpretación lógica de los datos depende de su orden de ocurrencia? ¿Cuál es el costo de adquisición de los datos? ¿Qué clases de preguntas son necesarias hacer para obtener los datos? ¿Qué formalismo se va a usar para representar el conocimiento? ¿Qué M.S.P. se va a utilizar?

Inteligencia Artificial. - Sistemas basados en el conocimiento.

141

IV) Etapa de implementación.

El conocimiento formalizado en la etapa previa se lleva a la forma de representación escogida, quedando conformada la B.C. Se implementa además el M.S.P seleccionado, especificando las estructuras de datos, las reglas de inferencia y los mecanismos de control, construyéndose un programa ejecutable. Como resultado de esta etapa se obtiene un prototipo del S.E., capaz de ser ejecutado y probado.

V) Etapa de prueba. Se evalúa el prototipo usando dos o tres ejemplos. Cuando éste se ejecute correctamente con éstos, se debe probar con una variedad de casos, que incluyan tanto los más comunes como las más raros, para determinar las debilidades de la B.C.: si se hacen preguntas inadecuadas o ambiguas, si la entrada de los datos es poco amistosa, si las conclusiones son adecuadas, si la salida tiene un nivel de detalle apropiado, si no hay errores en el razonamiento, si no hay reglas incorrectas, incompletas o inconsistentes, si el mecanismo de control usado es adecuado, o sea, si se escogen primero las reglas deseadas, etc. La medición de los resultados de un S.E. es difícil porque no se sabe cómo cuantificar el uso del conocimiento. No se pueden presentar pruebas concluyentes formales de su corrección. Lo que se puede hacer es oponerlo a un experto humano en la solución de problemas reales. Ej: MYCIN obtuvo una mayor puntuación que la de una lista de expertos en la evaluación de 10 casos.

VI) Revisión del prototipo. Normalmente, el refinamiento del prototipo incluye el reciclaje a través de las etapas de implementación y prueba para ajustar las reglas y las estructuras de control. Esta etapa debe conducir a que el razonamiento sea estable y el sistema eficiente. Aquellos aspectos que lo afecten deben ser modificados. Estas etapas no son independientes y están muy relacionadas entre sí. Por ejemplo, fallas al implementar las reglas y el mecanismo de control en la etapa de implementación pueden ocasionar cambios en la etapa de formalización. Además, la última etapa puede ocasionar la revisión parcial de las etapas anteriores.

4.7.2. Adquisición del conocimiento.

La calidad de la B.C. tiene una importancia crucial para el buen comportamiento de un S.E. Es por ello que debemos profundizar en las técnicas empleadas para la adquisición del conocimiento.

4.7.2.1. Fuentes de adquisición del conocimiento.

El conocimiento necesario para el desarrollo de un S.E. se puede obtener desde diversas fuentes, como libros, artículos, bases de datos, estudio de casos, datos empíricos y la experiencia personal de los expertos, siendo esta última la principal.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

142

Debido a que el I.C. no es un experto en el dominio del problema que se quiere resolver, debe interactuar con un experto en la materia. El vocabulario sobre el problema usado por el experto es inadecuado para resolverlo, por lo que el I.C. y el experto deben trabajar juntos en la extensión y refinamiento del conocimiento. Esta interacción se desarrolla, comúnmente, mediante entrevistas sistemáticas e intensas durante varios meses en la que se transfiere y codifica el conocimiento. Esta manera de adquisición del conocimiento presenta algunos problemas que pudieran, hasta cierto punto, parecer contradictorios, como:

- Es difícil para el experto expresar explícitamente las reglas que emplea cuando resuelve algún problema. El puede aplicar su conocimiento aunque no está consciente de las reglas que usa en la toma de decisión. Generalmente, el experto está dispuesto a proporcionar los conceptos importantes dentro del dominio del problema, pero tiene grandes dificultades cuando se le pide describir la estructura del conocimiento sin contradicciones y, casi siempre, falla si se requiere asignar incertidumbre numérica a partes del conocimiento. Obviamente, un experto humano resuelve sus problemas sin trabajar explícitamente con este tipo de representación.

- Para crear un S.E. el I.C. y el experto no deben ser la misma persona. - No se debe creer ciegamente en todo lo que el experto dice. - La reacción inicial de los expertos es ser hostiles a colaborar en el desarrollo

del S.E., pues ellos tratan de proteger el conocimiento acumulado durante años de estudio y trabajo. La tarea del I.C. es convencerlo y nunca criticar-lo o enjuiciarlo por esta actitud.

- Trabajar con varios expertos es más difícil pero es mejor, pues de esta manera se enriquece y refina el conocimiento adquirido.

- El secreto de trabajar con múltiples expertos es mantenerlos separados y entrevistarlos individualmente. Sólo después que el I.C. ha llegado a conclusiones debe someterlas al análisis conjunto.

- Cuando se trabaja con varios expertos es necesario que uno sea el jefe, de modo que éste tome las decisiones finales en caso de conflictos o diferencias.

- La transferencia de conocimiento consume mucho tiempo y es un proceso aburrido y agobiante para el experto.

SISTEMA EXPERTO MAQUINA DE INFERENCIA INGENIERO EXPERTO DEL INTERFACE CON EL USUARIO CONOCIMIENTO BASE DE CONOCIMIENTOS

Fig. 4.2. Papel del Ingeniero de Conocimiento en el desarrollo de un S.E.

4.7.2.2. Secuencia de trabajo del ingeniero de conocimientos.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

143

En el desarrollo e implementación del S.E., el I.C. debe realizar las tareas correspondientes a las etapas explicadas anteriormente siguiendo un orden específico. Una secuencia lógica de estos pasos pudiera ser:

I. Familiarizarse con el problema y el dominio de aplicación. Esto incluye la localización de la fuentes de conocimiento: libros, expertos humanos que quieran colaborar y otros materiales, y aprender de ellas lo más posible sobre el problema que se quiere resolver.

II. Caracterizar tentativamente los tipos de tareas de razonamiento que deben ejecutarse.

III. Luego de varias semanas realizando el estudio informal el I.C. es capaz de conversar inteligentemente con el experto. Para organizar el trabajo, primeramente planifica una serie de reuniones con cada experto con el objetivo de identificar el problema y caracterizarlo informalmente. Durante estas reuniones se decide hasta dónde se restringe el alcance del S.E. con el objetivo de mantener el problema tratable.

IV. Después de haber restringido adecuadamente el problema, el I.C. comienza a determinar los conceptos principales que se requieren para ejecutar cada tarea. En las entrevistas con los expertos determina los conceptos básicos, las relaciones primitivas y las definiciones necesarias para hablar acerca del problema y sus soluciones, así como intenta comprender qué conceptos y estrategias usa el experto para resolver cada tarea, pidiéndole en todo momento que justifique su razonamiento, para lo que es conveniente dar respuesta a las preguntas siguientes:

¿Qué hechos el experto trata de establecer primero? ¿Qué tipo de preguntas el experto hace primero? ¿El experto parte de suposiciones iniciales? ¿Cómo el experto determina las preguntas a realizar para profundizar

en el problema? ¿En qué orden el experto ejecuta cada subtarea? ¿El orden establecido para las subtareas varía de acuerdo al caso?

V. Una vez estudiado el problema con profundidad el I.C. escoge un formalismo de representación y diseña la B.C. e implementa el M.S.P. más adecuado al problema, quedando conformado un prototipo del S.E.

VI. El I.C. valida todo lo asumido mediante la prueba de las reglas y los conceptos. Generalmente se ejecutan las reglas y se muestran los resultados a varios expertos para conocer sus opiniones. Como consecuencia de esto, se desarrolla el proceso de refinamiento de la B.C., pudiéndose añadir o eliminar reglas, rediseñar la misma o reformular conceptos.

VII. Si llega el punto en que el IC valora que el prototipo se ha vuelto inmanejable como resultado de las modificaciones reiteradas el IC puede decidir rediseñar el mismo.

Para extraer el conocimiento de un experto humano, el I.C. puede usar algunas de las siguientes técnicas.

- Observar en forma pasiva al experto resolver problemas reales en su trabajo.

- Presentar al experto una serie de problemas reales a ser resueltos. - Discusión de problemas. El I.C. debe seleccionar un conjunto de

problemas representativos dentro del dominio de aplicación concreto e, informalmente, discutirlos con el experto, con el objetivo de determinar cómo éste organiza el conocimiento para resolver el problema, representa

Inteligencia Artificial. - Sistemas basados en el conocimiento.

144

los conceptos y relaciones entre ellos y maneja las imprecisiones de los datos.

- Descripción de problemas. Pedir al experto que describa un problema prototipo para cada categoría de respuesta posible y analizar cómo éste resuelve cada uno.

- Presentar los casos resueltos por el experto y por el S.E. prototipo a otros expertos, con el objetivo de comparar sus resultados y perfeccionar al S.E.

4.7.2.3. Determinación de los conceptos y las relaciones entre ellos.

En la sección 4.6.1 estudiamos que un aspecto importante en la etapa de conceptualización del desarrollo de un S.E. es la determinación de los conceptos y las relaciones que pueden establecerse entre ellos, la cual se puede hacerse en tres etapas. Etapa I

- Determinar los conceptos primitivos. El primer paso en la modelación es separar los objetivos relevantes de los

irrelevantes en la realidad que se modela; esta identificación se realiza a partir de la percepción de la realidad y teniendo en cuenta los propósitos del sistema que queremos construir. El paso siguiente es agrupar los objetos relevantes en clases de objetos

llamados categorías semánticas. Como se pueden hacer innumerables divisiones en categorías semánticas, muchos de los cuales son inadecuados, se han elaborado tres principios básicos para definir las categorías semánticas: familiaridad: respecto a los conceptos que son de uso común en una

realidad y cuyos hechos sobre esos conceptos son percibidos directamente por observación o inferencia inmediata.

adherencia: indica que un concepto debe estar internamente ligado a las actividades sobre las que estamos elaborando el modelo.

amplitud: se deben escoger todas las clases de objetos relevantes.

El símbolo asignado a cada categoría es, desde el punto de vista de las bases de datos una entidad, y desde el punto de vista de las bases de conocimientos un símbolo predicativo (predicado unario).

Supongamos por ejemplo, que estamos resolviendo un problema relacionado con la carrera de Ciencias de la Computación. Las categorías semánticas serían disciplina, asignatura, profesor y estudiante. Los objetos relevantes dentro de la categoría disciplina podrían ser Inteligencia Artificial, Matemática Discreta, Programación y Algoritmos, entre otros.

El otro paso es determinar las relaciones.

Una relación puede definirse sobre objetos de la misma categoría o categorías diferentes, una relación puede ser binaria, terciaria, etc. Las relaciones son objetos de segundo orden y se denotan por el verbo que la representa. En lógica de primer orden los objetos que participan en las relaciones son sustantivos. Ejemplo :

Inteligencia Artificial. - Sistemas basados en el conocimiento.

145

enseña ( Antonio , Física ) Otro elemento a determinar son las propiedades. Los cuales se describen mediante predicados binarios. Ejemplo :

nació ( 1112 , Camagüey ) llamase ( 1112, Luis )

Hasta aquí llega la etapa I (modelación de hechos brutos) en el proceso de modelación de conocimiento. Todos los predicados definidos en esta etapa sirven para definir los hechos en la base de conocimientos.

Etapa II

- Determinar los conceptos derivados y las relaciones que permiten definirlos. Una vez definidos los conceptos primitivos, debemos determinar los conceptos que podemos derivar de éstos. A los mismos se les conoce como conceptos derivados. Para su obtención se definen predicados y se introducen reglas en la B.C. que determinan que un individuo lo cumpla (estos predicados no aparecen en la B.C. nunca definiendo hechos) Esto es lo que se conoce como conocimiento inducido. Un ejemplo de concepto derivado es el predicado académico, el cual se obtiene de las categorías semánticas profesor y estudiante, mediante la regla:

Si profesor(X) o estudiante(X), entonces académico(X).

Al igual que los conceptos derivados, deben analizarse las relaciones derivadas. Este tipo de relación surge para convertir en explícito el conoci-miento sobre la participación de individuos en otras relaciones. Las relaciones derivadas se representan por predicados y es necesario definir reglas para ellas. Un ejemplo de una relación derivada es:

Si compró(X,Y) o alquiló(X,Y), entonces usó(X,Y)

Otra forma de obtener relaciones derivadas es mediante la composición de relaciones. Ejemplo :

Si orientado_por (x,y) y enseña (y,z) y no estudia (x,y) entonces monitor (x,y)

Los predicados (definidos en esta etapa) que permiten definir los conceptos y relaciones derivadas aparecen como consecuentes de las reglas en la B.C.

Etapa III En la consolidación del conocimiento se tienen en cuenta dos cosas:

1. Coherencia semántica La coherencia semántica se refiere a hacer explícito al sistema de procesamiento, mediante reglas, los tipos de argumentos de las relaciones. Ejemplo :

Si alumno (X) y profesor (Y) entonces orienta (y,x)

Inteligencia Artificial. - Sistemas basados en el conocimiento.

146

Esta regla dice que la relación orienta (x,y) tiene como primer argumento objetos de la categoría semántica "profesor" y como segunda objetos de la categoría semántica "alumno".

2. Propiedades de las relaciones.

Las reglas que definen propiedades de las relaciones sirven, además de para filtrar el conocimiento chequeando su integridad, para responder preguntas sobre la realidad. Un aspecto importante en la consolidación del conocimiento es la coherencia semántica, lo cual significa hacer explícito en la B.C. los tipos de argumentos de la relaciones. Esto se logra mediante reglas, tales como:

Si profesor(X) ∧ estudiante(Y), entonces enseña(X,Y), la cual expresa que el primer argumento del predicado “enseña” pertenece a la categoría semántica “profesor” y el segundo a “estudiante”.

Algunas propiedades de las relaciones que se pueden definir como reglas (en las cuales aparece una sola relación) son: reflexibilidad, simetría, transitividad y antisimetría. Estas reglas permiten mantener la integridad de la B.C. y responder a preguntas sobre el problema real. Ejemplos de éstas son:

simetría: Si primo(X,Y), entonces primo(Y,X) . transitividad: Si hermano(X,Y) y hermano(Y,Z), entonces hermano(X,Z). antireflexiva: Si hermano (x,y) entonces diferente (x,y) antisimétrica: Si orienta (x,y,z) entonces NOT orienta (y,x,z) Nótese que la antisimetría de "orienta" se establece si se desea especificar respecto a qué se orienta, pues si no se especifica pudiera existir simetría.

Otros tipos de propiedades entre relaciones se expresan también en la B.C. mediante reglas.

Si enseña (x,y) entonces puede_enseñar (x,y) Si hombre (x) entonces NOT mujer (x)

La esencia de la determinación de conceptos y relaciones es: - Determinar los conceptos primitivos. - Determinar los conceptos derivados. - Determinar las relaciones que permiten definir los conceptos

derivados (con ellas surgen las reglas). - Analizar las propiedades de las relaciones (simetría, transitividad,

antireflexividad y antisimetría) para crear nuevas reglas que permiten mantener la integridad del conocimiento.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

147

4.7.3. Automatización de la adquisición del conocimiento. Las técnicas de aprendizaje automatizado (machine learning) pueden ser de gran valor para automatizar algunos aspectos de la adquisición de conocimientos. Hay al menos tres formas en que el aprendizaje automatizado (AA) facilita la adquisición de conocimiento:

- Los sistemas de AA pueden ayudar a la construcción inicial de la base de conocimientos (varios sistemas son capaces de derivar un conjunto inicial de reglas a partir de casos ejemplos).

- Los sistemas de AA pueden refinar bases de conocimientos existentes. - Los sistemas de AA pueden ser útiles en adaptar una base de

conocimientos a ciertos requerimientos.

Diversas causas han llevado a la automatización de la adquisición del conocimiento:

- El descenso en el costo de los soportes de software y hardware para los SE han creado una situación favorable para el desarrollo de los mismos, esto ha conducido a un incremento en la demanda de SE superior a las cantidades necesarias de ingenieros de conocimientos entrenados o de experiencia.

- El movimiento hacia una actividad humana intensiva como la ingeniería de conocimiento es contraria a todas las tendencias en la industria, en particular es contraria a la tendencia hacia las técnicas de programación automática en la industria de software.

- El papel del ingeniero de conocimiento como un intermediario entre el experto y la tecnología se cuestiona no sólo porque incrementa los costos sino también por su efectividad (puede perderse conocimiento).

Desafortunadamente, hasta el momento, todo el trabajo mental del I.C. no puede ser sustituido por un sistema automático, pero existen herramientas que permiten facilitar el trabajo creativo. Estas herramientas se dividen en tres grupos:

- Herramientas de apoyo simples: editores de B.C., módulos explicativos especiales, subsistemas para la prueba automática en los conjuntos de datos reales, entre otros.

- Medios para la extracción efectiva del conocimiento del experto: Un ejemplo es el sistema ETS, el cual ayuda al experto a formular el conocimiento haciendo uso de las técnicas de diálogo basadas en la teoría psicoterapéutica del comportamiento personal.

- Técnicas de aprendizaje automatizado.

En los intentos de automatizar el proceso de adquisición del conocimiento han influido varios factores: el éxito alcanzado por los S.E. ha traído por consecuencia una gran demanda de I.C. para el desarrollo de S.E. en múltiples áreas de aplicación; el desarrollo industrial actual está dirigido a la automatización en todos los frentes, lo cual entra en contradicción con el papel fundamental que desempeña el I.C. en el diseño de los S.E. y se cuestiona cada vez más el trabajo del mismo, por los altos costos y por los errores que puede cometer en el proceso de adquisición del conocimiento. Es precisamente por esto que han surgido los Ingenieros del Conocimiento Automatizados (I.C.A.).

Inteligencia Artificial. - Sistemas basados en el conocimiento.

148

Para que un I.C.A. sea eficaz es necesario que cumpla los requisitos siguientes:

- Debe ser independiente del dominio de aplicación. - No debe haber intermediarios entre él y el experto humano, si no, no

tiene razón de existir. - Debe adquirir el conocimiento de diversas fuentes, incluyendo los

libros de texto. - Debe ser capaz de manipular los criterios de varios expertos, aún cuando

algunos pudieran ser contradictorios. - Debe abarcar varias F.R.C.

B.C. INGENIERO DE EXPERTO CONOCIMIENTO

I.C.A.

Fig. 4.3. Papel del Ingeniero de Conocimiento Automatizado.

Entre las técnicas de aprendizaje automatizado que pueden implementarse en un I.C.A. podemos mencionar:

- Generación de reglas a partir de una base de datos. Si el conocimiento se tiene registrado en una base de casos, el I.C.A. pudiera transformar cada artículo de la B.D. en una regla, considerando que los primeros campos de cada artículo corresponden a las condiciones y el último, a la conclusión. Este método permite obtener conocimiento mediante la síntesis de la experiencia registrada en ficheros de casos.

- Transferencia interactiva de experiencias. El ICA dialoga con el experto mientras éste, guiado por el sistema, produce nuevas reglas y critica las existentes.

- Aprendizaje basado en similaridad. Dado un conjunto de ejemplos y contraejemplos de un concepto, el I.C.A induce las reglas, generalizando las características de los ejemplos sin incluir la de los contraejemplos. Los ejemplos positivos permiten al sistema generalizar y los negativos especializar los conceptos.

- Refinamiento de la B.C. La fase de refinamiento se caracteriza no tanto por la adquisición de reglas completas como por la adición, eliminación o modificación de componentes de la regla. El ICA focaliza su atención en un subconjunto de reglas como candidatas potenciales para ser corregidas, el subconjunto puede ser por ejemplo todas aquellas que tienen el mismo consecuente. El refinamiento puede hacerse por generalización o especialización. Por generalización de la regla se entiende cualquier modificación a una regla (eliminar o modificar alguna condición o componente de la premisa o variar el valor de certeza o factor de certidumbre de la regla) que hace que su conclusión sea más fácilmente aceptada. Por especialización se entiende lo contrario, es decir, es la modificación de la regla que hace que sea más difícil aceptar su conclusión.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

149

- Aprendizaje de parámetros. La tarea del ICA puede ser ajustar los parámetros numéricos de cierta parte del conocimiento, por ejemplo los coeficientes de las reglas de producción.

Como hemos visto, las técnicas de aprendizaje automatizado aceleran y mejoran la adquisición del conocimiento, pues facilitan la construcción de las B.C., ayudan en el proceso de refinamiento y son útiles para adaptar una B.C. a nuevos requerimientos. Las investigaciones actuales en esta área están dirigidas al incremento del número de sistemas que permitan la adquisición del conocimiento de forma automática y a resolver sus dos principales dificultades: 1) estos sistemas trabajan con un lenguaje de representación fijado por el diseñador y 2) la detección de errores en los datos de entrada.

4.7.4. Estados en el desarrollo de un Sistema Experto. En su desarrollo, el S.E. transita por cinco estados fundamentales:

- Prototipo demostrativo. El sistema resuelve una porción del problema (uno o dos casos) mientras que el enfoque es adecuado y el desarrollo del sistema es factible. La B.C. contiene entre 50 y 100 reglas. Se alcanza en tres meses.

- Prototipo de investigación. El sistema muestra resultados creíbles sobre todo el problema, pero no está totalmente probado y revisado. Su B.C. contiene entre 200 y 500 reglas y resuelve un gran número de casos. Requiere de uno a dos años de trabajo. La mayoría de los S.E. llegan hasta este estado.

- Prototipo de campo. El sistema muestra buenos resultados y ha sido completamente revisado en el medio de trabajo del usuario. Su B.C. contiene de 500 a 1000 reglas. Se alcanza a los dos o tres años de trabajo. Sólo algunos S.E. llegan a este estado.

- Modelo de producción. El sistema exhibe alta calidad, confiabilidad, rapidez y eficiencia en el medio de trabajo del usuario. Su B.C. contiene de 500 a 1500 reglas. Requiere de dos a cuatro años de labor. Pocos S.E. alcanzan este estado.

- Sistema comercial. El sistema se usa comercialmente. Este estado se alcanza al cabo de 5 ó 6 años de desarrollo.

4.8. Tratamiento de la incertidumbre.

El razonamiento en general se refiere a diferentes clases de actividades, entre ellas extraer conclusiones desde un conjunto de hechos, diagnosticar posibles causas para alguna situación, analizar y organizar datos, etc. En el desarrollo de un proceso de razonamiento intervienen, al menos, tres elementos: el conocimiento sobre el dominio de aplicación, un método para procesar este conocimiento y ciertas observaciones vinculadas con el objeto de razona-

Inteligencia Artificial. - Sistemas basados en el conocimiento.

150

miento. El razonamiento con incertidumbre denota un proceso de razonamiento en el que alguno de estos elementos no es totalmente preciso, o sea, el razonamiento se realiza sobre la base de una información parcial y, por lo tanto, los resultados de éste son sugeridos pero no asegurados por las premisas del mismo. A diferencia de la I.A., el software algorítmico tradicional no puede lidiar con información incompleta. Si algún dato es incorrecto, la respuesta será incorrecta.

4.8.1. Fuentes de incertidumbre.

La presencia de incertidumbre en los sistemas de razonamiento es causada por varias fuentes, entre ellas se pueden mencionar:

- Imprecisiones en la definición de los conceptos y sus relaciones que integran el conocimiento sobre el dominio de aplicación. Ejemplo: en un S.P. se puede ver como que las reglas de producción son inciertas.

- Imprecisiones y pobre seguridad de los instrumentos usados para hacer las observaciones.

- Imprecisiones del lenguaje de representación en el cual se trasmite la información. Ejemplo: la frase “a menudo” en la regla “Si el motor de su automóvil se sobrecalienta, entonces, a menudo, no hay suficiente líquido refrigerante en el sistema de enfriamiento.”

- Falta de idoneidad de un formalismo para representar cierta clase de conocimiento.

- Agregación de información desde múltiples fuentes. Ejemplo: puede haber una que no sea totalmente fiable como un profesor honesto pero despistado.

- Falta de seguridad en: si un elemento dado pertenece a un conjunto bien definido, o en: la pertenencia parcial de un elemento dado a un conjunto cuyas cotas no están definidas rigurosamente.

- El mundo relevante es realmente aleatorio. Ejemplo: el movimiento de los electrones en un átomo, la distribución de personas que caerán enfermas durante una epidemia o la distribución de las alturas de las personas.

- El mundo relevante no es aleatorio dada la suficiente cantidad de datos, pero nuestro programa no siempre tendrá acceso a todos esos datos. Por ejemplo, la probabilidad de éxito de un medicamento para combatir una enfermedad en un paciente concreto.

Durante el razonamiento, la incertidumbre proveniente de estas fuentes se combina produciendo resultados parciales y finales que tienen su propia incertidumbre. A este proceso se le llama propagación de la incertidumbre.

4.8.2. Enfoques para representar la incertidumbre. Los enfoques existentes para representar la incertidumbre se dividen en dos categorías básicas:

- Caracterizaciones numéricas.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

151

Las representaciones numéricas son propias para representar y manipular la incertidumbre dada por la información imprecisa, pues ellas permiten trabajar con valores de confidencia. Es posible, además, definir un cálculo que ofrece un mecanismo para propagar la incertidumbre a través del proceso de razonamiento. Sin embargo, la representación numérica no puede ofrecer una explicación clara de las razones que conducen a una conclusión dada. Entre los enfoques numéricos están:

- Regla de Bayes. - Regla de Bayes modificada. - Teoría de la confirmación. - Teoría de Dempster-Shafer. - Razonamiento evidencial. - Espacio evidencia. - Teoría de la necesidad y la posibilidad. - Valores lingüísticos.

- Caracterizaciones simbólicas. Los modelos basados en este enfoque están, en su mayor parte, designa-dos para manipular el aspecto de la incertidumbre derivado de la información incompleta, pues, al carecer de medidas para cuantifi-car los niveles de confidencia, son inadecuados para manipular la información imprecisa y son más apropiados para permitir seguir la traza desde las fuentes de información a las conclusiones. Algunos de los enfoques simbólicos son:

- Suposiciones razonadas. - Lógica no monotónica. - Circunscripción. - Enfoque monotónico. - Análisis Bayesiano. - Conjuntos difusos y lógica difusa. - Teoría de Cohen.

Las seis primeras técnicas para la representación y manipulación simbólica de la incertidumbre se basan en un enfoque formal mediante el cual se realiza el razonamiento. La lógica no monotónica, la teoría de circunscripción y el enfoque monotónico se basan en la lógica, mientras que el análisis bayesiano y la lógica difusa se basan en cierta medida (aplicar ciertas formas de peso numérico a la información y propagar esas medidas, los pesos son vistos como medidas, algo relacionadas a la posibilidad, no siempre en el sentido estadístico). La teoría de Cohen se basa en el empleo de un conjunto de reglas dependientes del contexto (enfoque heurístico). Un análisis detallado de algunos de estos enfoques de tratamiento de incertidumbre pueden verse en [BDSE], [IPN88] e [IPN89]. Nosotros sólo estudiaremos algunos de los más utilizados.

4.8.2.1. Regla de Bayes y Regla de Bayes modificada.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

152

De la teoría de Probabilidades sabemos que la probabilidad de que ocurra un evento X es la razón del número de ocurrencias favorables y el número total de eventos. A veces esta teoría puede usarse con éxito en la I.A. Veamos el ejemplo de jugar un juego de cartas, por ejemplo la brisca. No tenemos acceso a la información completa sobre el estado actual del problema, pues no conocemos las cartas que tienen los otros jugadores. Sin embargo, podemos estimar las probabilidades de las diversas distribuciones de cartas. Supongamos que necesitamos conocer quién tiene el as de bastos y cuántos pinchos tiene cada oponente. Calculamos primero la probabilidad de que cada uno tenga el as y, en ausencia de información, la supondremos 0.5. Luego calculamos las probabilidades de las distribuciones posibles de pinchos y por último, la probabilidad conjunta de que una persona tenga el as y algún número concreto de pinchos, esto es, P(A y B) = P(A) * P(B) si A y B son independientes. Para evaluar el mérito de cada una de las jugadas que podemos realizar, evaluamos su resultado para cada distribución de cartas. Para esto calculamos:

Tanteo Pii

Valori= ∗∑ ( ) ,

o sea multiplicamos el mérito de cada uno de tales resultados por la probabilidad de que ocurra. Esto nos proporciona una medida de la posición promedio que podemos esperar lograr haciendo un determinado movimiento. Una regla puede tener varios antecedentes, cada uno con su probabilidad. Pudiera calcularse la probabilidad múltiple del antecedente, multiplicando las probabilidades de cada una de las condiciones, pero esto sólo es cierto si son independientes unas con otras. Sin embargo, esto generalmente no ocurre, por lo que se utiliza un procedimiento especial conocido como la regla de Bayes, el cual permite calcular la probabilidad de que ocurra un evento dado que ha ocurrido otro evento. Antes de enunciar la regla de Bayes, analicemos, primeramente, la terminología a usar:

E = {e1,e2,...,em} → conjunto de evidencias. P(E/hi) → probabilidad de que la evidencia E será observada si la hipótesis

hi es cierta. Ejemplo: E podría ser un síntoma y hi una enfermedad.

P(hi/E) → probabilidad de que la hipótesis hi sea cierta dada la evidencia E. P(hi) → probabilidad a priori de que hi sea cierta en ausencia de cualquier

evidencia a favor o en contra. Ejemplo: si hi es una enfermedad, entonces P(hi) es la probabilidad de que cualquier persona tenga dicha enfermedad. La probabilidad a priori de que al lanzar una moneda caiga cara es 0.5.

n → número de hipótesis posibles.

Dado un conjunto de hipótesis H = {h1,h2,..,hn} y una secuencia de evidencias {e1,e2,..,em}, la Regla de Bayes, derivada de la fórmula de probabilidad condicional, enuncia que la probabilidad posterior P(hi/{e1,..,em}) puede ser

Inteligencia Artificial. - Sistemas basados en el conocimiento.

153

calculada a partir de una función de la probabilidad condicional P({e1,e2,..,em}/hi) y la probabilidad a priori P(hi):

P h e eP e e h P h

P e e h P hi m

m i i

m j jj

n( / { , ... , })({ , ... , } / ) ( )

({ , ... , } / ) ( )1

1

11

=

∗=

Esta regla se basa en dos suposiciones fundamentales:

- Cada hipótesis hi es mutuamente excluyente con cualquier otra hipó-tesis del conjunto de hipótesis H, y el conjunto H es completo,

i) P(hi,hj) = 0 para i≠j

ii) P hii

n

( ) ==∑ 1

1

- Cada evidencia ej es condicionalmente independiente bajo cada hipótesis,

P e e h P e hm i j ij

m

({ , ... , } / ) ( / )11

==

La Regla de Bayes modificada añade la imposición de que cada evidencia ej sea condicionalmente independiente bajo la negación de cada hipótesis,

P e e h P e hm i j ij

m

({ , ... , } / ) ( / )11

¬ = ¬=

A pesar de su utilidad, este enfoque tiene las siguientes desventajas:

- Este método requiere una gran cantidad de datos para determinar los estimados para las probabilidades a priori y a posteriori, lo cual a veces no es fácil de obtener, pues no se dispone de valores exactos sino de estimaciones subjetivas.

- La evaluación de la fórmula de Bayes en un dominio complejo requiere gran cantidad de cálculos, pues deben considerarse muchas probabilida-des, las cuales pueden contribuir mínimamente a la precisión de las respuestas.

- Si se añade un cambio a la B.C. existente hay que cambiar las probabilidades, pues la suma de las probabilidades de todos los resultados posibles, o sea, la suma de las probabilidades de todas las hipótesis posibles que revelan la evidencia E debe ser 1. Ejemplo: si añadimos una nueva hipótesis (por ejemplo si identificamos una nueva enfermedad con un síntoma común a un conjunto de enfermedades existentes) hay que calcular de nuevo todos los valores.

- Para que la fórmula de Bayes dé una estimación precisa de la probabilidad de un resultado concreto todos los resultados posibles deben ser disjuntos. Nunca pueden darse dos de ellos a la vez. Ejemplo: una paciente puede tener dos o más infecciones.

- La precisión de la fórmula de Bayes depende también de la disponibilidad de un conjunto completo de hipótesis. En otras palabras, siempre debe ser cierta como mínimo una de las hipótesis conocidas. Ejemplo: un paciente puede tener una enfermedad que nadie haya diagnosticado anteriormente.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

154

- El valor único combina la evidencia en favor o en contra de una hipótesis, sin indicar la proporción que hay de cada una y nada acerca de su precisión.

- La información conflictiva no se detecta sino se propaga.

Por estas razones, el teorema de Bayes no parece solucionar todos los problemas que surgen con el razonamiento incierto, aunque sirve de base para algunos sistemas de I.A. como PROSPECTOR.

4.8.2.2. Teoría de la confirmación o certidumbre. La teoría de la certidumbre (Shortliffe y Buchanan, 1975) fue desarrollada para utilizarla en los S.E. en un intento de superar algunos de los problemas asociados a la teoría de la probabilidad. El factor de certidumbre FC(h,e) de una hipótesis dada h es la diferencia entre una medida de credibilidad MB(h,e), que representa el grado de sustentación de una evidencia favorable e, y una medida de descredibilidad MD(h,e) que representa el grado de refutación de una evidencia desfavorable e. El factor de certidumbre FC(h,e) se define como:

Los valores intermedios indican una medida de la certidumbre o incertidumbre de h, donde:

Una variante propuesta por Shortliffe a la definición del factor de certidumbre es: MB(h,e) - MD(h,e)

FC(h,e) = 1-min(MB(h,e) , MD(h,e))

=<=>

=

=

falsa) es(h 0 P(h) si 1- P(h) P(h/e) si e)MD(h,-

nada) sabe se (no P(h) P(h/e) si 0 P(h) P(h/e) si e)MB(h,

) verdaderaes(h 1 P(h) si 1

e)FC(h,

>

= contrario casoen 0

P(h) P(h/e) si P(h) - 1

P(h)-P(h/e) e)MB(h,

<

=contrario casoen 0

P(h) P(h/e) si P(h)

P(h/e)-P(h) e)MD(h,

Inteligencia Artificial. - Sistemas basados en el conocimiento.

155

Posteriormente, Heckerman derivó una nueva definición por el factor de certidumbre que permite la conmutatividad y tiene una interpretación probabilística consistente: P(h/e) - P(h)

FC(h,e) = P(h/e)(1-P(h))+P(h)(1-P(h/e))

Este enfoque es usado en MYCIN. En él las reglas se escriben con el siguiente formato:

Si A, entonces B con F.C. = c,

lo cual significa que si A es verdadera, o sea su F.C. es 1, entonces B se cumple con una certeza de c. Ejemplo: una regla de MYCIN es la siguiente:

Si i) la coloración del organismo es gram-positiva y ii) la morfología del organismo es cocus y iii) la conformación de crecimiento del organismo es una masa

informe, Entonces, hay evidencia sugestiva (0.7) de que el organismo es un

estafilococus. El valor de certidumbre de 0.7 indica que la evidencia sugiere fuertemente la conclusión pero no con certeza.

Este enfoque tiene las siguientes ventajas:

- Los valores de certidumbre resultantes oscilan siempre entre -1 y 1 y el significado de los valores -1,0 y 1 están bien definidos.

- Si se aplican dos reglas contradictorias, de tal forma que la certidumbre de una sea igual a la de la otra, entonces sus efectos se destruyen.

- Se combinan en el factor de certidumbre la medida de creencia MB y de descreencia MD.

Sin embargo, presenta las desventajas siguientes:

- ¿cómo interpretar el valor del factor de certidumbre, o sea, cuál es su semántica?

- se supone la independencia de las evidencias. - no se puede distinguir entre ignorancia y conflicto.

4.8.2.3. Teoría de Cohen. Cohen propuso una teoría de razonamiento heurístico acerca de la incertidumbre. Ella se basa en la recopilación explícita de la justificación para una sentencia, como en un sistema de mantenimiento de la verdad. Las justificaciones se clasifican de acuerdo al tipo de evidencia: a favor o en contra, y se definen las acciones posibles para resolver la incertidumbre de cada evidencia. Esta información ofrece un buen mecanismo para las explicaciones, ya que se crea y mantiene la historia completa de las justificaciones de una sentencia y la relevancia de cualquier proposición respecto a un objetivo.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

156

Un problema de esta teoría es cómo propagar las justificaciones. Cuando se alcanza una conclusión parcial, ésta es producto de una combinación de las justificaciones de sus premisas, por lo que es necesario especificar explícitamente cómo combinar las justificaciones para cada contexto particular, creando potencialmente problemas combinatorios.

4.8.2.4. Conjuntos difusos y lógica difusa. El enfoque de razonamiento difuso desarrollado inicialmente por Zadeh tiene como punto inicial la teoría de conjuntos difusos. La teoría de conjuntos clásica plantea que para cualquier conjunto y cualquier elemento, el elemento pertenece absolutamente o no al conjunto, lo cual se puede expresar por la función:

Un conjunto difuso es una función del dominio en cuestión al intervalo [0,1]. Puntos donde esa función se aproxima a 0 “están menos” en el conjunto difuso, en tanto que los puntos donde la función se aproxima a 1 “están más” en dicho conjunto. Para distinguir al conjunto difuso de la función que lo define, se le llama a ésta característica del conjunto. En la teoría de conjuntos difusos la función característica es reemplazada por una medida Ms, la cual para cualquier x da la medida de la pertenencia de x a S, 0 ≤ Ms(x) ≤ 1. Al igual que en la teoría de conjuntos clásica, se puede definir un álgebra de conjuntos difusos, donde la característica de la intersección de dos conjuntos difusos es el producto de sus características, la característica de la unión es la suma de las características de los conjuntos y la característica del complemento es 1 menos la característica del conjunto. Paralela a la teoría de conjuntos difusos, Zadeh propuso una lógica proposicional difusa, la cual asigna valores entre 0 y 1 a las proposiciones, en lugar de los valores bivalentes usuales: verdadero y falso. 4.8.2.5. Lógica no monotónica. En casi todos los sistemas lógicos si una proposición C puede ser derivada de un conjunto de proposiciones S, y si S es un subconjunto de S', entonces C puede también ser derivada de S'. Esto es, añadir información sin eliminar ninguna, NO puede eliminar vinculaciones deductivas: cuando un sistema incrementa sus premisas, sus posibles conclusiones al menos se mantienen constantes (o se incrementan). Los sistemas deductivos con esta propiedad se llaman monotónicos.

=S a pertenece no x si 0

S a pertenece x si 1 Cs(x)

Inteligencia Artificial. - Sistemas basados en el conocimiento.

157

El término lógica no monotónica (nonmonotonic logic) fue acuñado por Marvin Minsky en el trabajo "A Framework for representing knowledge" en 1975. El enfoque no monotónico se caracteriza porque las conclusiones obtenidas sobre la base de un conjunto de evidencias pueden ser desechadas a la luz de nuevas evidencias. Alrededor de 1980 surgieron dos formalismos distintos que intentaron modelar la esencia del razonamiento no monotónico. • Formalismo de McDermott y Doyle.

En este formalismo se extiende la lógica de primer orden ordinaria introduciendo un operador modal M. Dada una proposición p, Mp significa que p es deductivamente consistente con todas las creencias presentes y las hipótesis. Luego el significado de Mp puede cambiar con el estado de creencias presentes. Las proposiciones del sistema de McDermott y Doyle tienen la forma general (q y Mp) => p, lo cual expresa: si se conoce q, y no se conocen razones para que no se cumpla p, entonces se infiere p. Por ejemplo: Del conjunto de proposiciones:

a) (a y M(b)) => b b) a c) c => not b se puede inferir b. Pero si a este conjunto se añade la proposición d) c

NO se infiere b de nuevo.

Por eso, añadir esta característica al sistema de inferencia lo hace no monotónico, porque inferencias previamente permitidas son rechazadas por la adición de nuevo conocimiento.

• Formalismo de Reiter.

La esencia de este formalismo se puede ilustrar con el siguiente ejemplo: si una base de datos que contiene la información de los vuelos de una línea aérea NO tiene información sobre cierto vuelo, se justifica concluir que tal vuelo no existe. Lo cual puede ser generalizado así: Para cualquier hecho consistente de una relación R y X1, X2 ,..., Xn, si el sistema no puede probar R(X1, X2, X3, ..., Xn) éste puede concluir not R(X1, X2, ..., Xn).

4.8.3. Requerimientos del razonamiento con incertidumbre.

El enfoque utilizado para el razonamiento con incertidumbre debe satisfacer los requerimientos siguientes:

- Debe haber una representación explícita de la cantidad de observaciones que son necesarias para aceptar una hipótesis dada.

- Debe haber una representación explícita de las razones que deben existir para aceptar o refutar cualquier hipótesis.

- La representación debe permitir al usuario describir la incertidumbre de la información con el nivel de detalle disponible.

- Debe estar disponible algún criterio de consistencia para detectar posibles conflictos e identificar los factores que contribuyen esencialmente en él.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

158

- Debe haber una representación explícita del desconocimiento para permitir que el usuario haga planteamientos inseguros.

- Debe haber una clara distinción entre un conflicto en la información o violación de la consistencia y el desconocimiento de la información.

- Debe poderse medir la incertidumbre de la medida de incertidumbre (un segundo orden de incertidumbre).

- La representación debe ser lo suficientemente simple y natural para facilitar al usuario describir la incertidumbre de la información inicial e interpretar la incertidumbre de los resultados del proceso de razonamiento.

- Debe permitirse seguir la traza de la propagación de la incertidumbre a través del proceso de razonamiento para poder resolver conflictos o contradicciones y explicar las conclusiones.

4.8.4. Manipulación de la incertidumbre en los sistemas expertos. La manipulación del conocimiento y los datos inciertos, inseguros e inexactos es típica de los S.E. El mecanismo de esta manipulación constituye una parte sustancial de la M.I. La incertidumbre se expresa, generalmente, por pesos, medidas, grados de confianza, factores de creencia, probabilidades subjetivas, etc. Estas medidas, generalmente, alcanzan valores en los intervalos [0,1] ó [-1,1]. Sólo en el caso de los sistemas de diagnóstico y los sistemas basados en reglas se ha presentado una teoría completa del procesamiento de la incertidumbre. Nuestro objetivo es introducir al lector en los métodos y problemas más importantes del procesamiento de la incertidumbre en los S.E. Nos restringiremos, por tanto, a los S.E. basado en reglas de producción. Una característica de los S.E. es el tratar con hechos, proposiciones y reglas que son inciertos, es decir, que no sabemos con absoluta certeza si son verdaderos. La incertidumbre en los S.E. proviene, fundamentalmente, de dos fuentes:

- Imprecisión en el valor de los hechos iniciales. - Existencia de implicaciones débiles debido a que el experto es incapaz de

establecer una correlación fuerte entre las premisas y la conclusión, lo cual hace que la implicación no sea categórica y permita la posibilidad de excepciones a la regla.

En el mecanismo de manipulación de incertidumbre en los S.E. se presentan las siguientes problemáticas:

- ¿Cómo determinar el grado de certeza de la condición si ésta es compuesta? Por ejemplo, si tenemos la regla:

Si A ∧ B ∨ C, entonces D con F.C. = v, ¿cómo calcular el factor de certidumbre (F.C.) del antecedente?

- ¿Cómo propagar el F.C. a través de la regla si el F.C. del antecedente no es 1?

- ¿Cómo calcular el F.C. de una conclusión si varias reglas conducen a ella? Por ejemplo, si se tienen las reglas:

Si A entonces B con F.C. = v1 Si C entonces B con F.C. = v2, ¿cómo calcular el F.C. de B?

Inteligencia Artificial. - Sistemas basados en el conocimiento.

159

Cada S.E. usa su propio método de propagación de incertidumbre. Uno muy sencillo es el siguiente:

- Para el cálculo del F.C. en la premisa se usan: FC(A ∧ B) = mín(FC(A), FC(B)) FC(A ∨ B) = máx(FC(A), FC(B)) - Para el cálculo del F.C. de la conclusión si el antecedente no es

totalmente cierto se usa: Si A entonces B con F.C. = v FC(B) = FC(A) * v - Para el cálculo del F.C. cuando varias reglas tienen el mismo

consecuente se usa: R1: Si A entonces B con F.C. = v1 R2: Si C entonces B con F.C. = v2

FC(B) = FC(R1) + FC(R2) - FC(R1) * FC(R2)

Analicemos un ejemplo: R1: Si la temperatura es alta y la presión de los gases es alta, entonces

cerrar la válvula de inyección de combustible del horno de cemento con F.C.=0.8.

R2: Si el proceso de quemado es incompleto, entonces cerrar la válvula de inyección de combustible del horno de cemento con F.C.=0.75.

Supongamos que los F.C. de las proposiciones son las siguientes:

Proposición A: temperatura alta. F.C. = 0.8. Proposición B: presión de los gases alta. F.C. = 0.9.

Proposición C: proceso de quemado incompleto. F.C. = 0.65. Proposición D: cerrar la válvula de inyección de combustible del horno de

cemento.

Calculemos el F.C. de D. FC(D)= FC(R1) + FC(R2) - FC(R1) * FC(R2) FC(A ∧ B)= mín(FC(A),FC(B))= 0.8 FC(R1)= 0.8 * 0.8 = 0.64 FC(R2)= 0.65 * 0.75 = 0.4875 FC(D)= 0.64 + 0.4875 - 0.64 * 0.4875 = 0.8155

El tratamiento de la incertidumbre en PROSPECTOR puede verse en [Bra86] e [IPN88] y el de MYCIN en [IPN88], [IPN89] y [Ric88].

4.9. Razonamiento basado en casos. 4.9.1. Sistemas Basados en el Conocimiento Los Sistemas Basados en el Conocimiento (S.B.C.) son un modelo computacional de más alto nivel que el paradigma de la programación convencional, en el cual los sistemas están formados por tres componentes: la base de conocimiento (B.C.), la máquina de inferencia (M.I.) y la interfase con el usuario: ¡ S.B.C. = B.C. + M.I. + I.U. El conocimiento que se almacena en la B.C. es de diferentes tipos:

Inteligencia Artificial. - Sistemas basados en el conocimiento.

160

- simbólico, sobre cómo resolver los problemas del dominio. Se usan las F.R.C. estudiadas.

- probabilidades o frecuencias que modelan como se relacionan los valores de los diferentes rasgos que caracterizan el dominio

- pesos de una red neuronal - casos o ejemplos de problemas del dominio

Estos diferentes tipos de conocimiento dan lugar a diferentes tipos de S.B.C.:

- Sistemas Basados en Reglas, Sistemas Expertos - Sistemas Basados en Probabilidades - Sistemas Expertos Conexionistas o Redes Expertas - Sistemas Basados en Casos.

Características de estos tipos de S.B.C. Tipo F.R.C. M.S.P. Fuentes de conocimiento S.B.R. reglas de producción Forward, backward

chaining expertos, ejemplos, publicaciones

S.B.P. Probabilidad, frecuencia teorema de Bayes ejemplos R.N.A. Pesos Algo. de aprendizaje ejemplos R.B.C. Casos Recuperación y

adaptación ejemplos

S.B.R. Ingeniería del conoc. B.C MSP datos - entrevistas Conjunto solución - análisis de casos de reglas S.B.P. Procesamiento estadístico B.C. MSP datos - análisis de ejemplos probabilidades solución o frecuencias R.N.A. Entrenamiento de la red B.C. MSP datos - ejemplos pesos solución R.B.C. B.C. recuperación y adaptación datos del problema Ejemplos Casos semejantes solución La envergadura del proceso de adquisición del conocimiento dependerá del tipo de conocimiento. En la figura se esquematiza este proceso en cada tipo de S.B.C. En los sistemas de producción se desarrolla un proceso complejo y prolongado en el que la extracción se refiere a la formulación de las reglas, la codificación a la escritura de las reglas según la sintaxis del lenguaje seleccionado y la verificación consiste en el refinamiento de la base de conocimientos. En los sistemas basados en probabilidades la adquisición del conocimiento consiste en coleccionar muestras y realizar un procesamiento estadístico que produzca las probabilidades o frecuencias que forman la base de conocimientos. En las R.N.A. la adquisición del conocimiento incluye la selección de los ejemplos, el diseño de su topología y el entrenamiento de la red para hallar el conjunto de pesos. En los sistemas

Inteligencia Artificial. - Sistemas basados en el conocimiento.

161

basados en casos la adquisición del conocimiento se reduce a la selección de un conjunto de ejemplos o casos resueltos y su organización en la base de casos. Los trabajos básicos sobre el enfoque basado en casos fueron desarrollados por Roger Schank en la universidad de Yale en los años 80. Al final de esa década el Defense Advanced Research Proyects Agency (DARPA) comenzó a centrar esfuerzos en la aplicación de esta tecnología. Componentes de un sistema de razonamiento

- La F.R.C. (lógica, frames, redes semánticas, reglas, etc) - Un conjunto de reglas de inferencia (resolución, instaciación de los frames,

etc) - Mecanismo de control para guiar la búsqueda (forward y backward

chaining, búsqueda heurítica, a ciegas, etc) El razonamiento basado en casos representa un nuevo paradigma de búsqueda pues el formalismo que se utiliza sirve para representar no conocimiento explícito, sino ejemplos de problemas resueltos del dominio de aplicación, las reglas de inferencia se emplean para construir la solución de un nuevo problema a partir de las soluciones dadas a problemas resueltos previamente y los mecanismos de control están orientados a mejorar la búsqueda de los problemas semejantes al nuevo.

4.9.2. El papel de la memoria en la solución de problemas. Gracias a la memoria el hombre puede adquirir experiencias y conocimientos; pues la memoria es pieza fundamental en el aprendizaje. La memoria puede organizar las experiencias, generalizarlas y usarlas en la solución de nuevos problemas. La memoria es también una pieza clave en el sentido común. Cuando pedimos una comida en un restaurant frecuentemente basamos la decisión en lo que posiblemente ellos elaboren bien de acuerdo a otras experiencias en ese restaurant; al planificar las actividades hogareñas se recuerda lo que se hizo y dejó de hacer previamente y usamos esa información para crear el nuevo plan. Conociendo que una de las limitaciones actuales de los sistemas expertos es la imposibilidad de resolver problemas que requieran sentido común, su empleo representa una alternativa en el estudio de variantes para lograr incorporar a los S.E. elementos de sentido común. Según Rubinstein [RUB65] aprender algo de memoria, o sea, el recordar una cosa de modo organizado desde el punto de vista fisiológico significa organizar los estímulos que actúan sobre el cerebro según el modo en que se presentan (concentrados o distribuidos, etc) . ... los resultados que se obtienen de aprender una cosa de memoria dependen no sólo de lo que se estudia, es decir, del material que se ha de aprender, sino dependen también de la manera que el individuo trabaja con dicho material, del modo como lo analiza, lo agrupa, lo generaliza, etc.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

162

La memoria humana se divide en dos, una memoria temporal (MT) y una memoria permanente (MP). En la MT sólo es posible almacenar poca información, y como su nombre lo indica la información permanece en ella poco tiempo, sólo sirve de memoria de trabajo (como en los sistemas basados en reglas). Por su parte la MP tiene una gran capacidad, se divide en memoria episódica y memoria semántica. La memoria episódica contiene información sobre las experiencias personales pasadas, usualmente almacenada desde un punto de vista autobiográfico. La memoria semántica contiene hechos los cuales no están conectados con las experiencias personales, generalmente se modela mediante una red semántica. Características de la memoria humana a tener en cuenta al enfocar su empleo computacionalmente. • El carácter asociativo de la memoria y por ende, del recuerdo juega un

papel determinante en el razonamiento. • Lo que se recuerda es el resultado de un proceso de reconstrucción de

conocimientos precedentes sobre la base de la experiencia y la lógica colectiva y en ningún momento debemos verlo como una simple reproducción.

• En la mente del hombre no puede aparecer un pensamiento cuyos elementos no se encuentren registrados en la memoria, inclusive las ideas nuevas que fundamentan los descubrimientos científicos no constituyen una excepción de la regla.

• La solución de problemas no puede realizarse a no ser por medio de la experiencia de los conocimientos y de los medios de solución incorporados a la habilidad del sujeto.

• La memoria nunca se desborda, el volumen de la memoria no influye en la velocidad de recuperación de la información, ella se autoorganiza dinámicamente para reflejar lo nuevo. La memoria está ricamente indexada, de modo que las experiencias se relacionan mutuamente de forma compleja y abstracta.

• El carácter asociativo de la memoria juega un papel determinante en el razonamiento. Se recuerda lo que es relevante.

• El aprendizaje está dirigido por fallas. Cada vez que se falla al resolver un problema se revisan las conexiones entre las partes de la memoria que intervinieron en el proceso. En general, la segunda vez que se intenta resolver algún problema o hacer alguna tarea es más fácil que la primera porque recordamos y repetimos la solución previa. Somos más competentes la segunda vez porque recordamos los errores cometidos y tratamos de evitarlos. Ejemplo: los médicos al evaluar lo apropiado de una terapia o juzgar cuál entre varias es la apropiada recuerdan momentos en los que este procedimiento terapéutico fue empleado.

• Nuestra memoria dinámica se autoorganiza de modo que es capaz de ajustarse para reflejar lo nuevo. Los expertos, quienes conocen mucho sobre temáticas particulares, pueden recordar hechos de su dominio de experticidad mucho más fácilmente que los no expertos, quienes presumiblemente tienen menos hechos que recordar. Esto es porque tan pronto como se aprenden nuevos hechos éstos se integran, no se suman con los ya conocidos, reorganizándose la memoria para hacer los hechos importantes accesibles. El conocimiento previo ayuda a decidir dónde y cómo colocar los nuevos hechos en la memoria.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

163

4.9.3. Caracterización del razonamiento basado en casos. El Razonamiento Basado en Casos denota un método, en el cual la solución de un nuevo problema se realiza a partir de las soluciones conocidas para un conjunto de problemas previamente resueltos (o no resueltos) del dominio de aplicación. El RBC es una alternativa entre otras metodologías para construir sistemas basados en el conocimiento. La esencia del RBC se puede ilustrar con el ejemplo siguiente. Supóngase que se tiene una gran base de datos relacional de registros de pacientes médicos con rasgos Edad, Sexo, Síntomas, Diagnóstico, Tratamiento, etc. Cuando se presente al sistema un nuevo caso, para el que sean conocidos solamente algunos rasgos, por ejemplo la Edad, el Sexo y Síntomas, el RBC opera proponiendo valores posibles para los rasgos objetivos, tales como Diagnóstico y Tratamiento, los cuales son conocidos para los pacientes en la base de datos pero no para el nuevo paciente. Esta inferencia de valores para los rasgos objetivos el sistema que usa el RBC la realiza, usando solamente la información contenida en la base de datos. La idea básica del RBC es recuperar, adaptar y validar las soluciones encontradas en experiencia previas en un intento de relacionarlas con un problema actual. Las experiencias previas están representadas como una biblioteca de casos que reside en memoria. Cuando se enfrenta con un nuevo problema, el sistema con RBC recupera un caso similar, y la solución del caso se adapta al nuevo problema en un intento para resolverlo. ¿Qué es un caso? Los casos contienen conocimiento a nivel operacional. Cada caso contiene:

- Descripción del problema o situación. - Solución al problema. - Si luego de la ejecución ocurrió algún error en la predicción:

explicación de las anomalías, la estrategia de reparación. la referencia al próximo resultado.

Fig. 4.4. Esquema general del R.B.C. El esquema general del R.B.C. se muestra en la figura 4.4. La memoria contiene los casos resueltos y sus soluciones. El método de búsqueda hace una búsqueda asociativa en la memoria. Esta búsqueda no es una búsqueda tradicional sino incompleta. Por ejemplo: dado un paciente con sus síntomas se quiere buscar en la memoria los pacientes cuyos síntomas se parecen más

Método de búsqueda de la Memoria

Módulo de adaptación

Nuevo

Inteligencia Artificial. - Sistemas basados en el conocimiento.

164

al dado. El módulo de adaptación genera y adapta la solución dada a los pacientes conocidos al nuevo paciente y da un tratamiento a la enfermedad completando la información. El método de búsqueda pudo haber hecho un escalafón de pacientes parecidos.

Pasos para la inferencia basada en casos

1. Presentar como entrada al sistema una descripción del problema a resolver o problema actual (Presentación).

2. Encontrar aquellos casos en memoria que resuelven problemas similares al actual (Recuperación).

3. Determinar cuáles partes del viejo caso se deben focalizar para resolver el subproblema activo.

4. Derivar una solución (adaptando la solución previa a las restricciones del nuevo problema) o los medios de resolver el problema (Adaptación).

5. Chequear la consistencia del valor derivado con la descripción del problema a resolver, y aceptar o rechazar este (Validación).

6. Si se considera apropiada la solución validada se añade a la base de casos para ser usada en el futuro si se considera conveniente (Actualización).

El proceso de encontrar los casos relevantes comprende:

- caracterizar el problema de entrada asignando los rasgos apropiados a éste.

- recuperar los casos desde la memoria con esos rasgos. - seleccionar el caso o los casos que más se parecen a la descripción

dada. Como se puede apreciar el RBC es básicamente el procesamiento de la información apropiada recuperada en el momento oportuno. De modo que el problema central es la identificación de la información pertinente cuando se necesite. En la práctica cada uno de estos pasos puede ser implementado por diversos métodos. Por ejemplo, la recuperación de casos ha sido implementada usando algoritmos de reconocimiento de patrones como el vecino más cercano, árboles de decisión o memorias asociativas conexionistas; la representación de los casos puede realizarse en forma de documentos textos, registros de bases de datos, redes semánticas u otros modelos. Todos estos métodos se estudiarán en próximos seminarios. Los procesos principales involucrados en el RBC son recordar y adaptar. Para poder obtener un desempeño exitoso los sistemas con RBC tienen que atender a las cuestiones siguientes:

- ¿Cómo se adquieren los casos?. - ¿Cómo se organizan los casos en la memoria?. - ¿Cómo son los casos relevantes recuperados desde la memoria? ¿Cómo

puede un buen caso ser seleccionado?. - ¿Cómo se pueden adaptar los casos previos a los nuevos problemas? ¿Cómo

se pueden mezclar las memorias de varios problemas diferentes para formar una nueva solución?.

- ¿Cómo puede un razonador saber cuáles partes del caso recuperado debe focalizar?.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

165

- ¿Cómo puede el RBC ser integrado con otros métodos de resolver problemas?.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

166

Aplicabilidad de RBC El R.B.C. es particularmente útil para resolver problemas y tomar decisiones cuando:

- Es difícil formular reglas. - Existen casos disponibles. - Las reglas pueden ser formuladas, pero requieren mayor información de la

que normalmente se dispone. - Las reglas pueden ser formuladas, pero usarlas es costoso porque: el número de reglas es muy grande. la longitud promedio en la cadena de reglas necesaria para realizar una inferencia es muy larga.

- Los casos con soluciones similares tienen una formulación del problema similar.

- Verificar la utilidad de la solución es fácil.

Aplicaciones del RBC

- Diagnóstico: Dado un conjunto de síntomas encontrar una explicación a éstos. Ejemplo: CASEY (Koton, 1988) para diagnosticar problemas cardíacos, SHRINK (Kolodner, 1987) para el diagnóstico en psiquiatría y PROTOS (Bareiss, 1989) para el diagnóstico de trastornos auditivos.

- Diseño: Dado un conjunto de objetivos y restricciones crear un artefacto que cumpla estos requerimientos de la mejor forma posible. Ejemplos: JULIA (Kolodner, 1987; Hinrichs, 1989) para el diseño de menúes, KRITIK (Goel y Chandrasekaran, 1989) para el diseño de pequeños ensambles mecánicos, CLAVIER (Barletta, 1989) para determinar la disposición de piezas, XBE (Pankakoski, 1991) para diseñar sistemas de manufactura, ARCHIE (Pearce, 1992) para ayudar a los arquitectos en tareas de alto nivel de diseño conceptual y CYCLOPS (Narinchandra, 1988) para el diseño de paisajes.

- Planificación: Dado un conjunto de objetivos y restricciones encontrar una secuencia de acciones que puedan ser ejecutadas para alcanzar los objetivos. Ejemplos: CHEF (Hammond, 1989) elaboración de recetas de cocina, PLEXUS (Alterman, 1988) orientado a demostrar las habilidades requeridas para dirigir un metro y SPA (Hanks y Weld, 1992) sistema de planificación independiente del dominio.

- Explicación: Dada una situación encontrar una interpretación que muestre la causa de dicha situación. Ejemplo: SWALE (Kas y Leake, 1988).

Ventajas del RBC

- El esfuerzo en la solución de problemas puede ser capturado para ahorrar trabajo en el futuro.

- Experiencias previas que hayan sido exitosas pueden ser utilizadas para justificar nuevas soluciones.

- Experiencias previas que no hayan sido exitosas se pueden ser utilizar para anticipar problemas.

- La comunicación entre el sistema y los expertos se realiza sobre la base de ejemplos concretos, lo que facilita la ingeniería del conocimiento.

- No se realizan retrocesos en la búsqueda. - Pueden explicar simplemente presentando los casos seleccionados.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

167

- El RBC es un algoritmo de aprendizaje incremental, el aprendizaje tiene lugar tan pronto como un nuevo ejemplo está disponible.

- El RBC permite proponer soluciones en dominios que no se comprenden completamente.

- Los casos ayudan a focalizar el razonamiento sobre las partes importantes de un problema señalando qué rasgos del problema son importantes.

- El RBC es aplicable a un amplio rango de problemas.

Desventajas

- El sistema no explora todo el espacio de soluciones, por lo que no puede encontrar soluciones óptimas.

- Requiere de una base de datos considerablemente grande y bien seleccionada.

- La consistencia entre varios casos es difícil de mantener. - El RBC depende de una adecuada función de semejanza la cual no es

fácil de encontrar para cada aplicación.

4.9.4. Relaciones del RBC con otros sistemas de razonamiento Razonamiento por analogía vs. RBC. El RBC es una forma de RA. La analogía y el RBC son dos lados de la misma moneda. El RBC es un método de realizar la solución de problemas por analogías, pero es una forma más novedosa del RA.

R.B.C. R.A. Intenta encontrar situaciones útiles Se tiende a buscar situaciones

similares La solución de problemas por analogía ha tendido a examinar analogías entre situaciones de dominios diferentes.

Se trata de establecer la semejanza entre problemas del mismo dominio.

Los problemas son más complejos, pues requieren ser resueltos por partes y necesitan de un esfuerzo de adaptación.

Usualmente requieren solamente de reinstanciación de variables

La solución de problemas por RBC generalmente necesita interacción con el mundo real y posibilidades de explicar cómo se recupera el caso semejante. Los trabajos sobre recuperación han tenido mas prioridad que los de adaptación dentro de la comunidad de RBC.

No requiere interacción con el usuario.

Una correspondencia exacta se considera perfecta.

Una correspondencia exacta no se considera una relación analógica.

Los sistemas basados en casos son pragmáticos y orientados a tarea.

Los sistemas analógicos tienen un alcance más amplio de razonar en aprendizaje y generalización.

Focaliza la adquisición y organización de los casos

Enfatiza en los procesos de transferencia de información de una situación a otra

Inteligencia Artificial. - Sistemas basados en el conocimiento.

168

RBC vs Razonamiento basado en reglas

R.B.R. R.B.C.

Ingeniería del conocimiento más difícil. Se generan las reglas.

Ingeniería del conocimiento más fácil. Sólo se generan los ejemplos.

Se desarrollan más lento con menos requerimientos técnicos.

Se desarrollan más rápido con muchos requerimientos técnicos.

Sobre un hardware secuencial su eficiencia es superior.

Sobre un hardware paralelo su eficiencia es superior.

Usan reglas por lo que es más propenso a las imprecisiones.

No usan reglas como estructuras intermedias por lo que hay pocas oportunidades para inadvertidamente introducir imprecisiones.

Las reglas en la B.C. son patrones.

Los casos en la B.C. son constantes.

Las reglas igualan la entrada en forma exacta.

Los casos igualan la entrada en forma parcial.

No reconocen el límite de su habilidad.

Se puede evitar el riesgo de que el sistema ofrezca una solución equivocada, lo cual puede ocurrir cuando el problema que se enfrenta está en el límite del conocimiento existente en la base de conocimiento. Para esto es suficiente definir un rango permisible de semejanza entre los elementos de la memoria y el nuevo problema. Cuando ninguno de los casos resueltos tenga un grado de semejanza dentro del rango establecido el sistema podrá saber que él NO SABE resolver ese problema. (Ver **)

Se necesita un procedimiento de manipulación de incertidumbre.

El grado de veracidad de la solución encontrada se obtiene directamente a partir del grado de semejanza entre el problema y el caso recuperado.

Las reglas se escriben en formato IF-THEN.

Los casos se pueden representar de muchas formas: BD, estructuras, textos, etc.

La justificación de las acciones se realiza a partir de la cadena de inferencia

La justificación se elabora a partir de la semejanza y/o diferencia con un caso conocido

Ofrece medios para manejar grandes secuencias de relaciones de causalidad.

No ofrece medios para manejar grandes secuencias de relaciones de causalidad.

**Una variante interesante es integrar en un SBC el RBC con un sistema de producción, de modo que en la base de conocimientos del sistema de producción se almacenen las reglas para aquellos tipos de problemas del dominio de aplicación para el que no se tienen ejemplos resueltos; de este modo, dado un nuevo problema se intenta resolverlo usando el RBC y si no existe ningún elemento de la memoria con un grado de semejanza en el rango aceptable se pasa a utilizar el sistema de producción.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

169

RBC vs RNA - Los sistemas con RBC a diferencia de las RNA no requieren una etapa de

entrenamiento, ellos producen resultados inmediatamente. - Los sistemas con RBC son comprensibles, ellos pueden potencialmente

explicar cómo se alcanza una solución. - Ambas trabajan con un grupo de ejemplos.

4.9.5. El RBC en el contexto del aprendizaje automatizado. La adquisición del conocimiento es el clásico cuello de botella en el desarrollo de los S.E. debido a:

a) El incremento en la demanda de SE es superior a las cantidades de ingenieros de conocimiento con experiencia requeridos.

b) El movimiento hacia una actividad humana intensiva como la ingeniería de conocimiento es contraria a todas las tendencias de la industria, en particular, a la tendencia de programación automática en la industria del software.

c) El papel del ingeniero del conocimiento como un intermediario entre el experto y la tecnología se cuestiona no sólo porque incrementa los costos sino también por su efectividad.

El aprendizaje automatizado constituye un área principal de investigación de la IA pues está orientado al desarrollo de técnicas que permitan a los sistemas autoextenderse. El AA denota la posibilidad de cambiar que tiene el sistema, o sea, de ajustarse, de modo que ello permite al sistema hacer la misma tarea más eficientemente la próxima vez. El AA se puede ver como un proceso de reconstrucción del conocimiento del sistema. Si se toma como ejemplo un SBR esto se puede manifestar en especializar o generalizar reglas, ajustar parámetros, extraer casos especiales, etc. Actualmente existen tres direcciones de desarrollo del AA: el aprendizaje en las redes neuronales, el aprendizaje en los algoritmos genéticos y el aprendizaje en la Inteligencia Artificial Simbólica (IAS). La mayor eficiencia en el aprendizaje se alcanza en el primer caso y la peor en el último. Hay al menos tres formas en que el aprendizaje automatizado puede facilitar la adquisición del conocimiento:

• Construir la versión inicial de la B.C. a partir de un conjunto de ejemplos de casos resueltos.

• Refinar bases de conocimientos existentes. • Adaptar una base de conocimientos a un conjunto de

requerimientos dados. Pero para realizar esta tarea la adquisición automatizada del conocimiento tiene que atender a diferentes interrogantes como las siguientes:

¿En qué medida se corresponde la descripción del dominio de aplicación del experto con la existente en la B.C.?.

¿Cómo se debe modificar la B.C. a partir de la nueva información disponible para el refinamiento?.

¿Qué debe hacerse cuando la descripción del experto difiere de la existente?.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

170

Por la complejidad de esta problemática no se dispone realmente de herramientas poderosas y extendidas que realicen eficientemente una parte considerable del proceso de adquisición del conocimiento. En la actualidad se desarrollan los sistemas híbridos en los cuales se combinan los sistemas basados en el conocimiento con hipertextos, redes neuronales, algoritmos genéticos, multimedia, realidad virtual y razonamiento basado en casos. La combinación de los sistemas basados en el conocimiento con RBC produce un sistema capaz de procesar mayor variedad de información. El RBC permite al sistema híbrido manipular casos y realizar un razonamiento ancho y poco profundo. De este análisis se deriva la conclusión de que el RBC no resuelve totalmente el cuello de botella de la adquisición del conocimiento, pues en los sistemas híbridos el SBC cuenta con una B.C., pero el RBC sí representa una tecnología que ayuda en una medida considerable a dar solución a este problema, por cuanto una parte importante del conocimiento del dominio se puede almacenar como casos; pudiéndose llegar a la situación extrema en la que sea posible coleccionar la cantidad y variedad de casos suficientes como para cubrir todos los problemas del dominio, por lo que la adquisición del conocimiento se limita a la tarea de seleccionar y almacenar las memorias o problemas resueltos.

Bibliografía

[BDSE] Bases de Datos y Sistemas Expertos, Tomo II. Universidad de la Habana, 1991. [Bel92] Modelos Avanzados de Computación. Rafael Bello. Universidad Central de Las Villas, 1992. [Bel94] Algunas consideraciones sobre el razonamiento basado en casos. Rafael Bello. Resumen de COMPUMAT’94. Universidad Central de Las Villas, 1994. [Bra86] Prolog programming for Artificial Intelligence. Ivan Bratko. Addison-Wesley Publishing Company, Reading, Mass., 1986. [Bue86] Lógica I. Eramis Bueno y Luciano García. Editorial Pueblo y Educación, 1986. [Cha87] Artificial Intelligence and Turbo Pascal. Christopher F. Chabris. Multiscience Press Inc, 1987. [Fre87] Crash Course in Artificial Intelligence and Expert Systems. Louis E. Frenzel. Indianápolis, IN: Howard W.Sams, 1987. [Gar90] Introducción a la Matemática Discreta. Luciano García y Jorge Lemagne. Universidad de la Habana, 1990. [Gar91] Programación Lógica. Luciano García. Universidad de la Habana, 1991. [GCL84] Manual de Usuario del Golden Common LISP.

Inteligencia Artificial. - Sistemas basados en el conocimiento.

171

Gold Hill Computers, Cambridge, Massachusetts, 1984. [Hay83] Building Expert Systems. Frederick Hayes-Roth, Donald A. Waterman, Douglas B. Lenat. Addison-Wesley Publishing Company, Inc., 1983. [IPN88] Primer Curso Internacional de Sistemas Expertos. Informe Técnico.

Ana M. A. Martínez Enríquez, Guillermo Morales Luna y Zdenek Zdrahal.

Centro de Investigación y de Estudios Avanzados del IPN. Departamento de Ingeniería Eléctrica, Sección de Computación, 1988.

[IPN89] Segundo Curso Internacional de Sistemas Expertos. Guillermo Morales Luna. Centro de Investigación y de Estudios Avanzados del IPN.

Departamento de Ingeniería Eléctrica, Sección de Computación, 1989. [Lau90] Problem-Solving and Artificial Intelligence. Jean-Louis Laurière. Prentice Hall International, 1990. [Ric88] Inteligencia Artificial. E.Rich. Editorial Gustavo Gili, S.A., Barcelona, 1988. [Ste86] The art of PROLOG. Sterling,L. & E. Shapiro. Cambridge, MA: MIT Press, 1986.


Recommended