Разработка системы нечеткого вывода

Лабораторная работа №3.

Введение

Нечеткий логический вывод – это процесс формирования нечетких заключений о выходном сигнале на основе нечетких условий для входных сигналов с помощью нечеткой базы правил и логических операций над нечеткими множествами.

Нечеткий логический вывод занимает центральное место в нечеткой логике и системах нечеткого управления. В процессе нечеткого вывода выходное значение системы рассчитывается на основе набора правил в виде логического анализа утверждений. При построении системы нечеткого вывода производится переход от параметров системы к логическим утверждениям как для входных, так и для выходных величин.

В данной лабораторной работе будет разработана система нечеткого вывода для моделирования нелинейной зависимости.

Основные теоретические сведения о системах нечеткого вывода

В теории нечетких множеств, помимо переменных численного типа, существуют лингвистические переменные с приписываемым им значениями. Множество всех возможных значений, которые может принимать лингвистическая переменная, называется терм-множеством. Каждый нечеткий терм определяется функцией принадлежности, характеризующей соответствующее терму нечеткое множество. Например, пусть переменная x обозначает температуру (x = «температура»). Для данной лингвистической переменной можно определить нечеткие множества «холодная», «нормальная», «горячая», характеризуемые функциями принадлежности μхолодная(x), μнорм(x), μгорячая(x).

Нечеткие правила вывода

Базовое правило вывода типа «если-то» называется нечеткой импликацией, принимающей форму:
где A и B – это лингвистические значения, определенные через функции принадлежности соответственно для x и y. Выражение «x – это A» называется условием (предпосылкой), а «y – это B» называется следствием (заключением).
Нечеткое рассуждение – это процедура, которая позволяет определить заключение из множества правил «если-то». Такое множество может принять вид:
Значение функции принадлежности μA(x), где x = [x1, x2, …, xN] – входной вектор, должно интерпретироваться с использованием нечетких операций и их композиций. Самые распространенные интерпретации имеют следующие формы:
  • форма логического произведения множеств, «И»:
  • форма логической суммы множеств, «ИЛИ»:

Приписывание единственного значения функции принадлежности, описывающей многомерное условие, называется агрегированием предпосылки. Каждой импликации A → B, определенной выражением, можно приписать единственное значение функции принадлежности μA → B(x, y).

Системы нечеткого вывода

Элементы теории нечетких множеств, правила импликации и нечетких рассуждений образуют систему нечеткого вывода. В общем случае система нечеткого логического вывода включает следующие этапы:
  1. Приведение к нечеткости, или фазификация – преобразование точного множества входных величин в нечеткое множество, определяемое с помощью значений функций принадлежности μA(x), соответствующих лингвистическим термам.
  2. Нечеткий логический вывод:
    1. Агрегация – определение степени истинности всех предпосылок в каждом правиле. Агрегация необходима, если в правилах больше одной предпосылки.
    2. Активация – вычисленное значение истинности для всех предпосылок каждого правила применяется к заключениям каждого правила. Это приводит к нечетким множествам, которые будут назначены каждой переменной вывода для каждого правила. На этапе активации происходит обращение к нечеткой базе правил.
  3. Аккумуляция – получение нечеткого множества для каждой из выходной переменной путем объединения нечетких множеств, полученных для каждой переменной вывода.
  4. Приведение к четкости, или дефазификация – преобразование нечеткого множества, определяемого функцией принадлежности μB(y), в конкретное значение выходной переменной y.
Описанная система нечеткого вывода называется системой типа Мамдани, ее структура представлена на рисунке (Рисунок 1).

Рисунок 1. Структура нечеткой системы с фазификатором и дефазификатором.

Цель работы:

Задачи работы:

Выполнение лабораторной работы

Содержание лабораторной работы

В данной лабораторной работе необходимо разработать систему нечеткого вывода для моделирования нелинейной зависимости вида:

в области x ∈ [0, 1], y ∈ [0, 1], где x, y – входные переменные, z – выходная переменная.

Для этого необходимо выполнить следующие шаги:
  • построить трехмерный график заданной функции;
  • сформироватьнечеткие правила, соответствующие зависимости выходной переменной от входных по построенному графику заданной функции;
  • разработать модель системы нечеткого вывода типа Мамдани;
  • построить трехмерный график зависимости выходной переменной от входных переменных нечеткой системы.

Разработка модели для построения трехмерного графика заданной зависимости

Для создания нового проекта необходимо выполнить следующие действия:
  1. В главном окне SimInTech нажать левой кнопкой мыши на кнопку «Файл» и выбрать пункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида».
  3. Сохранить проект, оставив имя по умолчанию или указать желаемое имя проекта.
