Está en la página 1de 53

Sistemas Inteligentes

Solución de Problemas Mediante Búsqueda


Eduardo Aguilar Torres
Universidad Católica del Norte
Departamento de Ingeniería de Sistemas y Computación

1/53
Información de Contacto

• Eduardo Aguilar Torres


• email: eaguilar02@ucn.cl
• Departamento de Ingeniería de Sistemas y Computación
• http://www.disc.ucn.cl

2/53
Tabla de Contenidos

Formulación de Problemas
Datos Personales Medición del rendimiento
Introducción Búsqueda de Soluciones

3/53
Introducción

Agente de Solución de Problemas

Un tipo de agente basado en objetivos

4/53
¿Por qué definir objetivos?

• Simplificar el comportamiento del agente, limitar sus metas.


• El agente deberá descubrir una secuencia de acciones que permita
alcanzar esas metas.
• El primer paso para resolver un problema es formular sus objetivos.

5/53
Agente de Solución de Problemas

Formulación del Objetivo


• Agente de solución de problema: Basado en objetivo.
• Consideraremos un objetivo como un conjunto de estados del mundo
(exactamente aquellos estados que satisfacen el objetivo).
• La tarea del agente es encontrar qué secuencia de acciones permite
obtener un estado objetivo. Para esto, necesitamos decidir qué
acciones y estados son considerados.

6/53
Agente de Solución de Problemas

Formulación del Objetivo


• El primer paso en el diseño de un agente de solución de problemas es la
formulación del objetivo.
Objetivo: Un conjunto de estados del mundo, en los cuales el
objetivo es satisfecho.
Acciones: Causan transiciones entre estados del mundo.
El agente debe elegir realizar acciones que conduzcan a un
estado objetivo.

7/53
Agente de Solución de Problemas
Formulación del Problema
• El segundo paso en el diseño de un agente de solución de problemas es
la formulación del problema.
• Formulación del problema: Proceso de decidir que acciones y estados
considerar.
• Acciones: Causan transiciones entre estados del mundo. El agente debe
elegir realizar acciones que conduzcan a un estado objetivo.
• Búsqueda: El proceso de examinar diferentes posibles secuencias de
acciones que conducen a estados de valor conocido, y luego elegir el
mejor.
• Algoritmo de búsqueda: Toma un problema y retorna una solución
(secuencia se acciones). 8/53
Agente de Solución de Problemas

Ejecución
• El tercer paso en el diseño de un agente de solución de problemas es la
ejecución.
• Ejecución: Llevar a cabo las acciones recomendadas.
• En resumen, el diseño de un agente conlleva tres fases.
• Formulación del problema y del objetivo.
• Búsqueda de una secuencia de estados que lleven al objetivo.
• Ejecución llevar a cabo las acciones.

9/53
Ejemplo: Agente de Solución de Problemas

Problema
• Hay 2 baldes, uno de 5lts. y el otro de 3lts.
• El problema es dejar 4 lts. de agua en el de 5lts.
• ¿Cómo dejo 4 lts. de agua en el balde de 5, si no tienen escala de medición los
baldes, y tampoco tengo nada con que medir?
• Nota: Se tiene una llave la cual me facilita toda el agua que necesite.

10/53
Un Agente de Solución de Problema Simple

1 function SIMPLE-PROBLEM-SOLVING-AGENT(p) return action


2 inputs: p //Una percepcion
3 static: s, //Una secuencia de acciones, inicialmente vacia
4 state, //Una descripcion del estado actual del mundo
5 g, //Un objetivo, inicialmente nulo
6 problem //Una formulacion del problema
7 state ← UPDATE-STATE(state, p)
8 if s is vacio then
9 g ← FORMULATE-GOAL(state)
10 problem ← FORMULATE-PROBLEM(state, g)
11 s ← SEARCH(problem)
12
13 //Tomar primera accion en secuencia
14 action ← RECOMMENDATION(s, state)
15
16 //Retomar el resto de las acciones en la secuencia
17 s ← REMAINDER(s,state)
18 return action

