Está en la página 1de 25

RESOLUCIN DE PROBLEMAS MEDIANTE BSQUEDAS CIEGAS

-Planteamiento -Algoritmo general -Implementacin

Agente Resolvente Problemas


Resuelven un problema encontrando la secuencia de acciones que conducen de un estado inicial a un estado final, pasando por un conjunto de estados deseables. Es necesario describir:

-Conjunto posible de estados


-Acciones posibles

-Estado (o estados) final (es)


-Grafo de transiciones -Algoritmo de bsqueda de la solucin

Ejemplo: Aspiradora. Debe limpiar las dos localizaciones sobre las cuales se puede mover Condiciones: -Hay solo dos localizaciones (Izquierda y Derecha) -Las localizaciones pueden estar limpias sucias En cada momento la aspiradora sabe dnde est y si hay suciedad no en cada lugar

Estados: Describen la ubicacin de la aspiradora y la situacin de las localizaciones (limpias sucias). Seran tres valores. En el caso del dibujo: 0-0-1 Estado inicial: Cualquiera Acciones: Desplazarse a la Izquierda , a la Derecha y Limpiar. Objetivo: Que no haya suciedad en ninguna de las celdas y la aspiradora est cualquier localizacin. Estados objetivos o finales: 0-0-0 1-0-0

Espacio de solucin
Es un grafo, que describe todos los posibles caminos que conducen a la solucin del problema. Los vrtices son los estados y las aristas son las acciones que conducen de un estado a otro En el ejemplo de la aspiradora: -Existen 2x2x2 = 8 estados (vrtices) ya que hay dos posibilidades para cada componente de la descripcin de los mismos -Las aristas unen a los estados de acuerdo a los resultados de las acciones aplicadas a cada estado. Las acciones seran las etiquetas de las aristas.

Grafo: Ejemplo de la aspiradora


Estado
0:000 1:001 2:010 3:011 4:100 5:101 6:110 7:111
I

Acciones
(I)zquierda (D)erecha (L)impiar

I,L D

D, L

0
I

L,D

L,I

2
I

6
L D D

1
I L I

7
I

Bsqueda
Utilizando la informacin del espacio de solucin (grafo), se puede encontrar un camino desde el estado inicial al estado final, realizando las acciones que correspondan en cada momento Un agente decide qu hacer en cada estado examinando las diferentes secuencias posibles de acciones que le conducen a otros estados. Finalmente, despus de realizar este proceso de exploracin, encuentra una secuencia que lo conduce a la solucin (objetivo) Hallar esta secuencia es la Bsqueda.

Solucin Es la secuencia de acciones que devuelve el algoritmo de Bsqueda.

En general: El algoritmo de Bsqueda recibe como entrada un Problema (Espacio de solucin, estado inicial y estados finales) y devuelve la Solucin.

Algoritmo de Bsqueda de Soluciones:


Utiliza un rbol de Bsqueda Durante la bsqueda de la solucin el algoritmo va construyendo un rbol en el que se almacena, en cada nodo, informacin sobre los estados que se van obteniendo al realizar las acciones. La raz del rbol se corresponde con el estado inicial. Sus hijos (otros estados) son los que resultan de realizar las acciones a ese estado. Se continua con la creacin del rbol, aplicando el mismo razonamiento a cada hijo (sin repetir estados en cada camino), hasta que se llegue al estado final

rbol y soluciones del ejemplo de la aspiradora, partiendo del estado inicial 0-1-1 (3)

Algoritmo Bsqueda de Soluciones:


Durante el proceso de construccin del rbol se utiliza una funcin que dado un Nodo (estado) obtiene los estados que resultan de realizar todas las acciones en ese estado. A esta operacin le llamaremos Expandir. Debe expandir nodos que conduzcan a estados que no estn en el mismo camino. Esta funcin obtiene la informacin a partir del Grafo. -Estrategia de bsqueda: Criterio para elegir cul ser el siguiente estado a Expandir. Utilizaremos dos estrategias dentro la conocida como Bsqueda a Ciegas (Primero en profundidad, primero en anchura)

Estrategias de Bsqueda -Utiliza el concepto de Frontera (Todos los nodos del rbol que han sido generados, pero no expandidos). Al comienzo, la frontera contiene nicamente a la raz del rbol. -La estrategia de bsqueda consistir entonces en determinar, de la frontera, cul ser el siguiente nodo a expandir. En el caso de la estrategia Primero en profundidad la Frontera se implementa mediante una Pila. Para la estrategia de Primero en Anchura la Frontera se implementa mediante una Cola

El Algoritmo General: Para comenzar necesita: Lista de estados Lista de estados finales (objetivo) Grafo con el espacio de solucin ( funciones que permitan determinar las acciones y realizarlas) Durante el funcionamiento crea: rbol de bsqueda de la solucin Pila Cola para representar la frontera Al terminar construye una: Lista con la secuencia de acciones y estados

Algoritmo General: -Construir lista de estados (estados) -Construir la lista de estados finales (objetivo) -Construir el grafo (espacio)no..si se definen funciones Utiliza las siguientes funciones: Lista Lista Boolean Lista Boolean Lista Estado void Estado BuscarSolucionPP( Estadoinicial ) BuscarSolucionPA( Estadoinicial ) EsObjetivo( Estado ) CrearSolucion( Arbol ) BuscarEnCamino( Arbol, Estado ) Expandir( Arbol ) AdicionarEstado( parametros ) ObtenerAccionesPosible( Estado, Acciones ) RealizarAccion( Estado, Accion )