Для разработки модели для построения трехмерного графика заданной функции необходимо в рабочую область окна проекта добавить следующие блоки:
  • 1 блок «Язык программирования» из вкладки «Динамические» – с помощью данного блока будет моделироваться заданная зависимость;
  • 1 блок «Трехмерный график» из вкладки «Вывод данных» – с помощью данного блока будет производиться графическое отображение трехмерного графика заданной зависимости.
Разместить блоки на схеме согласно рисунку (Рисунок 2).

Рисунок 2. Окно проекта с установленными блоками.

Необходимо реализовать модель для расчета значений заданной функции
в области x ∈ [0, 1], y ∈ [0, 1]. Для этого требуется двойным нажатием левой кнопкой мыши по блоку «Язык программирования» открыть окно редактора и записать текст скрипта согласно рисунку (Рисунок 3). После ввода всего текста скрипта нажать на кнопку «Закрыть и применить» для принятия изменений в блоке «Язык программирования» и закрытия окна редактора.

Рисунок 3. Окно редактора блока «Язык программирования».

После закрытия окна текстового редактора блока «Язык программирования» вид блока в окне проекта изменится: входного порта не будет, увеличится количество портов выхода и изменятся подписи к портам согласно заданным в начале скрипта переменным. Необходимо увеличить размер блока «Язык программирования». Для изменения размера блока необходимо открыть окно «Свойства» блока «Язык программирования», в открывшемся окне во вкладке «Общие» в поле «Значение» задать значение свойства «Высота» равным «48» (Рисунок 4).

Рисунок 4. Окно «Свойства» блока «Язык программирования» с выделенным свойством, которое необходимо изменить.

После закрытия окна и сохранения свойств размер блока «Язык программирования» изменится согласно рисунку (Рисунок 5).

Рисунок 5. Окно проекта с измененным размером блока «Язык программирования».

После этого требуется соединить блоки линиями связи согласно рисунку (Рисунок 6).

Рисунок 6. Окно проекта с блоками, соединенными линиями связи.

Далее необходимо подготовить оформление окна, в котором будет отображаться трехмерный график. Для этого:
  1. Двойным нажатием левой кнопки мыши по блоку «Трехмерный график» вызвать окно «Трехмерный график». Нажать правой кнопкой мыши по окну «Трехмерный график» и выбрать пункт «Свойства». Во вкладке «График» в выпадающем списке «Способ представления данных» выбрать «Мгновенный от 2-х векторов X(i), Y(j) и матрицы Z(i, j)», задать значение свойства «Толщина линии» равным «1» и выбрать вкладку «Поверхность» (Рисунок 7).

    Рисунок 7. Окно «Свойства графика» блока «Трехмерный график» с выделенными свойствами, которые необходимо изменить.

  2. На вкладке «Общие» отключить свойство «Показывать легенду» (Рисунок 8).

    Рисунок 8. Окно «Свойства графика» блока «Трехмерный график», вкладка «Общие», с выделенным свойством, которое необходимо изменить.

Сохранить изменения и закрыть окно нажатием кнопки «Ok».

Запуск моделирования и построение графика

После настройки проекта для построения трехмерного графика заданной зависимости необходимо запустить процесс моделирования и дождаться окончания расчета. График должен выглядеть аналогично рисунку (Рисунок 9).

Рисунок 9. Трехмерный график заданной зависимости.

Разработка модели для построения трехмерного графика заданной нелинейной зависимости завершена, требуется сохранить проект.

Формирование правил нечеткого логического вывода

Перед разработкой модели системы нечеткого вывода необходимо задать терм-множества для каждой переменной и на основе полученного графика зависимости (Рисунок 9) сформировать нечеткие правила вывода.

Требуется задать терм-множества для каждой входной переменной и функции принадлежности, определяющие эти нечеткие множества. Для входных лингвистических переменных «х» и «y» терм-множества будут иметь следующие значения:
  1. низкий,
  2. средний,
  3. высокий.
Для составления базы правил также необходимо задать терм-множество и, для дефазификации, соответствующие функции принадлежности для выходной переменной. Выходная лингвистическая переменная «z» будет иметь следующие термы:
  1. низкий,
  2. средний,
  3. высокий.

Функции принадлежности, определяющие нечеткие множества для входных переменных будут задаваться как функции принадлежности Гаусса, но, в отличие от Лабораторной работы №1, три функции принадлежности будут задаваться с помощью одного блока фазифакации, а не в трех отдельных блоках функций принадлежности. Функции принадлежности для выходной переменной будут задаваться как треугольные также с помощью одного блока дефазификации (нечеткого вывода).

База правил, необходимая для построения нечеткого логического вывода для моделирования зависимости в соответствии с построенным графиком функции (Рисунок 9) и заданными терм-множествами, имеет следующий вид:
  1. ЕСЛИ «х» = «низкий» И «y» = «низкий», ТО «z» = «низкий»;
  2. ЕСЛИ «х» = «средний» И «y» = «средний», ТО «z» = «средний»;
  3. ЕСЛИ «х» = «высокий» И «y» = «высокий», ТО «z» = «высокий».

