Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Inteligencia Artificial e Ingenieria del
Conocimiento I

BUSQUEDA

 

Julio J.  Fiubio Garcia
Area de Ciencias de Ia Compu...
TEMA I PRIMERA APROXIMACION A COMMON LISP. ... ... ... ... ... ... .., ... ... ... ... ... ... ...3

I . I .  lNTRoDucmON....
BUSOUEDA 3

TEMA 1 Primera

agroximacién a Common
Lisp

1.1 .  Introduccién. 

Common Lispt como el resto de Ienguajes de ...
BUSCNJED/ l 4

[v j;  jg;  == =~; . it; 

Este ejemplo admite una explicacion simple (el producto de 3 por 3 es 9).  pero
...
BUSOUEDA 5

i* x x)] = ==> CLJADRFADC*

La prlmitlva besar:  de Common Lisp va a permitir Iigar un cierto simbolo (cuadrad...
BUSKXJED/ l B*

Después de Ia anterior introduccién informal,  podemos resumir lo que sabemos del
entorno Lisp. 

Los elem...
BUSCXJEDA 7

escritura depende del entorno concreto con el que estemos trabajando. 
Habilualmente.  se continua en el bucl...
BUSCNJEDA b'

1.53) 2-» ; ;-, ; ERRCF'.  :rss
; ; : :Race : :as

[cuurjzud 3] I= ~ g; 

En otro caso.  se procede a evalua...
&SUKMA 9

luera de una Iisla).  En el primer caso,  el evaluador busca si el simbolo tiene
asociada una funcion,  con el o...
&samua W

EI operador predefinido setq es un elemento especial.  Su primer argumento debe
ser un simbolo (en olro caso se ...
BUSCUFD/ l I r

1.3. Condicionales,  recursividad y Iistas
como estructuras de datos. 

Tras Ia pnmera visita al evaluador...
BUSCXJEDA 12

iêqua;  'a ni = ==> HIL

iequu;  U ui = ==> T

La funcion predeiinida aqg-_il sirve para determinar si dos e...
BIBOUEDA 13

del primer argumento es nil (Ia lista vacia).  el segundo argumento no seré
evaluado.  pero si lo sera el ter...
BUSCNJEDA 14

en Lisp.  Por ejemplo.  si deseamos almaoenar una coleccién de numeros enteros en
Pascal o C empleariamos un...
BIBOUEDA 15

= ==> SUKA-LI STA-ENTEROS

> (suma-lista-enteros '(7' 17 -3)] = ==> 21

Eiercicios.  Se pide escribir funcion...
SUSCKJFD/ l H. ?

TEMA 2. Sistemas de
groduccién y loiiisgueda

2.1. Resolucion de problemas en
Inteligencia Artificial. 
...
SUSCUFD/ l l. ?

En los lemas siguientes ulilizaremos como ejemplos para ilustrar las nociones
leéricas algunos problemas ...
BUSOUEDII 18

-Mediosz se dispone de un deposito con mucho vino (mas de 100 litros . ..) y
las onicas operaciones permitid...
ruu _a en ; otro sec?  E15  san : cnnsideradaie cam.  epjeradñfesi 

 
     

 

'lienriremus et  eunceapmali que pamit& r...
BUSOUEDA 20

- Precondicién:  descripcién parcial del estado del mundo que debe ser verdad
para realizar una accion. 

- I...
BUSCUFD/ l 2 i'

- el modelo es independiente de la representacién elegida para
reglas y memoria de trabajo; 

- es posibl...
BUSOUEDA 2

o Fisico. 

y en cada uno de ellos deberemos elegir representaciones para dos cosas: 
o Estados. 
o operadores...
BUSOUEDA 27

(A su vez.  dependiendo de las estructuras permitidas en un Ienguaje de
programacion concrete.  para cada una...
BLkSOUED/ l 24

- vacia-cuatro:  vaciar en el deposito Ia garrafa de cuatro litros; 
- vacia-tres:  vaciar en el deposito ...
BLlSCLtED/ i 25

Eierclcios. 

1) ESpBCliiCaT como reglas el resto de operadores. 

2) Dibujar el espacio de estados corre...
BLlSCLtFD/ i I 1.*

Para acceder a las distintas componentes de un vector.  Common Lisp proporciona
Ia primitiva Ci ;  e r...
BUSCUFDA 2 .7

V in a a
10 A B C
Figura 7

Para terminar esta breve introduccion a los vectores en Lisp,  hagamos notar qu...
BLlSCHJFD/ l it'

0 1 2

V rie-v- ii n in
vectorih/ f >| <
A T

<vd> <vd> <vd>

Figura9

2.4.2. Registros en Lisp. 

Los r...
BLlSCLtED/ t 29

tiene un efecto que ilustramos en Ia F: gura 10.

Ahora,  para acceder a los campos de esa estructura pod...
BUSCUFDA JE. "

2.4.3. Listas como estructuras de datos en Lisp. 

AI final del tema anterior ya hemos introducfdo de modo...
BUSCUi-'LIA J I

2.4.4. EI nivel fisico de Ia representacién para el
problema de las garrafas. 

AI elegir una representac...
BLGCUEDA 32

Ahora el nivel lisico de representacion consiste en elegir una estructura de datos
para los estados e impleme...
BLGOZJEDA 33'

nuevo estado) no disponemos de instrumentos para hacerlo.  Por ejemplo,  un cédigo
como el siguienle: 

If-...
BUSOUEDA 34

2.5. Espacios de estados. 

Como hemos defnnido en 2.3. el espacio de estados es el coniunto de estados
facti...
BUSOUEDA 35

los estados son oonliguraciones del lablero en las que,  como mucho.  aparecen n
reinas (pudiendo no aparecer...
BUSOUEDA 38

que tiene un cosle.  Habitualmente en estos casos los problemas de busqueda
aparecen bajo la forma de problem...
BUSOUEDA 37

estados es no simple.  En la mayoria de las aplicaciones los espacios de estados
que aparecen son simples (co...
BUSOUEDA 38

2.6. @Qué significa encontrar una
solucién? 

Para alcanzar una solucion del problema debemos disponer de una...
BUSOUEDA 39

o Encontrar cualquier secuencia lo mas rapido posible. 

En general,  al evaluar una estrategia habra que ten...
BUSOUEDA 40

Museum . ..).  En el resto del texto,  las estrategias explicadas no se ocupan de este
problema (sino tan sol...
SUSCUFD/ l 4:'

TEMA 3. Estraleg las cie
control no informadas

3.1. Esquema algoritmico genérico de
busqueda. 

Veamos un...
BUSOUEDA 42

de O a E).  EI modo concreto en que se organice ese oondicional dependera de las
decisiones de diseño que hay...
8 LlS CHJELIA -J 'J'

Los nodos de igual profundidad se ordenan arbitrariamenle.  En realfdad.  en el
algoritmo precedente...
BUS CLtED/ t . .$4

protundzdad generados a partir de un mismo padre se ordenan de un modo
arbitrario.  es necesario indic...
BUSOUEDA 45

 

Figura 3

Elerclclo.  Estudlar como serta el érbol de biisqueda para el problema de las
garralas con Ia ex...
BLGOZJED/ l J! ?

Elerclclos.  Consideremos el problema de las 4 reinas.  Se pide: 

1) comenzar a dibujar el espacio de b...
BUSOUEDII 47

solucion y si ésta existe el algoritmo puede ser muy ineticaz por las mismas razones
que en el caso de los g...
BUSCNJED/ l Ja'

| |
| |
| |
l". 

lsetq imp xl

| |
l| 
|| 
Lru

[zaLq X yl

O)

laetq y : mpi **">

&Podemos hacerlo con...
BIBOUEDA 49

es debido a que en un le:  podemos crear cualquier numero de Iigaduras locales. 
Véase como ejemplo la siguie...
BUSOUEDA 50

