Práctica

Modelando el Laberinto

Formalización Computacional de un Problema de Búsqueda

Modelando el laberinto

En el campo de la Inteligencia Artificial, antes de que un agente virtual pueda encontrar la solución óptima a un problema, necesita comprender las reglas fundamentales de su entorno. La definición formal de un problema de búsqueda actúa como el puente necesario entre una situación del mundo real (como encontrar la salida de un edificio) y la lógica de un algoritmo.

En esta práctica, el estudiante asume el rol de un ingeniero de datos e IA que debe modelar las reglas matemáticas de un mapa de cuadrícula, sentando las bases lógicas necesarias para que posteriormente un agente inteligente pueda navegarlo de forma autónoma.

Objetivo general:

El estudiante logrará identificar, estructurar e implementar a nivel de código los cinco componentes matemáticos que definen un problema de búsqueda clásica en IA (estado inicial, acciones legales, modelo de transición, prueba de meta y costo de ruta), preparando el terreno para la futura aplicación de algoritmos de búsqueda ciega.

Materiales o recursos necesarios:

  • Computadora personal o de laboratorio con acceso a internet.
  • Entorno de desarrollo integrado (IDE) compatible con Python (ej. Visual Studio Code, PyCharm, o un entorno web como Google Colab).
  • Cuaderno de apuntes para el trazado matricial.

Generación de Insumos Prácticos:

A continuación, se provee el script de Python entorno_busqueda.py que contiene el esqueleto conceptual del problema. El estudiante utilizará este código base para completar la lógica de la formalización.

Instrucciones paso a paso:

  1. Analizar el entorno de estado: El estudiante debe leer detenidamente el método __init__ del código provisto para comprender el sistema de coordenadas matriciales empleado (donde la esquina superior izquierda es la coordenada 0,0) y la ubicación de los obstáculos.
  2. Configurar la prueba de meta: El estudiante procederá a completar la función prueba_meta. Se debe comparar el parámetro de estado ingresado con la variable que define el final del recorrido y retornar un valor booleano. Esto es crucial para que los futuros algoritmos sepan cuándo detenerse.
  3. Delimitar las acciones legales: Se programará el método acciones. El estudiante tendrá que codificar validaciones matemáticas que aseguren que un movimiento propuesto no es menor a 0 ni mayor o igual a filas_max o cols_max. Adicionalmente, deberá verificar que la casilla destino contenga un 0 y no un 1 (obstáculo).
  4. Desarrollar el modelo de transición: El estudiante deberá completar el método modelo_transicion, traduciendo cada comando textual (ej. "ARRIBA") en una operación matemática concreta sobre las coordenadas de fila y columna (ej. restar 1 a la fila).
  5. Ejecutar pruebas unitarias manuales: El estudiante habilitará la zona de pruebas al final del script y verificará los resultados en consola pasando diversos estados de prueba, como esquinas o casillas adyacentes a obstáculos, para certificar la robustez del modelo.

Recomendaciones:

  1. Esbozar la matriz del mapa provisto utilizando papel cuadriculado antes de escribir ninguna línea de código. Esto facilita visualizar los límites reales (0 a 4).
  2. Recordar enfáticamente que en la programación matricial (listas anidadas en Python), el primer índice controla las filas (movimiento vertical “Y”) y el segundo controla las columnas (movimiento horizontal “X”).
  3. Utilizar las sentencias condicionales (if) de manera estructurada y secuencial al validar los cuatro posibles bordes del laberinto.
  4. Comprobar de manera obligatoria los estados “extremos”, insertando coordenadas de prueba como (0,0), (4,4) o adyacentes al muro central (1,1).
  5. Comentar claramente el código; esto resulta de vital importancia para repasar los conceptos antes de una evaluación teórica sobre representación de espacios de estados.

Posible problema y solución rápida:

  • Problema habitual: La terminal muestra un error del tipo IndexError: list index out of range al ejecutar las pruebas manuales.
  • Solución técnica: Esto ocurre cuando el estudiante intenta evaluar si existe un obstáculo en una casilla (ej. self.mapa[estado_siguiente_fila][estado_siguiente_columna] == 1) sin haber validado primero que esas coordenadas existen dentro de los límites matemáticos del mapa. La solución radica en estructurar los condicionales de modo que primero se asegure que 0 <= fila_nueva < filas_max, y solo si esto es True, proceder a leer el índice en la lista mapa.

Leave a Reply

Your email address will not be published. Required fields are marked *