Разработка модели системы нечеткого вывода

На основе заданных правил необходимо реализовать систему нечеткого вывода. Разработку модели системы нечеткого вывода необходимо выполнить в новом проекте. Для создания нового проекта необходимо:
  1. В главном окне SimInTech нажать левой кнопкой мыши на кнопку «Файл» и выбрать пункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида».
  3. Сохранить проект, оставив имя по умолчанию или указать желаемое имя проекта.
Необходимо поместить в рабочую область окна проекта следующие блоки:
  • 1 блок «Часы» из вкладки «Источники», 1 блок «Усилитель» из вкладки «Операторы», 1 блок «Язык программирования» из вкладки «Динамические» – с помощью данных блоков будет формироваться входное воздействие;
  • 2 блока «Демультиплексор» из вкладки «Векторные» – данные блоки позволяют разделить векторный входной сигнал на отдельные выходные сигналы;
  • 1 блок «Мультиплексор» из вкладки «Векторные» – данный блок обеспечивает поочередную передачу на один выходной порт нескольких входных сигналов;
  • 2 блока «Фазификация Гаусса» из подменю «Фазификация» вкладки «Нечеткая логика» – данные блоки предназначены для фазификации входных сигналов, то есть для преобразования точных множеств входных величин в нечеткие множества, определяемые с помощью значений функций принадлежности μA(x), μA(y), соответствующих заданным лингвистическим термам;
  • 3 блока «И (конъюнкция)» из подменю «Операции» вкладки «Нечеткая логика» – данные блоки предназначены для формирования механизма вывода на основе заданной базы правил;
  • 1 блок «Треугольная функция» из подменю «Нечеткий вывод» вкладки «Нечеткая логика» – данный блок предназначен для дефазификации выходной переменной, то есть для преобразования нечеткого множества, определяемого функцией принадлежности μB(z), в конкретное значение выходной переменной «z»;
  • 1 блок «Трехмерный график» из вкладки «Вывод данных» – с помощью данного блока будет производиться графическое отображение результатов работы системы нечеткого вывода.
Разместить блоки на схеме и задать подписи к блокам согласно рисунку (Рисунок 10).

Рисунок 10. Рабочая область проекта с установленными блоками и заданными подписями.

Перед соединением блоков необходимо изменить количество портов блоков «Язык программирования», «Демультиплексор» и «Мультиплексор».

С помощью блока «Язык программирования» будут формироваться два входных воздействия таким образом, чтобы значения покрывали всю заданную область x ∈ [0, 1], y ∈ [0, 1], соответственно, блок «Язык программирования» должен иметь два выходных порта.

Перед изменением скрипта блока «Язык программирования» необходимо задать вектор, на основе которого будут формироваться воздействия на систему. Вектор должен содержать 26 значений, равномерно распределенных в диапазоне от 0 до 1 включительно. Для формирования вектора необходимо открыть скрипт проекта, для этого необходимо нажатием левой кнопкой мыши на кнопку «Скрипт», открыть окно редактора «Скрипт страницы» (Рисунок 11).

Рисунок 11. Рабочая область проекта с выделенной кнопкой «Скрипт».

В открывшемся окне «Скрипт страницы» записать текст скрипта соглано рисунку (Рисунок 12). После записи всего текста скрипта нажать кнопку «Закрыть и применить» для сохранения изменений и закрытия окна редактора.

Рисунок 12. Окно «Скрипт страницы».

Далее необходимо двойным нажатием левой кнопкой мыши по блоку «Язык программирования» открыть окно редактора и записать текст скрипта для формирования входных воздействий согласно рисунку (Рисунок 13). После ввода всего текста скрипта нажать на кнопку «Закрыть и применить» для принятия изменений в блоке «Язык программирования» и закрытия окна редактора.

Рисунок 13. Окно редактора блока «Язык программирования».

После закрытия окна текстового редактора блока «Язык программирования» названия портов блока изменятся согласно заданным в скрипте переменным. Поскольку подписи портов перекрываются, необходимо изменить размеры блока согласно рисунку (Рисунок 14).

Рисунок 14. Окно проекта с измененным размером блока «Язык программирования».

Далее требуется изменить количество выходных и входных портов блоков «Демультиплексор» и «Мультиплексор» в соответствии с заданным количеством термов. Номера выходных и входных портов будут соответствовать заданным лингвистическим термам. Так, первому выходному порту верхнего блока «Демультиплексор» будет соответствовать лингвистический терм «низкий» переменной «x», а третьему входному порту блока «Мультиплексор» – терм «высокий» переменной «z».