11/53
Formulación de Problemas

Tipos diferentes de problemas


Problemas de 1-estado: El agente conoce su estado actual, el efecto de sus
acciones, y puede determinar en que estado estará tras una secuencia
de acciones.
Problemas de múltiples estados: Cuando el mundo no es totalmente accesible, el
agente debe razonar acerca de un conjunto de estados alcanzables.
Problemas de contingencia: Cuando se requiere calcular un árbol completo de
acciones, más bien que una única secuencia de acciones. Cada rama
del árbol trata con una posible contingencia que pueda surgir.
Problemas de exploración: Cuando el agente desconoce el efecto de sus acciones.
El agente debe experimentar y gradualmente descubrir que acciones
hacer y que secuencia de estados llevan al objetivo. 12/53
Ejemplo: Vacuum world (simplificado)

• Agente de estado único (tiene acceso total al mundo): Si el estado inicial es 5, entonces sabe que la
secuencia (Right, Suck) lo conduce al estado objetivo.
• Agente de estados múltiples (tiene acceso limitado al estado del mundo): Estado inicial cualquiera de los 8.
La acción Right lo conduce al set de estados {2, 4, 6, 8}. La secuencia (Right, Suck, Left, Suck) lo conduce al
estado objetivo 7.
13/53
Problemas bien definidos
• Problema: Colección de información que el agente utiliza para decidir
que hacer.
• Información necesaria para definir un problema de estado único:
1. Estado Inicial.
2. Conjunto de posible acciones disponibles al agente. Usualmente se
utiliza un operador S(x), el cual retorna el conjunto de estados
alcanzables desde el estado x por una acción.
3. Condición objetivo. Condición que el agente puede aplicar a un estado
para determinar si está en un estado objetivo.
4. Función de costo de un camino. Función que asigna un costo a un
camino. Se denota por g.
14/53
Problemas bien definidos
• El estado inicial y conjunto de posibles acciones (operadores) definen el
espacio de estados del problema, es decir, el conjunto de todos los
estados alcanzables desde el estado inicial por cualquier secuencia de
acciones.
Camino: Cualquier secuencia de acciones que conducen desde un
estado a otro.
• Es decir, podemos definir un tipo de dato.

1 Datatype PROBLEM
2 Components: INITIAL-STATE, OPERATORS, GOAL-TEST, PATH-
COST-FUNCTION
15/53
Medición del rendimiento de un agente de solución de
problemas

• La efectividad de una búsqueda puede ser medida en 3 formas.


1. ¿Encuentra una solución?.
2. ¿Es una buena solución? (una con un camino de bajo costo).
3. ¿Cual es el costo de búsqueda asociado? (tiempo y memoria).

Costo total de la búsqueda = costo del camino + costo de la búsqueda

16/53
Problema: Conducir desde Arad a Bucharest, usando los
caminos del mapa

17/53
Problema: Conducir desde Arad a Bucharest, usando los
caminos del mapa

18/53
Elección de estados y acciones

Problema: ”Conducir desde Arad a Bucharest, usando los caminos del mapa”
Estado Inicial: ”En Arad”.
Condición Objetivo: ”¿Estamos en Bucharest?”.
Una solución: Arad → Sibiu → Rimnicu → Pitesti → Bucharest.
Otra solución Arad → Timisoara → Lugoj → Mehadia → Dobreta → Craiova
→ Pitesti → Bucharest.
¿Cuál solución es mejor? Necesitamos una función de costo.
Función de costo: Número de pasos (arcos) en el camino.
Mejor solución: Arad → Sibiu → Fagaras → Bucharest,
costo = 3.
19/53
Ejemplos de Problemas

Problemas Simples Problemas del Mundo


• El 8-puzzle • Encontrar la ruta
• Las 8 reinas • El vendedor viajero
• Cripto-aritmética • Layout VLSI
• The vacuum world • Navegación de robots
• Misioneros y caníbales • Secuencia de ensamblaje

20/53
Problemas Ejemplo: Puzzle-8

