You are on page 1of 37

Inteligencia Artificial

UNIDAD 4

BÚSQUEDA Y SATISFACCIÓN DE
RESTRICCIONES

_________________________________________________________________________
92
Inteligencia Artificial

UNIDAD 4

BÚSQUEDA Y SATISFACCIÓN DE RESTRICCIONES

4.1.- Problemas y espacios de estados.

La definición del problema

La Inteligencia Artificial ha tenido siempre como objetivo, a más o menos largo plazo, la
resolución de problemas. La utilización de procedimientos de búsqueda, primero más
directos y luego con técnicas heurísticas más sofisticadas, ha sido uno de los principales
campos de esta ciencia [5].

De hecho, la resolución mediante búsqueda ha sido una de las primeras aplicaciones de la


Inteligencia Artificial a problemas reales, no “de juguete”, como se le achacó en sus
inicios. La orientación de la Inteligencia Artificial siempre fue más hacia un mejor
conocimiento de “cómo” resolver los problemas, y no tanto a la consecución del resultado
final. Por eso los ejemplos iniciales sobre los que desarrollaron las estrategias de la
Inteligencia Artificial fueron problemas simples como puzzles, juegos, apilar bloques, etc.,
ejemplos ya clásicos que han servido de banco de pruebas. Sin embargo, aunque pudieran
parecer realmente procesos simples, ¿cómo definir un problema con la suficiente precisión
y cómo representarlo para que una máquina pueda resolverlo?

En muchos casos no existe realmente un conocimiento sistemático del problema de forma


que se pueda plantear una solución analítica del mismo mediante un sistema de
ecuaciones, por ejemplo. En estas circunstancias, los procedimientos de búsqueda sí se
pueden aplicar para resolverlos y se han demostrado muy eficientes para abordar este tipo
de tareas.

En general, el planteamiento de un problema de búsqueda consiste en encontrar o


conseguir un objetivo. La resolución del mismo puede estructurarse en los siguientes
pasos:

1. Determinar una serie de objetivos o metas que se desean alcanzar. Estos objetivos
pueden ser múltiples (restricciones de tiempo, de costo, etc.) o simples (alcanzar
un estado final).

2. Disponer de un conjunto de acciones que conduzcan a la obtención de los


objetivos o metas. Estas acciones son denominadas operaciones.

3. Definir un procedimiento de selección entre las diferentes formas de alcanzar las


metas. Cada una de estas soluciones constituye una secuencia de acciones
determinada y posible. Se suele llamar solucionador al módulo encargado de
construir dicha solución.

_________________________________________________________________________
93
Inteligencia Artificial

No hay que perder de vista, aunque los métodos de búsqueda se reduzcan en muchos
casos a meros algoritmos matemáticos, que lo que se persigue desde el punto de vista de
la Inteligencia Artificial es entender el problema que se trata de resolver, analizar sus
posibles soluciones y las consecuencias de buscar una solución por un camino u otro. No
se trata tanto de encontrar una solución final óptima o al menos convincente como de
haber ganado en el conocimiento de un problema que se puede aplicar a una situación
real.

Aunque hoy día tal y como están implementados los métodos de búsqueda no reflejen la
forma en la que los seres humanos resolvemos los problemas, no dejan de ser estrategias
muy eficientes y probadas, y siempre han tenido su lugar dentro de la Inteligencia
Artificial.

Espacio de estados

Cuando alguien se plantea resolver un problema, ya sea por ejemplo un juego simple
como el “tres en raya” o alguno más complejo, como el ajedrez o el backgammon,
tenemos al menos mentalmente una representación del espacio en el que se va a
desarrollar el mismo, es decir una imagen gráfica o un mapa del terreno, del tablero, en el
que va tener lugar la estrategia de solución. Para su resolución computacional, el primer
paso es buscar una estructura de datos que capture lo esencial de ese juego o problema,
que refleje con propiedad la distribución de los elementos en un espacio de situaciones o
posiciones posibles.

Se denomina espacio inicial aquel del que partimos, y que refleja la estructura que
subyace en el problema. Por ejemplo, para el juego del “tres en raya” sería una matriz
cuadrada de 3x3 posiciones, inicialmente vacías (Véase anexo Tres en Raya).

Desde cualquier estado se pueden ampliar una serie de operadores que modifican el
estado actual para llevar al sistema a un nuevo estado. Por ejemplo, cuando un jugador
coloca una ficha en el tablero. En nuestra representación computacional, esto sería
equivalente a rellenar una celda de la matriz con X(1) o O(0) según el jugador que haya
movido la pieza. En esta representación al aplicar los operadores a un determinado estado
producen un único nuevo estado.

La combinación del espacio inicial y los operadores forma el espacio de estados o


espacio de representación. Es decir, es el entorno donde se desarrolla el proceso de
búsqueda, y lo componen todos los estados por los que se avanza y que se van
recorriendo en la tarea de llegar a la meta. Cada uno de los estados recorridos es una
situación candidata a ser solución.

La secuencia de estados que resulta de la aplicación válida de operadores a partir del


estado inicial se denomina traza en el espacio de estados. Esta secuencia de operaciones
nos permite ir avanzando en nuestro espacio de estados a situaciones válidas que nos van
acercando al objetivo final. La estrategia de control es la encargada de optimizar el
proceso de búsqueda, determinando los operadores aplicables y utilizando información del
dominio cuando ésta sea conocida.

_________________________________________________________________________
94
Inteligencia Artificial

Por contraposición se podría hablar de los espacios de reducción, donde al aplicar un


operador se generan una serie de subproblemas, cada uno de los cuales será en general
más sencillos que el original (de ahí el término reducción que lo describe). Se aplica el
conocido principio de “divide y vencerás”, para llegar a problemas de menor dimensión
que tengan solución conocida.

Algo importante a implementar en los problemas de búsqueda es el criterio para detectar


cuándo se ha llegado a la consecución del objetivo propuesto. En nuestro juego se trataría
de identificar sobre el tablero si alguna fila, columna o diagonal está formada por todo Xs
o Os. En este caso la prueba final es sencilla, pero la definición del criterio la consecución
del objetivo final puede ser en sí misma un problema importante [8].

En muchos problemas de búsqueda el interés se centra no sólo en conseguir un estado


final, sino en alcanzarlo en el mínimo tiempo posible, o minimizando otro tipo de costo (en
definitiva, maximizando un beneficio). En estos casos se puede asociar un costo o peso a
los operadores que se aplican y también a las transiciones de un estado a otro.

Esta traza del costo o función de costo se denota habitualmente con la letra g. Permite
comparar distintos algoritmos de resolución tanto por la solución obtenida como por la
cantidad de la misma en términos de costo asociado.

En algunos problemas como el del ejemplo del juego de “tres en raya”, el espacio de
búsqueda es limitado, porque también lo está el espacio de estados posibles y de
soluciones. Pero en muchos problemas del mundo real el espacio de búsqueda no está
acotado, e incluso puede alcanzar dimensiones muy grandes que exijan algoritmos que
puedan escalarse para tratar espacios muy extensos.

Hay otros aspectos sobre el funcionamiento de los algoritmos de búsqueda que se pueden
tener en cuenta. Por ejemplo:

• Un algoritmo es óptimo si encuentra la mejor solución entre todas las posibles.


• Una estrategia es completa si garantiza que encontrará una solución siempre y
cuando ésta exista.

La eficiencia de un algoritmo en términos de complejidad temporal (cuánto tiempo


requiere para alcanzar la solución) o en términos de complejidad espacial (memoria que
necesita) son consideraciones prácticas de gran importancia. Un algoritmo óptimo que
garantiza encontrar la mejor solución tendrá poco valor práctico si tarda horas en
completarse, cuando a lo mejor sólo contamos con unos minutos para tomar una decisión.
De forma similar, un algoritmo completo que utilice mucha memoria es inútil si antes de
encontrar la solución a un problema se queda sin memoria.

Representación en el espacio de estados

Para aplicar las estrategias de búsqueda a problemas en el espacio de estados se suele


trabajar con una representación de la información mediante grafos.

_________________________________________________________________________
95
Inteligencia Artificial

Un grafo representa el conjunto de mundos, escenarios o situaciones que se pueden


generar mediante los operadores u acciones. Se denomina por lo tanto grafo de estados
ya que indica el recorrido del proceso de búsqueda que va moviéndose de un estado a
otro, en la consecución del objetivo final.

Un grafo por lo tanto es un conjunto de nodos (estados) y arcos que unen esos nodos
figura 18. El recorrido entre dos nodos consecutivos a través de un arco define un camino.

Dentro del espacio de estados en un problema de búsqueda, cada nodo representa un


elemento que equivale a una situación válida (nodo y estado son sinónimos en este
contexto). El nodo Terminal que satisface las condiciones del objetivo, es decir, la función
de costo es la meta.

Este camino puede ser cerrado si el último nodo coincide con el primero y abierto si no
coinciden. Si entre dos nodos existe al menos un camino, es un grafo conexo, y si no
contiene ciclos, es acíclico.

H
Nodos Arcos

A B C

E G J
D F

K L

Figura 18. Ejemplo de un grafo.

