Git Product home page Git Product logo

tarea04-busquedas-informadas's Introduction

Tarea 4: Búsquedas Informadas

Objetivos

  1. Desarrollar el algoritmo de búsqueda A*
  2. Aplicar el algoritmo A* en un entorno y con diferentes heurísticas
  3. A partir de una descripción, ser capaz de formalizar un problema de búsqueda (lights-outs)
  4. Desarrollar la habilidad y creatividad para definir heurísticas no triviales.
  5. Poder analizar, así sea informalmente, la admisibilidad de una heurística.
  6. Comparar heurísticas no triviales.

De forma paralela, en esta tarea se desarrolla el uso de la herencia en el desarrollo orientado a objetos en python, y se utiliza en forma intensiva a las funciones como pasajeros de primera clase. Igualmente, para este problema, los estudiantes manejarán estructuras de datos más complejas como los Deque, los heapq, tablas hash y conjuntos (como estructura de datos).

Instrucciones:

  1. En el archivo busquedas.py se encuentra la clase abstracta Problema (para búsquedas), la clase Nodo, para la estructura de datos que nos ayudará en la búsqueda, así como ls 4 búsquedas no informadas más utilizadas: BFS, DFS, IDS y UCS. Estas búsquedas las vimos en clase y no vamos a repetir. En clase se dio un ejemplo de el uso de dichas búsquedas para el problema de los dos recipientes. Revisa y familiarizate con dichas clases y funciones. Si es necesario desarrolla un problema pequeñito para que las pruebes (el problema de los misioneros y los canibales es un ejemplo fácil de programar y fácil de aplicar).

  2. En el mismo archivo, en la parte final, se encuentra el encabezado para desarrollar la función de búsqueda utilizando el algoritmo A*. Recuerda que en general estamos haciendo la búsqueda en grafos con el fin de reducir el número de estados explorados. Con el fin que pruebes si el algortimo que desarrollaste funciona, en el archivo ocho_puzzle.py se encuentra programado y funcionando el problema del ocho puzzle, así como las dos heurísicas vistas en clase. Con el fin de comparar resultados, se presenta la solucion de 3 problemas (3 estados iniciales diferentes) con ambas heurísticas y con la búsqueda de costo uniforme. Puedes cambiar esto y experimentar, hasta que estes seguro que tu algoritmo es eficiente.

  3. En el archivo lightsout.py se encuentra un nuevo reto, el juego (rompecabezas, puzzle o solitario, como se le quiera llamar) de Lights Out. La idea y operación básica de este juego se puede ver en Wikipedia, y no se detallan en las instrucciones. Desarrolla el problema del juego de Lights Out, definiendo los métodos de acciones_legales, sucesor, costo_local y modificando el método __init__. Puedes inspirarte en el ocho puzzle.

  4. Si bien existe una solución analítica (un algoritmo) para cualquier posición inicial del juego, a nosotros nos interesa utilizarlo como pretexto para desarrollar un método de búsqueda. Propón una huerística para el problema, especifica porque consideras que es admisible, y programala en la función h_1.

  5. Ahora propon una segunda heurística (proponer una puede ser algo dificil, pero dos ya implica creatividad). Argumenta porque crees que es admisible esta heurística.

  6. Ejecuta el programa y revisa las soluciones con ambas heurísticas, y sobre esto, determina si hay una que parece dominante sobre la otra, y porqué.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.