
Интеллектуальные информационные системы 4 курс Попов / Кольцова АА ЛР4
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Сочинский государственный университет»
Кафедра Информационных технологий
ОТЧЁТ
по лабораторной работе № 4
«УПРАВЛЕНИЕ ОБЪЕКТАМИ НА ОСНОВЕ НЕЧЕТКИХ И ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ»
Выполнила: студентка группы 20-ПИ
Кольцова Адриана Андреевна
Дата: 11.10.2023
Проверил: д.т.н. проф. Попов Д.И.
Дата: _______________
Сочи 2023
ЗАДАНИЕ №1. «РЕШЕНИЕ ЗАДАЧ УПРАВЛЕНИЯ И НАБЛЮДЕНИЯ
МЕТОДАМИ НЕЧЕТКОЙ ЛОГИКИ»
Целью работы является ознакомление с инструментальным средством FisPro (бесплатную версию можно скачать тут - (https://www.fispro.org/en/install/install-on-windows/), а также изучение основ проектирования нечетких систем управления с помощью данного программного средства.
Пример 1. (процесс подачи тепла в зависимости от измеренного значения температуры)
Пример 2. (x и y)
Задания к работе (движение автомобиля по трассе)
Задание (контроль уровня воды в баке)
ЗАДАНИЕ № 2 «РАЗРАБОТКА ГЕНЕТИЧЕСКОГО АЛГОРИТМА
ПОИСКА ЭКСТРЕМУМА ФУНКЦИИ»
Реализовать на языке программирования программу поиска оптимума (максимума/минимума) функции F(X) на интервале [A,B] с использованием генетического алгоритма.
F(x) = sin(x)+x/3
import random
import math
import matplotlib.pyplot as plt
from deap import base, creator, tools, algorithms
# Определение функции инициализации популяции
def init_individual(icls, attr_float):
return icls([attr_float()])
# Определение переменных A и B
A = float(input("Введите значение A: "))
B = float(input("Введите значение B: "))
# Определение функции F(X)
def func_to_optimize(x):
return math.sin(x) + x / 3
# Создание инструментов DEAP
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_float", random.uniform, A, B)
toolbox.register("individual", init_individual, creator.Individual, toolbox.attr_float)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
# Определение функции оценки (фитнес-функции)
def evaluate(individual):
return (func_to_optimize(individual[0]),)
toolbox.register("evaluate", evaluate)
toolbox.register("mate", tools.cxBlend, alpha=0.5)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=0.2, indpb=0.2)
toolbox.register("select", tools.selTournament, tournsize=3)
# Настройка параметров
POP_SIZE = 50
NGEN = 100
CXPB = 0.7
MUTPB = 0.3
# Создание популяции и запуск генетического алгоритма
pop = toolbox.population(n=POP_SIZE)
fitnesses = list(map(toolbox.evaluate, pop))
for ind, fit in zip(pop, fitnesses):
ind.fitness.values = fit
logbook = tools.Logbook()
logbook.header = ["gen", "nevals"]
for gen in range(NGEN):
offspring = algorithms.varAnd(pop, toolbox, cxpb=CXPB, mutpb=MUTPB)
fitnesses = list(map(toolbox.evaluate, offspring))
for ind, fit in zip(offspring, fitnesses):
ind.fitness.values = fit
pop[:] = offspring
record = logbook.record(gen=gen, nevals=len(offspring))
print(logbook.stream)
best_ind = tools.selBest(pop, 1)[0]
print("Лучший индивид:", best_ind)
print("Лучшее значение:", best_ind.fitness.values[0])
# Отображение результатов
x = [ind[0] for ind in pop]
y = [func_to_optimize(ind[0]) for ind in pop]
plt.figure(figsize=(12, 6))
plt.plot(x, y, 'ro', markersize=5, label='Популяция')
plt.plot(best_ind[0], best_ind.fitness.values[0], 'go', markersize=8, label='Лучший индивид')
x_vals = [A + i * 0.01 for i in range(int((B - A) / 0.01))]
y_vals = [func_to_optimize(x_val) for x_val in x_vals]
plt.plot(x_vals, y_vals, 'b-', label='F(X) = sin(X) + X/3')
plt.xlabel('X')
plt.ylabel('F(X)')
plt.title('Поиск оптимума функции F(X)')
plt.legend()
plt.grid(True)
plt.show()