Los grafos pueden ser dirigidos, cuando la secuencia entre dos nodos (P, Q) se considera
diferente de la que recorre los nodos en el orden (Q, P); en este caso el origen es el nodo
predecesor o padre, y el destino el sucesor o nodo hijo; o pueden ser no dirigidos, en el
caso contrario. Expandir un nodo es obtener todos sus posibles sucesores en el grafo de
búsqueda a través de la aplicación de todos los operadores disponibles relacionados. Un
nodo o estado es “cerrado” si ya ha sido expandido, y esta “abierto” si todavía queda por
aplicar algún operador. A estos últimos también se les denomina margen o frontera.

_________________________________________________________________________
96
Inteligencia Artificial

En general un problema de búsqueda se representa por un árbol, que es un grafo dirigido


acíclico conexo. El obtener el árbol de búsqueda es la tarea prioritaria en todo problema
de búsqueda o de decisión ya que en definitiva la resolución del problema es un recorrido
a través del mismo. Por eso es crucial que represente toda la información disponible con
las dependencias y relaciones que existan.

Aplicando esta representación al juego de “tres en raya”, cada nodo es un estado o valor
de la matriz; cada arco apunta la operación que lleva de un valor de la matriz a otro, por
ejemplo, cuando el jugador X mueve un 1 de una celda a otra celda válida. Los nodos
terminales son aquellos que dan una configuración ganadora.

Otro ejemplo sería la representación arbórea de un laberinto, donde cada nodo sería una
bifurcación, salida o pared al final de un camino, y cada arco un camino. El problema
consiste en encontrar el camino más corto a una salida, nodo final.

Problemas de la vida real que se pueden plantear y resolver como espacios de estados
[21]:

• Búsqueda de rutas en redes informáticas.


• Rutas aéreas para viajar.
• Problema del viajante.
• Diseño de microchips.
• Ensamblaje de componentes.
• Desplazamiento de robots.

Ejemplos de espacios de estado

Como un simple ejemplo de espacios de estado, consideremos la compra de una bebida


gaseosa en una máquina expendedora: cuando se depositan monedas en la máquina, ésta
hace una transición de un estado a otro [2].

En la siguiente figura 19 se ilustra el espacio de estado, suponiendo que sólo están


disponibles monedas de 25 y de 5 centavos, y que se requieren 55 centavos para obtener
una bebida. Si consideramos monedas de otras denominaciones, como de 10 y 50
centavos, se complica más la gráfica y no se muestra aquí.

_________________________________________________________________________
97
Inteligencia Artificial

Inicio

25 5

5
5
25 25 5 5
25
10
50
30 5
5 25 15
5
25,5 25 35 5 25 20

25
40 5
25
25 45

25

5
Éxito

Figura 19. Gráfica de estado para una máquina expendedora de bebidas gaseosas que acepta
monedas de 25 y 5 centavos.

Los estados de inicio y éxito se dibujan como círculos dobles para facilitar su identificación.

Los estados se muestran como círculos y las transiciones posibles a otros estados se
muestran como flechas. Observe que esta gráfica es una gráfica con pesos, donde éstos
son las monedas que pueden entrar a la máquina en cada estado.

A esta gráfica también se le llama gráfica de máquina de estado finito, porque describe el
número finito de estados de una máquina. El término máquina se usa en un sentido muy
general, puede ser un objeto real, un algoritmo, un concepto, etc. Asociadas con cada
estado hay acciones que la conducen a otro. En cualquier momento, la máquina puede
estar en un solo estado. A medida que acepta la entrada a un estado, pasa de ese estado
a otro. Si se dan las entradas correctas, pasará del inicio al éxito o estado final. Si un
estado no está diseñado para aceptar cierta entrada, la máquina se detendrá en él. Por
ejemplo, la máquina de bebidas gaseosas no tiene la capacidad de aceptar monedas de
diez centavos, si alguien pone una de estas monedas en la máquina, la respuesta no está
definida. Un buen diseño incluirá la posibilidad de entradas no válidas para cada estado y
proporcionará transiciones a un estado de error. Este es diseñado para proporcionar
mensajes de error apropiados y llevar a cabo cualquier acción necesaria.

_________________________________________________________________________
98
Inteligencia Artificial

Otro ejemplo de espacio de problema sucede en el problema clásico del mono y los
plátanos que se muestra en la siguiente figura 20.

El problema consiste en dar instrucciones a un mono para decirle cómo alcanzar algunos
plátanos que cuelgan del techo. Como los frutos están fuera de su alcance, pero dentro
del cuarto hay un sofá y una escalera. La configuración inicial típica es la del mono en el
sofá. Las instrucciones pueden ser:

Salta del sofá


Ve a la escalera
Pon la escalera bajo los plátanos
Trepa la escalera
Agarra los plátanos Mono en Mono en Sofá bajo
el sofá el piso los plátanos
Baja el sofá Si el sofá está bajo
los plátanos

Si el sofá no está Mover el sofá


Bajo los plátanos

El sofá no
El mono no
está bajo los
está en la
plátanos
Si el mono no está en escalera
la escalera

Si el mono está en la Mover al mono


escalera

Mono esta La escalera


en la No está bajo
escalera Los
Si la escalera no está bajo
plátanos
los plátanos

Si la escalera esta
bajo los plátanos Mover la escalera

Si la
escalera
está bajo los
plátanos

Trepar por la
escalera

Éxito,
Mono en el mono tiene
la escalera los
Agarrar plátanos plátanos

Figura 20. El espacio de estado para el problema del mono y los plátanos.

Las instrucciones variarán de acuerdo con las posiciones iniciales del mono, el sofá la
escalera. Como hay varios estados iniciales, no se muestra aquí el doble círculo especial
de inicio. Por ejemplo, otro estado de inicio posible es con el mono en el sofá debajo de
los plátanos, de esta manera, el mono tendrá entonces que hacer el sillón a un lado antes
de poner la escalera debajo de los plátanos. En el estado inicial más simple, el mono ya se
encuentra en la escalera debajo de los plátanos.
Aunque este problema parece obvio para un ser humano, requiere una considerable
cantidad de razonamiento. Una aplicación práctica de un sistema de razonamiento como

_________________________________________________________________________
99
Inteligencia Artificial

éste, es la de dar a un robot instrucciones relacionadas con la realización de una tarea. En


lugar de suponer que todos los objetos del ambiente se mantienen fijos en un lugar, una
solución general es un sistema de razonamiento que puede tratar con diversas
situaciones.

4.2.- Espacios de estados determinísticos y espacios no determinísticos.

Determinismo

Definición: Explicación de la realidad basada en la existencia de productores de


resultados predectibles. Los programas determinísticos se ramifican al llegar a un IF...
THEN, sólo en base a condiciones absolutas. El determinismo aplica habitualmente lógica
dicotómica10 para verificar variables de tal manera de mantener bajo control el flujo del
programa, llevando a éste hacia la producción de resultados deseados. Cuanto más una
técnica de programación sea comandada por los datos, tanto menos predecible es el
resultado.

Algoritmo Determinístico

Un algoritmo determinístico es un algoritmo que en términos informales: es


completamente predictivo si se conocen las entradas al mismo. Dicho de otra forma si se
conocen las entradas del algoritmo siempre producirá la misma salida, y la máquina
interna pasará por la misma secuencia de estados. Este tipo de algoritmos ha sido el más
estudiado durante la historia y por lo tanto resulta ser el tipo más familiar de los
algoritmos, así como el más práctico ya que puede ejecutarse en las máquinas
eficientemente [22].

Un modelo simple de algoritmo determinístico es la función matemática, de esta forma se


puede establecer el siguiente paralelismo: la función extrae la misma salida para una
entrada dada, al igual que los algoritmos determinísticos. La diferencia es que un
algoritmo describe explícitamente como la salida se obtiene de la entrada, mientras que
las funciones definen implícitamente su salida.

Definición

Formalmente los algoritmos determinísticos se pueden definir en términos de una máquina


de estado: un estado describe que está haciendo la máquina en un instante particular de
tiempo. Justo cuando se produce la entrada, la máquina comienza en su estado inicial y
posteriormente si la máquina es determinística comenzará la ejecución de la secuencia de

10
Un método de razonamiento basado en que cada restricción del problema puede ser considerada verdadera
o falsa. La dicotomía verdadero/falso, una vez aplicada a cada restricción del problema, provee bases para la
ramificación bajo la forma de árboles decisionales. Aristóteles propuso una lógica con dos valores. La
matemática de la lógica de dos valores, sirvió como base durante muchos años para la mayoría de las
estructuras de control en lenguajes de programación.

_________________________________________________________________________
100
Inteligencia Artificial

estados predeterminados. Es de notar que una máquina puede ser determinística y no


tener límite temporal para la ejecución o quedarse en un bucle de estados cíclicos
eternamente.

Ejemplos de máquinas abstractas determinísticas se pueden incluir en máquinas de Turing


determinísticas y los autómatas finitos determinísticos.

Problemas con los algoritmos determinísticos

Desafortunadamente para algunos problemas es muy difícil implementar un algoritmo


