{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# UD02 · Notebook 1 — Control difuso con scikit-fuzzy\n", "\n", "**Requisitos**\n", "\n", "Necesitas el **contenedor de prácticas de IA** de la UD00 funcionando, o un entorno Python\n", "3.12+ con `numpy` y `scikit-fuzzy`:\n", "\n", "```bash\n", "docker compose up -d # si usas el contenedor del curso\n", "pip install scikit-fuzzy==0.5.0\n", "```\n", "\n", "**Objetivo**: construir un sistema de control difuso tipo Mamdani que decida la **velocidad de un\n", "ventilador** según la temperatura y la humedad de una sala, recorriendo las tres fases de un\n", "sistema de razonamiento impreciso — fuzzificación, evaluación de reglas y desfuzzificación (RA2-d).\n", "\n", "Es una **entrega evaluable**: se corrige con la rúbrica de su tarea en Moodle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 1 — Importa las librerías y define los universos" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%pip install scikit-fuzzy\n", "\n", "import numpy as np\n", "import skfuzzy as fuzz\n", "from skfuzzy import control as ctrl\n", "\n", "# TU CÓDIGO: define los tres Antecedent/Consequent (temperatura 0-40, humedad 0-100, velocidad 0-100)\n", "temperatura = ...\n", "humedad = ...\n", "velocidad = ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 2 — Funciones de pertenencia (términos lingüísticos)\n", "\n", "**¿Por qué trapezoidal en los extremos?**\n", "\n", "Las funciones de los extremos suelen ser trapezoidales para que «fresca» o «caliente»\n", "mantengan pertenencia plena hasta el límite del universo, y triangulares en el centro." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# TU CÓDIGO: funciones de pertenencia de las tres variables\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 3 — Reglas IF-THEN" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# TU CÓDIGO\n", "r1 = ...\n", "r2 = ...\n", "r3 = ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 4 — Sistema y simulación" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# TU CÓDIGO\n", "sistema = ...\n", "sim = ...\n", "print(...)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 5 — Visualiza las funciones de pertenencia\n", "\n", "Añade al informe una captura de la gráfica y explica qué ocurre en cada simulación." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# TU CÓDIGO\n", "velocidad.view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 6 — Experimento (respuesta razonada)\n", "\n", "Prueba estas combinaciones y anota el resultado en una tabla:\n", "\n", "| Temperatura | Humedad | Velocidad (%) | ¿Coherente? |\n", "|---|---|---|---|\n", "| 10 | 30 | | |\n", "| 25 | 50 | | |\n", "| 38 | 90 | | |\n", "| 18 | 80 | | |" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# TU CÓDIGO: calcula la velocidad para las 4 combinaciones de la tabla anterior\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**✏️ Respuesta**: copia la tabla de la Fase 6 aquí ya completada, y comenta si algún resultado te sorprende y por qué.\n", "\n", "*(escribe aquí)*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Entrega\n", "\n", "| Fase | Evidencia mínima |\n", "|---|---|\n", "| 1-2 | Las dos variables de entrada y la de salida, con sus funciones de pertenencia |\n", "| 3 | Las tres reglas IF-THEN |\n", "| 4 | Las dos simulaciones (20 ºC/50 % y 33 ºC/85 %) con su velocidad resultante |\n", "| 5 | La captura de `velocidad.view()` |\n", "| 6 | La tabla de experimentos completa, con la columna «¿Coherente?» justificada |\n", "\n", "**Soluciones**\n", "\n", "Las soluciones no se publican: se corrigen y comentan en clase." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.12" } }, "nbformat": 4, "nbformat_minor": 5 }