Temas evaluados:
- Módulo 15: Búsqueda Adversarial
- Módulo 16: Planificación Clásica
Entrega los notebooks de los módulos 15 y 16 (20 puntos por módulo):
- Módulo 15 — Búsqueda Adversarial (20 pts): notebooks del módulo
- Módulo 16 — Planificación Clásica (20 pts): notebooks del módulo
Opciones de entrega (elige una):
- Pull Request + Canvas: Sube tu trabajo en un pull request al repositorio del curso y pega el enlace en la tarea de Canvas.
- Canvas directo: Sube los archivos
.ipynbdirectamente en la tarea de Canvas.
Planificación Clásica
“A goal without a plan is just a wish.” — Antoine de Saint-Exupéry
En los módulos 13 y 14 resolvimos problemas donde un agente busca un camino en un grafo dado: los nodos y las aristas ya existen. En el módulo 15 el grafo seguía dado, pero un oponente controlaba la mitad de las decisiones. En este módulo el grafo no existe de antemano — el agente lo construye sobre la marcha, describiendo estados como conjuntos de proposiciones y generando transiciones con esquemas de acción (STRIPS). El resultado es sorprendente: el algoritmo de búsqueda es exactamente el GENERIC-SEARCH del módulo 13, con solo tres líneas diferentes.
Contenido
| Sección | Tema | Idea clave |
|---|---|---|
| 16.1 | ¿Qué es planificar? | Búsqueda vs planificación, grafo implícito, Blocks World |
| 16.2 | STRIPS | Proposiciones, acciones (pre/add/delete), espacio de estados |
| 16.3 | Búsqueda hacia adelante | Forward search = generic search + STRIPS, traza completa |
| 16.4 | Heurísticas para planificación | Relajación: ignorar listas delete, conexión con A* |
| 16.5 | Búsqueda hacia atrás | Regresión, subobjetivos, forward vs backward |
Materiales y flujo de trabajo
| Paso | Material | Colab | Descripción |
|---|---|---|---|
| 1 | 16.1 ¿Qué es planificar? | — | Grafo implícito, analogía con mudanza, Blocks World |
| 2 | 16.2 STRIPS | — | Proposiciones, acciones, espacio de estados completo |
| 3 | Notebook 01 — STRIPS y estados | Representar estados y acciones en Python, generar espacio de estados | |
| 4 | 16.3 Búsqueda hacia adelante | — | Forward search, traza BFS completa en Blocks World |
| 5 | 16.4 Heurísticas | — | Relajación, conexión con A* |
| 6 | 16.5 Búsqueda hacia atrás | — | Regresión, subobjetivos, forward vs backward |
| 7 | Notebook 02 — Planificación forward y backward | Implementar BFS y A* forward, backward planner, comparar | |
| 8 | Notebook de aplicación | — | Dominio logístico: camiones, paquetes, ciudades |
Notebook de aplicación
| Notebook | Tema | Colab |
|---|---|---|
| 03 — Logística | Mismo framework STRIPS en un dominio diferente: camiones, paquetes, ubicaciones |
Objetivos de aprendizaje
Al terminar este módulo podrás:
- Distinguir búsqueda (grafo explícito) de planificación (grafo implícito generado por acciones) y explicar por qué la planificación necesita un lenguaje de representación
- Representar un problema de planificación en STRIPS: estados como conjuntos de proposiciones, acciones con precondiciones, lista add y lista delete
- Aplicar una acción STRIPS a un estado: verificar precondiciones, eliminar proposiciones de la lista delete, agregar proposiciones de la lista add
- Implementar búsqueda hacia adelante (forward search) y reconocer que es
GENERIC-SEARCHdel módulo 13 con tres sustituciones - Trazar la ejecución de BFS en un problema de Blocks World paso a paso, mostrando frontera, explorados y plan encontrado
- Explicar la heurística de relajación (ignorar listas delete) y por qué es admisible
- Conectar la planificación con A* del módulo 14: forward search + heurística relajada = planificador FF
- Definir acciones relevantes y consistentes, aplicar la fórmula de regresión, y trazar la búsqueda hacia atrás
- Comparar forward vs backward search: cuándo conviene cada dirección según el factor de ramificación
Prerrequisitos
| Concepto | Módulo |
|---|---|
| Algoritmo genérico de búsqueda, BFS, DFS, frontera, conjunto explorado | 13 — Búsqueda Simple |
| Heurísticas $h(n)$, admisibilidad, relajación de problemas, A* | 14 — Búsqueda Informada |
Mapa conceptual
graph TD
A["Módulo 13: GENERIC-SEARCH"] --> B["Forward Planning: mismo algoritmo, 3 líneas cambian"]
A --> I["Backward Planning: GENERIC-SEARCH con regresión"]
C["Módulo 14: Relajación → h(n)"] --> D["Ignorar Delete Lists → heurística admisible"]
E["Módulo 14: A*"] --> F["Forward Planning + A* = planificador FF"]
B --> G["Blocks World: 13 estados, traza completa"]
I --> J["Subobjetivos, acciones relevantes, regresión"]
D --> F
G --> H["Escalar a dominios grandes: logística, robótica"]
J --> H
F --> H
Cómo ejecutar el script de imágenes
cd clase/16_planificacion_clasica
python3 lab_planificacion.py
Dependencias: numpy, matplotlib (ver requirements.txt).