determinístico. Por ejemplo, existen eficientes y simples algoritmos probabilísticos que
pueden determinar si un número entero es primo o no pero tienen una pequeña
posibilidad de equivocarse (Test de primalidad de Fermat). Algunos de ellos son muy
conocidos desde 1970; solamente tras otros 30 años de investigación focalizada en
investigar se ha encontrado un algoritmo determinístico similar, pero mucho más lento.

Otro ejemplo puede encontrarse en los problemas NP-completos dentro de esta categoría
puede encontrarse la mayoría de los problemas prácticos, este tipo de problemas puede
resolverse rápidamente empleando de forma masiva y paralela una Máquina de Turing no
determinística, pero no se ha encontrado aún un algoritmo eficientes para esta tarea, al
menos ahora sólo encuentran soluciones aproximadas en casos especiales.

Otro problema sobre el planteamiento de algoritmos determinísticos es que a veces no es


"deseable" que los resultados sean completamente predecibles. Por ejemplo, si se es un
jugador que juega al blackjack un algoritmo puede mezclar una serie de Generador de
números pseudoaleatorios y de esta forma un apostador espabilado podría averiguar los
números del generador y determinar las cartas sobre la mesa de juego permitiendo
engañar durante todo el tiempo al croupier11 (esto ocurre actualmente). Problemas
similares pueden encontrarse en criptografía, donde las claves privadas a menudo se
crean mediante uno de estos generadores. Este tipo de problemas se evita mediante el
empleo de un Generador criptográfico seguro de números pseudo-aleatorio.

Algoritmo no Determinístico

Un algoritmo no determinístico es un algoritmo que ofrece más de una única salida en


función de su entrada, siempre que no se haya dado otra especificación adicional. Una
ejecución de estos algoritmos permite elegir en un instante dado una secuencia de
posibles estados de salida para una misma entrada o estado inicial. Los algoritmos no
determinísticos no permiten "a priori" saber cual será el resultado o el estado en el que
quedará el sistema.

En la teoría estándar de computación el término algoritmo deja claro que se trata de


algoritmos determinísticos. Sin embargo, estos emplean modelos de computación, tales
como el non deterministic finite state machine, que es no-determinístico.

11
Es el encargado de efectuar los pagos y retirar las apuestas.

_________________________________________________________________________
101
Inteligencia Artificial

En diseño general de algoritmos, esta categoría de algoritmos no-determinísticos se suele


emplear como especificaciones.

Convirtiendo algoritmos no determinísticos en determinísticos

Una forma de simular algoritmos no determinísticos N mediante el empleo de otros


determinísticos D puede realizarse tratando los estados de N como estados de D. Esto
significa que D puede tracear todas las posibilidades y trayectorias de ejecución del
algoritmo N.

Otra posibilidad es emplear algoritmos de generación de números aleatorios que consisten


en perturbar los estados mediante el establecimiento de todas las posibilidades mediante
un generador de números aleatorios. El resultado es un algoritmo determinístico
probabilístico.

¿Qué hace a un algoritmo no determinístico?

Una variedad de factores puede ser la causa de que un algoritmo determinístico se


comporte como de una forma no determinística:

• Si emplea en la ejecución de la secuencia de estados otro estado "externo" como


entrada del proceso, como por ejemplo: una entrada de un usuario, una variable
objetivo, un valor de un temporizador de hardware, un valor aleatorio, etc.

• Si al operar se encuentra con concurrencia de estados, por ejemplo si tiene


múltiples procesadores escribiendo al mismo tiempo en un fichero. En este caso el
orden preciso en el que cada procesador escribe el dato puede afectar a la salida y
no está pre-planificado su valor inicial.

• Si un error (cuyo origen puede deberse al hardware o al software) causa un


inesperado cambio en la secuencia de ejecución de estados.

Aunque los programas reales rara vez son puramente determinísticos, es más fácil que los
seres humanos así como otros programas determinar sobre la esencia de lo que realmente
son. Por esta razón, la mayoría de los lenguajes de programación y especialmente
aquellos que entran dentro de la categoría de programación funcional son lenguajes que
hacen un esfuerzo en prevenir eventos que se ejecutan sin control. Por esta razón este
tipo de restricciones fuerzan el carácter determinístico por esta razón a los algoritmos
determinísticos se les denomina purely functional.

_________________________________________________________________________
102
Inteligencia Artificial

4.3.- Búsqueda sistemática.

Se van a examinar técnicas básicas que se utilizan para resolver problemas de búsqueda
en el ámbito de la Inteligencia Artificial, dentro de la búsqueda por fuerza bruta o a ciegas
es la que no cuenta con información a priori que la dirija en su secuencia de acciones para
la consecución del objetivo final. Es decir, realiza una búsqueda exhaustiva.

4.3.1.- Búsqueda de metas a profundidad.

La búsqueda en profundidad es otra forma de recorrer sistemáticamente una estructura


del árbol para encontrar el nodo solución, pero recorriéndolo en profundidad, es decir,
bajando de nivel. En vez de buscar de forma exhaustiva en cada nivel, este algoritmo
sigue las ramas del árbol hacia abajo hasta el nivel más inferior que pueda, hasta que
encuentra la solución o un nodo sin hijos. Se trata de expandir un único camino desde la
raíz. En el caso de llegar a un callejón sin salida se retrocede hasta el nodo más cercano
desde donde se pueda tomar una rama alternativa para seguir avanzando figura 21 [5].

La complejidad temporal de esta estrategia es la misma que la del procedimiento de


búsqueda en amplitud, puesto que para un grafo de una determinada profundidad se
generan los mismos nodos, aunque en diferente orden.

Sin embargo, esta estrategia puede ser muy ineficiente ya que el algoritmo puede
dedicarse a recorrer un camino demasiado largo que no conduzca a ninguna solución, o
meterse en bucles infinitos. Por eso el algoritmo de búsqueda en profundidad no es
completo ni óptimo.

El procedimiento sigue los siguientes pasos:

1. Crear una lista de nodos e inicializarla con el nodo raíz (estado inicial). Esta lista se
maneja como una pila LIFO (last-in first-out).

2. Lazo:
2.1. Si la lista esta vacía, salir.

2.2. Extraer el primer nodo de la lista.

2.3. Si la lista contiene el nodo meta, salir.

La solución es el primer nodo de la lista

2.4. Para cada hijo del nodo actual, expandirlo y añadir todos sus hijos
como nuevos nodos al principio de la cola.

_________________________________________________________________________
103
Inteligencia Artificial

A B C

E G J
D F

K L

Figura 21. Árbol de búsqueda

La lista a gestionar tendría los siguientes valores para la figura anterior.

Estado de la cola iteración


H
A B C Extraer H+hijos de H
D E B C Extraer A+hijos de A
K L E B C Extraer D+hijos de D
L E B C Extraer K
E B C Extraer L
B C Extraer E
F C Extraer B+hijos de B
C Extraer F
G J Extraer C+hijos de C

El recorrido realizado sería:

HADKLEBFCGJ

La complejidad espacial se reduce con respecto al anterior ya que sólo es necesario


guardar la constancia del camino construido hasta el momento. La complejidad para un
camino de longitud p será dicho valor más el factor de ramificación(r), es decir, O(p+r).
Además, cuando existen múltiples soluciones posibles, la eficiencia del método aumenta.

Debería establecerse un límite de nivel de exploración para acortar la longitud real del
camino de la solución. Esta estrategia se denomina búsqueda limitada por
profundidad. Se impone a la profundidad máxima de un recorrido (lp), que debe ser
estimada en cada paso. Esta variante tiene la ventaja de que en general es completa
(excepto para límites muy pequeños) aunque no es óptima.

_________________________________________________________________________
104
Inteligencia Artificial

La elección de límite de profundidad adecuado puede resultar crucial para la obtención de


la solución. La búsqueda por profundización iterativa (iterative deepening) evita los
problemas que conlleva esa elección probando de forma iterativa todos los límites de
profundidad posibles. Así, comienza con profundidad cero (nodo raíz), para probar con
profundidad 1, 2, etc. Esta estrategia es óptima y completa. De hecho, es el método
idóneo para problemas con espacios de búsqueda de dimensión grande, de los que no se
conocen sus límites de profundidad. Es una comunicación de la búsqueda preferente por
amplitud y en profundidad.

Otra variante de este método es la llamada búsqueda de retroceso en la que, en lugar


de generar todos los sucesores al expandir un nodo, se genera un único sucesor en cada
paso, que será el que se expanda.

La lista a gestionar tendría los siguientes valores para la figura 21 de ejemplo:

H
A
D
K
L
B
F
C
G

El recorrido hasta encontrar los nodos solución sería:

HADKLBFCG

Su principal ventaja es que requiere menor espacio de almacenamiento que la búsqueda


en profundidad: sólo hay que recordar en cada instante un sucesor del nodo seleccionado,
es decir, su complejidad es O(p). Otra ventaja es que no se generan las ramas del árbol
de búsqueda que se encuentren después del camino de la solución. Sin embargo, la
complejidad temporal es la misma que con los otros algoritmos, y tiene un factor de
indeterminación en el orden del recorrido de los nodos que puede hacerle perder su
eficiencia.

4.3.2.- Búsqueda de metas en anchura.

Se denomina también recorrido en anchura prioritaria. El algoritmo define una forma de


moverse a lo largo de la estructura arbórea examinando los valores de los nodos de
manera sistemática y controlada, de forma que se pueda encontrar un nodo de solución
[5].