(defun suma-d-t lxl
(leL* ltdoble l' 2 xll
(triple (+ doble xll )

(0 doble triplelil

Veamos ahora una primi...
BUSCNJED/ l 51

actualizacién (en el ejemplo:  l - 1 ;  :-) y tras la evaluacién de todos ellos.  sus
valores son Iigados ...
a_ a        
 asian d (ipar délectd;  'Ia (mamalia), -  E515" ; asri al valor
dBWBIflliifnDf  sa. :  *El angunan argumantn...
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Iabusq
Upcoming SlideShare
Loading in …5
×

Iabusq

2,273 views

Published on

Published in: Technology
  • Be the first to comment

Iabusq

  1. 1. Inteligencia Artificial e Ingenieria del Conocimiento I BUSQUEDA Julio J. Fiubio Garcia Area de Ciencias de Ia Computacidn e Inteligencia Artificial Pedro R. Mura Medrano Jose A. Bañares Bañares Area de Lenguajes y Sisiemas In/ orméticos v 1.0 Bonador del November 9. 1998 18:19 Departamento de Informatica e Ingenieria de Sistemas Universldad de Zaragoza
  2. 2. TEMA I PRIMERA APROXIMACION A COMMON LISP. ... ... ... ... ... ... .., ... ... ... ... ... ... ...3 I . I . lNTRoDucmON. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 3 1.2. PRIMERA VISITA A LA FAMIUA DE ELEMENTOS LIS? Y Al. EVALUADOR . ... ... ... ... ... ... ... ... ... . . . 6 1.3. CONDICIONALES. RECURSIVIDAD Y IJSTAS COMO EsmuCrLrRAs m; DATOS. .. ... ... ... ... ... . . . l l TEMA 2. SISTEMAS DE PRODUCCION Y 16 2. l. RESOLLTCION DE PROBLEMAS EN INTEUGENCIA AKTIF-ICMI. .. ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 16 2.2. SISTEMAS DI: ` PRODUCCION Y BCISQLII-LDA. . . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . 18 2.3. REPRESENTACICJN DE PROBLEMAS . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 21 2.4. EsmLrCrLIR As DE mms EN LISP: vscrones. REGISTROS. usus. .. ... ... ... ... ... ... ... ... ... ... .. 25 2.4. l. Vector: : a: Usp. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . 25 2.4.2. Registrar en Lisp . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 28 2.4.3. Usia: como eslructuras de darus en Lisp . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 30 2.4.4. EI nivcl fixica de la represenlucién para e! problema dc las garmfux . ... ... ... ... ... ... . . . 31 2.5. Esmclos DE aswwos. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . 34 2.6. ; Quiz SlGNlI-'ICA ENCONTRAR UNA SOI . ucI0N? .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . 38 'IEMA 3. ESHKATEGIAS DE CONTROL NO INFORMADAS . ... ... ... ... ... ... ... ... ... .. . .41 3. l. ESOUEMA ALoonlmlco GENERICO DE BUSOUEDA . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . 41 3.2. BIJSQUEDA EN ANCHURA . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 42 3.3. MAS samua COMMON LISP: VARIABLES LOCALES. ITERACION. MISCELANEA. .. ... ... ... ... .. . .47 3.4. TEXT! ) DI-J. vacuum SEARCHLSP. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . . $4 3.5. BnsQuEnA FN omm . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 59 3.6. BUSQLTEDA EN PRORINDIDAD . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 64 TEMA 4. ESTRATEGIAS DE CONTROL HEURISTICAS . ... ... ... ... ... ... ... ... ... ... ... . . . 75 4. l. HEURISTICAS. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 75 4.2. Merooos DE ESCALADA. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . 79 4.3. Mêrrouos "PRlMI-ZRO EL MFJOR' . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 83 TEMA 5. BUSQUEDA DE UNA SOLUCION OPTIMA m. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...88 5. l. ESTRATEGIAS NO INFORMADAS PARA LA BUSQLIEIJA DE UNA SOLUCION OPTIMA. .. ... ... ... .. 88 5.2. ESTRATEGIAS HEunisncAs: ALGORITMOS A. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. . . 95 TEMA 6. ESTRATEGIAS PARA JUEGOS. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 114 6.1. Annoussbejusoo. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . . . I 14 6.2. Amoknxuos MINIMAX. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. l IS 6.3. Pom ALFA/ BETA. .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 123
  3. 3. BUSOUEDA 3 TEMA 1 Primera agroximacién a Common Lisp 1.1 . Introduccién. Common Lispt como el resto de Ienguajes de Ia familia Lisp. tiene Ia caracteristica de ser un Ienguaje de programacion interactivo. Es decir, el modo habitual de trabajar en Common Lisp consiste en introducir (desde el teclado o bien por lectura de un fichero) una expresion. que es procesada (evaluada. segan Ia terminologia Lisp) y por ultimo se procede a Ia escritura del resultado (en Ia pantalla o en otro iichero). quedando a continuacion el sistema a Ia espera de que se Ie iacilite una nueva expresion. En el modo mas simple de trabajo se utilizan como dispositivos estandar de entrada y salida, respectivamente. el teclado y el monitor. En este caso las primeras sesiones de trabajo en un entorno Common Lisp pueden recordar al manejo de una calculadora de bolsillo o de un sistema operativo como D. O.S. o Unix. puesto que todos ellos estén basados en un bucle de Iecturaevaluacion- escritura. Veamos algunos ejemplos de uso de un entorno Common Lisp. En estos ejemplos el simbolo 2- es utilizado como 'prompt' del entomo (puede variar segan las implementaciones). el texto escrito a continuacion debe ser entendido como una expresion tecleada por el usuario y el sirnboto ---zv habitualmente no apareoe explicitamente en los entornos y representa aqui el proceso de evaluacion. Por Ultima, lo escrito a la derecha de ---^: ~ es lo que el sistema Lisp mostraria en Ia fase de escritura del bucle de Iectura-evaluacion-escritura. Un primer ejemplo: j) : :zh Si tecleamos un numero (una secuencia de digitos) el sistema lo escribe tal cual: dicho de otro modo: Ia evaluacion de un numero produce el mismo numero. Otro ejemplo: J Rab-o. PR Mx: ) 'J @Maros mwvwart? . 1998- Cursa 96-97
  4. 4. BUSCNJED/ l 4 [v j; jg; == =~; . it; Este ejemplo admite una explicacion simple (el producto de 3 por 3 es 9). pero contiene la mayor parte de los elementos esenciales de Lisp. Asi en él aparecen. ademas de los numeros. un simbolo (r) y una Ilsta (un paréntesis que se abre seguido por una secuencia de elementos Lisp. separados por espacios en blanco. y un paréntesis que se cierra). Ademas se puede observer que Ia notacion en Lisp es prelija: en primer lugar aparece el operador (A) y a continuacion los argumentos. EI siguiente ejemplo nos permitira explicar un poco mejor oomo ha luncionadc el evaluador (Ia parte del sistema Lisp que realiza Ia evaluacion) en este caso. 33 r» 5 ll'I --». v r -r _r': E* i* ~ii = En este ejemplo Ia expresion introducida por el usuario es una lista compuesta por tres elementos Lisp: el primero es un simbolo (el operador +) y el segundo y el tercero son a su vez Iistas. Esta es una estructura tipica en Lisp (la de Iistas anidadas) que conlleva una multiplicacion del numero de paréntesis. una de las caracterlsticas extemas mas llamativas de Lisp. Ante una expresion como la anterior, el evaluador. tras verificar que el primer elemento de la lista es un operador ccnocido. procede a evaluar secuencialmente el resto de elementos de la Iista. En nuestro caso. la evaluacion de I' _a 3.; produce 9 y Ia de l* 5 si produce ; i A los resultados asi obtenidos se les aplica el operador de la lista iniclal (+) y se obtiene el resultado final. 34. Obsérvese que el evaluador es recursive: se Irama a si mismo para evaluar los 'argumentos'. En cambio. el bucle de Iectura-evaluacion-escritura no es recursivo. En particular. notese que los resultados de Ia evaluacion de r* 3 3a de r* 5 5:» no han sido escritos en Ia pantalla. La evaluacion de esas expresiones (y por tanto Ia dada en el segundo ejemplo) responde exactamente al mismo patron explicado para Ia entrada mas compleja: se compmeba que el primer elemento de la lista es un operador (r) y se procede a evaluar los argumentos: pero. como ya hemos indicado. un nomero es evaluado a si mismo. con lo que reencontramos la explicacion simple dada mas arriba (el producto de 3 por 3 es 9). EI ejemplo anterior recoge ya Ia mayor parte de la sintaxis y de la descripcion del comporfamiento de los programas Lisp. Pero si tuviesemos que Iimitarnos a utilizar los operadores predefinidos del Ienguaje tendrfamos una capacidad expresiva no mucho mayor que Ia de una calculadora (sofisticada) de bolsillo. Sin embargo, Lisp permite la definicion de funcicnes de usuario que van a facilitar un desarrollo por retinamientos suoesivos de programas complejos y van a ser Ia herramienta fundamental de organizacion del software en Lisp. Veamos un ejemplo: idoiuh Cuadrado (xi J Pemicu PR . mm 'J Bañares ? ulararrbar 9. 1217- (Lusa E154??
  5. 5. BUSOUEDA 5 i* x x)] = ==> CLJADRFADC* La prlmitlva besar: de Common Lisp va a permitir Iigar un cierto simbolo (cuadrado en el ejemplo) con una deflniclon de funcion (en este caso, Ia funcion que a x Ie hace corresponder l' x xl). La sintaxis es facilmente deducible del ejemplo: se trata de una lista en la que defur'. es seguido de un simbolo (el nombre de una funcion). de una lista de simbolos (los nombres de los parametros formales) y de una expresion Lisp cualquiera (el cuerpo de la funcion). Obsérvese el lormato en que ha sido escrita la expresion de entrada: el cuerpo de Ia funcion aparece en una Iinea dlferente. En Lisp. los elementos de una lista pueden estar separados por cualquier nomero de espacios en blanco o de saltos de llnea. Pero Ia forma de escribir Ia definicion de esa iuncion no es casual: hay unas reglas de escritura del codigo y de sangrado (indentacion) que permiten hacer los programas mas facilmente Ieglbles. Durante el proceso de evaluacion de la expresion anterior tiene lugar algo que no aparecla en los eiemplos anteriores: se produce un electo lateral. Un electo lateral es algo que acontece durante el proceso de evaluaclon y que es distinto de la oonstruccion del valor a devolver (el valor que sera escrito en la fase de escritura del bucle de lectura-evaluacion-escritura). En el caso de defun el electo lateral obtenido es Ia ligadura del nombre de Ia funcion con la funcion en sl. Iigadura que altera el contextc de modo que el nombre podra ser utilizado en las siguientes expresiones del usuario (hasta que terrnine Ia sesion). Habitualmente defun es utilizado para conseguir ese efecto lateral. Pero las nonnas generales de Lisp deben ser respetadas. por lo que la evaluacion de Ia expresion debe producir un valor que sera a continuacion escrito. EI valor que se devuelve es el nombre de la funcion. como queda recogido en el ejemplo. Notese que el entorno puede decidir escribir el simbolo nombre en mayusculas. En Lisp los simbolos pueden ser escritos (por el usuario o por el sistema) indistintamente con mayosculas o minosculas (como los identificadores en Pascal. por ejemplo, pero no como sucede en C). Tras evaluar Ia expresion anterior, el usuario puede utilizar el simbolo cuadrado como si se tratase de un operador predefinido, como puede comprobarse en los siguientes ejemplos: > (cuadreidc 3] = => 9 > (+ (cuadracio 3) (cuacirado 5)) ---> 34 1.2. Primera visita a Ia familia de elementos Lisp y al evaluador. J RubnofRR, MWN) Bañares November& 15398- Cuma 96-97
  6. 6. BUSKXJED/ l B* Después de Ia anterior introduccién informal, podemos resumir lo que sabemos del entorno Lisp. Los elementos Lisp que conocemos se agrupan del siguiente modo: - Atomos. que a su vez se dividen en: - Numeros - Simbolos - Listas Sin entrar en detalles léxicos, los numeros son secuencias de digitos (también se pueden manejar en Lisp numeros reales. racionales y complejos. con los formatos correspondientes) y los simbolos (su apariencia extema. mas bien) son secuencias de tetras y digitos (en los que Ia diferencia entre mayusculas y minusculas no es tenida en cuenta). Es importante no oonfundir los simbolos oon las cadenas de caracteres (estructuras de datos que seran explicadas mas adelante). Las Iistas se definen del siguiente modo: un paréntesis que se abre, seguido de un numero cualquiera de elementos Lisp separados por los delimitadores Lisp (recuérdese: cualquier numero de espacios en blanco o saltos de linea) y un paréntesis que se cierra. Es importante hacer notar que la dellnicién de las Iistas es recursive. lo que permite el anidamlento con cualquier grado de profundidad de listas (ya hemos visto ejemplos de estas estructuras anidadas mas arriba). Este hecho hace que el tratamiento recursive sea en Lisp mas Comodo y mas frecuentemente utilizado que en otros lenguajes de programacién. Entender Lisp es equivalente a oomprender como funciona el evaluador. Para ello vamos a retomar como se comporta el evaluador ante cada una de las familias de elementos introducidas antes. - Atomos: - Numeros: son evaluados a si mismos. Ejemplo: 4 : : : j. - Simbolos: se comprueba sl tienen algun valor asociado: si no tienen ningun valor. se produce un error: == => ; ;;; EFtFlQF. !! '.I 3* Ll Aqul hemos supuesto que los ejemplos que vamos escribiendo son las unicas expresiones introducidas en una misma sesion, desde que se ha entrado a ella. Lo que sucede tras haberse producido un error durante ei bucle de Iectura-evaluacién- J Pertuan PR . mm 'J Hanara. : ? thunder f? . 1211- (Lusa E154??
  7. 7. BUSCXJEDA 7 escritura depende del entorno concreto con el que estemos trabajando. Habilualmente. se continua en el bucle de Iectura-evaluacion-escritura o existe algun modo sencillo de volver a él. Si un simbolo tiene un valor asociado, este valor es el resultado de Ia evaluacién. Para enoonfrar una muestra de esta situacién entre los ejemplos anteriores, hay que mirar con un poco mas de detalle el proceso de evaluacion de una expresion en la que aparezca una funcion definida por el usuario. Asi. tras la evaluacion de: [deiun Cuadradc (xi (v x z-; n = ==> : :'; .a. riaA: :u: i si introducimos: r_zçrigieinçirhaz: lrzz 3) **ni- ?4 en el proceso (intemo) de evaluacion de esa expresion. se produce Ia Iigadura del parametro formal : -; con el (resultado de evaluar el) argumento 3:. de modo que cuando se evalua el cuerpo de la funcion ~: ~ ; -: x). Ia evaluacion de : r. (en cada ocasion), produce el valor 3 obteniéndose finalmente el comportamiento observado (escritura de a). Es importante resaltar que Ia Iigadura del parametro formal 2-: con el parametro real 3 es local al cuerpo de Ia funcion. de modo que su evaluacion fuera de ese contextc producira un error: x -~~: - ; Mr ? _-'~ll'<`. ~f)l`1. l! !! Por supuesto, también exlsten modos de ligar valores a simbolos de mcdo global. Pero este aspecto sera tratado mas adelante. Continuamos explicando el modo de evaluacion del resto de elementos Lisp que conocemos: las Iistas. En cierto modo. aqui se reooge el nucleo de Ia programacién Lisp. puesto que en | ..isp definir un programa es escribir una lista (una definicion de funcion que, habitualmente, se apoya en muchas otras) y ejecutar un programa no es mas que evaluar una lista (una Ilamada a una luncién oon ciertos argumentos). - Listas: se compmeba que el primer miembro es un simbolo que tiene asociado un operador (predefinido o delinido previamente por el usuario) y si esto no es cierto (bien porque el primer miembro no sea un simbolo. bien porque ésle no tenga asociada una funcion) se produce un error: J @author PR . mm 'J Hanara: : ? thunder 9. 1217- (Lusa 51597
  8. 8. BUSCNJEDA b' 1.53) 2-» ; ;-, ; ERRCF'. :rss ; ; : :Race : :as [cuurjzud 3] I= ~ g; En otro caso. se procede a evaluar secuencialmente de izquierda a derecha el resto de miembros de Ia Iista. siguiendo (recursivamente) las mismas reglas que estamos dando: si en algun momento se produce un error. el proceso es detenido y el usuario es informado de que se ha producido un error. En otro caso (es decir. si cada uno de los miembros de Ia lista han sido evaluados con éxito). se procede a aplicar el operador que aparecia en cabeza (primer lugar) de Ia lista a los Valores obtenidos en el proceso de evaluacion anterior. Aqul pueden volver a aparecer nuevos errores, por ejemplo debidos a que el numero de argumentos o el tipo de los argumentos definitivos (es decir, tras su evaluacion) no sean los adecuados. Si no se produce ningun error adicional. se alcanza un elemento Iisp que sera el resultado de Ia evaluacion de Ia lista inicial. La situacion puede ser explicada con mas detalle en el caso de que el operador haya sido definido por el usuario (si es predefinido. el manual del Ienguaje es el que nos indicara el comportamiento del operador). en Ia Iinea que ha sido esbozada mas arriba cuando se ha hablado de la evaluacion de simbolos con ligaduras (locales). pero por el momento nos contentamos con dar esta informacion somera. Esta es Ia regla general, Ia que se aplica por defecto. para Ia evaluacion de Iistas. Pero ya conocemos un ejemplo de evaluacion de una lista que no ha seguido el mismo proceso. Asi cuando explicamos el ejemplo: [cinzfu rt cuaciraxjc- (K) rj* x : -cm = = = T' C [JAC 31.34.01?- no se produjo ningun error. mientras que si se hubiese seguido el procedimiento general se hubiese producido un error al intentar evaluar el simbolo ~: '.1a~. 'lra-i~: ~ que no tiene asociado ningun valor. Esto es asi porque una lista encabezada por de: itu'. es tratada de un modo especial por el evaluador. En particular. los argumentos provisionales de . jas-en no seran evaluados. Un simbolo como 'fit-fun. que tiene asociado un operador predetinido y tal que si aparece en cabeza de una lista las reglas generales de evaluacion de Iistas no son aplicadas sobre ella. se denomina elemento especial. Cada elemento especial requiere una intormacion adicional sobre como se evaluan las Iistas en las que aparece como primer miembro. Otra observacion que puede ser extraida de las explicaciones anteriores es que. de hecho. los simbolos son tralados por el evaluador de modo dilerente segan aparezcan como primer miembro de una lista o en cualquier otra situacion (dentro o J Ramon PR . mm 'J Hanara: : however 9. 1217- 0446096437
  9. 9. &SUKMA 9 luera de una Iisla). En el primer caso, el evaluador busca si el simbolo tiene asociada una funcion, con el objeto de aplicarla a (los valores obtenidos por evaluacion de) sus argumentos. En el segundo. inlenla enoontrar el valor que tiene ligado en el contexto actual. Ambos prooesos son lotalmenle independienles. Por ejemplo: > cuadrado = ==> ; ;;; ERROR Z! !! Esta consideracion pemite ver que un simbolo es en Lisp un objeto muy rioo (mucho mas que un identilicador en lenguajes como C o Pascal) en el que hemos podido dislinguir. hasta el momento, tres componentes: - su nombre (la secuencia de caracteres que nos permite referimos a él) - su valor (como en el caso de la Iigadura local de x y 3) - su valor luncional (que puede ser creado o modilicado usando defun) Précticamenle ya conocemos todos los elementos bésicos que nos van a permitir programer en Lisp. Al ser tan reducido el namero de herramientas con las que contamos, va a ser obligatorio que algunos de estos elementos pueden ser utilizados para varios lines. Esto es lo que sucede oon los simbolos y las Iistas. Los simbolos pueden ser utilizados como: o identificadores: para nominar funciones (como cuadrado), parémelros lonnales (como x en la defnniclon de cuadrado) o variables (todavia no lenemos nlngun ejemplo de este ultimo uso). - Datas, como veremos en breve. Las Iistas a su vez pueden ser utilizadas como: - "Programasi es decir expresiones que pueden ser evaluadas. oomo en la mayorla de los ejemplos anteriores. - Delimitadores sintécticos, como en el caso de las Iistas de parametros lormales. - Estructuras de datos, como veremos al final del tema. Vamos a continuacion a explicar como es posible ligar. de modo global un simbolo y un elemento Lisp. Veamos algunos ejemplos: > (setq x 5) = ==> 3 > x ---> 5 > (l x 8) ---> 13 Jem»/ RRAmmfJGMwn Ihwmuwarñw-&mawar
  10. 10. &samua W EI operador predefinido setq es un elemento especial. Su primer argumento debe ser un simbolo (en olro caso se produce un error) que no sera evaluado y su segundo argumento es cualquier elemento Lisp, que sera evaluado. El resultado de evaluar este segundo argumento sera el resultado de la evaluacion de Ia lista iniclal y ademés, como electo lateral, dicho resultado sera Iigado en el contexto aclivo en ese momento (el global en el ejemplo) al simbolo que era el primer argumento del se: q. Algunos ejemplos mas: > tsenq y (cuadrado (* 1 2))) | | ll | | ll | | ll V V L4.) D . b > (+ (cuadrado x) yl Esta primitiva nos permite manipular los simbolos oomo variables (su teroer uso como identificadores enumerado mas arriba). Sin embargo. para utilizar los simbolos como datos en si todavia nos faltan recursos. Por ejemplo si quisiésemos ligar al simbolo 2 el simbolo caballo no podrlamos teclear algo como: > (setq 2 caballo) -'*> 333; ERROR E! !! La razon es que. segan se ha explicado mas arriba. el evaluador intentara enoontrar el valor asociado al simbolo caballo lo que producira un error. Por ello. si queremos utilizar un simbolo oomo un dato. es obligatorio que podamos impedir Ia evaluacion. Esto es posible gracias al elemento especial quote que no evalua su unico argumento. que puede ser cualquier elemento Lisp. Asi: > (quote caballol ---> CABALLO Lo que utilizado en oonjuncion con setq permite ya manipular simbolos como datos: > (setq z (quote caballol) = ==> CABALLO > z = ==> CABALLO Puesto que quote es una primitiva muy utilizada (Lisp es un lenguaie muy adecuado para Ia manipulacion simbolica. lo que no es ajeno a su ampllo uso en Inteligencia Artificial). los diseñadores de Lisp han previsto una abreviatura. Ia comilla simple '. Asi: > 'caballo ---> CABALLO > (setq pieza 'aLfi1) ---> ALFIL > pieza = ==> ALFIL Obsérvese en cambio: > 'pieza = ==> PIEZA JRMWIRRANW/ JBMWW Mmmñwalñw-GMOQG7
  11. 11. BUSCUFD/ l I r 1.3. Condicionales, recursividad y Iistas como estructuras de datos. Tras Ia pnmera visita al evaluador vamos a terminar el tema con una breve introduccion a Ia programacion en Lisp. Para ello en primer lugar necesitaremos una primitiva de seleccion condicional (un 4 j) y esto a su vez requiere de Ia nocion de predicado: funcion que devuelve un valor booleano. Asi pues debemos comenzar por explicar cueles son los valores booleanos en Lisp. El valor "false" es representado en Iisp por el simbolo 111 1. Este simbolo es una constante predeiinida cuyo valor es el mismo simbolo r. ; 1: m1 ~-- icn. EI valor booleano "cierto" por defecto es el simbolo T. (por "true") que también se comporta respeclo al evaluador como una constanle de valor ella misma: f : ::'; .. 'I' Hemos indicado que r es el valor ”cierto” por defecio debido a que en Lisp cualquier elemento distnnto de ni- es considerado como "cierto" (es una situacion similar a Ia que se produce en C. donde el entero 0 es el valor booleano 'falso'. mientras que cualquier numero distinto de cero es considerado “cierto”. aunque el valor "cierto" por delecto es 1). Eso significa que el valor r. es solamente elegido por Lisp para ser devuelto cuando ningun olro valor distinto de n'. - es significativo en ese contextc. Para terminar con esta breve introduccion a los valores booleanos en Lisp, es necesario observar que el simbolo ni 1 tiene un sinénimo: la lista vacia ~: ti. Es decir. el simbolo ni- y Ia lista vacia u: I» son elementos indistinguibies en Lisp. Se trata de un solo elemento que es el (mico que es simulténeamente un étomo (de hecho. un simbolo) y una Iista. Esto conlleva varias consecuencias. Asi Ia regla de evaluacion de Iistas se generaliza del siguieme modo para Ia lista sin ningun miembro: l; :: ::~. _i _q Y Ia afirmacion de que cualquier elemento dislinto de m1 en Lisp representa el valor booleano "cierto" no nos debe hacer pensar que toda lista en Lisp representa el valor "cierto"; esto solo es verdad para las Iistas que tienen algun miembro. las que no son Ia lista vacia. EI Lisp existen muchos predicados predefinidos que permiten conocer propiedades o comparar elementos. Veamos algunos: J Ranny PR . mm J Hanara: : . Nbraññar rr, raiu: . (mas. ) ziv; ;Jr
  12. 12. BUSCXJEDA 12 iêqua; 'a ni = ==> HIL iequu; U ui = ==> T La funcion predeiinida aqg-_il sirve para determinar si dos elementos Lisp son iguales. Existe otro operador de oomparacion de la igualdad que solo puede ser utilizado con numeros: i~ H [cuadradc ? ii ~~~> T Aunque en Lisp no hay un 'tipado explicito' de los datos y variables. si que existe un "Iipado implicito" que oonsisle en que ciertos operadores predefinidos producen error si sus argumentos (delinilivos: tras Ia evaluacién) no son del tipo adecuado. Ask i: ai "gi = ==> ; ;-; Essa& 1:! ! ya que. si continuamos en Ia misma sesién desde el comienzo del tema. u ___, q Lo mismo sucede con otros operadores numéricos. ya sean de comparacién (. =-. -r -) o aritmétioos (o, -, ,. ..). Una vez que conocemos cienos predicados. podemos pasar a considerar Ia primitiva oondicional més elemental en Lisp: ; f. Veamos algunos ejemplos: [se-sfq x 7] ---t- 7' > [xi li x bj '. 'r. v;1'1~r: ~L _r;1.i--. ~_«_* i n 1* : J 'wayor_c_1guaZ_que_3incoi = = = 2» I~1A'x': :a_~: ;_ I L3IJAL_I; `:F. JE_I. `. : :-16:: ljzeLrj 5; 3] = ==> 3 lit Ir x 5] 'renor_qJe_cin: a 'muyar_c_1qua; _que_:1ncoi ~~~> HENDR_QUZ_CINCO EI oondicional i I es un elemento especial. Tiene tres argumentos. de los cuales el primero (la condicién) sera siempre evaluado; su valor tendra' una interpretacion booleana. Si dicho valor es "cierto" (es decir. distinto de m1. Ia lista vacia). el segundo argumento del 1:" (Ia rama 'entonces") sera evaluado y su valor sera devuelto como valor del r r: el tercer argumento del - r no sera evaluado. Si el valor J @author PR . mm 'J Bañares ? tersebar 9. 1217- (Rusa 51597
  13. 13. BIBOUEDA 13 del primer argumento es nil (Ia lista vacia). el segundo argumento no seré evaluado. pero si lo sera el tercero (Ia rama "si no"). cuyo valor ser& el del 1 f. Esto nos permite programer una tuncion que caloule el méximo de dos numeros enteros: > (defun mayor (xl x2) ; xl y x2 debaran ser numeros enteros (if t< xl x2) x2 xl)) = ==> MAYOR > (mayor 2 3) ---> 3 > (mayor t* 2 7) 3) ---> 14 > (mayor 6 'numeroi = ==> ; ;;; ERROR E! !! En Lisp los comentarios (aquellas partes del texto que no seran tomadas en consideracion por el evaluador) se indican mediante ; . el punto y come Cuando aparece en una Iinea el carécter reservado ; se entiende que el texto que aparece tras el en esa Iinea es un comentario. En el eiemplo anterior se ha escrito oomo comentario Ia especiticacion de entrada de Ia funcion de mayor: si sus argumentos (detinitivos) no son numeros enteros su comportamiento esta indetinido. En particular. si se introduce un simbolo oomo argumento (como en Ia Ultima linea del ejemplo) se producire un error. Con estos pocos preliminares. podemos ya escribir programas que realicen célculos repetitivos. Para elo nos apoyamos en la recursividad. que en Lisp puede ser comprendida sin mes que aplicar las reglas generales de evaluacion expticadas mas arriba. Por ejemplo. Ia siguiente funcion permite caicular el tactorial de un numero entero positive: > (defun factorial (ni ; n debet& ser un numero entero positive (if = n O) 1 t' n tfactorial (- R 1))))) ---> FACTORIAL > tfactorial 4) ---> 24 Para tenninar esta brevisima introduccion a Ia programacion en Common Lisp. vamos a mostrar oomo las Iistas pueden ser empleadas como estructuras de datos J RIJDIbRR, Mun/ J SMUN; Manuver! . 1998 - Cuma 9597
  14. 14. BUSCNJEDA 14 en Lisp. Por ejemplo. si deseamos almaoenar una coleccién de numeros enteros en Pascal o C empleariamos una eslruclura de Ia familia “vector” (un "array'). En Lisp esto puede ser conseguido utilizando una lista. Para tratar con una lista de enteros es necesario impedir su evaluacién: : r: ; ;;, ~ macan l! !! li (1231: '(1 L 3) = ==> iL L 31 Ahora necesitamos operadores predefinidos que nos permitan acceder a los elementos de una Iista. El operador 1 1; -_. ~r_ extrae el primer miembro de una Iista. mientras que el operador re -. devuelve una lista como Ia iniclal, pero sin su primer miembro. Estos dos operadores utilizados combinadamente permiten acceder a cualquier miembro de una lista: iflrst '47 17 ~3Ji **'> 7 treat '(7 `7 3)) I- 117 3] [idrst (rest ' il' lT" -rI-i II J = ==> ll' > [Z1LsL (LCEL (: :3L '(7 17 ~3)JJi = ==> ~3 Obsérvese el siguienle ejemplo de comportamiento de 1 . _« v. : (rest '( 3)! *"* N; ; Por ultimo el predicado Emily& nos informa de si una lista es vacia (esto es. igual a n1lk iki-hdp' ` (7 17 -TI l -~4-'- f-(Tf. > [endp '()) = ==> T [v: r`1d{: :~ (H : ==> T [êndp 'niii ~~-2 T > [endp nlli = ==> T [endy: (resL 'i-Sl i' = == * 'I' Estas pocas herramientas para el tratamiento de Iistas. utilizadas junto a Ia recursividad. nos permiten ya impiementar algoritrnos para el procesamiento de datos estmcturados. Por ejemplo. la siguiente funcion calcula Ia suma de los elementos de una lista de enteros (se impone que si Ia lista de entrada es vacia se devuelva O). Ldeiun suma-lista-entercs (li5ta~enterc5] (if Iendp 1153& enterosi J n.1n; .o. ~P. n . mm 'J Hanara: : hbrGITñGf 9. 1217- corsa 135537
  15. 15. BIBOUEDA 15 = ==> SUKA-LI STA-ENTEROS > (suma-lista-enteros '(7' 17 -3)] = ==> 21 Eiercicios. Se pide escribir funciones Lisp que realicen la tarea que se indica. Para cada una de ellas se debaran escribir unos cuantos ejemplos significativos de Ilamadas a Ia funcion. I) Diseñar un predicado (funcion que devuelve valores booleanos) que. a partir de una lista y un elemento Lisp cualquiera, decide si el elemento es equal a alguno de los elementos de Ia lista (si Ia lista es vacia se entiende que el resultado de la busqueda debe ser ni 1). 2) Diseñar una funcion que. a partir de una lista de enteros positivos. calcule el elemento méximo (se impone que si Ia lista es vacia se devuelva el entero -1). lndicacion: utilioese Ia funcion mayor que aparece en el texto mas arriba. 3) Diseñar una funcion que. a partir de una lista no vacia de enteros. calcule ei elemento minimo. Indicacion: diséñense dos funciones auxiliares, un predicado que verifique si una lista tiene un Onico elemento y una funcion que calcule el minimo de dos numeros enteros. J RIJDIbRR, Mun/ J SMUN; Navevrñera 1998 - Cuma 9597
  16. 16. SUSCKJFD/ l H. ? TEMA 2. Sistemas de groduccién y loiiisgueda 2.1. Resolucion de problemas en Inteligencia Artificial. En general, podemos alirmar que un problema consisle en: - una descripcion de la situacion de la que se parte: - una descripcion de Ia siluacion a Ia que se quiere llegar: - una descripcion de los medios de que disponemos para alcanzar nuestro objelivo. En el conlexto de Ia lnlormalica. a partir de un problema. se inlenla construir un sistema que lo resuelva. Resumidamenle. las acciones para conslruir un sistema que resuelva un problema serian: - Delinir el problema con preciszén (especilicacién del problema). habitualmente a partir de un enunciado del problema expresado en Ienguaie natural: - de que se parte: - cuél es el obielivo. - Analizar el problema: inlormacion para elegir las técnicas. - Aislar y representar el Conocimiento necesario para resolver el problema. -Elegir Ia mejor lécnica que resuelva el problema y aplicarla al problema particular. Parlicularizar eslas acciones al contexlo de la Inteligencia Artificial conslsle en elegir las técnicas de resolucion entre aquellas que son utilizadas en esia disciplina. En nuestro caso. nos cenlraremos en los siguientes lemas en las lécni-: as relacionadas con los sistemas de produccion y la busqueda en espacios de eslados. . .l @Elmo PR Mw! ? . J 63744.32:: Mfu-nrnm-. r:'{ l ? PAR ~1'I'. urx.1:`. »'i. '.| ,?
  17. 17. SUSCUFD/ l l. ? En los lemas siguientes ulilizaremos como ejemplos para ilustrar las nociones leéricas algunos problemas que no son aplicaciones realcs de Ia lnleligencia Arlilical. Se trala mas bien de ejemplos que han sido elegidos porque son sulicienlemente mancjables, tanto en cuanlo a la laciladad de su enunciado como en cuanlo al volumcn de datos que es necesario explorer para oblenor una solucion. He aqui algunos de ellos: - EI 8-puzzle. - Enlrada: Un lablero 3x3 donde aparecen dislribuidos los digitos 1. 2. 3. 4, 5. 6, 7 y 8, quedando por lanto una de las Casillas del lablero en blanco. Por ejemplo. un tablero lal y como aparece en la Figura 1. F igura 1 -Salidaz Alcanzar una dlsposicién distinla de los digitos en el tablero. Habitualmenle se toma como conrguracién de Ilegada el tablero que tiene el digrto 1 en la primera casilla de Ia primera linea (esquina superior izquierda) y los digitos 2, 3. 8 se distnbuyen uno a conlinuacion de olro en el sentido de las agujas del reloj, quedando la posicién central del tablero sin ocupar (ver Figura 2) F igura 2 -Nlediosz si una casilla del tablero esta al lado de Ia casilla vacia se puede desplazar sobre ella. (En particular, esta prohibido usar un destornillador para sacar las piezas y resituarlas como a uno le parezca r. .) ~ EI problema de las garrafas de vino. - Entrada: dos garrafas vacias. una de cuatro litros y otra de tres. - Salida: Ia garrafa de cuatro Iitros contiene exactamente dos litros de vino. . .I F1'. itu: : PR Mun? ., .| 63744.32: . F.R1i-r. in*x. -.r: i, r refill ~ ii`z. rx.1:^. »'; 3.1,?
  18. 18. BUSOUEDII 18 -Mediosz se dispone de un deposito con mucho vino (mas de 100 litros . ..) y las onicas operaciones permitidas son llenar cada garrafa en el deposito. vaciarlas en el deposito y pasar contenido de una garrala a la otra, hasta que la primera se vacie o Ia segunda se Ilene. (En particular. no es licito suponer que se dispone de Otra garrala que puede contener exactamenle dos litros . ..) - El problema del granjero, el lobo, el carnero y Ia Iechuga. o Entrada: un granjero, un lobo, un camera y una lechuga se encuenlran en la orilla derecha de un rio. - Salida: todos ellos han pasado a la orilla izquierda del rio. -Medios y restricciones: se dispone de una barca que debe ser conducida por el granjero y que solo tiene capacidad para uno de los otros elementos: el lobo se comeré al camera si los deja junlos sin oompañia en uno de los Iados; el camera se camera la lechuga si los deja solos. Elerclclos. A partir de las siguientes descripciones de los problemas que se indican, detallar oon mayor precision Ia entrada, la salida y los medios de resolucion. 1) EI problema del viqjante. Un represeniante de comercio tiene que visitar una serie de ciudades viajando entre ellas por carretera. Dispone de un plano de la region con la inlonnacion de las dislancias entre las ciudades. Desea partir de la ciudad en la que esta para volver a ella tras haber visilado el resto de ciudades. pero habiendo hecho el minimo numero de kilomelros posible. 2) Las n reinas. Se trata de situar n reinas (siendo n un namero entero positive mayor que 3) del ajedrez en un lablero n x n (el nonnal tiene 8 x 8 casillas) de modo que no se "ooman" entre si. 2.2. Sistemas de produccion y busqueda. Si particularizamos la detinicion de problema dada en el apartado anterior del siguiente modo: - Entrada: una descripcion del estado iniclal del mundo. - Salida: una descripcion (parcial) del estado del mundo deseado. J RubnofRR, MWN) Bañares November& 15398- Cuma 96-97
  19. 19. ruu _a en ; otro sec? E15 san : cnnsideradaie cam. epjeradñfesi 'lienriremus et eunceapmali que pamit& resetter; elpgprablenraipaarvl medium ; uni sistematis prniducnlñn. ha: : deden; p j -unaesrrategfatñe cnnrrrilzi artiiialrsnrjgiasrnfçta diri recnnnrrrnranrn-eçtnncién- Partaitmiñls Imnnnanree elsternasnile iprndncclñn Ie 13311316913146& ' armada. ieu ei! EUDIEXYG Gallus& sistema; mepanlsmn o. . motor de: “ayi ia asrama& -êl. “Dtññêêd nan : bilamana : ne ; a selartan; dagang: _ dari prabtema ninna : dada * tr irma; rincian: dar: -esraçin -tdie »munriicjs padamu. : eniendarnlzezmfslsletna : te-inpres sweetie azasi: puede erander? eneltgstacid? &lain para antigen Inennerannresf naquézeucede sl han: operadaresyppnrsibles; aeaplibarii ; iresnljuciñn dia& Lies 1615312116132: organisme. , sini: que pueden irranslannar jun estado: `n Ganeraiinante : seaiiistinguen en ; JEYKHDYES ; parte izquierda: ata! ? patrñn q enndicliifnir san& aristninnlniai iapllcabliidad; rie ilaa renta (se- rum emutan; aque- -sl ee: ;ranum : ia condition 1a 'mulia Havana: n ei apiiwie! ngerasain (o nsparania una. rerata ui operador
  20. 20. BUSOUEDA 20 - Precondicién: descripcién parcial del estado del mundo que debe ser verdad para realizar una accion. - Instrucciones para crear el nuevo estado. Taxonomias de los Sistemas de produccion/ busqueda/ ostrategia de control: - Hacia adelante I hacia atrés I bidireocional - Irrevocable! lentativa - Informada I no informada Ventajas de los sistemas de produccion: -Separacion de conocimianto (reglas) y control (ciclo de reconocimiento- actuacion). - Modularidad de las reglas/ operadores: - no hay interacciones sintécticas entre reglas: - la oomunicacion se establace a través de cienas estructuras de almacenamiento comunes, que se denominan de modo genérioo memoria de trabajo. (No es estrictamente necesario que exisla una variable o estructura de datos explicita con esa nombre. ) - Control dirigido por patrones: v programas en IA necesitan llexibilidad: - reglas pueden dispararse en cualquier secuencia; ~ estado > reglas aplicablas > camino de Ia solucion. - Traza y axplicacién: ~ secuencia de aplicacion de reglas; - cada regla es una pieza de oonocimiento oon su justificacion para un cambio de estado. - Independencia del Ienguaje: J woman. Mimi. ) @Maros November! . 188-00180969?
  21. 21. BUSCUFD/ l 2 i' - el modelo es independiente de la representacién elegida para reglas y memoria de trabajo; - es posible siempre que el Ienguaje soporte el reconocimienlo de patrones. - Modelo plausible del mecanismo humano de resolucion de problemas. lntérpretes generales de sistemas de produccion: - Lenguajes basados en reglas: - OPS5 (Brownston. en 1985. de CMU. en Common Lisp usa RETE): - CLIPS (C Language Integrated Production System) (de NASA, permite Ia integracion con lenguajes oomo C y Ada). ~ Lenguajes basados en logica: el mas exlendfdo es PROLOG. - Armazones de sistemas expertos: - EMYCIN; - en entornos de IA (KEE, KnowledgeCralt. LOOPS. .. .). - Arquitecturas generales de resolucién de problemas: - GPS (Newell. Shaw. Simon) 1963; - SOAR (Newell. Laird, .. .) 1987. 2.3. Representacién de problemas. Una vez decidido que el problema planteado va a ser resuelto por medio de un sistema de produccionsbusqueda en el espacio de estados. debemos elegir una representacion adecuada para el problema. Esto debe ser resuelto en tres niveles: - Conceptual. - Logico. J Qlm`l7l PR Alim J Hanara: : . Nbraññar 9, rm# . Cars. : : :w ; Jr
  22. 22. BUSOUEDA 2 o Fisico. y en cada uno de ellos deberemos elegir representaciones para dos cosas: o Estados. o operadores. EI nivel Conceptual hace relerencia a qué oonsideramos oomo estado del problema y qué como regla u operador valido, pero independientemente de cualquier estructura de datos o descripcion de algoritmos que vayamos a usar. En el nivel légico se elige una estructura de datos para los estados y se determina el tormato de oodilicacién de los operadores (puede ser también una estructura de datos o se puede hacer prooeduralmente). Por ultimo en el nivel lisico se ooncreta para el Ienguaje de programacion elegido la implementacion de estados y operadores determinada en el nivel légico. Los niveles logico y fisico estan conlundidos en ocasiones y, ademas, la tase clave para un prooesamiento eticiente esta en el nivel conceptual. Por ejemplo. en el 8-puzzle se podria decir que el estado incluye inlomtacién sobre el material o el tamaño del lablero. etc. Sin embargo. nada de eso es relevante. Basla oon conocer la ”situacién relativa' de los digitos. En general. la nocion de estado elegida deberia describir: -todo lo que es necesario para resolver el problema: - nada que no sea necesario para resolver el problema. Para el problema del 8-puzzle: o Iocalizacion de cada casilla y el hueoo: o nada mas. Observese que, un vez lijado el nivel Conceptual, todavia tenemos muchas opciones en el nivel Iogioo: o matriz 3 x 3; - vector de longitud 9; - conjunto de hechos: {(superior-izda = 2). (superior-centro = 1), .. .}. J Rasio/ PR, MKDVU Bañares November! . 138-00180969?
  23. 23. BUSOUEDA 27 (A su vez. dependiendo de las estructuras permitidas en un Ienguaje de programacion concrete. para cada una de ellas son posibles dilerentes elecciones. pero esto nos interesa menos: es mas un problema de programaclon que de Ik) En cualquier caso, la eleccion de la representacion para los estados esta muy ligada a la que se haga para los operadores, puesto que ambos elementos deben "oooperaf para la resolucion del problema. En cuanto a los operadores. deben ser tan generales como sea posible para asi reducir el numero de reglas distintas. En el caso del 8-puzzle: 04 x 9! operadores para pasar de un estado cualquiera a sus. oomo maximo 4, estados suoesores: 04 x 8 operadores que mueven cualquier licha arriba. abajo. derecha o izquierda; - 4 operadores que mueven el hueoo arriba, abajo. derecha o izquierda. Evidentemente, Ia Ultima representacion es la mas adecuada. La eleccion de una representacion para los estados y los operadores define implicitamente una relaclon de adyaoencia en el oonjunto de estados lactibles para el problema. A este oonjunto con Ia estructura de adyaoencia definida se le denomina espacio de estados. EI espacio de estados es una nocion clave en los sistemas de produccion, puesto que es el lugar en el que se va a desarrollar Ia bosqueda. y en el que se van a poder comprender las distintas variantes involucradas (en particular. las taxonomias: hacia adeIante/ hacia atras. etc. ). Un lragmento del espacio de estados para el 8-puzzle, donde se ha elegida oomo representacion para los operadores los 4 operadores citados antes. puede verse en la Figura 3. Veamos quo sucede con Ia representacion del problema de las garralas de vino. Conceptualmente. los onioos datos relevantes en cada momento para el sistema son las cantidades de vino que contienen las garralas de cuatro y tres litros (puesto que la cantidad de vino que haya en el deposito no inlluye en la resolucion del problema, oomo ha quedado tijado al explicar los medios de que se dispone en el problema). Los operadores sobre esos estados serian: - llena-cuatro: llenar. cogiendo del deposito, la garrala de cuatro litros; - llena-tres: llenar, cogiendo del deposito. la garrala de tres litros: J Ruoiixrkn, MANU Bañares Mancur& 1998- 0441809697
  24. 24. BLkSOUED/ l 24 - vacia-cuatro: vaciar en el deposito Ia garrafa de cuatro litros; - vacia-tres: vaciar en el deposito Ia garrata de tres litros; -echa-Ia-cuatro-a-Ia-tres: echar de la garrafa de cuatro litros en la garrata de tres: -echa-Ia-tres-a-la-cuatro: echar de Ia garrata de tres litros en la garrafa de cuatro. ama: * mutagen . m o. ;gama / , I 4/ I. _n_ X. I `x 1313 4314314314314 143 ana ana ana : maa ana aa Figura 3 En el nivel Iogioo. un estado seria identificado como un par de nameros (x, y) donde. por ejemplo, x es el nnmero de litros que contiene Ia garrata de cuatro litros e y el namero de litros de Ia garrala de tres litros. En este nivel cada uno de los 6 operadores anteriores deberian ser especilicado como una regla. con una preoondicion (o premisa) y una accion asociada (o oonsecuencia). Por ejemplo: IIena-cuatro (x, y): precondicion: x < 4: aocién: oonstruir el estado (4.y). J Rabnowkn. umu Bañares Hammers? . 1993- Gurso 96-97
  25. 25. BLlSCLtED/ i 25 Eierclcios. 1) ESpBCliiCaT como reglas el resto de operadores. 2) Dibujar el espacio de estados correspondiente, a partir del estado iniclal (OD) hasta que encontrois un estado objetivo. es decir un estado de Ia forma (2.y). Para estudiar ei nivel fisico. que es el mes cercano a la nmplementacion del sistema. vamos a analizar las estructuras de datos en Lisp. 2.4. Estructuras de datos en Lisp: vectores, registros, Iistas. 2.4.1. Vectores en Lisp. La funcion que permite constmir vectores en Lisp es rn; -_'-: »? arraju'. Esta funcion toma un unico argumento cuyo valor debe ser un namero entero positive: llamemos n a d: cho numero. Devuelve como valor un vector con n componentes que contendran un valor por detecto (que depende del entorno concreto con el que estemos trabajando y que sera denotado -: 'sri e- en las figuras). Atencion: los indices de los elementos en el vector comnenzan en 0 y terminan en n-1 (como en C: de hecho. todo el tratamienlo de vectores en Lisp es mucho més cercano al que se hace en C que al de otros Ienguajes como Pascal). Por ejemplo. [m . =. . a ~ ~1 r m ; s a : s 'r dependiente del entorno construye un vector que puede ser represenlado como aparece reflejado en Ia Figura 4. Notese que puesto que ei vector asi construldo no ha sido Iigado a ningun simbolo. ni pasado como parémetro, es un elemento que no puede volver a ser reutnlizado. <vd> <vd> <vd> valores por defecto en Ia impienrentacion Figura 4 . .I Antum PR . Hum J E'a~1,: .-. ::: Mrnvnvnéu-. ra [FEUI . ('. '.: _.rs.1:'. v;5.I. ?
  26. 26. BLlSCLtFD/ i I 1.* Para acceder a las distintas componentes de un vector. Common Lisp proporciona Ia primitiva Ci ; e r, que toma dos argumentos: ei primero debe ser un elemento vector (es decir. creado por i'ii. 'ii~'. e;-r. ;1: I 4.1:) y el segundo debe ser un numero entero entre 0 y n~1 Sl n es Ia dimension del vector que es ei primer argumento. Por ejemplo, si consideramos que el simbol-o esta Iigado al vector que aparece en Ia Figura 5 tendriamos: taraf iii : :: A [dial u li : ::~ E O 1 2 V 15:; - iri 1 1 I A B C Figura 5 Para moditicar el contenido de aiguna componente de un vector utilizamos Ia primitiva : :Z r que es como : ata: salvo que su primer argumento no tiene por qué ser un simbolo: puede ser cualquier variable generalizada (ver Ia Figura 6), O 1 2 V -i-? a- a dll l 1 1 A B C Vanables generalizadas Figura6 Siguiendo con el mismo ejemplo. si evaiuamos: irérTf Ij mer' fii -1 i 4411-) 1 iii tendremos (ver Figura 7): 121 L' 21 t U fi : : ll] . .I RAKHYM PR . Nia-rr J Siwuran: .nhi-aintu-. rer 1211111 . (1'. urs.1:'. v; 5.1.?
  27. 27. BUSCUFDA 2 .7 V in a a 10 A B C Figura 7 Para terminar esta breve introduccion a los vectores en Lisp, hagamos notar que el efecto que percibe el programador es que los vectores son transferidos como parémetros por referencia. Por ejemplo. si evaluamos: ` ` ' 1 ITP; -pr i m; I' 'a IU; T? r. r D1 V-HLHT T. 'I | :;>: Zt Coret *xsgtpc l. ) >: -E'. "1~: *IIZ'_`*; *:' y a continuacion I`: ~:'~: ',r_1 'ImaL: '~1-. arr. ~.'-, v' . Il 24 : ==i" Lfar, w+>. 'nf; er1*5 . ::PJ r: :;. u1'r; .:~ tendremos una siluacion como Ia reflejada en Ia Figura 8. 0 1 2 vm_. .n a a <vd> <vd> <vd> Figura8 Si evaluamos a continuacion: x. H H H L4 ljmgaiiL ; am-gu u' v- 1 , tendremos un proceso como el recogido en Ia Figura 9. por Io que el resultado observable para el programador es el siguiente (que puede resumirse diciendo que el vector ha pasado por referencia): I jlêf FHI . .I Antum PR Mw? ? J E'av1,: .-. :>. : . 'u_'h-r. v.'_*. u'. rt? _ unt& . (lursn: :: H 5.1.?
  28. 28. BLlSCHJFD/ l it' 0 1 2 V rie-v- ii n in vectorih/ f >| < A T <vd> <vd> <vd> Figura9 2.4.2. Registros en Lisp. Los registros en Lisp toman el nombre de "structs" (estructuras). La primitiva para definir una familia de estructuras, todas reieridas por un mismo nombre. es ciaizrrimwr. Este elemento especra/ toma como argumentos cualquier numero (mayor o igual que dos) de simbolos. que no seran evaluados. EI primer simbolo sera interpretado como el nombre de Ia estructura y los siguientes seran los nombres de los campos en la estructura. EI valor devuelto por una Ilamada a : ie : :r rim: es el nombre de Ia estructura definida. Por ejemplo, Ia evaluacion de: I_ ui , V 24 L L L1 . g L l 1 L' 1 -g U L p L , L L , . l i; ji a 1 L1 ; ~' at» define una familia de registros, de nombre ; riziiz y con dos campos Ilamados a u", i: : y r, _ t uin; La evaluacion de una Ilamada a ae: * ar, r- iin-r, tienen varios efectos Iaterales. Entre ellos. la definicion de una funcion para Ia oonstruccion de registros de esa familia (el nombre de esta funcion se construye adjuntando i-i-iaiae como prefijo al nombre de Ia estructura; en el ejemplo anterior: i-i-iaiae Lgirri) y la definicion de funciones de acceso a cada uno de los campos de Ia estructura (en el ejemplo. liiirii am : ir y 1133111 i ; t«_i1i: :). Para oonstruir un eiemplar de una estructura, Ilamamos al eiemento especial de oonstruccion (como riiai; e l`_ITiL"CI en el ejempio) con un numero par de argumentos (se le puede Ilamar sin ningun argumento). Los argumentos que aparecen en lugar impar no seran evaluados (y son simbolos construidos poniendo ': ' como prefijo del nombre de los campos: en el ejemplo. :airxii o : r. ; r , Ilfil Los argumentos de lugar par pueden ser elementos Lisp cualesquiera y seran evaluando. pasando sus valores a ser las componentes de los campos del ejemplar de la estructura que es construido. Por ejemplo, Ia evaluacién de: . .I Hunian PR . Him J Elvisar. : . '`_'JI'JTvTTk`. f$7_ HEW . (Ciursn: :: vi : :If
  29. 29. BLlSCLtED/ t 29 tiene un efecto que ilustramos en Ia F: gura 10. Ahora, para acceder a los campos de esa estructura podemos emplear los operadores de acceso ;113LO'3 _tapi o lili; ._~~r_ -_: i_.1i; . Por ejemplo: lf l itu* c» . ,1'. t~tir^ : -z l i- 'Hii Hbm x -ir--r- 4 autor . g Yo muh e <vd> w vanabms generalizadas Figura 10 Como hemos recogido en la Figura 10. Ia Iigadura existenle entre los campos y las componentes en una estructura debe ser inlerprelada como una variable generalizada. Por tanto. para modilicar Ia inlormacién almacenada en un camp: ) debe utilizarse Ia primitiva . au 2 como en el caso de los vectores, Por ejemplo (véase Ia Figura11): ' lzêeiñi ljlit: r:: i~', ir. .;liz, :il 'Hijab : :: ima till et iri l i l : :: ram *êt- Yo <vd> NADA Figura 11 Para terminar. hacer notar que las estructuras. como los vectores. podemos interpreter que pesan por relerencia como parametros. . .I RAKHYM PR . Nia-rr J E'av1,: .-. :~. : . '~: ii-x-. in: i:. r:7_ 1211H . (1'. urs.1:'. v;, :I. ?
  30. 30. BUSCUFDA JE. " 2.4.3. Listas como estructuras de datos en Lisp. AI final del tema anterior ya hemos introducfdo de modo breve las Iistas como estructuras de datos. Alli exphcamos las operaciones de acceso r 1 rar y r»= .-"~. r y el predicado que permne decidir si una lista es la vacia: Dha'if]. Para construir Iistas utilizabamos las caracteristicas del bucle de lectura-evaluaciowescritura y el elemento especial ago-cc; que impide la evaluacién. Pero para poder dnseñar algoritmos de manipulacion de Iistas como estructuras de datos son necesarias operaciones de oonstruccion de Iistas. A continuacion explicamos las mas bésicas e imponantes. La primitiva mas. , es una funcion que conslruye una nueva lista al añadir el elemento que es su primer argumento como primer miembro en Ia lista que es su segundo argumento. La funcféh L1.: - toma cualquier numero de argumentos y construye una lista con ellos. Por Ultimo. .appaz-o-i es Ia funcion que concatena dos Iistas. Una cueslion que es frecuentemente olvidada por los programadores principianles en Lisp es que estas tres primitivas son funciones y. como tales. no tienen ningun electo lateral. En particular. no modiiican el valor de ninguno de sus argumentos. Obsérvese el siguiente comportamiento: Ij'_. -:_-: ~.; 11:31.. ; "IL Bl] _I = ==» l- 7.- 3] Véase en los siguientes ejemplos las diferencias de comportamiento entre wr har, y appênd. ' I': ::«rx: a ` 1: m] 'Hr ; :]~ II = ==>' l IF. ; 3 C; |_ l 1 1,; L ' u: L; :I ' -I L'- J; I- : I : : : 'i' l l: P. I* l E C : I ; I Iappf-PCJ ' [al 'Irn rñjll ~~~- [Pm H (f) Para terminar indiquemos OUOS operadores dB BCCGSO COITIO = .~f~. "`~r~1 y T h ' r rJ que permiten acceder. respectivamente. al segundo y tercer elemento de una lista. Por ejemplo: Ifhirfi 'ia n urjI`1 = ==& t Cbsérvese el siguienle comportamiento: umax , _.: -:u : :s ? JIL y el par de ejemplos siguientes: -_1 'la tzj-_I *W* _I J Hatur PR Mw! ? J Radmtz: .hhuzmbatr FI. r ? atw - (luas. ) : :va EJ?
  31. 31. BUSCUi-'LIA J I 2.4.4. EI nivel fisico de Ia representacién para el problema de las garrafas. AI elegir una representacion fisrca en Lisp lo mas adecuado es aplicar los principios bésicos sobre Ia abstraccion de datos. En lo que sigue nos centramos tan solo en los estados. dejando de lado Ia representacion fisica de las reglas. Asi pues, lo mejor es aislar las operaciones de acceso para los estados, independientemente de cual sea Ia representacion tisica para ellos. A los estados (x. y) los denominaremos _ ; L ; a ; En este caso tan sencillo las operaciones son las habituales para tratar pares de elementos. Por ejemplo. una especiticacion podria ser: - (Julu: -_«_«r-. a:_r r. -,~_-~r,7r_. rr. ,;: p.g : .~--. ,gr . .;» ; devuelve Ia representacion del estado (ny): - n: »_u_~rJr-, Q-L r, ;.[. ,,~.4 »ajar r ; devuelve x si el argumento representa a (x. y): - u: 'Jas I _HL ; arr L . .r L7.; ;a car. .. 1 r 1; 1' . .r a; : ; devuelve y si el argumemo representa a (x. y): - u: ;1:. ,~rJr-~_ ; ~». _~»_x-Lr, a,. -«; ; . maa : wr L an. m . ..r ; si el estado era (x, y) lo modifica para construir (n, y) y devuelve el estado asi modificado como valor; - Lig-Im'. :~u, »_-. _m. ;_. -«; a.r ; _mg IQJJLLLILJ; m . .._| : si el estado era (x. y) lo modifica para construir (x. n) y devuelve el estado asi modificado como valor. En realidad. las dos ultrmas operaciones no son necesarias para programer el sistema de produccion (hasta con poder acceder a las componentes, para verificar las condiciones de las reglas. y con construir nuevos estados. por disparo de reglas). pero las incluimos para poder explicar cienas caracteristicas de las representaciones que seran necesanas en lemas siguientes. Ejercicios. Utilnzando los operadores anteriores. se pide: - definir una funcion . _~ r_ ; mju - 1 n r ; _ 41 que construya y devuelva el estado inicial para el problema de las garrafas de vino: - definir un predicado r; v. Ju; -uLv A . _~ L _ que a partir un estado decida si es o no un estado objetivo para el problema de las garrafas de vino. J Hatur PR Mw! ? J Hanara: : . Nkvuzméuzr 9, raiu; - (hrs. ) : :va : '17
  32. 32. BLGCUEDA 32 Ahora el nivel lisico de representacion consiste en elegir una estructura de datos para los estados e implementar utilizéndola cada una de esas lunciones (las dos ultimas pueden ser en realidad procedimientos luncionales). Por ejemplo. si decidimos representar las tjtannafas por medio de registros podriamos delinir: [deistruct qarrafas trea cgatrol : ::> GARRAFAS tdeiun EDN5L[Jy%-gaIE; iuE in yl (make-garzafas : cuatro H : tres yk) z z z rjzcjirir: : T 2 r. ; E @ransi: A? ? latian nud1[iuJ-ga:14[aé lgazxufas ni tsetf iqarrefas cuatro garrafast il carrafaz = ==> MCDIFICA-GARRAFA4 En Ia ultima operacién hemos utilizado que en el cuerpo de un 'datum puede aparecer cualquier secuencia de elementos Lisp. que seran evaluados uno tras otro y el valor resultado de Ia Ultima evaluacion sera el devuelto por la Ilamada a Ia tuncién (se trata de un bloque impllcito: es lo que se denomina en la terminologla Lisp un _XJFLZHLIIZ impllcito). Obsérvese que Ia secuencia no esta encerrada en paréntesis adicionales. De hecho. seria un error escribir en el cuerpo de la anterior funcion: t[: :;[ igazzufas-suatzu qaxzgfdul ni garrafasi &Por qué? Elerclclos. 1) Completar la implementacién de las operaclones con esa representacion. 2) Utilizar una representacién con vectores (de dos elementos) e implementar en ella las operaciones. No es dificil repetir el proceso anterior para una representacion de las qtarr como Iistas. La unica oomplicacion reside en que si queremos interpretar los operadores de modilicacién en un sentido estricto (es decir, de modo que su parametro sea electivamente modilicado y no solamente utilizado para oonstruir un J Rinto. PR . Muro 'J Rani-m hbracroar 27, 1219 - (Lusa &visir
  33. 33. BLGOZJEDA 33' nuevo estado) no disponemos de instrumentos para hacerlo. Por ejemplo, un cédigo como el siguienle: If-? Ieiznt rini-cilIfiuia-: rarralfaé Ifzjarrafas r. ; no tendria el electo perseguido (gpor qué? ). Se puede decidir entonces reconstruir el estado en lugar de modificar el que pasa como argumento. Pero en ese caso nwzrssn' fic& qarrnafa4 y n': c.--. :l1r`i»:3 qLarz-. arña3 son operaciones secundarias que pueden ser programadas en funcion de w. ?v. :vF: Zvit”1:}~'. -i- qarrnarias, Lj1.arr'. ar`. a-'1 y E. F I' Ea . E. .ji . Ejerclclos. I) Programar mjvztli : rss. LjLarr-afavl y mmm fic& *garrafra en términos de : :c-n r 1,13%? çrra. " ga r 12353 -1 y vjrarrria 3, entendiéndose que "modificaf es interpretado como "oonslruir a partir de". 2) Representar gsm-aria: : por medio de Iistas e implementar las operaciones pñmañassonstruye qarrafa5.ñarra5a? yqarrafal Las Iistas si pueden ser modificadas en Lisp al eslilo de lo que sucede con los registros y vectores. pero un uso inadecuado de esa posibilidad puede conllevar ciertas dificultades baslanle graves, por lo que esa posibilidad debe ser utilizada con precaucién. La razén por la que las Iistas pueden ser modificadas reposa en que los primitivas que hemos presentado como de acceso (fl rst, nzzl. r. r. 1 rd. rest) en realidad también denotan variables generalizadas, por lo que pueden ser modificadas de un modo deslructivo (irrecuperable) por medio del elemento especial 5 e: f. Por ejemplo, podriamos definir: Ifdêixu'. Ita-nihfica-qarrafaé Ifqarratkas r. )- (çag-LZ (51151. r. _r. _nLLq1`. J:; :: jl carrafasa z z z -- mr. : r . T 1 CTR-I1'; .=-. F:F1PF'F-. =1 con el siguiente comportamiento: T' Ijz-: eznq r; ' IL . :,I . I = == (1 . Jl [lN-*Jdi[lCél-'JJLLLIIJQ r. ) ~H : :: (4 . _'| q fi~ 3' I: *1 : TI Ejerclclo. Estudiar Ia representaclén de los estados para el 8-puzzle. Uegar hasta el nivel fisico de Ia representacién. J Runa. PR . tham 'J Hmm hbracroar 9. 193.9 - Cuma : :$587
  34. 34. BUSOUEDA 34 2.5. Espacios de estados. Como hemos defnnido en 2.3. el espacio de estados es el coniunto de estados factibles para un problema junto a Ia estmclura de adyaoencia definida implicitamente por los operadores o reglas. segan Ia estructura que los operadores definan sobre el oonjunlo de estados hablaremos de arbol o grafo de estados. Las posibilidades relevantes (por oomo influyen en el proceso de busqueda) son: - Arbol - Grafo dirigido aciclioo - Grafo dirigido (no necesariamente aciclioo) - Grafo no dirigido Empezando por el final. Ia estructura de gralo no dirigido de estados aparece cuando si de un estado e se puede pasar a un estado -. =.-' por aplicacién de un operador siempre existe otro operador (o el mismo) que pennile pasar de e' a e. Este es el caso. por ejemplo. del s-puzzle con Ia representacién con Ia que venimos trabajando. Gon esta estructura. si no se roman las medidas oponunas, la busqueda puede caer en ciclos que impidan Ia terminacion de Ia ejecucién. Si no sa da Ia circunstancia anterior, existen estados e. e' tales que de e se puede pasar a e'. pero de e' no se puede pasar a e. En este caso. Ia direccion u orientacion de Ia adyaoencia es importante y se habla de grafo dirigido de estados. Por ejemplo. en Ia representacion dada para el problema de las garrafas. del estado (3.0) se puede pasar al estado (0.0) (aplicando el operador vacia-cuatro). pero no se puede pasar (directameme: esto es. por aplicacion de una unica regla) de (0.0) a (3.0). Pero. en general. que no se pueda pasar directamenle no significa que no se pueda pasar por una secuencia de aplicaciones de reglas. Eso posibilita Ia aparicion de ciclos (dirigidos) oomo el siguiente: (0.0) --> (0.3) --> (3.0) -> (0.0). En este caso. Ia aparicion de bucles infinitos en Ia busqueda que se citaron para los grafos no dirigidos de estados también pueden reproducirse y sera necesario tenerlo en cuenta en el diseño de estralegias de control. Si en el grafo dirigido no aparecen ciclos (dirigidos) hablaremos de gralo dirigido aciclico de estados. Para poner un ejemplo de un lal espacio de estados. pensemos en Ia siguiente represenlacién para el problema de las n reinas. Conceptualmente. J RubnofRR, MWN) Bañares November& 15398- Como 96-97
  35. 35. BUSOUEDA 35 los estados son oonliguraciones del lablero en las que, como mucho. aparecen n reinas (pudiendo no aparecer ninguna: el estado iniclal). Tenemos n? reglas que consisten en poner una reina en cada una de las Casillas, siendo las unicas precondiciones el que no haya ya una relna en esa casilla y que todavia queden reinas disponbles (o dicho de otro modo: que en el lablero aparezcan menos de n reinas). En esla situacién es claro que se puede Ilegar a una conliguracion de ma's de un modo, pero que no podemos encontrar cic| os dlrigidos (puesto que cada aplicacién de una regla aumenta el numero de reinas en el tablero y nunca quitamos reinas). Si el espacio de estados es un gralo dirigido aciclico no apareceran problemas de no terminacion de la ejecucién oomo los evocados en los dos cases anterlores. Sin embargo. si en el sistema de produccion no se toman las precauciones adecuadas. un mismo estado (y todo el subgralo de sus descendlentes) puede ser explorado en muchas ocasiones con el consiguiente perjuicio en la eliciencia (en liempo y en espacio) del sistema. Por ullimo. si el espacio de estados es un gralo dirigido aciclioo en el que a cada estado se puede Ilegar solo de una manera tenemos el caso de un érbol de estados. Esta es la estructura combinatorial mas sencilla y la que produce menos problemas al realizar la busqueda en ella. Para encontrar un ejemplo. pensemos en la misma representacion para el problema de las n reinas que hemos dado en el caso del gralo dirigido aciclico. La unica modllicacion es que ahora para que una regla sea dlsparada es necesario que haya una y exactamente una relna en cada una de las tilas precedentes a la de la casilla que corresponde a Ia regla (o que el tablero esté vacio en el caso de reglas correspondientes a casillas de Ia primera lila). Esta Iigera modllicacion haoe que el espacio de estados sea un arbol. lo que simpliflca conslderablemente la labor de busqueda de una solucion. Este ejemplo muestra claramenle que la lase de diseño conceptual es la mas importante para conseguir un sistema de produccion elicaz. Es claro que un sistema de produccion que oonsidere los espacios de estados mas generales (los que corresponden a grafos no dirigidos) luncionara correctamente para aquellos espacios mas especlalizados. Sin embargo, en ocasiones, cuestiones de eficiencia aconsejan que las estralegias de control se parllcularloen para espacios de estados que son arboles o gralos dirigidos aciclicos. Otras clasificaciones de los espacios de estados se relleren a su simplicldad. su llnitud o inlinitud. y a la existencia de pesos en los arcos. Comenzando de nuevo por el final, los espacios de estados oon pesos en las aristas aparecen en sistemas de produccion en los que el disparo de las reglas se supone J RuhowP, R,M1roi"J Bañares Naverrñer? . 1998- 0441809697
  36. 36. BUSOUEDA 38 que tiene un cosle. Habitualmente en estos casos los problemas de busqueda aparecen bajo la forma de problemas de optimizacién. Para hablar de espacios de estados infinitos (todos los que aparecen en los problemas anteriores son finitos) vamos a introducir Ioda una class de sistemas de produccion que tienen un interés teorico (son una fuente de ejemplos para ilustrar las diferencias entre distintas tipos de espacios de estados y distintas estrategias de control), historico (fueron introducidos por el légico Post en los años 30 para estudiar problemas de calculabilidad teérica y son Ia base matematica para los actuales sistemas de produccion) y practice (muchos sistemas importantes, en particular los relacionados oon el tratamiento del Ienguaje natural, estén directamente basados en ellos). Nos retererimos a los sistemas (simbdlioos) de reescdlura. En ellos los estados son palabras (secuencias de caracteres) en un cierto allabeto (los elementos del altabeto son los caracteres) y las reglas son del tipo siguiente: <cadenal> --> <cacte: ~.a2>. Una de estas reglas se activa sobre una cadena cuando esta contiene como subcadena a <cadena1>; el nuevo estado obtenido por aplicacion de la regla es Ia cadena inicial en la que se ha reemplazado una ocurrencia de <cadenal> por -zcaderzab. Por ejemplo. en un sistema de reescritura con altabeto m, 5 ; o y reglas A --> AA. .ats --> cualquier estado inicial que contenga una A tendré una rama infinita. Esto puede producir problemas de no terminacién de la busqueda de una indole diferente a los comentados en los casos de los grafos con cic| os. Pero que un espacio de estados sea intinito no signifuca que en él Ia busqueda no pueda tener éxito. En el ejemplo anterior. si el estado inicial es ; umu y los estados objetivos son aquellos en los que no aparece el caracter A. es sencillo enoontrar una secuencia de aplicacion de reglas que Ilevan del estado inicial al estado objetivo BB. En el mismo ejemplo anterior puede Verse que una misma regla puede estar sensibilizada sobre un mismo estado por varias razones distintas, lo que producir& varios disparos distintas de Ia misma regla sobre el mismo estado. Asi sobre ABAD la primera regla esta sensibilizada dos veces y los estados que se oblianen por los disparos son. respectivamente, AFsBAB y ABF-. .fsli En el caso anterior. los dos estados construidos son distintas pero puede también suceder que dos disparos distintas de la misma regla sobre el mismo estado produzcan un union estado. Es el caso de Ia primera regla del ejemplo. que es sensibilizada tres veces sobre Maung. Las dos sensibilizaciones correspondientes a las dos primeras ocunencias de A producirén como resultado un solo estado: FsAABAB. En este ultirno caso (cuando entre dos vértices aparece mas de una arista dirigida) se dice que el grafo de J maren. MANU Bañares Mansur? . 1998- 0441809697
  37. 37. BUSOUEDA 37 estados es no simple. En la mayoria de las aplicaciones los espacios de estados que aparecen son simples (compruébese con todos los ejemplos aparecidos hasta el momento), por lo que en el resto del texto nos olvidaremos de la posibilidad de que algunos grafos de estados pueden ser no simples. Terrninamos este apartado haciendo una oomparacion entre la teoria algoritmica de gralos y la busqueda en Inteligencia Artificial. Los principales esquemas algorilmicos (recorrido en anchura. en profundidad. caminos optimos, algoritmos voraoes. etc. ) son comunes a ambos campos. pero en la teoria de gralos se supone que el gralo que se recorre, o en el que se busca. es explicitamente conocido. Se trata de un dato para el problema que habitualmente esta almacenada en una estructura de datos (lo que excluye el tratamienlo de gralos inlinitos). Sin embargo. la busqueda en espacios de estados no supone que el arbol o gralo esté previamente generado. No asume tampoco que se tengan que generar todos los estados (solo seran tratados los estados necesarios para resolver el problema). Esto es imprescindible si se tiene en cuenta que los problemas que ataca la Inteligencia Artificial suelen ser sumamente costosos en espacio y tiempo. Lo anterior es cierto incluso en los ejemplos que parecen mas inolensivos. Por ejemplo. el grafo del 8-puzzle tiene 5362880 vértices! (explosion oombinatoria). De hecho. en Ia busqueda en espacios de estados. ni siquiera es necesario que el espacio de estados aparezca de ningun modo reconocible dentro de los algoritmos (aunque el espacio de estados siempre sera un marco en el que entender el desarrollo de la ejecucion de los algoritmos). Si el espacio de estados es (parcialmente) almacenada o tenido en cuenta por el algoritma de busqueda. obtenemos Ia clase mas importante de sistemas de produccion I estrategias de busqueda: Ia exploracién en grafos de estados. (Habitualmente en este tipo de sistemas de produccion el almacenamiento consiste en Iistas de nodos: estados enriquecidos oon algun tipo de inlormacion que, en particular. coditica las relaciones de adyacencia: volveremos sobre esta importante nocion en los lemas siguientes. ) J Rasio/ PR, MKDVU Bañares November! . 138-00180969?
  38. 38. BUSOUEDA 38 2.6. @Qué significa encontrar una solucién? Para alcanzar una solucion del problema debemos disponer de una descripcion de un estado deseado del mundo. Esté descripcion puede ser oompleta (por ejemplo. diciendo exactamente cual es el estado objetivo. caso del 8-puzzle) o puede ser parcial (describiendo algunas propiedades de los estados que consideramos objetivo. como sucede en el problema de las ganatas). En este segundo caso. la forma mas habitual de describir los estados objetivos es una funcion que reciae como argumento un estado y devuelve ve: dad si el estado es un estado obietivo y : also en otro caso. En general. Ia solucion consiste en una sewencia de operadores que transforman el estado inicial en el estado objetivo. Un ejemplo de solucién para el 8-puzzle (tal y como ha sido enunciado mas arriba) aparece en Ia Figura 12. Pero [Jl-Kiemas resolver de este modo dos problemas distintos: - EI problema de decision: consiste simplemente en decir si si o no se puede alcanzar el objetivo desde el estado inicial. - EI problema de explicacidn: en este caso se debe indicar como se ha llegado desde el estado inicial hasta el objetivo. En ocasiones. el estado objetivo mismo ya contiene toda Ia intormacion necesaria para resolver los dos problemas (por ejemplo. en las n reinas). pero en general no sera cierto (por ejemplo el B-puzzle). En este ultimo caso. el sistema de produccion debe disponer de un modo de almacenamiento de los caminos que van siendo explorados. En cualquiera de los dos problemas. como hemos dicho, Ia resolucion consiste en encontrar una secuencia de operadores que transtormen el estado inicial en el estado objetivo. por lo que tiene sentido estudiar en ambos casos las siguientes restricciones sobre las secuencias solucion: - Encontrar Ia secuencia mas corta. - Encontrar Ia secuencia menos costosa (en este caso se supondra que los disparos de las reglas tienen asociado un coste o. equivalentemente. que el espacio de estados tiene pesos en las aristas). J kantoran kami. ) Gaharu Nawrrura. 15398- 0441809697
  39. 39. BUSOUEDA 39 o Encontrar cualquier secuencia lo mas rapido posible. En general, al evaluar una estrategia habra que tener en cuenta el siguiente compromiso: tiempo de calcula <= => calidad de Ia solucion. _snm Ham t m w i EH EH” DEH HEI H H HE EBD E E ' EEM-E-ewv 4% HGH HDE HGB DEG Figura 12 Una Ultima variante para todos los problemas de busqueda requiere no solo que se encuentre un camino solucion. sino todos los que existen (por ejemplo. en el problema de las n reinas no se tratarla de encontrar una coniiguracion del tablero en Ia que las n reinas no se ooman. sino todas las oonfiguraciones con esa propiedad). Estas variantes se denominan genéricamente problemas de Ia Bibiioleca Britanica (con tiempo y pap-el suficiente, unos cuantos monos provistos de maquinas de escribir serian capaces de re-escribir todos los volumenes del British J kantoran kami. ) Gaharu Nawrrura. 15398- 0441809697
  40. 40. BUSOUEDA 40 Museum . ..). En el resto del texto, las estrategias explicadas no se ocupan de este problema (sino tan solo de encontrar un camino solucion). pero no es dificil hacer en ellas las modilicaciones oportunas para que cubran los respectivos problemas de la Bibiioteca Britanica. J RubuoiER. MrrofJ &Maros Nusantara r993-Cursb96-97
  41. 41. SUSCUFD/ l 4:' TEMA 3. Estraleg las cie control no informadas 3.1. Esquema algoritmico genérico de busqueda. Veamos una primera aproximacron a un algoritma genenco de busqueda en un espacio de estados. Como ya hemos indicado al final del apartado 2.5. habztualmente los algoritmos de busqueda trabaian con eslmcturas de datos llamadas nodos que contienen en particular iniormacion sobre un estado. El esquema algoritmico sigurente esta expresado usando esas estructuras. PRINCIPIO 1 ABIERTOS : = (nodoinicial) RESUELTO : = FALSO 2 mlentras que ABIERTOS no es vacla Y NO RESUELTO hacer 3 N : = qurtar primer elemento de ABIERTOS: E : = estado asociado a N 4 si E es un estado objetivo 5 entonces RESUELTO : = verdad sl no para cada operador O hacer si O se puede aplicar a E 7 entonces crear un nodo correspondiente al estado obtenido por apllcacion de O a E y añadir ese nodo a ABIERTOS sl RESUELTO 8 entonces devuelve el estado objetivo (y si se requiere una explicacion. el camino por el que hemos llegado a él) 9 si no rnforma de qJe el objetivo no puede ser alcanzado FIN En los pasos 6-7 se encuentra implrcada la parte del sistema de produccion que dispara las reglas: el ciclo de reconocimiento (en el paso 6) y actuacion (aplicacidn . .l Fu'. the P R Mur? ? . J 63744.32:: Mfu-mnm-. r 31 Halli ~ [Tnrxri 5k; .Zlf
  42. 42. BUSOUEDA 42 de O a E). EI modo concreto en que se organice ese oondicional dependera de las decisiones de diseño que hayamos adoptado previamente. En particular, esta version del algoritmo pareoe exoluir que un mismo operador pueda ser aplicado varias veces sobre el mismo estado (véase el ejemplo del sistema de reescritura tratado en 2.5). pero no es dilicil adaptarla para que cubra todos los casos. EI tipo de busqueda depende del paso numero 7 del algoritmo anterior. Se tratara de bdsquedas no informadas si el algoritmo no conooe nada del problema en concreto que debe resolver. En nuestro contexto eso quiere decir que el paso 7 se realiza con criterios independientes del dominio del problema. Un conoepto importante que aparece cuando la estrategia de control reposa sobre la nocién de nodo es el de arbol de bUsqueda. EI arbol de busqueda es la estructura combinatorial que va siendo construida en el proceso de biisqueda. Sus vértices son nodos y existe una arista dirlgida de un nodo a otro si el segundo es constmido a partir del primero en el paso 7 del algoritmo anterior. Esta nocién esta intimamente relacionada con la de espacio de estados, pero es necesario no conlundir ambas. En particular, Ia estructura combinatorial oonstruida en la ejecucién del algoritmo es siempre un arbol puesto que los nodos en el paso 7 son contruidos y no reutilizados. Esto es independiente de que nodos distintos (porque han sido construidos en distintos momentos de la ejecucién) tengan asociado el mismo estado. Sl esta situacién se produce, significa que en el espacio de estados hay cic| os (dirigidos o no) y por tanto que se trata de un gralo de estados y no de un arbol de estados. Otra nocion importante es Ia de profundidad de un nodo (en el arbol de busqueda): se trata del numero de aristas que tiene el camino que lo une oon el nodo raiz (ese camino es unico, por tratarse de un arbol). 3.2. Busqueda en anchura. En este tipo de btisqueda. el paso 7 del algoritmo anterior se particulariza del siguiente modo: los nuevos nodos son añadidos al final de la lista ABlEFtTOS. Asi se oonsigue que los nodos en ABIERTOS estén ordenados segan su profundidad. en orden decreciente: los menos protundos al principio. los mas protundos al final. La lista ABIERTOS tiene de este modo una tonna de acceso que Ia convierte en una cola (o tila de espera): los datos que primero entran (paso 7) son los primeras en sallr (paso 3). . ) Rubnowfin, kami. ) Gadara: November& 15798- Cuma 5-97
  43. 43. 8 LlS CHJELIA -J 'J' Los nodos de igual profundidad se ordenan arbitrariamenle. En realfdad. en el algoritmo precedente, ese orden arbitrano es dnrectamente heredado del que exisla entre los operadores del sistema de produccion (en el bucle 'para cada operador O hacer). tdediante esta estrategna. el érbol de busqueda se va generando por niveles de profundidad. Hasta que todos los nodos de un nivel no han szdo revisados no se revisa ninguno del snguiente nnvel. Para facilitar la comprensnon del proceso de busqueda vamos a inlroducir algunos espacios de estados arlihciales (que no provienen de ningun sistema de produccion real), que seran érboles o grafos etiquelados por Ietras. Las Ietras representan los eslados. Por eyemplo. en Ia figura 1 aparece un érbol de estados, con estado iniclal I y con un umco estado obyetivo O. Figura 1 Inlroduciremos ahora una nolacnon para descnbir el érbol de busqueda. En el érbol de busqueda no se dnbujarén los nodos (cuya estructura. en general. puede ser compleja) sino tan solo los eslados (letras. en los egemplos arhlicnales) y junlo a ellos la informacnon relevanle sobre los nodos (en el caso de Ia busqucda en anchura. ninguna). La informacion relaliva a la adyacencia entre los nodos queda reccgada en el grético por las llechas dirigfdas. En el érbol de busqucda aparecerén VéfIICGS correspondnenles a todos los nodos que van siendo generados (es decnr. todos aquellos qJe en algun momento del proceso hayan estado en Ia lista de ABIERTOS) y se numerarén secuencialmente (con numeros subrayados) los nodos conforme son examinados. EI érbol de busqueda correspondiente a Ia busqueda en anchura en el espacio de eslados de Ia figura 1 ha szdo recogido en la hgura 2. Pueslo que los nodos de igual . .I Ruam PR Mun? J Samara: : . 'u_'lrr. vTjr. rf? _ IfPIW -(1urs.1:'. *i, '.| ,~'
  44. 44. BUS CLtED/ t . .$4 protundzdad generados a partir de un mismo padre se ordenan de un modo arbitrario. es necesario indicar cual es ei criteno seguido. En el ejemplo. hemos expandido tos estados de "izquierda a derecha”. Figura 2 Ejercicio. Dibujar. con las convenciones anteriores. ei érbol de busqueda en anchura para el espacio de estados de la iigura 1, con expansion de 'derecha a izquierda”. Comparese ei numero de estados generados y examinados con respecto ai arbol de la iigura 2. La busqueda en anchura es una estrategia exhaust/ va: el recorrido por niveles examina todos los estados que son aocesibies desde el estado inicial. En particular, Sl un estado objetivo es alcanzabie. la busqueda en anchura io encuentra. La demostracion es sencilla: el estado obietivo aparecera en un cierto nivel de profundzdad y. en un numero finito de pasos [suponiendo un numero iinito de operadores y un numero iinito de posibles aplicaciones de un operador sobre un estado), Ilegara a ese nivel. Este mismo razonamiento muestra que la busqueda en anchura siempre encuentra Ia secuencia solucion mas corta (una de las que tienen el minimo numero de aristas). Atencion: esto no significa en absoluto que realice un numero pequeño de operaciones. Se trata de una propiedad de la secuencia solucion encontrada. no del proceso por ei que ha sido construida (de hecho, veremos que Ia busqueda en anchura puede Ilegar a ser extremadamente ineiicaz). De lo anterior se sigue que, si existe soiucion. incluso en un espacio de estados con cic| os, como el del problema de las garratas (la Figura 3 presenta parte de ese espacio de estados). el algoritmo de busqueda en anchura no entrara en bucles iniinilos, aunque si que expiorara en numerosas ocasiones Ia misma zona del espacio de estados. to que puede perjudzcar considerablemente su eiiciencia. . .I Rinto PR . Kmr J : Timur . .wii-nini-. ril 1121H - iiiursn ; If r. Ji
  45. 45. BUSOUEDA 45 Figura 3 Elerclclo. Estudlar como serta el érbol de biisqueda para el problema de las garralas con Ia exploracion en anchura en Ia version que conocemos. Sin embargo. si el estado objetivo no es alcanzable y el espacio de estados contiene cic| os dirigidos, Ia bosqueda en anchura en esta version no lenninaré nunca la ejecucion. Como ejemplo, consideremos una vanante del problema de las garratas en el que las dos ganalas tienen capacidades de 4 y 2 litros y el objetivo es conseguir que en Ia garrala de cuatro litros haya exactamente 3. Es tacit comprobar que este problema no tiene solucion (las garralas siempre contendran un numero par de litros) y en él Ia bosqueda en anchura, si no tomamos las precauciones adecuadas. entraria en un bucle infinito. Elerclclo. Representar ese problema de las garrafas. Dibujar el correspondiente grato de estados. comprobar que el arbol de busqueda en anchura es inlinito. Por tanto, Ia version genérica explicada en el apartado anterior debera ser adaptada para cubrir todos los casos posibles de los espacios de estados. Sin embargo. esta version es muy adecuada, por ser mas eticaz que sus variantes. cuando el espacio de estados es un arbol. Este es. por ejemplo, el caso del problema de las n reinas, con una de las representaciones explicadas en el apartado 2.5. J RubnowRR, kami. ) Gaharu Nawrrura. 15398- Cuma 5-97
  46. 46. BLGOZJED/ l J! ? Elerclclos. Consideremos el problema de las 4 reinas. Se pide: 1) comenzar a dibujar el espacio de busqueda en anchura con Ia representacion del problema del apartado 2.5: 2) modilicar la delinicion de regla sensibilizada para evitar que se examinen contiguraciones del lablero que no pueden llevarnos a una solucion: 3) estudiar oomo cambia el érbol de busqueda en anchura con la moditicacion del ejercicio anterior. En cuanto a la estimacion de la elicacia de Ia bnsqueda en anchura, podemos identiticar genéricamente la oomplejidad en tiempo con el numero de nodos generados (esta simpliticacion ignora. entre otras cosas. los costes de Ia verilicacion de Ia aplicabilidad de las reglas y de aplicacion de las mismas) y la complejidad en espacio con Ia longitud méxima que puede alcanzar Ia lista ABIERTOS. En las complejidades inlluyen dos lactores que son denolados b y d. EI nomero b es el / actor de ramiñcacion (branching factor): media del numero de nodos generados desde un nodo. EI numero d mide Ia profundidad del estado objelivo (aqui se supone que existe solucion): minimo del numero de aplicaciones de reglas necesarias para Ilegar del estado inicial a un estado objetivo. No es dificil entonces comprobar que Ia oomplejidad en tiempo es de orden exponencial Olbd). Puesto que en ABIERTOS se extraen los elementos de uno en uno pero se añaden (en media) de b en b. concluimos que Ia complejidad en espacio es también exponencial O(bd). Esta complejidad espacial hace que el algoritmo sea impracticable para problemas grandes. Por ejemplo. para el problema del 8-puzzle, b = 3. d = 20 y bd = 3486784401. En el caso de las garratas de vino. b=3.d=6.bd=729. En resumen. las caracterislicas de la busqueda en anchura en esta primera version son las siguientes. Si existe una solucion en el espacio de eslados (independientemente de Ia estructura combinatorial de ésle), la encuentra y ademas con Ia secuencia solucion mas corta. Si el espacio de estados es un gralo dirigido aciclico Ia ejecucion termina en todos los casos (si no existe solucion. habria que imponer ademas que el gralo tuese linito). pero puede ser muy inelicaz por explorar en muchas ocasiones las mismas ramas (en particular. en ABIERTOS pueden aparecer muchos nodos oon el mismo estado asociado). Si el gralo tiene ciclos dirigidos (o es un gralo no dirigido). el algoritmo puede no lerminar si no existe . ) Ridho. PR Muro 'J Ram-m hbrairoar 9, 193.9 - (Lusa SYL-v
  47. 47. BUSOUEDII 47 solucion y si ésta existe el algoritmo puede ser muy ineticaz por las mismas razones que en el caso de los gratos dirigidos aciclioos. Por todo lo anterior. vemos que este algoritmo solo es reoomendable en el caso de que el espacio de estados sea un érbol. Por eso, lo denominaremos busqueda en anchura en arbol, aunque ya hemos visto que puede luncionar correctamente (es decir, encontrar una solucion) en casos mas generales. independientemente de estas consideraciones. podemos atirmar que la busqueda en anchura es demasiado ineticaz como para ser aplicada en casos practices reales. E| erclclo. Como ejemplo de que en un espacio de estado infinito si existe una solucion Ia bosqueda en anchura Ia encuentra. describase el érbol de bosqueda en anchura del sistema de reescritura presentado en el apartado 2.5. donde el estado inicial es Anita y son estados objetivo aquellas cadenas en las que no aparece rt. Para estudiar Ia implementacion en Common Lisp de la busqueda en anchura en arbol vamos a presentar dos apartados. En el primero. se explica como trabajar con variables locales y oomo realizar iteraciones (el algoritmo de 3.1 puede ser técilmente trasformado utilizando como auxiliar un algoritmo recursivo. pero razones de eticiencia desaconsejan esa trastormacion) en Common Lisp. asi como ciertas primitivas auxiliares que seran empleadas en Ia implementacion. En el siguiente. aparece el texto de un fichero evaluable Common Lisp oon el esquema del programa de busqueda en profundidad y ciertos ejemplos de tuncionamiento. Para tavorecer Ia ponabilidad del lichero, los comentarios han sido escritos sin acentos y sin los caracteres especiales del Castellano (ñ, .. .). 3.3. Mas sobre Common Lisp: variables locales, iteracion, miscelénea. Imaginemos que queremos intercambiar los valores (globales) de dos simbolos x e v. - 3. | l II ll . v. ff) > (setq x 8 (I! ) l- (soz-: q K" 5) ---> 4 Podriamos hacerlo utilizando una variable global tmp con Ia siguiente secuencia de instrucciones: J RabnouPR. MmfJ Bañares Hammers? . mss- 001509597
  48. 48. BUSCNJED/ l Ja' | | | | | | l". lsetq imp xl | | l| || Lru [zaLq X yl O) laetq y : mpi **"> &Podemos hacerlo con una Unica evaluacién? Para ello necesitamos oomponer secuencialmente varias instrucciones Common Lisp. Esto es lo que permite hacer la primitiva gfrtvihtj n (recuérdese que el cuerpo de rZlOfLltl es un _: ~r~: ~j: .r: ' impllcilo). Se trata de una funcion que pennile oonslruir un bloque de sentencias: cada uno de los objelos que son sus argumentos son evaluados. devolviéndose como valor el del Ultimo objeto evaluado. Por ejemplo (estamos suponiendo que vamos evaluando todas las expresiones desde el principio del apartado): lprnqr (setq tmp xl (SULQ X yl setq y tmp? ) Sin embargo. Ia anterior solucion no es tolalmente salislacloria, pues Ia variable global r . Tp habra cambiado su valor deflnitivamente. lo cual es un electo lateral que no estaba especilicado al enunciar el problema al comienzo del apartado. Sl queremos tener una version mas segura debemos ser capaces de definir bloques de sentencias con contexto local. Esto puede Iograrse utilizando Ia primitiva 19.'. Asi para resolver el problema anterior, podriamos evaluar: k [le: [(thp xl) (5uLq x yl lsetq y tmpll = ==; P lmp : ::> 5 Notese que el valor de Lrlg. : al terminar Ia evaluacion del ; a -_ es el mismo que habla antes de Ia evaluacion: durante Ia evaluaclon del ; et el valor localde '. l'ly ha hecho sombra al valor global de tmp. pero al terminar la evaluacion Ia Iigadura local ha sido desactivada (es el mismo efecto que puede observarse con Ia Iigadura de los parametros lormales durante la Ilamada a una funcion dennida con . asya m). Obsérvese también que el cuerpo del le; (el texto que sigue a la Iigadura de las variables locales) es un prrgrgr'. impllcito (sin paréntesis adlcionales, por tanto). Por altimo. véase que el primer argumento para 1 s: L. que no sera evaluado (eso impllca que le'- es un elemento especial). es una lista de lislas (una lista de Iistas con dos miembros en las que el primer miembro es un simbolo. para ser mas precisos). Ello J Paltrow PR . mm 'J Bañares ? ulorarrbar 9. 1217- (Lusa E154??
  49. 49. BIBOUEDA 49 es debido a que en un le: podemos crear cualquier numero de Iigaduras locales. Véase como ejemplo la siguienle funcion que calcula la suma del doble y el triple de un namero dado. > (defun suma-d-t (x) (let (ldoble l* 2 xll (triple l* 3 xl) l (0 doble triplelll Es importante entender oomo se comporta el evaluador respeclo a la lista de Iistas que es el primer argumento para Iec. Se procede a evaluar cada uno de los segundos miembros de las Iistas y tras ese proceso de evaluacion se realizan las Ilgaduras locales de los valores y los simbolos. Obsérvese el sigulente ejemplo: > (setq x 'exteriori = ==> EXTERIOR > (let ((x 'interiorl (Y xl J (lis: x yl) ---> (INTERIOR EXTERIOR) Por ello, no es posible reutilizar en el primer elemento da un let: una variable previamente definida en ese mismo let. Por ejemplo. la siguiente versién de la funcion anterior es incorrecta: > (defun suma-d-t (x) (let (ldoble (' 2 xl) (triple (4 doble xll ) (+ doble triplelll porque el valor local de doble todavia no es conocido cuando se evalaa (+ doble x) . Para conseguir el electo deseado se pueden anidar dos let, como en: > (defun suma-d-L (x) (let (ldoble l' 2 xlll (let lltriple lt doble xl)) (+ doble triple)))l o altematlvamente utlllzar el obleto especlal te: sr que se comporta como let salvo que las Iigaduras locales. entre los valores de los segundos miembros y los simbolos. se producen en orden seouenclal: se evalua el primer segundo miembro. se realiza la Iigadura con el primer simbolo. se procede a evaluar el siguiente segundo miembro. etc. Véase una nueva version correcta de la anterior funcion: JRMwIRRAmmfJ&Maw Mmmñwarñw-ama%07
  50. 50. BUSOUEDA 50 (defun suma-d-t lxl (leL* ltdoble l' 2 xll (triple (+ doble xll ) (0 doble triplelil Veamos ahora una primitiva que pennile la realizacién de iteraciones en Common Lisp. Se trata del bucle do. Supongamos que deseamos pasar las n primeras componentes de un vector a una lista. Una posible delinlcion seria: > (defun vector-a-lista (V nl (let ((1151 (List ll) (do (li O ll i l))] ((- i n) lista] (setq lista (cons (aref v il listalllll En primer lugar usamos Ia primitiva le: para ligar Ia variable local ; isza con la lista vacla. Para construir esta Ultima Ilamamos a la funcion : ls: sin ningan argumento. (Analogamente podriamos haber empleado nil o [l . l EI cuerpo del le: esta constituido por un bucle do. Se trata de un elemento especial que evaluara selectivamente algunas partes de sus argumentos. En primer lugar nos encontramos con Ia lista de variables que dirigen el bucle: i (i Cl i- i 1) l l . Se trata de una lista de Iistas. al estllo de let, pero ahora las Iistas intemas tienen tres miembros: un simbolo (i en el ejemplo), un objeto de inicializacion (0) y un objeto de actualizacion ((+ i 1)). Al entrar al do se evalaan todos los objetos de inlciallzacién y tras esa evaluacion se realizan las Iigaduras locales (al do) de los valores a los correspondientes simbolos (obsérvese que el comportamiento es mas parecido al de let que al de let ~). Una vez realizada esa lase de inlciallzacian, se procede a tratar el segundo argumento del do (en el ejemplo. i (= i n) lista) l, segundo argumento que denominaremos clausula de parada. Se trata de una lista con dos panas bien dilerenciadas. EI primer miembro (I: 1 nl ), la condicidn da parada. sera evaluado. Si su resultado es ”cierto” (es decir. es distinto de riil, Ia lista vacla) se procede a evaluar el resto de elementos de la clausula de parada. que denominamos cuerpo de la clausula de parada En el ejemplo. solo aparece el simbolo ; 157.3. que sera evaluado y su valor sera devuelto como valor del do, que terrninara de ser evaluado. En general el cuerpo de la clausula de parada es un proqn implicito. Si Ia condicion de parada se evalaa a ni 1 se procede a evaluar el cuerpo del do que es el texto que aparece desde que se cierra la ciausula de parada hasta que se cierra el do. En el eiemplo, se trata solo de un elemento Lisp: (setq lista Icons [are: v i) lista) i. En general, se tratara de un proqn implicito. Una vez evaluado el cuerpo, se procede a evaluar los objetos de Jñww/ RRAmmfJGMwn Ihwmuwarñw-&mawar
  51. 51. BUSCNJED/ l 51 actualizacién (en el ejemplo: l - 1 ; :-) y tras la evaluacién de todos ellos. sus valores son Iigados a los simbolos correspondientes. procediéndose a continuacion como tras la inicializacién. Realioemos un par de observaciones sobre Ia luncién elegida como ejemplo. En primer lugar, nétese que Ia asignacion del cuerpo del bucle u: sem] ; ii-Z . a (Cc: .'13 : :u-er i; ;scan modifica Ia Iigadura local de Lana creada en el ; et y no otra global que pudiese existir. Como muestra el ejemplo, no es oorreclo identllicar le: con variables locales y q con variables globales. puesto que . zzetcq lo que modilica es el valor del simbolo en el contextc active (que puede ser local o global) y no en el conlexto global. Por otra parte. al utilizar para ir ampliando Ia lisla la primitiva rrcz-r. resultaré que los elementos aparecerén en Ia lista en orden inverso a como aparecieran en el vector. Si deseamos mantener el orden de aparicion de los elementos. podriamos utilizar en el cuerpo de la clausula de parada la primitiva que es una funcion que invierte los elementos de una Iista. utilizando el hecho de que el ido puede tratar con mas de una variable en la lista que es su primer argumento, podemos escribir una version dilerenle de Ia anterior funcion en la que no aparece le: y el cuerpo del d: : no contiene ningan objeto Lisp: 117195111'. "reuzt-: -r-a-llsléa (v n) (Liu [(1 -Ll l+ i 1M [Ilsta (lis: ;I (triana (aru-f i] list-ai) l ll? 1 n] (reuse-rise l13.t. a|: ~', n) Obsérvese que si esta version es oorrecla es debido a que todos los objetos de aclualizacién son evaluados uno tras olro anles de realizar las nuevas Iigaduras. Notese también que hemos utilizado Ia primitiva reuse-r descrila mas arriba. Terminamos esle apartado oon una serie de procedimientos de entrada/ salida y olras primitivas que seran utilizadas en el programa cuyo texto aparece en el apartado siguiente. Vamos a inlroducirlas por medio de un procedimlento que. a partir de un simbolo leido desde el teclado. imprime otros simbolos en la pantalla. Se trata de un procedimlenlo que simplemente procesa un objelo Lisp leido desde el teclado. Obsérvese que no tiene argumentos. Pueden deflnirse lales subalgoritmos cuando las entradas van a ser leidas por el teclado. si se usan variables globales o cuando la parametrlzacién depende de las funciones o procedimienlos a los que se Ilame desde su cuerpo. A continuacion encontramos la primitiva de escritura en panlalla Firrrriat. Se trata de un procedimiento que tiene al menos dos argumentos. Si el J Ramuan PR . mm 'J Sadam& marmer 9. 1217- Cs-. rsafabñslf
  52. 52. a_ a asian d (ipar délectd; 'Ia (mamalia), - E515" ; asri al valor dBWBIflliifnDf sa. : *El angunan argumantni : laba sar una cadena da: caraclsras (delimilada par : mmillasjl qua sa: denomina : cadena dia dali ” i i 'i safari sanitasi Illetalmsnra en pantalla. llfas (caracteres (ua control? ? »quia (san: pratama& al caracter- ; rasanradq En al ejemplo. ; aparacai lali; IIs-i nnnlmlf ; E a (bananas salt& ada lina: : al l i i" a " “ “ aina: sa: , mass saran* evaluados; sus svalaras subcadena& ma narraspnnrñigntas. illléasa usa; an: .al pbjexjnl t ; liwa/ Susila (entrada: Entrarrlril! illdetun ; stagnasi i? ! y _ _ *Inlazndnzrza una( marga! : twin. " gara »keningnya (flat iltannrada [Kaldlsil lai; Entrada: .. igauan saat: : *agama *wa 3,19 *'; nf*'<1 (galatama-pl : zaman y i a. lancar. ; ` a s rataan &la; (gulali: 'igauan la: *gatau ; u ; print &running; r& @print insan lai: ) i iprdmlnta! J-l fJI-? lrzll ? Sigjjiéndaisn El cnarpriszda pragnntin ? Kasim praggn: lmpllhllrmencantramnslm lai: an( sa! : entrada . aja ligarlarrznnii s] vçresullarlcr: (amalia pm' _ ban” lanai s “n ulilizarnnsv . aiyprlmilivaxaql, (Samara darun-az. ?rim similar a lpems- quan( less mas! at? :la. lquaremnala-ss; mm >7

×