Los nodos del rbol de Bsqueda contienen:


-Estado (estado del espacio de estados que se corresponde con el nodo) -Padre (el nodo en el rbol que ha generado a ese nodo) -Accin (la accin que se aplica al padre para generar el nodo) -Profundidad (longitud del camino desde el estado inicial al nodo)

Los estados contienen informacin sobre la


descripcin del estado y un ID que lo identifica de manera nica en el conjunto de estados

Implementacin (Clase para los Estados):


public class TEstado { public int P, I, D; public int ID; // constructor public TEstado(int P, int I, int D ) { this.P = P; this.I = I; this.D = D; this.ID = P*4 + I*2 + D; } }

Implementacin (Clases para los nodos del rbol):


public class TNodoAB { public TEstado estado; public TArbol padre; public String accion; public int profundidad; // constructor public TNodoAB( TEstado e, TArbol p, String a, int pr ) { estado = e; padre = p; accion = a; profundidad = pr; } }

Declaracin de los datos necesarios:


public TLista estados; public TArbol arbol; public TLista objetivo;

Construccin de la lista de estados (ejemplo Aspiradora):


estados = new TListaA(); objetivo = new TListaA();

Funcin esobjetivo: Dado un estado verifica si ste se encuentra en la lista objetivo.


public boolean esobjetivo( TEstado e ) { for ( int i = 0; i < objetivo.Cantidad(); i++ ) { TEstado ee = (TEstado)objetivo.Obtener(i); if ( ee.ID == e.ID ) return true; } return false; }

Funcin creasolucion:
Dado un rbol que en realidad es una Hoja correspondiente a un estado final, construye una lista con la solucin (camino con los nodos del rbol, desde la raz hasta la hoja). Lo construye recorriendo al rbol hacia arriba
public TLista crearsolucion(TArbol araiz) { TLista res; res = new TListaP(); while ( !araiz.Vacio() ) { TNodoAB nodo = (TNodoAB)araiz.ObtenerDato(); res.Insertar(nodo,0); araiz = nodo.padre; } return res; }

Funcin buscarencamino:
Dado un Arbol (hoja) y un Estado verifica si ese estado ya est en el camino desde esa hoja hasta la Raz del rbol.
public boolean buscarencamino(TArbolA araiz, TEstado e) { while ( !araiz.Vacio() ) { TNodoAB nodo = (TNodoAB)araiz.ObtenerDato(); if ( nodo.estado.ID == e.ID ) return true; araiz = nodo.padre; } return false; }

Funcin expandir:
Dado un Arbol (hoja) realiza el proceso de Expandir el nodo, realizando las acciones descritas en el Grafo.
public TLista expandir(TArbol araiz) { TLista res; TNodoAB nodo; res = new TListaP(); nodo = (TNodoAB)araiz.ObtenerDato(); int ID = nodo.estado.ID; for ( int i = 0; i < espacio.CantidadArcos(ID); i++) { int IDd = espacio.ObtenerVerticeLlegada(ID, i); TEstado e = (TEstado)estados.Obtener(IDd); if ( !buscarencamino( araiz, e ) ) { TNodoAB n; n = new TNodoAB( e,araiz,(String)espacio.ObtenerArco(ID,i), nodo.profundidad+1 ); TArbolA hijo = new TArbolA(); hijo.CrearHoja(); hijo.ModificarDato(n); araiz.AdicionarHijo(hijo); res.Adicionar(hijo); } } return res; }

Funcin BuscarSolucionPP:
Algoritmo principal que busca la solucin siguiendo la estrategia de Primero en Profundidad
public TLista BuscarSolucionPP( TEstado e ) { TNodoAB raiz,nodo; TArbol araiz; TPila frontera; raiz = new TNodoAB( e, new TArbolA(), "", 0 ); arbol = new TArbolA(); arbol.CrearHoja(); arbol.ModificarDato(raiz); frontera = new TPilaP(); frontera.Push(arbol); while ( true ) { if ( frontera.Vacia() ) return new TListaA(); //sin solucion araiz = (TArbolA)frontera.Pop(); nodo = (TNodoAB)araiz.ObtenerDato(); if ( esobjetivo(nodo.estado) ) return crearsolucion(araiz); TListaP exp = expandir(araiz); int c = exp.Cantidad(); while ( c > 0 ) { TArbol aux = (TArbol)(exp.Obtener(c-1)); frontera.Push(aux); exp.Eliminar(c-1); c--; } } }

EJERCICIO
Temos 3 celdas (1,2,3), de las cuales 2 estn ocupadas por los objetos A y B. El objetivo es mover los objetos de manera tal que se llegue al objetivo siguiente:

Un objeto se puede mover slo a la celda vaca.

EJERCICIO
1) Definir el conjunto de estados posibles 2) Definir el estado objetivo 3) Definir las acciones posibles 4) Construir el grafo

4) Modificar el programa de la aspiradora para que funcione para este problema.

También podría gustarte