La idea es generar varias trayectorias de una determinada longitud antes de crear una
trayectoria más larga.

_________________________________________________________________________
105
Inteligencia Artificial

Es decir, se recorren de izquierda a derecha, todo los subobjetivos generados por el


objetivo de nivel inmediatamente superior antes de considerar el siguiente nivel de
profundidad del árbol. Se examina cada nodo situado a un paso del estado inicial, y
después dos niveles más allá, y así sucesivamente, hasta que se han considerado todos
los nodos del árbol o se ha encontrado la solución.

En un procedimiento completo: se garantiza encontrar una solución si ésta existe. Pero en


general no es óptimo (no encontrará la mejor solución, simplemente la primera que
satisfaga el objetivo) figura 22.

Específicamente se realiza mediante los siguientes pasos:

1. Crear una lista de nodos e inicializarla con el nodo raíz (estado inicial). Esta
lista se maneja como una cola FIFO (first-in-first-out).

2. Lazo:
2.1. Si la lista está vacía, terminar.

2.2. Quitar el primer nodo de la lista.

2.3. Si la lista contiene el nodo meta, salir.

La solución es el primer nodo de la lista

2.4 Expandir el nodo actual y añadir todos sus hijos como nuevos
nodos al final de la cola.

A B C

E G J
D F

K L

Figura 22. Árbol de búsqueda.

_________________________________________________________________________
106
Inteligencia Artificial

La lista para gestionar el árbol de la figura 22 tendrá los siguientes valores:

Estado de la cola iteración


H
A B C Extraer H+hijos de H
B C D E Extraer A+hijos de A
C D E F Extraer B+hijos de B
D E F G J Extraer C+hijos de C
E F G J K L Extraer D+hijos de D
F G J K L Extraer E
G J K L Extraer F

En éste último paso se comprobaría que el primer nodo de la lista es uno de los nodos
solución. Es decir, los nodos recorridos serian los representados en la diagonal:

HABCDEFGJKL

Por lo tanto, al llegar al nodo G se terminaría el algoritmo dando esa solución. Como
puede observar, el nodo L, la otra meta, sería el último en alcanzarse.

Si el nivel de profundidad asociado a la solución es significativamente menor que el factor


de ramificación, se expandirán demasiados nodos inútilmente. Por eso una variante muy
utilizada de esta estrategia es la denominada “prioridad al mejor” (best-first), consistente
en seleccionar primero los nodos con el mínimo número de subobjetivos y recorrerlos así;
es decir, en el ejemplo:

HBFCGJAEDKL

De esta forma se llega a la solución de forma mucho más eficiente. En este ejemplo se
encontraría el nodo G a la quinta iteración.

Este método tiene complejidad exponencial tanto temporal como espacial. La complejidad
temporal depende del factor de ramificación y de la profundidad de la solución. Si el
número medio de sucesores es n (se utiliza el valor medio ya que el árbol de búsqueda no
tiene por qué ser uniforme; es decir, no todos los nodos tienen igual número de
sucesores) y la solución se alcanza en el nivel p, el tiempo empleado es 1+n+n2+…+np.
Siendo p un valor generalmente grande, la complejidad será del orden O(np).

La complejidad espacial es también del orden O(np), lo que hace difícil de utilizar en
problemas reales.

Las complejidades de las estrategias de búsqueda se calculan considerando el “peor caso”.

Es decir, tanto la complejidad temporal como la espacial crecen exponencialmente con


esta estrategia de búsqueda, por lo que sólo se pueden aplicar a problemas de pequeña
dimensión.

_________________________________________________________________________
107
Inteligencia Artificial

4.3.3.- Búsqueda óptima.

Todas las técnicas de búsqueda descritas hasta ahora están diseñadas para encontrar una
solución. Como se demostrará con las búsquedas heurísticas, existen esfuerzos para
mejorar la posibilidad de encontrar una solución buena, y preferiblemente óptima. Sin
embargo, algunas veces solo se desea la solución óptima. El término solución óptima en el
sentido en que lo utilizamos aquí simplemente significa la mejor ruta que se pueda
encontrar usando una de las distintas técnicas de generación de múltiples soluciones –que
puede que no sea, de hecho, la mejor solución-. Encontrar la auténtica solución óptima
exige la utilización de Inteligencia Artificial, extremadamente costosa y una búsqueda
exhaustiva.

Búsqueda Heurística

La búsqueda heurística tiene muchos ejemplos en la vida real. Uno de los más conocidos
es el problema del viajero, donde un vendedor tiene que recorrer una serie de ciudades de
una forma que en su ruta sólo puede pasar una vez por cada ciudad y además tiene que
hacer el menor recorrido posible. Es un tipo de problema donde el numero de soluciones
sigue una ley de explosión combinatoria, conocidos como np-completos. Es decir, no
puede ser resuelto por los algoritmos de búsqueda ciega. Son problemas para los que es
imposible computacionalmente encontrar la mejor solución para dimensiones elevadas por
ese crecimiento exponencial. La única forma de abordarlos es conformarnos con una
solución suficientemente buena, hay varios métodos de búsqueda heurística que
proporcionan formas prácticas de hacerlo [5].

Las estrategias de búsqueda heurísticas se caracterizan por la tendencia a limitar el tiempo


y el espacio en donde buscar la respuesta a problemas complejos, y asumir que
aceptaremos cuando le encontremos una buena solución, que puede no ser óptima. En
este sentido, aplicamos reglas heurísticas o empíricas para determinar a lo largo de un
recorrido cuál es el trayecto que con mayor probabilidad nos lleve a una solución.

Los algoritmos vistos hasta ahora se denominan en general algoritmos de generación y


prueba. Su implementación más básica, los pasos para ejecutarlos son:

1. Generar una posible solución, ya sea un nuevo estado o un camino a través del
espacio de búsqueda.
2. Probar si ese nuevo estado o camino generado es una solución comparándolo
con un conjunto de estados objetivo.
3. Si es la solución, terminar. En otro caso, volver al paso 1.

Realmente es un recorrido en profundidad que realiza una búsqueda exhaustiva del


espacio de estados. Si hay una solución, este algoritmo la encontrará, aunque
probablemente le lleve mucho tiempo. Para problemas de dimensiones pequeñas puede
ser efectivo, pero para problemas más complejos esta búsqueda no guiada es
impracticable.

_________________________________________________________________________
108
Inteligencia Artificial

Su principal desventaja radica en que no hay ninguna información relativa a en qué


dirección orientar la búsqueda, por lo que se han desarrollado otras estrategias para
incorporar este tipo de conocimiento con el uso de las funciones heurísticas.

La búsqueda heurística utiliza información adicional sobre el problema específico, como el


costo o la distancia al estado final. Para tener en cuenta esta información, los métodos
heurísticos utilizan las denominadas funciones de evaluación heurísticas f que calculan o
evalúan el valor de cada nodo particular en el árbol de búsqueda, dando una idea de lo
cerca o lejos que se encuentra del nodo objetivo. Es decir, son aplicaciones que hacen
corresponder a cada estado del espacio de búsqueda un valor numérico cj.

f(estadoj)=cj

Con estos valores se puede estimar el costo que llevaría recorrer sus ramificaciones,
guiando la búsqueda hacia aquellos caminos que parecen más prometedores. El valor
máximo o mínimo de las funciones heurísticas debe alcanzarse en un estado meta.

Los principales métodos de búsqueda heurística son:

• Ascensión a la cima o gradiente.


• Primero el mejor.
• Búsqueda menor costo.
• Algoritmo A*.
• Algoritmos genéticos.

Ascensión a la cima o gradiente

El método de la ascensión de la cima (hill-climbing) incorpora cierta información que


resulta del paso 2 descrito anteriormente en la búsqueda heurística, es decir, de la
evaluación del estado actual para mejorar la generación de un nuevo estado candidato. Al
evaluar un estado mediante la función prueba se le asocia una medida o estimación de su
distancia al estado objetivo, que servirá para orientar la generación del siguiente.

Son algoritmos denominados de mejoramiento iterativo ya que parten de una


configuración completa del espacio de estados, y sobre ese escenario se van modificando
para mejorar la calidad de la solución. Es decir, se trata de buscar la solución óptima en
toda la superficie que representa al problema mediante pasos iterativos hacia la meta.

Por ejemplo, si se trata de identificar un máximo en la función de calidad (ascensión a la


cima), el algoritmo se ejecutaría como un bucle que se desplaza constantemente en la
dirección del valor ascendente. En el caso del método del gradiente, como la función de
evaluación es un costo que se intenta minimizar, la iteración se actualizaría en la dirección
de los valores decrecientes.

Sin embargo, uno de sus principales problemas es que puede caer en los extremos
locales. Porque estamos siempre avanzando en la dirección del menor costo, por ejemplo,

_________________________________________________________________________
109
Inteligencia Artificial

se puede seguir un camino que alcance una buena solución pero dejando de lado la
solución óptima que quizás se encontraba muy cerca. De este mínimo o máximo local es
difícil salir ya que cualquier movimiento nos llevará a un próximo estado peor, con menor
valor de bondad en la función de evaluación. En algunos casos el espacio de búsqueda
presenta una meseta o zona plana en la cual cualquier nuevo estado tiene asociado el
mismo valor que el anterior, por lo que el algoritmo se estancará ya que no encontrará la
diferencia de valores positiva o negativa necesaria para avanzar.

