{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Шаг 1: Выбор входных и выходных переменных\n", "Входные переменные:\n", "Температура (Temperature):\n", "\n", "Диапазон: от 0 до 40 градусов.\n", "\n", "Лингвистические термы: \"холодно\", \"средне\", \"жарко\".\n", "\n", "Влажность (Humidity):\n", "\n", "Диапазон: от 0 до 100%.\n", "\n", "Лингвистические термы: \"сухо\", \"нормально\", \"влажно\".\n", "\n", "Выходная переменная:\n", "Скорость вентилятора (Fan Speed):\n", "\n", "Диапазон: от 0 до 100%.\n", "\n", "Лингвистические термы: \"низкая\", \"средняя\", \"высокая\".\n", "\n", "Шаг 2: Настройка параметров лингвистических переменных\n", "Определение функций принадлежности\n", "Для каждой переменной задаются функции принадлежности, которые описывают, как входные значения соотносятся с лингвистическими термами.\n", "\n", "\"Холодно\": треугольная функция с пиком на 0 градусов.\n", "\n", "\"Средне\": треугольная функция с пиком на 20 градусов.\n", "\n", "\"Жарко\": треугольная функция с пиком на 40 градусов.\n", "\n", "Влажность:\n", "\n", "\"Сухо\": треугольная функция с пиком на 0%.\n", "\n", "\"Нормально\": треугольная функция с пиком на 50%.\n", "\n", "\"Влажно\": треугольная функция с пиком на 100%.\n", "Скорость вентилятора:\n", "\n", "\"Низкая\": треугольная функция с пиком на 0%.\n", "\n", "\"Средняя\": треугольная функция с пиком на 50%.\n", "\n", "\"Высокая\": треугольная функция с пиком на 100%." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import skfuzzy as fuzz\n", "from skfuzzy import control as ctrl\n", "\n", "# Определение диапазонов для входных и выходных переменных\n", "temp_range = np.arange(0, 41, 1)\n", "humidity_range = np.arange(0, 101, 1)\n", "fan_speed_range = np.arange(0, 101, 1)\n", "\n", "# Определение лингвистических переменных\n", "temperature = ctrl.Antecedent(temp_range, 'temperature')\n", "humidity = ctrl.Antecedent(humidity_range, 'humidity')\n", "fan_speed = ctrl.Consequent(fan_speed_range, 'fan_speed')\n", "\n", "# Определение функций принадлежности для температуры\n", "temperature['cold'] = fuzz.trimf(temperature.universe, [0, 0, 20])\n", "temperature['medium'] = fuzz.trimf(temperature.universe, [10, 20, 30])\n", "temperature['hot'] = fuzz.trimf(temperature.universe, [20, 40, 40])\n", "\n", "# Определение функций принадлежности для влажности\n", "humidity['dry'] = fuzz.trimf(humidity.universe, [0, 0, 50])\n", "humidity['normal'] = fuzz.trimf(humidity.universe, [30, 50, 70])\n", "humidity['wet'] = fuzz.trimf(humidity.universe, [50, 100, 100])\n", "\n", "# Определение функций принадлежности для скорости вентилятора\n", "fan_speed['low'] = fuzz.trimf(fan_speed.universe, [0, 0, 50])\n", "fan_speed['medium'] = fuzz.trimf(fan_speed.universe, [30, 50, 70])\n", "fan_speed['high'] = fuzz.trimf(fan_speed.universe, [50, 100, 100])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Шаг 3: Формирование базы нечетких правил\n", "Правила:\n", "Если температура \"холодно\" и влажность \"сухо\", то скорость вентилятора \"низкая\".\n", "\n", "Если температура \"средне\" и влажность \"нормально\", то скорость вентилятора \"средняя\".\n", "\n", "Если температура \"жарко\" и влажность \"влажно\", то скорость вентилятора \"высокая\"." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Создание правил\n", "rule1 = ctrl.Rule(temperature['cold'] & humidity['dry'], fan_speed['low'])\n", "rule2 = ctrl.Rule(temperature['medium'] & humidity['normal'], fan_speed['medium'])\n", "rule3 = ctrl.Rule(temperature['hot'] & humidity['wet'], fan_speed['high'])\n", "\n", "# Создание системы управления\n", "fan_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])\n", "fan_speed_simulation = ctrl.ControlSystemSimulation(fan_ctrl)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Шаг 5: Оценка качества модели" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "39.83800623052959\n", "60.16199376947047\n", "81.42857142857139\n" ] } ], "source": [ "# Пример 1: Температура 15, Влажность 40\n", "fan_speed_simulation.input['temperature'] = 15\n", "fan_speed_simulation.input['humidity'] = 40\n", "fan_speed_simulation.compute()\n", "print(fan_speed_simulation.output['fan_speed'])\n", "\n", "# Пример 2: Температура 25, Влажность 60\n", "fan_speed_simulation.input['temperature'] = 25\n", "fan_speed_simulation.input['humidity'] = 60\n", "fan_speed_simulation.compute()\n", "print(fan_speed_simulation.output['fan_speed'])\n", "\n", "# Пример 3: Температура 35, Влажность 80\n", "fan_speed_simulation.input['temperature'] = 35\n", "fan_speed_simulation.input['humidity'] = 80\n", "fan_speed_simulation.compute()\n", "print(fan_speed_simulation.output['fan_speed'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Анализ результатов:\n", "Пример 1 (Температура = 15, Влажность = 40):\n", "\n", "Результат: 39.84.\n", "\n", "Интерпретация: Температура ближе к \"холодно\", влажность ближе к \"сухо\". Скорость вентилятора ближе к \"низкой\", что логично.\n", "\n", "Пример 2 (Температура = 25, Влажность = 60):\n", "\n", "Результат: 60.16.\n", "\n", "Интерпретация: Температура ближе к \"средне\", влажность ближе к \"нормально\". Скорость вентилятора ближе к \"средней\", что соответствует ожиданиям.\n", "\n", "Пример 3 (Температура = 35, Влажность = 80):\n", "\n", "Результат: 81.43.\n", "\n", "Интерпретация: Температура ближе к \"жарко\", влажность ближе к \"влажно\". Скорость вентилятора ближе к \"высокой\", что логично.\n", "\n", "Выводы:\n", "Модель работает корректно и выдает ожидаемые результаты.\n", "\n", "Результаты соответствуют заданным правилам и логике системы.\n", "\n", "Для улучшения модели можно:\n", "\n", "Добавить больше термов для входных переменных (например, \"очень холодно\", \"очень жарко\").\n", "\n", "Уточнить функции принадлежности.\n", "\n", "Добавить больше правил для учета промежуточных состояний." ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.5" } }, "nbformat": 4, "nbformat_minor": 2 }