ADA2 - TPE 2009 · 2009. 11. 9. · ADA2 - TPE 2009 Dinámica del TPE −Objetivos −Experiencias...

78
Laboratorio Análisis y Diseño de Algoritmos 2 ADA2 - TPE 2009 Dinámica del TPE - Objetivos - Experiencias anteriores Contexto del problema El grafo como modelo. Algoritmos de búsqueda - Búsqueda completa - Búsqueda parcial La etapa de planificación La etapa de ejecución Evaluación heurística Soporte para el desarrollo de los algoritmos solicitados Requisitos de la entrega

Transcript of ADA2 - TPE 2009 · 2009. 11. 9. · ADA2 - TPE 2009 Dinámica del TPE −Objetivos −Experiencias...

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    ADA2 - TPE 2009 Dinámica del TPE

    − Objetivos− Experiencias anteriores

    Contexto del problema El grafo como modelo. Algoritmos de búsqueda

    − Búsqueda completa− Búsqueda parcial

    La etapa de planificación La etapa de ejecución

    Evaluación heurística Soporte para el desarrollo de los algoritmos solicitados Requisitos de la entrega

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Dinámica del TPE Se trabajará a partir de un juego ya implementado; sobre una

    plataforma especialmente desarrollada para este tipo de proyectos:− Diseño orientado a componentes; con una separación clara entre la

    lógica abstracta del juego y su representación visual.− Soporte para juegos en entornos de dos dimensiones.− Estructuras de datos y de control que facilitan el desarrollo de las

    “simulaciones”, requeridas por distintos algoritmos de búsqueda. Se deberán desarrollar los algoritmos para que uno o varios de los

    protagonistas del juego cumplan con los objetivos particulares del mismo (salir de un laberinto, sumar la mayor mayor cantidad de puntos, destruir otro personaje, etc.)

    Lo más importante es el análisis y comparación de los distintos algoritmos, así como la presentación de los resultados obtenidos.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    ¿Por qué un juego? Existen muchas características que hacen a los juegos un contexto

    adecuado para el desarrollo de algoritmos:− Son aplicaciones con las que la mayoría se encuentra familiarizado;− Brindan un contexto dinámico donde es posible aplicar una amplia

    variedad de técnicas algorítmicas (a distintos niveles de la aplicación);− Ofrecen un entorno visual e interactivo donde es sencillo ver los

    resultados de las diversas estrategias desarrolladas. Hay varias razones para trabajar sobre un juego ya implementado

    sobre una plataforma que soporte este tipo de proyectos:− Los juegos son aplicaciones complejas tanto desde la perspectiva del

    diseño como la implementación;− Muchos de los algoritmos requieren mecanismos que permitan realizar

    “simulaciones” que agregan aún más complejidad.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Objetivos

    Concentrarse en el desarrollo de los algoritmos. Realizar análisis más completos y detallados:

    − El funcionamiento de cada estrategia.− Las ventajas y desventajas de cada uno, realizando una comparación

    general entre los distintos algoritmos.− El impacto de las estructuras utilizadas y otros parámetros de cada

    algoritmo (independientemente de la implementación propia).− Los resultados obtenidos u observados con cada uno.

    Extraer conclusiones más significativas:− ¿Hay un algoritmo mejor que otro? Considerar distintas circunstancias y

    limitaciones (tiempo de respuesta, memoria, tamaño del espacio de búsqueda, calidad de la solución requerida, etc).

    − ¿Es posible mejorar los algoritmos implementados?

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Experiencias anteriores (1) TPE – AyDA 2, 2008: Mummy Maze

    − Juego de un jugador; por turnos; lógica determinística para los enemigos; 15 escenarios de prueba de distinta complejidad.

    − Algoritmos desarrollados (búsqueda exhaustiva):

    Simples: DFS y BFS Heurísticos: A* (con varias funciones de

    evaluación)− Requisitos: Análisis teórico y empírico de

    cada unos de los algoritmos (comparación de los resultados obtenidos, teniendo en cuenta aspectos como la utilización de memoria, velocidad, cantidad de estados visitados, tiempo de respuesta, calidad de la solución, etc).

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Experiencias anteriores (2)− Conclusiones:

    Los grupos consiguieron implementar los algoritmos, sin mayores dificultades y en un tiempo breve.

    Se cumplió el objetivo de la orientación del trabajo hacía una mayor dedicación al análisis de resultados y documentación de los mismos.

    Sin embargo, la mayoría falló en la forma de presentar los resultados (utilización de gráficos, interpretación y explicación de los resultados, desarrollo de conclusiones).

    Down

    Down

    XDown

    LeftNoAction

    XUp

    X

    Right

    X

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Contexto del problema:Pacman

    Enemigo(Pinky)

    Enemigo(Clyde)

    Enemigo(Blinky)

    Enemigo(Inky)

    Obstáculo(Pared)

    Jugador(Pacman)

    Objetivo(Dot)

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Interacciones del juego Movimientos de los personajes:

    − Pacman: NoAction, MoveLeft, MoveRight, MoveUp, MoveDown.

    − Fantasmas: MoveLeft, MoveRight, MoveUp, MoveDown.

    Objetivo: − Comer los puntos: El escenario contiene

    244 puntos.− Evitar colisionar con los fantasmas.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Detalle del movimientos de los enemigos (1)

    Los fantasmas salen de la casa en distintos intervalos de tiempo.

    Determinan la posición objetivo en base a la posición del Pacman y la posición de otros fantasmas.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Detalle del movimientos de los enemigos (2)

    Alternan entre alcanzar la posición objetivo (modo persecución) y volver a una esquina particular (modo “asustadizo”).

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    El problema a resolver Requerimientos:

    − Lista de acciones a ejecutar Restricciones:

    − Una sola vida Objetivos:

    − Comer todos los puntos para ganar Deseable:

    − Utilizar la menor cantidad de pasos posible

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Grafo como modelo del juego (1)

    NoAction MoveLeft MoveDown MoveUp MoveLeft MoveRightMoveDown MoveUp

    MoveDown MoveUpMoveLeftNoAction

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Grafo como modelo del juego (2)

    MoveDown MoveUp

    ...

    ...

    ...

    ... ...

    NoAction

    MoveLeft MoveDown

    MoveUp

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda El grafo anterior se denomina espacio de búsqueda. La forma práctica en la que se genera es a través de los algoritmos

    de búsqueda. Los algoritmos de búsqueda constituyen un método universal de

    resolución de problemas, los cuales tienen como solución una serie de pasos que se desconoce.

    Frecuentemente la solución debe determinarse mediante la exploración de distintas alternativas a través de la prueba y error.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda: DFSDFS(Estado del Juego E, Solución S): Si E es el estado objetivo Devolver la solución con los pasos ejecutados hasta el momento Sino Si E no fue visitado anteriormente Marcar a E como visitado Para cada movimiento válido, M, del Pacman en E Generar el nuevo estado E' ejecutando M y procesando los turnos de los enemigos

    Agregar M a S DFS(E', S) Si se encontró una solución Terminar y devolver la solución Sino Volver el estado actual a E, y sacar a M de S

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (1)

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (2)

    NoAction

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (3)

    NoAction

    NoAction

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (4)

    NoAction

    MoveLeft

    NoAction

    ...

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (5)

    NoAction

    MoveLeft

    MoveDown

    NoAction

    ......

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (6)

    NoAction

    MoveLeft

    MoveDownMoveUp

    NoAction

    .........

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (7)

    NoAction

    MoveLeft

    MoveDownMoveUp

    NoAction MoveRight

    ............

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (8)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft

    NoAction MoveRight

    ............

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (9)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveRight

    NoAction MoveRight

    ...............

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (10)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveRight MoveDown MoveUp

    MoveDownNoAction MoveRight

    ........................

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo DFS (11)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveRight MoveDown MoveUp MoveDown MoveUp

    MoveUpMoveDownNoAction MoveRight

    ..............................

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Características de los algoritmos de búsqueda completa

    Buscan una solución en una única etapa de planificación, previa a la ejecución de la solución:

    Para los algoritmos de búsqueda exhaustiva (DFS, BFS, etc) el tiempo de la búsqueda se encuentra determinado por el tamaño del espacio de búsqueda:

    bndonde b es el factor de ramificación y n el número de pasos de la solución.

    Planificación Ejecución

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Limitaciones de los algoritmos de búsqueda completa

    Las principales limitaciones surgen cuando el espacio de búsqueda es muy grande:

    − El tiempo y el espacio requeridos pueden exceder los recursos computacionales con los que contamos.

    − El tiempo requerido para encontrar una solución puede ser inviable o mayor a alguna restricción preestablecida:

    límites de tiempo impuestos por el mismo problema; una respuesta rápida en el contexto de una aplicación muy

    interactiva como un juego, etc. Existen alternativas a la búsqueda completa exhaustiva para estos

    casos:− Intentar orientar la búsqueda mediante el uso de heurísticas; es decir,

    explorar primero las partes del espacio de búsqueda donde se cree que hay más probabilidades de encontrar una solución. Esto da lugar a algoritmos de búsqueda completa heurísticos como el A* (A estrella).

    − Utilizar algoritmos de búsqueda parcial.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda parcial (1) Intercalan etapas de planificación con etapas de ejecución:

    El tiempo de las etapas de planificación es reducido o fijo (generalmente a través de un límite impuesto a la profundidad de búsqueda).

    Cada etapa de planificación devuelve un paso de la solución, que se ejecutará antes de la próxima etapa de planificación.

    Si bien el proceso terminará, no siempre se garantiza que se encontrará una solución.

    De encontrar una solución, en general, no podemos asegurar que sea óptima.

    El proceso se lleva a cabo bajo la suposición de que cada paso devuelto por la planificación nos acerca al estado objetivo.

    Planificación Ejecución Planificación Ejecución Planificación Ejecución

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda parcial (2)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveRight MoveDown MoveUp MoveDown MoveUp

    MoveUpMoveDownNoAction MoveRight

    Límite establecido (profundidad)

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda parcial(3)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveRight MoveDown MoveUp MoveDown MoveUp

    MoveUpMoveDownNoAction MoveRight

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda parcial (4)

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveDown MoveUp MoveDown MoveUp

    MoveUpMoveDownNoAction MoveRight

    MoveRight

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmos de búsqueda parcial (5)

    Límite establecido (profundidad)

    MoveUpMoveDownNoAction MoveRight............

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    La etapa de planificación El objetivo de la planificación es determinar cuál de las acciones que

    es posible realizar a continuación nos llevará a una resolución satisfactoria del problema.

    Para ello utilizamos la búsqueda de profundidad limitada para anticipar que sucederá luego de ejecutar cada acción:

    − Si se encuentra un estado terminal (uno de los posibles finales del juego) sólo hay que determinar si se ganó, perdió o empató.

    − Pero en general no se llegará a generar estados terminales, al menos al principio del proceso.

    Entonces surge la necesidad de evaluar de algún modo a los estados que no son terminales para saber cuán cerca se encuentran de un estado objetivo.

  • La etapa de ejecución Una estrategia muy básica consistiría en ejecutar directamente las

    acciones sugeridas por la etapa de planificación (la cual consiste en una evaluación heurística extendida mediante búsqueda).

    Sin embargo, el algoritmo anterior podría entrar en ciclos infinitos. Por lo tanto, el algoritmo de control deberá tener en consideración

    esta posibilidad y permitir ejecutar acciones que nos lleven a un estado ya visitado sólo cuando sea conveniente.

    Es frecuente que este tipo de algoritmos utilice la estrategia del menor compromiso para con las acciones de la solución parcial obtenida durante la planificación. Esto significa que sólo se ejecutará la primera de las acciones sugeridas y realizará una nueva planificación a partir de dicho estado.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Evaluación heurística Las “funciones de evaluación heurística” (o simplemente

    heurísticas) permiten estimar el costo del camino óptimo entre dos estados.

    En general, los estados evaluados serán estados no terminales, y se estimará la distancia para alcanzar algún estado objetivo.

    Estas estimaciones serán función de una o más variables del contexto del problema.

    El valor de la distancia estimada debe estar expresado en una unidad determinada, relacionada con el criterio utilizado para evaluar la calidad de las soluciones obtenidas.

    Las heurísticas suelen construirse en base a simplificaciones del problema original; de modo que cualquier solución del problema original es solución del problema simplificado.

    − Ejemplo 1: Si consideramos solo la cantidad de puntos, estamos ignorando la presencia de los fantasmas.

    − Ejemplo 2: Si consideramos que no nos encierren los fantasmas únicamente (sin caer en ciclos), estamos ignorando los puntos.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Evaluación heurística estática Se llama estática a una función heurística (h) que tiene como

    parámetro sólo la configuración de un estado (n). Dichas funciones tienen en cuenta ciertas variables para calcular la

    estimación de la distancia:h(n) = función(var1n, var2n, var3n, ..., varmn)

    Frecuentemente la función heurística es una combinación lineal de las variables consideradas, que se pesan de algún modo para obtener un valor en término de las unidades elegidas:

    h(n) = factor1 * var1ngrado1 + … + factorm * varmngradom + cte Dificultad: encontrar los factores que estimen correctamente estos

    pasos.− Prueba y error; análisis de los resultados;

    ajuste automático: se puede comparar el valor heurístico estático (h), con el valor heurístico de una búsqueda extendida (f) de un mismo estado y de esta forma ajustar los factores a través de una regresión lineal u otro tipo de ajuste.

  • ( ) ( )22 yx GOALy+GOALx=h −−Distancia euclídea

    Ejemplo de heurística (1)

  • Cantidad de puntos

    Ejemplo de heurística (2)

    MoveDown

    MoveUp

    h = 243

    h = 244

    h = puntosRestantes [pasos]

  • Evaluación heurística extendida mediante búsqueda (1)

    Se puede extender a la función evaluación estática a través de una búsqueda limitada por el tiempo (o profundidad), en la cual se aplica a los estados de la frontera una función como la siguiente:

    f(n) = g(n) + h(n)

    Donde:− f(n) es el costo heurístico asociado a un estado n;− g(n) es el costo para alcanzar un estado n a partir del estado

    inicial;− h(n) es el costo heurístico para alcanzar un objetivo desde el

    estado n.

  • Evaluación heurística extendida mediante búsqueda (2)

    Estado inicial

    Estado objetivo

    Estado evaluado

    11

    1

    f = g + h = 246

    g = 3

    h = 243

  • Evaluación heurística extendida mediante búsqueda (3)

    Una evaluación extendida es más precisa que una heurística estática ya que reduce la incertidumbre.

    A la hora de diseñar una función heurística se debe hacer un compromiso entre:

    − El costo computacional de cada evaluación− La calidad de la estimación retornada

    Los parámetros para ajustar:− el tiempo o profundidad de la búsqueda;− la evaluación estática (las variables, su relación y factores).

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Propiedades de las evaluaciones heurísticas

    Idealmente, una función heurística f se mantiene constante al evaluar los estados de un camino óptimo; es decir, al incrementar g, h decrementa en el mismo valor. En ese caso h se denomina un estimador perfecto.

    Si f es monótona no decreciente, se puede aplicar la técnica de poda branch-and-bound en algoritmos basados en la búsqueda en profundidad.

    En algoritmos de búsqueda completa como el A* o el Iterative Deepening A*, si la función heurística es admisible (es decir, no sobrestima el valor real de la distancia óptima), se garantiza que las soluciones encontradas serán óptimas.

  • Introducción a la resolución del Pacman

    La solución algorítmica en la que se basa el trabajo práctico es la búsqueda parcial.

    − El algoritmo de planificación será el minimin.− Un algoritmo de control.

    El soporte del juego ya incluye la implementación de los algoritmos anteriores.

    Sólo se deberá implementar diversas funciones estáticas de evaluación heurística.

    − Se incluye como ejemplo la función que sólo considera la cantidad de puntos restantes.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Minimin Realiza una exploración basada en la búsqueda en profundidad

    desde el estado actual hasta una profundidad determinada. En los estados generados en el último nivel aplica la función de

    evaluación heurística f y retorna el valor resultante. Luego en cada nodo intermedio (hasta la raíz) se toma el valor

    mínimo obtenido a partir de los estados hijo y se retorna el mismo.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Minimin: Ejemplo

    NoAction

    MoveLeft

    MoveDownMoveUp MoveLeft MoveRight MoveDown MoveUp MoveDown MoveUp

    MoveUpMoveDownNoAction MoveRight

    230235240 242240 239 243 231 239 235 240

    239 230 231 235

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Algoritmo de control El algoritmo de control deberá tener en consideración no entrar en

    ciclos infinitos. Existen dos alternativas de implementación:− Realizar una implementación simple que evite regresar a un

    estado ya visitado. Esto no permite pasar por un mismo estado, aunque en esta nueva búsqueda se mejoré el valor de la evaluación de dicho estado.

    − Mantener el valor de evaluación asociado al estado y solo regresar cuando se mejora dicho valor.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Interfaz de las funciones de evaluación heurística

    Interfaz general:

    unsigned int h(const Game * game)

    Las funciones de evaluación heurística (estáticas) devuelven la estimación de la distancia desde el estado evaluado (generalmente ubicado en la frontera de búsqueda) al estado objetivo.

    Parámetros:− game: nos permite acceder a los objetos lógicos del juego y de esta

    forma analizar la configuración del estado actual del juego.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Introducción al soporte de simulación del juego (1)

    Tipos de datos que se proveen para realizar las simulaciones:− LogicObject: representa todos los jugadores y objetos del juego:

    el Pacman, los fantasmas, las paredes y los puntos.− GameSpace: permite acceder a los objetos del juego a través de

    sus coordenadas en el laberinto (opcionalmente filtrando por el tipo o alias).

    − GameState: guarda una configuración determinada del juego. Es decir, el estado en el que se encuentra cada uno de los objetos del juego en un momento dado.

    − GameSimulator: Permite gestionar los estados que atraviesa el juego. En particular:

    avanzar el juego hasta que podamos movernos nuevamente; deshacer los cambios en el juego luego de un movimiento; llevar la simulación a un estado determinado que hayamos

    generado anteriormente.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Introducción al soporte de simulación del juego (2)

    LogicObject: − getX(), getY(), getType(), getAttribute(DIRECTION, direction), getActions(list&);

    (16,17), Pacman, Right,[NoAction, MoveUp, MoveRight,

    MoveDown, MoveLeft]

    (24,23), Blinky, Right,[MoveUp, MoveRight, MoveDown, MoveLeft]

    (2,1), Pinky, Right, [MoveUp, MoveRight, MoveDown, MoveLeft]

    (26,29), Inky, Up,[MoveUp, MoveRight, MoveDown, MoveLeft]

    (2,29), Clyde, Right,[MoveUp, MoveRight, MoveDown, MoveLeft]

    (26,1), Dot, [NoAction]

    (27,9), BottomRightOuterWall, [NoAction]

    (27,5), RightOuterWall, [NoAction](2,7), BottomLeftWall,

    [NoAction]

    (13,12), DoorGhostHouse,[NoAction]

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Introducción al soporte de simulación del juego (3)

    GameSpace: − getObjects(Rectangle, list &)− getObjects(Rectangle, LogicObjectType, list &)

    getObjects(Rectangle(1,1,5,4), …)

    [(1,1), Pinky],[(2,1), Dot],[(3,1), Dot],[(4,1), Dot],[(5,1), Dot],[(1,2), Dot],[(1,3), Dot],[(1,4), Dot],

    [(2,2), TopLeftWall],[(3,2), TopWall],

    [(4,2), TopWall],[(5,2), TopRightWall],[(5,3), RightWall],

    [(5,4), BottomRightWall],[(4,4), BottomWall],[(3,4), BottomWall],

    [(2,4), BottomLeftWall], [(2,3), LeftWall]

    getObjects(Rectangle(21,6,6,4), “Dot”, …)

    [(21,5), Dot],[(22,5), Dot],[(23,5), Dot],[(24,5), Dot],[(25,5), Dot],[(26,5), Dot],[(26,6), Dot],[(26,7), Dot],[(26,8), Dot],[(25,8), Dot],[(24,8), Dot],[(23,8), Dot],[(22,8), Dot],[(21,8), Dot],[(21,7), Dot],[(21,6), Dot]

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Introducción al soporte de simulación del juego (4)

    LogicObject: − performAction(Action::Type)− isActive()

    GameState: − operator == (GameState)

    GameSimulator: − update(),− undoUpdate(),− GameState * getCurrentState(),− setState(GameState * state),− addVisited(GameState * state),− isVisited(GameState * state),− bool isGameOver(),− GameSimulator::GameResult getGameOverResult().

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: Implementación DFS (1)bool dfs(GameSimulator & sim, unsigned int & depth, list & solution){ if (sim.isGameOver()) { if (sim.getGameOverResult() == GameSimulator::WIN) { return true; } else { return false; } } else if (solution.size() == depth) { return false; } else { const GameState * currentState = sim.getCurrentState();

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: Implementación DFS (2) if (!sim.isInPath(currentState)) { LogicObject * player = sim.getPlayer(); list playerActions; player->getActions(playerActions); bool found = false; list::iterator action = playerActions.begin(); while (!found && (action != playerActions.end())) { if (player->canPerform(*action)) { solution.push_back(*action); player->performAction(*action); sim.update(); found = dfs(sim, depth, solution); if (!found) { solution.pop_back(); sim.undoUpdate(); } } action++; } return found; } else { return false; } }}

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (1)

    currentState

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (2)

    currentState

    performAction(MoveRight)sim.update()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (3)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    currentState

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (4)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (5)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    currentState

    sim.undoUpdate()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (6)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    currentState

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (7)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (8)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    currentState

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (9)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    currentState

    sim.undoUpdate()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (10)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    currentState

    performAction(MoveDown)sim.update()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (11)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (12)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

    currentState

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (13)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

    currentState

    sim.undoUpdate()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (14)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

    currentState

    performAction(MoveLeft)sim.update()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (15)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

    currentState

    performAction(MoveLeft)sim.update()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (16)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

    currentState

    performAction(MoveLeft)sim.update()

    sim.undoUpdate()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Ejemplo: DFS recursivo (17)

    performAction(MoveRight)sim.update()

    performAction(MoveRight)sim.update()

    isGameOver()gameOverResult() == LOSE

    performAction(MoveUp)sim.update()

    performAction(MoveDown)sim.update()

    currentState

    performAction(MoveLeft)sim.update()

    sim.undoUpdate()

    sim.undoUpdate()

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Requisitos de la entrega (1)

    Implementación: Se deberá entregar un proyecto que permita compilar correctamente

    el código del algoritmo que se solicita a continuación. Así mismo, se solicita la entrega de un ejecutable de ese proyecto.

    Se deberán implementar como mínimo seis funciones de evaluación heurística distintas.

    Se considerarán distintas a dos funciones de evaluación que utilicen las mismas variables pero con cambios significativos en el peso, factor o relación entre dichas variables.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Requisitos de la entrega (2)

    Informe: Resumen del trabajo realizado, comentando brevemente el contexto

    del problema, el objetivo del trabajo y principalmente las tareas que involucró el desarrollo del mismo.

    Implementación− Código y explicación breve de cada función de evaluación heurística y

    del algoritmo minimin.− Explicación de cualquier decisión de implementación que considere

    relevante.− Explicación detallada de las heurísticas− Explicar las hipótesis bajo las cuales se basaron las heurísticas

    implementadas.− Explicar los pasos y pruebas que determinaron la forma específica de

    cada función de evaluación (variables, pesos o factores, combinación de las mismas, etc).

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Requisitos de la entrega (3) Análisis y presentación de resultados

    − Cada función de evaluación deberá ser probada con, al menos, tres valores distintos de profundidad que se consideren significativos (se deberá justificar la elección).

    − Realizar un análisis empírico de las funciones de evaluaciones, considerando métricas como tiempo de planificación, espacio de búsqueda total, calidad de la solución y cualquier otro parámetro que considere relevante.

    − Presentar de la forma más clara posible (gráficos, tablas, etc) los resultados generales y particulares de cada prueba realizada.

    − Realizar una comparación e interpretación de los resultados presentados, incluyendo una conclusión en base a las hipótesis en las cuales se basaron las evaluaciones heurísticas.

    − Incluir una explicación del comportamiento del Pacman de acuerdo a cada función de evaluación utilizada. Mencionar si este comportamiento justifica o no la hipótesis de la evaluación heurística.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Requisitos de la entrega (4) Conclusión

    − Conclusiones extraídas del trabajo.− Opinión particular y grupal del trabajo práctico especial

    (metodología de trabajo, tema, contenidos, etc).

    Importante: Si bien no se va a realizar una primera entrega, se recomienda que dos semanas después del comienzo del trabajo (semana del 16 y 18 de Noviembre) se entregue (o discuta con el ayudante asignado) un borrador que detalle de que forma van a cumplir con cada uno de los puntos requeridos en el informe.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Material Papers en fotocopiadora:

    − Heuristic Evaluation Functions in Artificial Intelligence Search Algorithms.− Artificial Intelligence Search Algorithms. (versión online)

    Presentación y enunciado. Documentación html de las clases y métodos del soporte del juego. Bibliotecas y proyecto necesario para el desarrollo del trabajo

    práctico especial (se subirá a la página antes del final de esta semana).

    Revisar habitualmente la página de la cátedra donde se notificarán de las actualizaciones que se realicen al material brindado.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Fechas Fecha y lugar de entrega

    − Martes 1 de diciembre de 2009, en el Laboratorio 1 del Pabellón de Cs. Exactas de 13hs a 16hs.

    Fecha y lugar de la defensa− A confirmar. Se publicará en el página de la cátedra en una

    fecha posterior a la entrega del trabajo.

  • LaboratorioAnálisis y Diseño de Algoritmos 2

    Federico AméndolaMartín Fernández

    Consultas: [email protected]

    Licencia creative commonsAtribución-Compartir Obras Derivadas Igual 2.5 Argentina

    http://creativecommons.org/licenses/by-sa/2.5/ar/

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72Slide 73Slide 74Slide 75Slide 76Slide 77Slide 78