Para evitar estos extremos locales se han propuesto diversas estrategias. Una consiste,
por ejemplo, en forzar un reinicio aleatorio. Cuando no se logra ningún avance
significativo se recomienza desde otro nuevo punto. Habitualmente esta técnica es
suficiente para encontrar la solución.

Otro método consiste en añadir ruido a la función de evaluación para lograr salir de los
extremos locales. Inicialmente el nivel de ruido es alto y se va reduciendo gradualmente
con el tiempo. Esta técnica, denominada simulated annealing (enfriamiento o temple
simulado) permite al algoritmo explorar direcciones que no son las “mejores” pero que
pueden conducir a una exploración mas completa del espacio de estados. Como está
técnica recuerda la analogía que se da en los metales cuando son calentados y luego
enfriados lentamente, el parámetro que se utiliza en el enfriamiento simulado se denomina
temperatura, de forma que una temperatura elevada permite continuar con la búsqueda
de forma un tanto aleatoria, mientras que temperaturas bajas hacen que el algoritmo
vuelva a un comportamiento mas determinista.

Primero el mejor

La búsqueda por primero el mejor o “búsqueda preferentemente por lo mejor” es una


estrategia de control sistemática que combina las ventajas de los métodos de búsqueda
exhaustiva en amplitud y en profundidad. Su principal diferencia con esos métodos es que
en este caso se hace uso de la información que proviene de las funciones de evaluación
para ordenar los nodos de la cola. En este sentido se elige como primer nodo el que
parece que va a ser mejor (costo mínimo), antes que cualquier otro, sin tener en cuenta
su posición en el árbol o grafo. Es decir, se expande el más prometedor, el que ha
resultado mejor evaluado [5].

Con este método siempre se encuentra un mínimo global, por lo que consigue disimular el
problema de los extremos locales.

Sin embargo, presenta una desventaja: el hecho de que en el algoritmo no se considera el


camino recorrido hasta el momento, lo que podría dar lugar a una solución no idónea. Por
ejemplo, si un nodo se encuentra muy cerca de la meta, quizá ya inicialmente, pero hay
otro cuya distancia al nodo final es menor aunque suponga un recorrido más largo, se
seleccionará este último debido a esa estimación de la distancia que no tiene en cuenta el
costo acumulado.

_________________________________________________________________________
110
Inteligencia Artificial

Por ejemplo, definimos una función costo asociada a cada nodo cuyo valor sea la distancia
al nodo meta figura 23. El costo de la generación de cada sucesor se puede considerar
cero o uno. En cualquier caso, va a ser un valor constante.

Figura 23. Árbol de búsqueda con costos asociados.

Los pasos del algoritmo “primero el mejor” son:

1. El estado inicial esta formado únicamente por el nodo inicial.

2. Lazo:

2.1. Extraer el nodo inicial.

2.2. Se expande el nodo y se añaden todos los sucesores a la cola. Guardar


el recorrido.

2.3 Se evalúa cada uno de los nodos sucesores. Si algún sucesor es la


meta, salir.

La solución es el nodo de la lista y el camino recorrido

2.4. Se extrae el nodo con menor costo y se añaden sus sucesores. Guardar
el recorrido.

2.5. Volver al paso número 2.3.

_________________________________________________________________________
111
Inteligencia Artificial

El algoritmo aplicado al ejemplo de la figura 23, donde la solución consiste en llegar al


nodo F, sería:

estado de la cola extraer


H(20)
A(14), C(16) H
D(9), E(5), C(16) A
D(9), C(16) E
K(3), L(6), C(6) D
L(6), C(6) K
F(0), C(16) L

El camino recorrido siguiendo los punteros que conduce a la solución es:

HAEDKLF

Como se ha hecho notar, con este método no se ha seleccionado el recorrido más corto en
el sentido de recorrer menos nodos, que hubiera sido por la rama del nodo C, sino que las
decisiones se han ido tomando en cada momento según la distancia estimada en ese
punto, no acumulada, aunque el costo acumulado sea menor en esta solución.

Existe una variante denominada búsqueda en haz (beam search), que pretende acelerar
el proceso de búsqueda permitiendo explorar más de una rama simultáneamente.

Búsqueda menor costo

Denominada greedy search, este algoritmo es también una estrategia derivada del método
“primero el mejor”, y viene a disimular una de sus desventajas. En este caso lo que se
intenta es minimizar el costo total para alcanzar la meta. Por lo tanto, siguiendo una
estrategia “avara”, se expandirá el nodo que se presuponga más cercano al nodo final,
para minimizar así también el recorrido.

Desafortunadamente, el costo exacto del recorrido al estado final no se puede calcular de


forma precisa, por lo que tendremos que conformarnos con una estimación basada en una
función heurística h, en la que se computa para cada nodo el costo estimado desde ese
nodo al nodo final por el camino de menor costo. Cuando mejor sea la estimación de la
función h mejor y más rápidamente se encontrará la solución. Cuando se llega al nodo
meta, la evaluación de h en ese estado debe ser cero.

Es por lo tanto un caso de la búsqueda heurística ya que es esta función h la que dirige el
recorrido en base a un conocimiento sobre el camino con menor costo.

La elección de la función heurística es crucial para el funcionamiento del algoritmo y


también para reducir la complejidad espacial y temporal del mismo.

Generalmente es un método eficiente ya que suele encontrar la solución con rapidez, si


bien ésta no siempre es óptima porque lo que va considerando en cada momento es la

_________________________________________________________________________
112
Inteligencia Artificial

solución inmediata “más barata”, sin una visión global. Tampoco es completa pues puede
recorrer una ruta infinita y se estancaría en ella sin probar otros caminos alternativos.

Algoritmo A*

Uno de los algoritmos de búsqueda mas conocidos y utilizados en la Inteligencia Artificial


es el A*, que combina la eficiencia del algoritmo de búsqueda menor costo con el método
de costo uniforme que tiene las deseables propiedades de ser óptimo y completo. Es decir,
encuentra una solución siempre y cuando ésta exista, incluso para grafos infinitos, y
además no cae en mínimos locales, sino encuentra el extremo global.

Otras de las ventajas de este método es que expande el menor número de nodos. Sin
embargo, puede tardar mucho en hacer la selección entre dos caminos casi iguales por lo
que a veces puede requerir mucho tiempo.

En el método de la búsqueda costo uniforme lo que se trataba era de reducir al mínimo el


costo de la meta h(n). El método denominado de costo uniforme es una variación de la
búsqueda en amplitud donde lo que se busca no son los caminos de menor longitud sino
de menor costo, por lo tanto, minimizar la ruta, g(n). Es decir, se expande el nodo con
menor costo de la ruta, en vez del que tenga menor profundidad, como lo hacía la
estrategia en amplitud. Esta búsqueda sí es óptima y completa, pero se puede ser muy
ineficiente.

En el algoritmo A* la función de evaluación se calcula sumando estas dos medidas


heurísticas para cada nodo n:

• El costo estimado para ir de n al estado meta, h(n);


• El costo que ha sido necesario para llegar a ese nodo n desde la raíz o nodo inicial,
g(n). Este último dato no es una estimación ya que puede ser conocido con
exactitud.

La función de evaluación f(n) estima el costo total de camino a la solución que pasa por el
nodo n.
F(n) = g(n) + h(n)

Es decir, el conocimiento heurístico incorporado a este procedimiento permite evaluar y


ordenar los nodos en la lista para dirigirla de forma más eficiente hasta el nodo meta.

Como se puede deducir, el método del costo uniforme es un caso particular del algoritmo
A* que tiene lugar cuando ∀ n h(n)=0.

El procedimiento para llevar a cabo este algoritmo es el mismo que el anterior, si bien
ahora habrá que sumar a la distancia estimada a la meta el camino de menor costo
encontrado hasta cada nodo para formar la nueva función heurística f.

_________________________________________________________________________
113
Inteligencia Artificial

Para el ejemplo de la figura 23, el proceso de ejecución del algoritmo con esta estrategia
sería:

H(20+0) sacar
A(14+1), H
C(16+1)
D(9+2), A
E(5+2),
C(17)
D(11), C(17) E
K(3+3), L(6+3), D
C(17)
L(9), C(17) K
F(0), C(16) L

Con el cual se obtiene el mismo camino solución que con el método del primero el mejor.

A los arcos que unen los distintos nodos se les puede asociar un costo no constante, en
cuyo caso el procedimiento de resolución sería el mismo pero ahora habría que sumar a
cada nodo como valor de g(n) el que indica ese enlace.

El algoritmo A* es completo y óptimo siempre y cuando se verifique una restricción: que la


función heurística h(n) sea admisible. Es decir, que la función h que se seleccione nunca
sobreestime el costo que implica alcanzar la meta. Es por lo tanto una acepción optimista
de la búsqueda. Sin embargo, sigue siendo un método con una complejidad temporal y
espacial que generalmente es exponencial.