Consiste en un tablero de 3x3 con 8 casilleros numerados (1 al 8) y un


casillero en blanco.

Estados: Localización de cada número en el tablero.


Operadores: Mover blanco derecha, izquierda, arriba, abajo.
Condición objetivo: ¿Estado = estado objetivo? 21/53
Agente Aspirador: Estado único. (Agente equipado con
sensores)
Estados: Uno de los 8 estados mostrados abajo.
Operadores: Mover a la izquierda (L), mover a la derecha (R), Aspirar (S).
Condición Objetivo: Todos los cuadrados sin suciedad.
Costo de camino: Cada acción cuesta 1.

22/53
Agente Aspirador: Estados Múltiples. (Agente no tiene
sensores)

Estados: Subconjuntos de los 8 estados anteriores.


Operadores: Mover a la izquierda (L), mover a la derecha (R), Aspirar (S).
Condición Objetivo: Todos los estados en el conjunto de estados que no
tienen suciedad.
Costo de camino: Cada acción cuesta 1.

En este caso, el agente no tiene sensores, pero aún debe limpiar toda la
suciedad.
23/53
Agente Aspirador: Estados Múltiples. (Agente no tiene
sensores)

24/53
Búsqueda por Soluciones
• El encontrar una solución es realizado por una búsqueda a través del
espacio de soluciones.
• La idea es mantener y extender un conjunto de secuencias de
soluciones parciales.
• La aplicación de los operadores al estado actual genera un conjunto de
nuevos estados.
• La esencia de una búsqueda es elegir una opción a expandir y poner el
resto a un lado para consideración posterior, en el caso de que la
primera elección no conduzca a una solución.
• La elección de que estado expandir es determinado por la estrategia de
búsqueda.
25/53
Ejemplo: Árbol de Búsqueda para el problema de
encontrar la búsqueda

a) Estado Inicial

26/53
Ejemplo: Árbol de Búsqueda para el problema de
encontrar la búsqueda

b) Después de expandir Arad, se generan tres nuevos estados (Sibiu,


Timisoara, Zerind). La elección de que estado expandir luego es
determinada por la estrategia de búsqueda.

27/53
Ejemplo: Árbol de Búsqueda para el problema de
encontrar la búsqueda

c) Después de expandir Sibiu.

28/53
Algoritmo general de búsqueda

1 function GENERAL-SEARCH(problem, strategy)


2 return una solucion o un fallo
3
4 Inicializar el arbol de busqueda usuando el estado inicial del
problema
5 loop do
6 if no hay candidatos para la expansion then return fallo
7 Elegir un nodo hoja para la expansion de acuerdo a la
estrategia en el arbol de busqueda
8 if el nodo contiene un estado objetivo then return solucion
9 else expandir el nodo y agregar los nodos resultantes al arbol
de busqueda
10 end
29/53
Estructuras de datos para árboles de búsqueda
• Cada nodo contiene 5 componentes:
• El estado dentro del espacio de estados.
• El nodo padre.
• El operador que fue aplicado para generar el nodo.
• La profundidad del nodo (número de nodo en el camino desde la raíz).
• El costo del camino desde el estado inicial.

1 Datatype node
2 Components: STATE, PARENT-NODE, OPERATOR, DEPTH, PATH-COST

30/53
Algoritmo general de búsqueda (usando una cola)

1 function GENERAL-SEARCH(problem, QUEUEING-FN) returns una solucion o un fallo


2 nodes ← MAKE-QUEUE(MAKE-NODE(INITIAL- STATE[problem]))
3
4 loop do
5 if EMPTY?(nodes) then return fallo
6 node ← REMOVE-FRONT(nodes)
7 if GOAL-TEST[problem] aplicado a STATE(node) tiene exito then return node
8 nodes ← QUEUING-FN(nodes, EXPAND(node, OPERATOR[problem]))
9 end

31/53
Criterios de Evaluación de Estrategias de Búsqueda

Completitud ¿La estrategia garantiza encontrar una solución cuando hay