Для изменения количества портов необходимо открыть окно «Свойства» одного из блоков «Демультиплексор» и задать значение свойства согласно рисунку (Рисунок 15). Блок «Демультиплексор» предназначен для разделения векторного входного сигнала на три отдельных выходных сигнала.

Рисунок 15. Окно «Свойства» блока «Демультиплексор».

После закрытия окна и сохранения свойств появится третий выходной порт блока «Демультиплексор». Необходимо повторить действие для второго блока «Демультиплексор».

Для изменения количества входных портов блока «Мультиплексор» необходимо открыть окно «Свойства» блока «Мультиплексор» и задать значение свойства «Количество портов» равным «3». Блок «Мультиплексор» предназначен для поочередной передачи на один выходной порт трех входных сигналов. После закрытия окна и сохранения свойств у блока «Мультиплексор» будет три входных порта.

После подготовки блоков необходимо соединить блоки линиями связи в соответствии с заданной базой правил согласно рисунку (Рисунок 16):
  1. ЕСЛИ «х» = «низкий» И «y» = «низкий», ТО «z» = «низкий»;
  2. ЕСЛИ «х» = «средний» И «y» = «средний», ТО «z» = «средний»;
  3. ЕСЛИ «х» = «высокий» И «y» = «высокий», ТО «z» = «высокий».

    Рисунок 16. Окно проекта с соединенными блоками.

Теперь схема соответствует заданной базе правил.

После соединения блоков необходимо задать свойства, определяющие функции принадлежности нечетких множеств, соответствующих входным и выходным переменным, то есть задать свойства фазификаторов и дефазификатора. Для этого необходимо открыть окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «x» и задать значения свойств согласно рисунку (Рисунок 17).

Рисунок 17. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «x».

Необходимо повторить действие для блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «y».

После этого необходимо открыть окно «Свойства» блока «НЛ – Нечеткий вывод – Треугольная функция» и задать значения свойств согласно рисунку (Рисунок 18).

Рисунок 18. Окно «Свойства» блока «НЛ – Нечеткий вывод – Треугольная функция».

Для того чтобы в блоке «Язык программирования» номер текущего шага являлся целочисленной величиной, необходимо увеличить входной сигнал в 1000 раз (значение, обратное размеру шага интегрирования), задав соответствующий коэффициент усиления. Для этого необходимо открыть окно «Свойства» блока «Усилитель» и задать значение свойства «Коэффициент усиления» равным «1000».

Далее необходимо подготовить оформление окна, в котором будет отображаться трехмерный график. Для этого:
  1. Открыть окно «Свойства графика» блока «Трехмерный график». Во вкладке «График» задать значение свойства «Толщина линии» равным «1» и выбрать вкладку «Поверхность» (Рисунок 19).

    Рисунок 19. Окно «Свойства графика» блока «Трехмерный график» с выделенными свойствами, которые необходимо изменить.

  2. На вкладке «Общие» в поле «Заголовок» задать название графика «Поверхность» и отключить свойство «Показывать легенду».

Сохранить изменения и закрыть окно нажатием кнопки «Ok».

Настройка параметров расчета

После настройки схемы, перед началом моделирования, необходимо настроить параметры расчета. Для этого в окне проекта на панели кнопок нажать левой кнопкой мыши на кнопку «Параметры расчета» (Рисунок 20).

Рисунок 20. Окно проекта с выделенной кнопкой «Параметры расчета».

В открывшемся окне «Параметры проекта» во вкладке «Параметры расчета» в поле «Значение» задать значения параметра «Конечное время расчета» согласно рисунку (Рисунок 21).

Рисунок 21. Окно «Параметры проекта» с выделенным параметром, который необходимо изменить.

Закрыть окно «Параметры расчета», при этом внесенные изменения сохраняются.

Запуск моделирования и построение графика

После настройки проекта для построения трехмерного графика зависимости выходного значения нечеткой системы от входных воздействий необходимо запустить процесс моделирования и дождаться окончания расчета. График должен выглядеть аналогично рисунку (Рисунок 22).

Рисунок 22. Трехмерный график полученной зависимости.

Полученный график качественно соответствует графику, построенному для функции, заданной по аналитическому представлению (Рисунок 9), что позволяет сделать вывод о хорошем качестве описания нечеткими правилами моделируемой нелинейной зависимости. Повышение качества описания зависимости нечеткими правилами возможно добиться добавлением правил нечеткого логического вывода и при необходимости дополнением терм-множеств как для входных, так и для выходной переменных, например, термами «ниже среднего» и «выше среднего».

Заключение

В ходе данной лабораторной работы была разработана модель для описания нелинейной зависимости с помощью правил нечеткого логического вывода. В результате исследования были построены графики нелинейной функции и ее аппроксимации системой нечеткого вывода. В результате сравнения полученных графиков установлено, что графики качественно совпадают, что показывает хорошее качество описания нечеткими правилами моделируемой нелинейной зависимости.