Una conocida modificación del algoritmo A* es la llamada IDA* (Iterative Deepending A*)
o búsqueda por profundización iterativa (A*PI), que tiene por objeto garantizar la
linealidad respecto a la complejidad espacial. En vez de limitar la profundidad de la
búsqueda, este nuevo algoritmo utiliza una limitación en el costo.

Mantiene menos caminos simultáneamente que A*, de ahí la reducción del consumo de
memoria, pero no deja de encontrar la solución gracias a que explora múltiples rutas.

Algoritmos genéticos

En los años setenta, de la mano de John Holland [Holland y col., 1975] surgió una de las
líneas más prometedoras de la Inteligencia Artificial, la de los algoritmos genéticos. Son
llamados así porque se inspiran en la evolución biológica y su base genético-molecular.

Estos algoritmos hacen evolucionar una población de individuos sometiéndola a acciones


aleatorias semejantes a las que actúan en la evolución biológica (mutaciones y
recombinación genética), así como también a una selección de acuerdo con algún criterio,
en función del cual se decide cuáles son los individuos más adaptados, que sobreviven, y
cuáles los menos aptos, que son descartados.

_________________________________________________________________________
114
Inteligencia Artificial

Los algoritmos genéticos forman parte de una familia denominada algoritmos evolutivos,
que incluye las estrategias de evolución, la programación evolutiva y la programación
genética. Dentro de esta última se han logrado avances curiosos:

En 1999, por primera vez en la historia, se concedió una patente a un invento no realizado
directamente por un ser humano: se trata de una antena de forma extraña, pero que
funciona perfectamente en las condiciones a las que estaba destinada.

No hay, sin embargo, nada injusto en el hecho de que el autor del algoritmo genético del
que salió la forma de la antena se haya atribuido la autoría de la patente, pues él escribió
el programa e ideó el criterio de selección que condujo al diseño patentado.

Un algoritmo genético es un método de búsqueda dirigida basada en probabilidad.

Bajo una condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde
siempre al mejor elemento de la población sin hacerle ningún cambio) se puede demostrar
que el algoritmo converge en probabilidad al óptimo. En otras palabras, al aumentar el
número de iteraciones, la probabilidad de tener el óptimo en la población tiende a 1.

Funcionamiento

Los algoritmos genéticos establecen una analogía entre el conjunto de soluciones de un


problema, llamado fenotipo, y el conjunto de individuos de una población natural,
codificando la información de cada solución en una cadena, generalmente binaria, llamada
cromosoma. Los símbolos que forman la cadena son llamados los genes. Cuando la
representación de los cromosomas se hace con cadenas de dígitos binarios se le conoce
como genotipo. Los cromosomas evolucionan a través de iteraciones, llamadas
generaciones. En cada generación, los cromosomas son evaluados usando alguna medida
de aptitud.

Funcionamiento de un algoritmo genético básico

1. Primero, se genera aleatoriamente la población inicial, que está constituida por un


conjunto de cromosomas, que representan las posibles soluciones del problema.
En caso de no hacerlo aleatoriamente, es importante garantizar que dentro de la
población inicial, se tenga la diversidad estructural de estas soluciones para tener
una representación de la mayor parte de la población posible o al menos evitar la
convergencia prematura.

2. A cada uno de los cromosomas de esta población se aplicará la función de aptitud


para saber qué tan "buena" es la solución que se está codificando.

3. Después de saber la aptitud de cada cromosoma se procede a elegir los


cromosomas que serán cruzados en la siguiente generación.

_________________________________________________________________________
115
Inteligencia Artificial

4. Los cromosomas con mejor aptitud tienen mayor probabilidad de ser


seleccionados.

5. El cruzamiento es el principal operador genético, representa la reproducción


sexual, opera sobre dos cromosomas a la vez para generar dos descendientes
donde se combinan las características de ambos cromosomas padres.

6. El algoritmo genético se deberá detener cuando se alcance la solución óptima, pero


ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de
detención. Normalmente se usan dos criterios: correr el algoritmo genético un
número máximo de iteraciones (generaciones) o detenerlo cuando no haya
cambios en la población.

7. Como se mencionó, el problema de selección de variables se puede ver como un


problema de optimización, ya que queremos encontrar, bajo alguna heurística, el
subconjunto de variables que potencialicen la diferenciación y las semejanzas de
objetos de clases diferentes y de la misma clase respectivamente.

Esquema general del algoritmo

Inicializar aleatoriamente una población de soluciones a un problema, representadas por


una estructura de datos adecuada.

Evaluar cada una de las soluciones, y asignarle una puntuación o fitness según lo bien que
lo hayan hecho.

Escoger de la población la parte que tenga una puntuación mayor.

Mutar (cambiar) y entrecruzar (combinar) las diferentes soluciones de esa parte escogida,
para reconstruir la población.

Repetir un número determinado de veces, o hasta que se haya encontrado la solución


deseada [5].

Hay que tener en cuenta que un algoritmo genético es independiente del problema, lo
cual lo hace un algoritmo robusto, por ser útil para cualquier problema, pero a la vez débil,
pues no está especializado en ninguno.

Ejemplo

Los algoritmos genéticos requieren que el conjunto se codifique en un cromosoma. Cada


cromosoma tiene varios genes, que corresponden a sendos parámetros del problema. Para
poder trabajar con estos genes en el ordenador, es necesario codificarlos en una cadena,
es decir, una lista de símbolos (números o letras) que generalmente va a estar compuesta
de 0s y 1s.

_________________________________________________________________________
116
Inteligencia Artificial

Ejemplo 1:

Si un atributo (tiempo) puede tomar tres valores posibles (despejado, nublado, lluvioso)
una manera de representarlo es mediante tres bits de forma que:

(Tiempo = Nublado ó Lluvioso) y (Viento = Fuerte) se representaría con la siguiente


cadena: 011 10.

De esta forma podemos representar fácilmente conjunciones de varios atributos para


expresar restricciones (precondiciones) mediante la concatenación de dichas cadenas de
bits.

Además si tenemos otro atributo “Viento” que puede ser Fuerte o Moderado, se
representaría con la siguiente cadena: 011 10.

Las postcondiciones de las reglas se pueden representar de la misma forma. Por ello una
regla se puede describir como la concatenación de la precondición y la postcondición.

Ejemplo2:

“JugaralTenis” puede ser Cierto o Falso.

Si Viento = Fuerte entonces JugaralTenis = Cierto se representaría mediante la


cadena 111 10 10. Donde los tres primeros bits a uno indican que el atributo “Tiempo”
no afecta a nuestra regla.

Cabe destacar que una regla del tipo 111 10 11 no tiene demasiado sentido, puesto que
no impone restricciones en la postcondición. Para solucionar esto, una alternativa es
codificar la postcondición con un único bit (1 = Cierto y 0 = Falso).

Otra opción es condicionar los operadores genéticos para que no produzcan este tipo de
cadenas o conseguir que estas hipótesis tengan una adecuación muy baja (según la
función de evaluación) para que no logren pasar a la próxima generación de hipótesis.

4.4.- Satisfacción de restricciones.

Problemas de satisfacción de restricciones es un tipo especial de problemas que satisfacen


algunas propiedades adicionales. Las restricciones pueden involucrar una o varias
variables al mismo tiempo. A veces en estos problemas conviene hacer una verificación
hacia adelante (forward checking) para detectar estados sin solución (ejemplo las 8-
reinas, figura 24). Muchas veces lo que conviene es analizar la variable más restringida,
esto es, asignarle un valor a la variable que está involucrada en la mayor cantidad de
restricciones.

_________________________________________________________________________
117
Inteligencia Artificial

Otra heurística común es seleccionar un valor que elimine el menor número de valores en
las otras variables asociadas a la variable por medio de una restricción. A veces la
descripción del estado contiene toda la información necesaria para llegar a una solución
(ejemplo las 8-reinas) y se utilizan algoritmos que hacen mejoras iterativas. La idea
general es empezar con una configuración completa y hacer modificaciones para mejorar
su calidad [23].

Normalmente, en problemas de maximización se trata de moverse hacia el pico más alto.


Los métodos iterativos normalmente guardan sólo su estado actual y no ven más allá de
sus vecinos inmediatos.

Problemas de Satisfacción de Restricciones

Estructura de estados:

• Un estado está compuesto por un conjunto de n variables que pueden tomar


diferentes valores.
• Un estado es un estado meta si los valores que tienen sus variables cumplen una
serie de restricciones.

Definición:

• Un problema de satisfacción de restricciones PRS (Constraint Satisfaction Problem)


es una tripleta (X, D, R)
o X = {x1,…, xn} es un conjunto de variables.
o D: X →V es una función total que asigna un dominio (conjunto de valores
de Vi) a cada variable. Frecuentemente se escribe Di en vez de D(xi) para
referirse al dominio de la variable xi.
o R = {R1,…, Rk} es un conjunto de restricciones tal que cada Ri es un
predicado sobre un subconjunto de los variables de X.
Formalmente: Ri (x1,…, xl) ⊆ D1×… ×Dl.

Conceptos básicos de variables:

• Un problema de satisfacción de restricciones discreto es aquel en el que todas las