una?
Complejidad en tiempo ¿Cuanto tiempo toma encontrar una solución?
Complejidad en espacio ¿Cuanta memoria se necesita para realizar la
búsqueda?
Optimalidad ¿La estrategia encuentra la mejor solución cuando hay varias
soluciones?

32/53
Clasificación de Estrategias de Búsqueda (I)

No informadas (Búsqueda ciega) Se distinguen por el orden en el cual los


nodos son expandidos:
• Breadth-first search (BFS - búsqueda de primera amplitud)
• Busqueda de costo uniforme (UCS)
• Depth-first search (DFS – búsqueda de primera
profundidad)
• Búsqueda de profundidad limitada (DLS)
• Búsqueda de profundidad iterativa (IDS)
• Búsqueda bidireccional

33/53
Clasificación de Estrategias de Búsqueda (II)

Informadas (Búsqueda heurística Incorporan información adicional para


guiar la búsqueda
• Búsqueda A∗
• Búsqueda Hill-Climbing
• Simulated annealing

34/53
Breadth-first search (BFS)

• El nodo raíz es expandido primero, luego todos los nodos generados


por el nodo raíz son expandidos, y luego sus sucesores, etc. (Cada nivel
se expande completamente antes de expandir el siguiente).
• Se implementa utilizando una cola, donde los nuevos estados
generados son puestos al final de la cola.

1 Fuction BREADTH-FIRST-SEARCH(problem) return una solucion o un fallo


2 return GENERAL-SEARCH(problem, COLA)

35/53
Breadth-first search (BFS)

36/53
Breadth-first search (BFS)

A A A A

B C B C B C B C

D E F G D E F G D E F G D E F G

37/53
Breadth-first search (BFS)
• BFS es completa: si existe una solución, la encontrará.
• BFS es óptima: si hay varias soluciones, siempre encontrará primero el
estado objetivo más superficial.
• Si consideramos que cada estado se expande en b nuevos estados
(factor de expansión), y si la solución al problema tiene una longitud del
camino de d, entonces el número máximo de nodos expandidos antes
de encontrar la solución es: 1 + b + b2 + b3 + ... + bd . Ejemplo: b=10,
1000 nodos/seg, 100 bytes/nodo.
Profundidad (d) Nodos Tiempo Memoria
4 11.111 11 seg 1 MB
8 104 31 horas 11 GB
12 1012 35 años 111 TB

38/53
Búsqueda de Costo Uniforme

• Modifica BFS expandiendo siempre el nodo de costo más bajo de entre


los que están pendiente por expansión.
• La función g(n) mide el costo del camino, tal que:
g(SU CCESSOR(n)) ≥ g(n), para cada nodo n.
• Ejemplo: Problema de encontrar la ruta

39/53
Búsqueda de Costo Uniforme

40/53
Depth-first Search (DFS)

• Siempre expande uno de los nodos en el nivel más profundo del árbol.
Solo cuando llega a un extremo muerto (nodo no objetivo sin
expansión) la búsqueda retrocede y expande nodos en niveles más
superficiales.
• Implementación: con una cola, que siempre pone los estados más
recientes generados al frente de la cola (o una función recursiva
invocada sobre cada hijo a la vez).

41/53
Depth-first Search (DFS)

42/53
Depth-first Search (DFS)
A A A

B C B C B C

D E F G D E F G D E F G

H I J K L M N O H I J K L M N O H I J K L M N O

A A A

B C B C B C

D E F G D E F G D E F G

H I J K L M N O H I J K L M N O H I J K L M N O

A A A

B C B C B C

D E F G D E F G D E F G

H I J K L M N O H I J K L M N O H I J K L M N O

A A A

B C B C B C

D E F G D E F G D E F G

H I J K L M N O H I J K L M N O H I J K L M N O

43/53
Depth-first Search (DFS)
Espacio si el factor de expansión es b y la profundidad máxima es m,
entonces DFS requiere almacenar b · m nodos (si m=12, b=10,
requerirá solo 12KB de espacio).
Tiempo O(bm ) en el peor caso.
No es óptima Puede fallar en encontrar la solución óptima.
No es completa Puede fallar en encontrar una solución cuando existe una
(puede caer en un loop infinito o nunca retornar una solución).

1 Fuction BREADTH-FIRST-SEARCH(problem) return una solucion o un fallo


2 return GENERAL-SEARCH(problem, PILA)

44/53
Búsqueda de Profundidad Limitada (DLS)
• Evita los problemas de los DFS imponiendo un punto de corte sobre la
máxima profundidad del camino.
• Por ejemplo, para le caso del mapa de ciudades de Rumania, hay 20
ciudades, así que una solución debe ser de longitud 19 a lo más.
• En este caso, el operador sería: ”Si en la ciudad A ha viajado un camino
de largo menor a 19 entonces generar un nuevo estado en la ciudad B”.
• Este operador garantiza encontrar una solución si existe pero no
garantiza encontrar la solución más corta (Optimalidad).
• Tiempo. O(bl ), donde l es la profundidad límite.
• Espacio. O(b · l), donde l es la profundidad límite.
45/53
Búsqueda de Profundidad Iterativa (IDS)
• Puede ser difícil elegir un buen límite.
• En el ejemplo del mapa de ciudades de Rumania, quizás el paso por 19
ciudades no es el mejor límite. Quizás sea mejor 9 (diámetro del grafo:
mayor a la distancia entre cualquier par de estados). Esto significa, que
dada cualquier ciudad esta puede ser alcanzada desde otra en a lo más
9 pasos.

1 Fuction ITERATIVE-DEEPNING-SEARCH(problem) return una solucion o un fallo


2 input: problem //un problema
3 for depth ← to ∞ do
4 if DEPTH-LIMITED-SEARCH(problem, depth) tiene una solucion then return
resultado
5 return fallo

46/53
Búsqueda de Profundidad Iterativa (IDS)

47/53
Búsqueda de Profundidad Iterativa (IDS)

• DLS: Número total de expansiones: 1 + b + b2 + ... + bd−2 + bd−1 + bd .


• IDS: Número total de expansiones:
(d + 1)1 + (d)b + (d − 1)b2 + ... + 3b(d−2) + 2bd−1 + 1bd
• Tiempo. O(bd )
• Espacio. O(b · d)

48/53
Búsqueda Bidireccional
• Idea: Buscar simultáneamente hacia adelante desde el estado inicial y
hacia atrás desde el estado objetivo.
• La búsqueda se detiene cuando ambas búsquedas se reúnen en el
medio (estado común)

49/53
Búsqueda Bidireccional
• Si existe una solución a profundidad d, entonces la solución será
d 1
encontrada en O(2b 2 ) = O(b 2 ).
• Definición: Predecesores(n) = todos los nodos m talque sucesor(m)=n.
• Calcular los predecesores de un estado puede ser difícil.
d
• Tiempo. O(b 2 )
d
• Espacio. O(b 2 )
• Factores adicionales a considerar:
• ¿Múltiples estados objetivos?.
• Forma eficiente de verificar si un nuevo estado está en la otra mitad.
• El tipo de búsqueda a realizar en cada mitad.
50/53
Comparación de estrategias de búsqueda

51/53
Evitando estados repetidos
• Problema: La posibilidad de expandir estados que ya han sido encontrados y
expandidos antes sobre algún otro camino.
• Estados repetidos: En algunos problemas son inevitables debido a la presencia de
operadores reversibles (Por ejemplo, el problema de encontrar una ruta).
• Formas de tratar con estados repetidos:
• No retornar al estado desde el cual justo se viene - rechazar la generación
de cualquier sucesor que es el mismo que el estado del nodo padre.
• No crear caminos con ciclos en ellos - rechazar la generación de cualquier
sucesor de un nodo que es el mismo que cualquier de sus antecesores.
• No generar cualquier estado que ya fue generado antes.
• Verificar por estados repetidos puede ser costoso en tiempo. Se sugiere usar una
tabla de hash (almacena todos los nodos generados).
52/53
¿Preguntas?

53/53

También podría gustarte