start
This commit is contained in:
parent
f5d003a911
commit
c8fb430e60
220
lab_7/lab7.ipynb
Normal file
220
lab_7/lab7.ipynb
Normal file
@ -0,0 +1,220 @@
|
||||
{
|
||||
"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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user