variables son discretas, es decir, toman valores en dominios finitos.
• Un problema de satisfacción de restricciones continuo es un PSR en el que todas
las variables son continuas, es decir, tienen dominios continuos.
• Un problema de satisfacción de restricciones mixto consta de variables continuas y
discretas.
• Un problema de satisfacción de restricciones binario es aquel en el que todas las
restricciones tienen a los sumo dos variables respectivamente.
• Un problema de satisfacción de restricciones no binario o n-ario es aquel en el que
las restricciones tienen cualquier número de variables.

_________________________________________________________________________
118
Inteligencia Artificial

Conceptos básicos de restricciones:

Discretas: las variables participantes están acotadas en dominios discretos.


Continuas: las variables participantes están acotadas en dominios continuos.
Binarias: son restricciones en las que sólo participan dos variables.
N-arias: son restricciones en las que sólo participan cualquier número de variables (n>2).
Fuertes (hard): son restricciones cuya satisfacbilidad es imprescindible.
Débiles (soft): son restricciones cuya satisfacbilidad no es imprescindible.
Difusas (fuzzy): son restricciones definidas sobre niveles de preferencia.
Disyuntivas: son restricciones compuestas por un conjunto disjunto de restricciones.

Clasificación según el tipo de restricciones:

• Restricciones de obligación (hard constraints).


• Restricciones de preferencia (soft constraints).

Clasificación según los dominios:

• Dominios discretos (finitos o infinitos).


• Dominios continuos.

Clasificación según el número de variables implicadas en las restricciones:

• Restricciones binarias.
• Restricciones múltiples.

Ejemplo 1:

N reinas.

• Situar N reinas en un tablero de ajedrez de tamaño N x N de forma que no se den


jaque mutuamente figura 24.
• Variables: V1, . . . , VN
• Dominios: Di = {1, . . . ,N}
• Restricciones:
o Jaque horizontal: Vi ≠ Vj
o Jaque diagonal: |Vi − Vj| ≠ |i − j|
• Problema con dominios finitos y restricciones binarias (de obligación).

_________________________________________________________________________
119
Inteligencia Artificial

2 3

2 3

2 2

3 3

1 2

2 3

Figura 24. Ejemplo de n-reinas.

Ejemplo 2:

Planificación de corte.
Encontrar la manera de situar patrones de corte en una pieza de cartón figura 25.

• Variables: P1, P2, P3, P4.


• Dominios: Coordenadas en el plano.
• Restricciones:
o Las piezas no deben superponerse.
• Problema con dominios continuos y restricciones binarias (de obligación).

Figura 25. Planificación de corte.

4.5.- Resolución de problemas de juegos.

Juegos

Los juegos provocan una inexplicable fascinación y, la idea de que las computadoras
puedan jugar existe desde que existen las computadoras:

• Siglo XIX, Babbage, arquitecto de computadoras, pensó en programar su máquina


analítica para que jugara al ajedrez.

_________________________________________________________________________
120
Inteligencia Artificial

• 50’s, Shannon describió los mecanismos que podían usarse en un programa para
que jugara al ajedrez.
• 50’s, Turing describió un programa para jugar al ajedrez pero no lo construyó.
• 60’s, Samuel construyó el primer programa de juegos importante y operativo, el
cual jugaba a las damas y podía aprender de sus errores para mejorar su
comportamiento.

En un primer momento se pensó que se podrían resolver por búsqueda exhaustiva en el


árbol del juego, es decir, un árbol que contenga todos los movimientos posibles de ambos
jugadores. Considerando por ejemplo el juego de ajedrez, en una partida cada jugador
realiza una media de 50 movimientos, con un factor de ramificación medio de 35
posibilidades, por lo tanto para examinar el árbol de juego completamente se tendrían que
examinar 35,100 posibilidades. Resulta evidente que una simple búsqueda directa no es
posible de realizar en la práctica, y por lo tanto es necesario algún tipo de procedimiento
de búsqueda heurística.

Los juegos proporcionan una tarea estructurada en la que es muy fácil medir el éxito o el
fracaso. En comparación con otras aplicaciones de Inteligencia Artificial, por ejemplo
comprensión del lenguaje, los juegos no necesitan grandes cantidades de conocimiento.

El problema de la toma de decisión puede ser crucial en una serie de aplicaciones. Por
ejemplo, en los juegos o estrategias logísticas donde el objetivo es ganar ante unos
adversarios, cualquier tipo de información que ayude a tomar la decisión acertada es muy
valiosa. En este sentido, el plantear este tipo de problemas de la forma que se puede
aplicar una estrategia de búsqueda ha sido siempre un campo de interés para los
investigadores de la Inteligencia Artificial.

La mayoría de las aplicaciones de la Inteligencia Artificial fueron juegos que requerían la


aplicación de las facultades intelectuales. En este sentido, este tipo de problemas han
contribuido enormemente al desarrollo de la Inteligencia Artificial [5].

Un juego tiene una gran similitud con un problema de búsqueda porque se define
mediante:

• El estado inicial, que incluye la posición del tablero e identifica al jugador que
mueve.
• Una función sucesor, que devuelve una lista de pares (movimiento, estado),
indicando un movimiento legal y el estado que resulta.
• Un test terminal, que determina cuándo se termina el juego. A los estados donde
el juego se ha terminado se les llaman estados terminales.
• Una función utilidad (también llamada función objetivo o función de
rentabilidad), que da un valor numérico a los estados terminales. En el ajedrez, el
resultado es un triunfo, pérdida, o empate, con valores +1, -1 o 0.

Por lo tanto, el primer paso será la representación del juego como un árbol de búsqueda,
y la definición de las funciones de utilidad y de prueba final, es decir, determinar el
objetivo final. En general aunque se puede plantear como escenario un árbol completo
que represente las características del juego, frecuentemente no es posible tener en cuenta

_________________________________________________________________________
121
Inteligencia Artificial

la totalidad del árbol, por lo que en algún momento suele ser necesario suspender la
búsqueda y aplicar una función de evaluación mediante la cual se obtenga una estimación
de la utilidad de un estado determinado para saber por dónde seguir.

Hay diversos tipos de planteamiento en la resolución de los problemas de búsqueda


aplicados a los juegos, determinados por sus características específicas. Depende del
número de elementos con capacidad de decisión involucrados, de la información que
posean del entorno y de los contrarios, etc.

En las aplicaciones con dos participantes que cuentan con información perfecta (y juegan
también de forma perfecta), el algoritmo minimax permite determinar cuál será la mejor
jugada. Como una modificación de éste, el algoritmo alfa-beta es más eficiente gracias a
la poda que realiza de las ramas del árbol de búsqueda que resultan irrelevantes para el
resultado final.

Los juegos de azar se pueden manejar como una extensión del algoritmo minimax
mediante el que se evalúan nodos aleatorios, para lo que se toma en cuenta el valor de la
“utilidad promedio” de todos sus nodos hijos, ponderados por la probabilidad respectiva de
cada hijo.

Algoritmo del minimax

Se aplica este algoritmo a un juego de dos participantes que alternan sus decisiones, con
sus consiguientes movimientos, y que tienen un conocimiento perfecto en cada momento
tanto de la estrategia como del juego del adversario [5].

El objetivo es ganar, es decir, el algoritmo debe encontrar la secuencia de movimientos


que llevan a un jugador a alcanzar la meta. Pero debe tener en cuenta que el otro jugador
puede interponerse en ese recorrido, y que también el objetivo del adversario es llegar a
ese mismo estado final.

Los nodos del árbol son de dos tipos: MAX y MIN según correspondan a uno u otro
jugador. Los valores altos son buenos para MAX, es decir, su objetivo es maximizar la
función de evaluación que mide la proximidad estimada a la meta de una situación dada.
Los valores bajos de la función de utilidad son los buenos para MIN que intenta minimizar
el valor de la función heurística para dificultar a su contrincante la consecución de la meta.
Debido a la alternancia en el juego, cada nivel dentro del árbol está formado sólo por los
nodos MAX o nodos MIN. Si comienza MAX y ocupa la raíz, éste ocupará los niveles pares
del árbol y el nivel inmediatamente inferior lo ocupará los nodos del jugador contrario.

El algoritmo de minimax desarrolla una búsqueda en profundidad limitada. Se puede


describir de forma simplificada en los siguientes pasos:

1. Generación del árbol de búsqueda, desde la raíz hasta los estados terminales.
2. Obtención del valor de la función de utilidad en cada estado terminal.
3. Aplicación de la función de utilidad para calcular este valor de cada uno de los
nodos del nivel inmediatamente superior a los terminales.

_________________________________________________________________________
122
Inteligencia Artificial

4. Continuación de la propagación de los valores de los nodos hojas en dirección a la


raíz una capa cada vez.
5. Cuando los valores calculados llegan a la raíz del árbol, MAX elige la jugada que le
permita obtener el valor más alto.

Función DECISION-MINIMAX(estado) devuelve una acción


Variables de entrada: estado, estado actual del juego

v MAX-VALOR(estado)

devolver la acción de SUCESORES(estado) con valor v

Función MAX-VALOR (estado) devuelve un valor utilidad


Si TEST-TERMINAL(estado) entonces devolver UTILIDAD(estado)
v ← -∞
para un s en SUCESORES(estado) hacer
v<- MAX(v, MIN-VALOR(s))
devolver v

