Автор работы: Пользователь скрыл имя, 12 Декабря 2013 в 16:42, курсовая работа
Целью курсовой работы является изучить нечеткую логику.
Для достижения данной цели были поставлены следующие задачи:
изучить литературу по данной теме;
рассмотреть исторические аспекты нечеткой логики;
определить плюсы и минусы нечетких систем;
охарактеризовать математический аппарат нечеткого множества;
Введение
История развития нечеткой логики
Нечеткая логика: достоинства и недостатки
Нечеткие множества
Методы построения функций принадлежности нечетких множеств
Операции над нечеткими множествами
Свойства
Нечеткая и лингвистическая переменные
Нечеткое моделирование в среде MATLAB
FuzzyTECH
Моделирование работы светофора
Пример программы, выполненной в MATLAB
Автономный мобильный робот (АМР)
Заключение
Список использованной литературы
Все действия над нечеткими числами задаются минимальным набором функций и происходят внутри программы. Таким образом, пользователю необязательно изучать все тонкости теории нечетких множеств, достаточно только определить все входные и выходные переменные и задать таблицу правил, а всю оставшуюся "грязную" работу сделает Matlab. Дефаззификация осуществляется одним из пяти методов, указанных программистом. Кроме того, можно вывести на экран согласно введенным правилам результирующие поверхности управления в зависимости от комбинации входов, схему получившейся нечеткой программы и это лишь малая часть всех возможностей данного тулбокса. Одним словом, работа в этой среде доставляет сплошное удовольствие.
И, наконец, для разработки приложений на базе нечеткой логики и нейросистем для задач автоматического управления компаниями INFORM Gmbh и Inform Software Corp. был разработан довольно мощный пакет программ, получивший название fuzzy TECH. Этот пакет программ является средством моделирования и оптимизации проектов создания нечетких систем управления на базе микроконтроллеров, он также является генератором ассемблерного кода, поддерживающим большое количество современного оборудования.
Основными шагами разработки программ на FuzzyTECH являются:
Демо-версия данной программы устанавливается с их сервера через интернет.
Вместо предисловия:
Идея нечеткого светофора была позаимствована
с сайта Томского Политеха. Судя по стилю
изложения - там был не совсем качественный
перевод некоего зарубежного источника,
поэтому решено было провести моделирование
подобного устройства собственными силами.
ЦЕЛЬ:
Исследование возможностей светофора с нечеткой логикой, установленного на перекрестке, при различных интенсивностях потоков автомашин и сравнение его работы с обычным светофором.
ПОСТАНОВКА:
В обычном светофоре время работы зеленого и красного света, а также время цикла фиксированы. Это создает некоторые трудности в движении машин, особенно, при изменении их потоков в часы пик, что довольно часто приводит к появлению автомобильных пробок.
В предлагаемом нечетком светофоре время цикла остается постоянным, однако, время его работы в режиме зеленого света должно меняться в зависимости от количества подъезжающих к перекрестку машин.
Пусть время цикла традиционного и нечеткого светофоров будет одинаковым и равным 1мин.=60сек. Длительность зеленого света обычного светофора зададим 30сек., тогда красный свет будет гореть тоже 30сек.
Для работы нечеткого светофора на перекрестке улиц Север-Юг (СЮ) и Запад-Восток (ЗВ) необходимо установить 8 датчиков (рис.12), которые считают проехавшие мимо них машины.
Светофор использует разности показаний четырех пар датчиков: (Д1-Д2), (Д3-Д4), (Д5-Д6) и (Д7-Д8). Таким образом, если для улицы СЮ горит зеленый свет, машины проезжают перекресток и показания двух пар датчиков равны: Д1=Д2, Д5=Д6, а, следовательно, их разность равна нулю. В это же время на улице ЗВ перед светофором останавливаются машины, которые успели проехать только Д4 и Д7. В результате можно рассчитать суммарное количество автомобилей на этой улице следующим образом:
(Д4-Д3)+(Д7-Д8)=(Д4-0)+(Д7-0)=
Для сравнения работы обоих светофоров введем показатель эффективности, в качестве которого будем рассматривать число машин, не проехавших перекресток за один цикл светофора.
Данную задачу можно сравнить с системой массового обслуживания (СМО), по двум каналам которой поступают заявки на обслуживание в виде автомашин. Показатель эффективности в этом случае число заявок, получивших отказ.
Для решения поставленной задачи используется пакет Matlab, т.к. он имеет в своем составе fuzzy-приложение, необходимое для моделирования работы нечеткого светофора.
Более подробно рассмотрим проектирование нечеткой подпрограммы. Здесь однозначно должны быть определены все входы и выходы.
Поскольку работа светофора зависит от числа машин на обеих улицах и текущего времени зеленого света, для нашей подпрограммы предлагается использовать 3 входа: число машин на улице СЮ по окончанию очередного цикла, число машин на улице ЗВ по окончанию цикла и время зеленого света нечеткого светофора.
Теперь для каждой переменной надо задать лингвистические термы, соответствующие некоторым диапазонам четких значений. Так, для переменной время зеленого света предлагается использовать три терма (рис.13):
Степень принадлежности четких значений термам задается с помощью функций принадлежности (в нашем случае эти функции имеют форму трапеции).
Аналогично, термы для двух оставшихся переменных будут (рис.14):
Функции принадлежности здесь также имеют форму трапеции.
Так как суть работы светофора состоит в изменении времени зеленого света, в качестве выходного параметра предлагается использовать величину этого изменения. Термы в этом случае будут следующие (рис.15):
Функции принадлежности имеют форму Гаусса.
Кроме того, в подпрограмму записывается таблица правил на основе условных высказываний, которая формирует выходное значение исходя из величин входных параметров, например:
Если (число машин на улице СЮ=малое)&(число машин на улице ЗВ=большое)&(время зеленого света на улице СЮ=большое), то (время зеленого света=уменьшить).
Результаты моделирования работы светофора с нечеткой логикой
Основная программа работает следующим образом: с помощью встроенного в Matlab генератора случайных чисел происходит генерирование числа машин за один цикл светофора для улиц СЮ и ЗВ.
Часть машин из этого числа
успевает проехать на зеленый свет,
остальные останавливаются
За показатель эффективности данной системы принимается среднее число не обслуженных заявок за заданное количество циклов светофора. Соответственно, чем меньшее значение имеет показатель эффективности, тем большее количество машин пропускает светофор.
Число циклов светофора не должно быть слишком малым, т.к. в этом случае не получается объективной информации, или слишком большим, т.к. программа будет очень долго вычислять требуемую величину. Рекомендуемое количество циклов - 100.
Таким образом, алгоритм программы следующий: на светофор с датчиков поступает информация о количестве автомобилей на двух улицах. Эти данные переводятся в нечеткий формат согласно заданным функциям принадлежности, далее, внутри подпрограммы происходит их обработка, полученное значение изменения времени зеленого света дефаззифицируется (т.е. переводится обратно в четкий формат) и поступает в виде управляющего сигнала на светофор. В соответствии с этим сигналом время зеленого света светофора в следующем цикле будет другим.
Результат вычислений представлен в виде графика на рис.16.
Таким образом, подводя итоги,
можно сказать, что нечеткая логика
в некоторых простейших случаях
позволяет улучшить качество управления
объектами, причем решающую роль в оптимизации
показателей эффективности
Важнейшим недостатком нечеткой логики является отсутствие единого метода моделирования систем, т.е. для каждого случая приходится заново проектировать нечеткую подпрограмму, определяя шаг за шагом все параметры и строя свою таблицу решений.
Пример программы с нечеткой логикой, выполненной в MATLAB
Здесь представлена подпрограмма, реализующая нечеткий алгоритм, которую вызывает основная программа перед каждым циклом работы светофора. Все комментарии представлены после знака %.
function tzel=svetofor1(vrz,y1,y2);
% В качестве входных
параметров здесь выступают:
% vrz - время зеленого света светофора на
текущем такте его работы
% y1 - число машин, подъехавших к перекрестку
на улице Север-Юг
% y2 - число машин, подъехавших к перекрестку
на улице Запад-Восток
r=newfis('svetofor');
% создание новой нечеткой
системы
% под названием svetofor
r=addvar(r,'input','время зеленого света',[10
50]);
% создание новой входной
переменной в нечеткой системе,
% [10, 50] - диапазон значений переменной
в секундах.
r=addmf(r,'input',1,'малое','
r=addmf(r,'input',1,'среднее',
r=addmf(r,'input',1,'большое',
% задание трапециоидных
(trapmf) функций принадлежности для
% переменной "время зеленого света
свуетофора".
r=addvar(r,'input','улица Север-Юг',[0
90]);
% создание второй
входной переменной
% под названием "улица Север-Юг"
r=addmf(r,'input',2,'очень малое','trapmf',[0
0 12 18]);
r=addmf(r,'input',2,'малое','
r=addmf(r,'input',2,'среднее',
r=addmf(r,'input',2,'большое',
r=addmf(r,'input',2,'очень большое','trapmf',[72 78 90 90]);
r=addvar(r,'input','улица Запад-Восток',[0
90]);
r=addmf(r,'input',3,'очень малое','trapmf',[0 0 12 18]);
r=addmf(r,'input',3,'малое','
r=addmf(r,'input',3,'среднее',
r=addmf(r,'input',3,'большое',
r=addmf(r,'input',3,'очень большое','trapmf',[72 78 90
90]);
r=addvar(r,'output','время зел.света
на улице СЮ',[-20 20]);
% задание единственной
(в нашем случае)
% выходной переменной, определяющей
% изменение работы светофора "в зеленом
режиме"
% в следующем цикле.
r=addmf(r,'output',1,'
r=addmf(r,'output',1,'не изменять','gaussmf',[7 0]);
r=addmf(r,'output',1,'
% для этой переменной
задаются
% функции принадлежности вида Гаусса
list=[
% задание таблицы
правил
1 1 1 1 1 1
1 1 2 1 1 1
1 1 3 1 1 1
1 1 4 2 1 1
1 1 5 2 1 1
1 2 1 1 1 1
1 2 2 1 1 1
1 2 3 1 1 1
1 2 4 2 1 1
1 2 5 2 1 1
1 3 1 1 1 1
1 3 2 1 1 1
1 3 3 1 1 1
1 3 4 1 1 1
1 3 5 2 1 1
1 4 1 1 1 1
1 4 2 1 1 1
1 4 3 1 1 1
1 4 4 1 1 1
1 4 5 1 1 1
1 5 1 1 1 1
1 5 2 1 1 1
1 5 3 1 1 1
1 5 4 1 1 1
1 5 5 1 1 1
2 1 1 2 1 1
2 1 2 2 1 1
2 1 3 3 1 1
2 1 4 3 1 1
2 1 5 3 1 1
2 2 1 1 1 1
2 2 2 2 1 1
2 2 3 3 1 1
2 2 4 3 1 1
2 2 5 3 1 1
2 3 1 1 1 1
2 3 2 1 1 1
2 3 3 2 1 1
2 3 4 3 1 1
2 3 5 3 1 1
2 4 1 1 1 1
2 4 2 1 1 1
2 4 3 1 1 1
2 4 4 2 1 1
2 4 5 3 1 1
2 5 1 1 1 1
2 5 2 1 1 1
2 5 3 1 1 1
2 5 4 1 1 1
2 5 5 2 1 1
3 1 1 3 1 1
3 1 2 3 1 1
3 1 3 3 1 1
3 1 4 3 1 1
3 1 5 3 1 1
3 2 1 3 1 1
3 2 2 3 1 1
3 2 3 3 1 1
3 2 4 3 1 1
3 2 5 3 1 1
3 3 1 2 1 1
3 3 2 3 1 1
3 3 3 3 1 1
3 3 4 3 1 1
3 3 5 3 1 1
3 4 1 2 1 1
3 4 2 2 1 1
3 4 3 2 1 1
3 4 4 3 1 1
3 4 5 3 1 1
3 5 1 2 1 1
3 5 2 2 1 1
3 5 3 2 1 1
3 5 4 3 1 1
3 5 5 3 1 1];