Función MAX-VALOR(estado) devuelve un valor utilidad


Si TEST-TERMINAL(estado) entonces devolver UTILIDAD(estado)
v← ∞
para un s en SUCESORES(estado) hacer
v ← MIN(v, MAX-VALOR(s))
devolver v

Es decir, este algoritmo en cada jugada produce el operador con el que se obtiene la
mejor utilidad, la mejor jugada posible. Recorre todo el árbol del juego con una
exploración exhaustiva y va pasando por todas las hojas para ir calculando el valor de
utilidad de un movimiento que llevará a la toma de decisión.

Hay que tener en cuenta que lo que se propaga hacia arriba depende del estado terminal,
que puede tener una función de utilidad que represente tanto ganar como perder o
empatar. Al recorrer el árbol en sentido ascendente se va conociendo a cual de las tres
situaciones mencionadas se puede llegar desde cada nodo de los niveles superiores al
aplicar operadores.

Por ejemplo, en el árbol

_________________________________________________________________________
123
Inteligencia Artificial

MAX

MIN

1 6 2 6 9 7 5 3 6 7

Figura 26. Árbol para minimax.

la estrategia ganadora sería la que llevara a MAX a los valores más altos de la función de
utilidad, supongamos que igual o mayor que el valor 6. La jugada seleccionada por MIN
sería la respuesta a la jugada de MAX que diera el menor valor de los posibles después del
primer movimiento de MAX. Se han marcado los nodos MAX con rombos y los MIN con
circulos.

Si existe, una estrategia ganadora para MAX será un subárbol en el que todos sus nodos
terminales son ganadores; de esta forma se puede garantizar el éxito sea cual sea la
respuesta del adversario. El recorrido marcado en la figura 26 desemboca siempre en una
rama ganadora. Cualquier jugada de MIN hace que MAX sea el vencedor si ha optado por
esa rama.

Por el contrario, una estrategia ganadora para MIN será el subárbol en el que todos sus
nodos terminales sean perdedores, teniendo en cuenta que cada vez que juega MAX habrá
que considerar todos sus movimientos y cuando juega MIN sólo es necesario considerar
una de las dos alternativas.

El ejemplo comentado anteriormente de “tres en raya” se puede también expresar como


árbol de búsqueda para aplicar esta estrategia de minimax, pero resulta tan compleja su
representación total que sólo se pueden mostrar aspectos parciales del mismo. Este
ejemplo se enuncia en Russell y Norving (1995).

Como es el algoritmo de búsqueda en profundidad, su complejidad temporal es


exponencial, pero la espacial es lineal. Es por lo tanto ineficiente para problemas reales
por el tiempo de cómputo requerido, pero sin embargo permite abordar el problema de los
juegos desde un punto de vista de la representación que facilita su compresión.

_________________________________________________________________________
124
Inteligencia Artificial

Poda alfa-beta

Es un método basado en el minimax pero más eficiente puesto que evita el recorrido
exhaustivo de todos los nodos de un árbol de búsqueda. Reduce por lo tanto
considerablemente el número de nodos expandidos, y por eso se le denomina método de
poda, ya que no explora todas las ramas. Obtiene la misma solución que con el anterior
pero no recorre las ramas que no van a influir en la decisión final, y por lo tanto, al no
calcular sus consiguientes valores de utilidad ni expandir sus sucesores, requiere
generalmente menor tiempo computacional [5].

La poda alfa-beta puede aplicarse a árboles de cualquier profundidad, y, a menudo, es


posible podar subárboles enteros.

Sin embargo, esa afirmación depende del orden en que se exploren los nodos del árbol.
De hecho, en el peor de los casos habría que examinar todos los nodos terminales y
tendría la misma complejidad que el procedimiento minimax.

Para realizar la poda, éste método va anotando cuándo se puede hacer una poda porque
en una rama haya algún nodo con un valor de utilidad inferior al de otro recorrido. Para
ello lo que se hace es pasar, en cada llamada recursiva a un nodo hijo, dos valores (α y β)
de manera que α marque la cota inferior de los valores que se van a ir buscando en la
parte del árbol que queda por explorar, y β es la cota superior de los mismos valores. Si
en algún momento α llega a ser mayor o igual que β no tendrá sentido seguir con la
búsqueda, realizándose una poda α si estamos en un nodo MAX o β si estamos en un
nodo MIN. Se suele denominar por eso poda α–β. Los valores de α y β se suelen inicializar
a – ∞ y + ∞ respectivamente. También se les puede asignar a α el valor mínimo de la
función de utilidad y a β el valor máximo que puede alcanzar la función de evaluación
heurística.

Jugador

Oponente m



Jugador

Oponente n

Figura 27. Poda alfa-beta: el caso general. Si m es mejor que n para el Jugador, nunca iremos a n
en el juego.

_________________________________________________________________________
125
Inteligencia Artificial

Cuestionario de evaluación.

Asigne el concepto con su respectiva definición.

Conceptos: Espacio de estados, grafos de estado, aplicación de espacios de estados,


algoritmo no determinístico, algoritmo determinístico, recorrido en profundidad, recorrido
en amplitud, búsqueda heurística, métodos de búsqueda heurística.

1.- ______________________________________________________________________
Es el entorno donde se desarrolla el proceso de búsqueda, y lo componen todos los
estados por los que se avanza y que se van recorriendo en la tarea de llegar a la meta.

2.- ______________________________________________________________________
La búsqueda en profundidad es otra forma de recorrer sistemáticamente una estructura
del árbol para encontrar el nodo solución, pero recorriéndolo en profundidad, es decir,
bajando de nivel.

3.- ______________________________________________________________________
Es un algoritmo que ofrece más de una única salida en función de su entrada, siempre
que no se haya dado otra especificación adicional. Una ejecución de estos algoritmos
permite elegir en un instante dado una secuencia de posibles estados de salida para una
misma entrada o estado inicial.

4.- ______________________________________________________________________
Se caracterizan por la tendencia a limitar el tiempo y el espacio en donde buscar la
respuesta a problemas complejos, y asumir que aceptaremos cuando le encontremos una
buena solución, que puede no ser óptima.

5.- ______________________________________________________________________
Representa el conjunto de mundos, escenarios o situaciones que se pueden generar
mediante los operadores u acciones. Ya que indica el recorrido del proceso de búsqueda
que va moviéndose de un estado a otro, en la consecución del objetivo final.

6.- ______________________________________________________________________
Ascensión a la cima o gradiente, primero el mejor, búsqueda menor costo, algoritmo A*,
algoritmos genéticos.

7.- ______________________________________________________________________
Es completamente predictivo si se conocen las entradas al mismo. Dicho de otra forma si
se conocen las entradas del algoritmo siempre producirá la misma salida, y la máquina
interna pasará por la misma secuencia de estados.

_________________________________________________________________________
126
Inteligencia Artificial

8.- ______________________________________________________________________
El algoritmo define una forma de moverse a lo largo de la estructura arbórea examinando
los valores de los nodos de manera sistemática y controlada, de forma que se pueda
encontrar un nodo de solución.

9.- ______________________________________________________________________
Búsqueda de rutas en redes informáticas, rutas aéreas para viajar, problema del viajante,
diseño de microchips, ensamblaje de componentes, desplazamiento de robots.

Respuestas: espacio de estados, recorrido en profundidad, algoritmo no determinístico, búsqueda heurística,


grafos de estado, métodos de búsqueda heurística, algoritmo deterministico, recorrido en amplitud, aplicación
de espacios de estados.

_________________________________________________________________________
127
Inteligencia Artificial

CONCLUSIÓN

La Inteligencia Artificial ha hecho posibles aplicaciones nuevas tales como los sistemas de
reconocimiento de voz, sistemas de control de inventarios, sistemas de vigilancia, robots y
motores de búsqueda.

Distintas ramas de la Inteligencia Artificial han ido alternando en popularidad: la


aproximación conexionista, representada por las redes neuronales; la computación
biológica, con algoritmos evolutivos como técnicas de búsqueda; la lógica borrosa, en un
intento de dotar de sentido común a las máquinas, etc. Recientemente, el crecimiento de
Internet y de la computación distribuida en general ha abierto nuevos campos de
aplicación de la Inteligencia Artificial.

Parece probable que el éxito de la Inteligencia Artificial a gran escala, la creación de


inteligencia en el nivel humano y más allá, cambiaría las vidas a la mayoría de la
humanidad. La verdadera naturaleza de nuestro trabajo y de nuestro papel cambiaría así
como nuestro punto de vista de la inteligencia, la conciencia y el destino futuro de la raza
humana. A este nivel, los sistemas de Inteligencia Artificial podrían suponer una amenaza
directa a la autonomía humana, la libertad, e incluso la supervivencia. Por estas razones,
la investigación en la Inteligencia Artificial no se puede divorciar de sus consecuencias
éticas.

Se puede observar que la Inteligencia Artificial ha progresado a lo largo de su corta


existencia, pero todavía tiene validez la frase del ensayo de Alan Turing sobre Computing
Machinery and Intelligence:

“Podemos observar sólo a poca distancia hacia delante, pero también se pude ver que
todavía queda mucho por hacer.”

_________________________________________________________________________
128

You might also like