Моделирование и прогнозирование педагогических процессов и явлений с помощью модуля Fuzzy Logic Toolbox

Одной из наиболее распространенных систем нечеткого моделирования и прогнозирования является модуль Fuzzy Logic Toolbox в среде матричной лаборатории MatLab.

Для быстроты освоения этого программного продукта сначала рассмотрим пример, который не связан с педагогикой. Для этого используем систему компьютерной математики MatLab версии 8.1.0.604 (релиз R2013a) с пакетом Fuzzy Logic Toolbox версии 2.2.17. На момент написания книги она была последней, причем все, что будем рассматриваться ниже, справедливо и для предшествующих версий системы MatLab 5.3, 6.0, 7.0.

Создадим систему нечеткого вывода па основе алгоритма Мам- дани и Сугено для такой задачи.

Пример 1.2

Смоделировать зависимость функции у = xf cos х? в области значений, где X/ принадлежит интервалу [-10, 5], а х?из интервала 1-6. 2].

Решение

Модуль Fuzzy Logic Toolbox разрешает работать в двух режимах: в режиме командной строки и в режиме графического интерфейса. Покажем работу этой системы с помощью набора программного кода в командной строке. Для этого откроем программу MatLab и в поле Команды Windows введем такой код:

%>График функции у = xlA2*cos(x2)

%в границах области опредкеления.х! е [-10, 5],х2 е [-6.0, 2.0]. п = 15; %количество точек для расчета xl = linspace(-10, 5, п); х2 = linspace(-6, 2, п); у = zeros Oh п); forj = 1 :п

y(j,:) - xl.A(2) *cos(x2(j)); end

surf(xl, x2, у)

xlabel('x_l); ylabel('xj); zlabel('y'); tit/еСПоверхность линейной зависимости')

Нажмем клавишу Enter - на экране появится графическое изображение этой зависимости (рис. 1.13).

Поверхности на рис. 1.13 поставим в соответствие такие семь нечетких правил:

  • 1. ЕСЛИ х, = «Низкий» И х2 = «Низкий», ТО у = «Высокий»;
  • 2. ЕСЛИ X] = «Низкий» И = «Средний», ТО .у = «Низкий»;
  • 3. ЕСЛИ X] = «Низкий» И х2 = «Высокий», ТО .у = «Высокий»;
  • 4. ЕСЛИ л'/ = «Средний», ТО у = «Средний»;
  • 5. ЕСЛИ Xj = «Высокий» И х2 = «Низкий», ТО у = «Выше среднего»;
  • 6. ЕСЛИ .V/ = «Высокий» И х2 = «Средний», ТО .у = «Ниже среднего»;
  • 7. ЕСЛИ xj = «Высокий» И х2 = «Высокий», ТО у = «Выше среднего».
  • ? ----
Общий вид окна программы MatLab с программным кодом и построенной фигурой

Рис. 1.13. Общий вид окна программы MatLab с программным кодом и построенной фигурой

А теперь распишем шаги работы в модуле Fuzzy Logic Toolbox в режиме графического интерфейса для алгоритма Мамдани.

1. Откроем окно редактора общих свойств системы нечеткого вывода (Fuzzy Inference System Editor - FiS-редактор). Загрузить FiS- редактор можно, напечатав слово fuzzy в командной строке или через вкладку MATLAB Coder в разделе CONTROL SYSTEM DESIGN AND

ANALYSI необходимо запустить редактор, воспользовавшись клавишей Fuzzy Logic Design (рис. 1.14).

Окно FiS-редактора с объяснением элементов управления

Рис. 1.14. Окно FiS-редактора с объяснением элементов управления

  • 2. Добавим вторую входную переменную. Для этого в меню Edit выбираем команду Add Variable —> Input.
  • 3. Нажав левой кнопкой мыши па блоке inputI, откроем окно редактирования, в котором переименуем первую входную переменную. Для этого введем новое обозначение х1 в поле редактирования имени текущей переменной и нажмем клавишу Enter. Обратите внимание, если теперь сделать где-нибудь (вне блоков редактора) однократный нажим мыши, то имя обозначенного блока изменится на xl.
  • 4. Переименуем вторую входную переменную. Для этого щелкнем мышкой на блоке input2, введем новое обозначение х2 в поле редактирования имени текущей переменной и нажмем клавишу Enter.
  • 5. Переименуем выходную переменную. Для этого щелкнем мышкой на блоке outputl, введем новое обозначение у в поле редактирования имени текущей переменной и нажмем клавишу Enter.
  • 6. Присвоим повое имя разрабатываемой системе. Для этого в меню File выберем в подменю Export команду То File и введем повое имя файла, например, proba.
  • 7. Сделаем двойной нажим левой кнопкой мыши па блоке х! и перейдем в редактор функций принадлежности. Зададим диапазон определения переменной xl, напечатав -10 5 в поле Range (Диапазон). Обратите внимание, что после этого состоится соответствующее изменение диапазона в поле Display Range (Диапазон дисплея) (рис. 1.15).
Функция принадлежности переменной xl в Membership

Рис. 1.15. Функция принадлежности переменной xl в Membership

Function Editor

8. Для лингвистической оценки переменной xl будем использовать три терма с треугольными функциями принадлежности. Эти функции установлены по умолчанию, поэтому переходим к следующему шагу. Заметим, что иногда для успешного решения поставленной задачи необходимо, чтобы ординаты максимумов функций совпадали с заданными значениями аргумента х. Если такое условие не выполнено, то функции можно «передвинуть» вдоль оси абсцисс.

Смещение выполняется очень просто: подводится курсор к необходимой кривой и щелкают левой кнопкой мыши. Кривая выделяется, окрашиваясь в красный цвет, после чего с помощью курсора ее уже можно перетянуть в нужную сторону (более точную установку можно провести, изменяя числовые значения в поле Params (Параметры) - в данном случае каждой функции принадлежности отвечают три параметра, при этом первый и третий определяют размах кривой, а второй - положение ее центра).

  • 9. Зададим наименования термов переменной xl. Для этого щелкнем мышкой по графику первой функции принадлежности (см. рис. 1.15). График активной функции принадлежности выделяется красной жирной линией. Потом введем наименования терма Низкий в поле Name (Имя) и нажмем клавишу Enter. Щелкнем мышкой по графику второй функции принадлежности, введем наименования терма Средней в поле Name и нажмем клавишу Enter. Щелкнем мышкой по графику третьей функции принадлежности, введем наименования терма Высокий в поле Name и нажмем клавишу Enter. В результате получим графическое окно, которое изображено на рис. 1.15.
  • 10. Точно так же зададим функции принадлежности переменной х2. Нажмем мышкой на блоке х2, тем самим активизируем эту переменную. Зададим диапазон определения переменной х2, для этого напишем -6 2 в поле Range (рис. 1.16) и нажмем клавишу Enter. Для лингвистической оценки этой переменной будем использовать три терма с треугольными функциями принадлежности. Они установлены по умолчанию, поэтому переходим к следующему шагу.
  • 11. По аналогии с шагом 9 зададим такие наименования термов переменной х2: Низкий, Средний, Высокий. В результате получим графическое окно, которое изображено на рис. 1.16.
  • 12. Для лингвистической оценки функции принадлежности переменной у будем использовать пять термов из гауссовыми функциями принадлежности. Для этого нажмем мышкой па блоке у и активизируем эту переменную. Зададим диапазон определения переменной у. Для этого введем значения -50 50 в поле Range (см. рис. 1.18) и нажмем клавишу Enter. Потом в меню Edit выберем команду Remove АП MFs для очищения установленных по умолчанию функций принадлежности. После этого в меню Edit выберем команду Add MFs... В диалоговом окне, которое появилось, (рис. 1.17) выберем тип функции принадлежности gaussm/в поле MF type и пять термов в поле Number of MFs. После нажатия клавиши ОК редактор активизирует первую входную переменную, поэтому для продолжения работы щелкнем мышкой по пиктограмме
Функция принадлежности переменной х2 в Membership

Рис. 1.16. Функция принадлежности переменной х2 в Membership

Function Editor

Окно для выбора функций принадлежности

Рис. 1.17. Окно для выбора функций принадлежности

13. По аналогии с шагом 9 зададим такие наименования термов переменной у: Низкий, Ниже среднего, Средний, Выше среднего, Высокий. В результате получим графическое окно, которое изображено на рис. 1.18.

Функция принадлежности переменной у в Membership

Рис. 1.18. Функция принадлежности переменной у в Membership

Function Editor

  • 14. Перейдем в окно редактора базы знаний RuleEditor. Для этого в меню Edit выберем команду Rules... Для введения правила выбираем в меню соответствующую комбинацию термов и нажимаем кнопку Add rule. На рис. 1.19 изображено окно редактора базы знаний после введения всех семы правил. В конце правил в скобках указаны их весовые коэффициенты.
  • 15. Пересохраним созданную систему. Для этого в меню File выберем в подменю Export команду То file.

На рис. 1.20 приведено окно визуализации нечеткого вывода. Окно можно активизировать через меню View командой Rules (View Rules - Просмотр правил). В поле Input указываются значение входных переменных, для которых выполняется нечеткий логический вывод.

Красную вертикальную черточку, которая пересекает графики в левой части окна, можно передвигать с помощью курсора, это позволяет изменять значения переменной входа (это же можно сделать, задавая числовые значения в поле Input (Вход)), при этом соответственно меняются значение переменной у в правой части окна.

Нечеткая база знаний для алгоритма Мамдани в Rule Editor

Рис. 1.19. Нечеткая база знаний для алгоритма Мамдани в Rule Editor

Визуализация нечеткого вывода по алгоритму Мамдани

Рис. 1.20. Визуализация нечеткого вывода по алгоритму Мамдани

в Rule Viewer

Зададим, например, xl = -5, х2 = -3 в поле Input и нажмем клавишу Enter. Значение у сразу изменится и будет равняться -3.58 (рис. 1.21). Таким образом, с помощью построенной модели и окна просмотра правил можно решать задачи прогнозирования в виде интерполяции. Изменение аргумента путем перемещения красной вертикальной линии очень наглядно демонстрирует, как система определяет значение исходной функции.

Изменения значений входных переменных xl и х2 приводят к изменению значения выходной переменной^

Рис. 1.21. Изменения значений входных переменных xl и х2 приводят к изменению значения выходной переменной^

На рис. 1.22 показана поверхность «Входы - Выход», которая отвечает разработанной нами нечеткой системе на основе алгоритма Мамдани. Окно выводится через меню View по команде Surface (View Surface - Просмотр поверхности).

Сравнивая поверхности на рис. 1.13 и на рис. 1.22, можно сделать вывод, что нечеткие правила с использованием алгоритма Мамдани довольно точно описывают особенности нелинейной зависимости, которая моделируется.

А теперь для этой же функции у = х2 cos х?, где х/е[-10, 5] и х2е[-6.0, 2.0] создадим систему нечеткого вывода, но теперь уже на основе алгоритма Сугено.

Поверхность «Входы - Выходы» для базы знаний по алгоритму Мамдани в Surface Viewer

Рис. 1.22. Поверхность «Входы - Выходы» для базы знаний по алгоритму Мамдани в Surface Viewer

Образуем новую базу знаний. Теперь поверхности на рис. 1.13 поставим в соответствие такие шесть нечетких правил:

  • 1. ЕСЛИ л:/ = «Низкий» И х2 = «Низкий», ТО у = 50;
  • 2. ЕСЛИ X/ = «Низкий» И х2 = «Средний», ТО у = 4х) - х2;
  • 3. ЕСЛИ X/ = «Низкий» И х2 = «Высокий», ТО у = 50;
  • 4. ЕСЛИ X/ = «Средний», ТО,)» = 0;
  • 5. ЕСЛИ л:/ = «Высокий» И х2 = «Низкий», ТО у =г2 - 3;
  • 6. ЕСЛИ X/ = «Высокий» И х2 = «Высокий», ТО у = 2х| + 2х2 + 1.

Выполним те же шаги, которые применялись для алгоритма Мамдани, но на первом шаге выберем другой тип системы. Для этого в меню File выбираем в подменю New FI... алгоритм Sugeno.

На шестом шаге зададим другое имя системы. Для этого в меню File выберем в подменю Export команду То File и введем название файла, например, proba2.

На двенадцатом шаге выполним операции по-иному. Для того чтобы задать вывод правил, нажмем мышкой на блоке f(u) и активизируем переменную у. В окне output variable "у" появилось обозначение трех функций принадлежности, любая из которых отвечает одной линейной зависимости между входами и выходом. В базе знаний Сугено указаны пять разных зависимостей. Поэтому прибавим еще два вывода правил, выбрав в меню Edit команду Add Mfs... Потом в диалоговом окне, которое появилось, в поле Number ofMFs выберем число 2 и нажмем кнопку (Ж.

На этом же шаге зададим наименования и параметры линейных зависимостей. Для этого щелкнем мышкой по наименованию первого вывода mfl. Потом в поле Name напишем наименования зависимости, например, 50, и установим тип зависимости - константа через опцию Constant в меню Туре. После этого введем значения параметра 50 в поле Params (рис. 1.23).

Введение значений первого вывода для функции принадлежности

Рис. 1.23. Введение значений первого вывода для функции принадлежности

Аналогично, для второго вывода mJ2 введем наименования, например, 4x1-х2, укажем линейный тип зависимости «Входы - Выход» через опцию Linear в меню Туре и введем параметры зависимости 4 -1 О в поле Params. Для линейной зависимости порядок параметров такой: первый параметр - коэффициент при первой переменной, второй - при второй и т.д., и последний параметр - свободный член зависимости.

Для третьего вывода т/З введем наименования, например, О, укажем тип зависимости - константа и введем параметр 0.

Для четвертого вывода т/4 введем наименования, например, 2x1-2x2-3, укажем линейный тип зависимости и введем параметры 2 -2 -3.

Для пятого вывода т[5 введем наименования, например, 2х1+2х2+1, укажем линейный тип зависимости и введем параметры 2 2

1. В результате получим графическое окно, которое изображено на рис. 1.24.

Вывод для алгоритма Сугено в Membership Function Editor

Рис. 1.24. Вывод для алгоритма Сугено в Membership Function Editor

Шаг тринадцатый не выполняется.

На четырнадцатом шаге, создадим базу знаний так, как это показан на рис. 1.25.

Нечеткая база знаний для алгоритма Сугено в Rule Editor

Рис. 1.25. Нечеткая база знаний для алгоритма Сугено в Rule Editor

Визуализация нечеткого вывода по алгоритму Сугено

Рис. 1.26. Визуализация нечеткого вывода по алгоритму Сугено

в Rule Viewer

На рис. 1.26 показано окно визуализации нечеткого вывода для алгоритма Сугено.

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

Сравнивая поверхности на рис. 1.13, рис. 1.22 и рис. 1.27, можно сделать вывод, что оба нечеткие правила (и по алгоритму Мамдаии, и по Сугено) довольно хорошо описывают сложную нелинейную зависимость, хотя прогноз, полученный па основе алгоритма Мамдаии, более точно отражает зависимость, которая моделируется. Но это выходит не всегда, иногда, подобрав довольно правильно вывод правил в алгоритме Сугено, можно добиться более точного результата.

Поверхность «Входы - Выходы» для базы знаний по алгоритму Сугено в Surface Viewer

Рис. 1.27. Поверхность «Входы - Выходы» для базы знаний по алгоритму Сугено в Surface Viewer

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

Упражнения

  • 1. Постройте графическую поверхность для математической функции у = х2 cos х2 в области значений, где Xje[-10, 5], х2е[-6.0, 2.0].
  • 2. Используя алгоритм Мамдани, постройте графическую поверхность для следующих правил:
  • 1. ЕСЛИ xi = «Низкий» И х2 = «Низкий», ТО у = «Высокий»;
  • 2. ЕСЛИ х1 = «Низкий» И х2 - «Средний», ТО у = «Низкий»;
  • 3. ЕСЛИ х1 = «Низкий» И х2 = «Высокий», ТО у = «Высокий»;
  • 4. ЕСЛИ x-i = «Средний», ТО у = «Средний»;
  • 5. ЕСЛИ x-i = «Высокий» И х2 = «Низкий», ТО у = «Выше среднего»;
  • 6. ЕСЛИ Xi = «Высокий» И х2 = «Средний», ТО у = «Ниже среднего»;
  • 7. ЕСЛИ х1 = «Высокий» И х2 = «Высокий», ТО у = «Выше среднего».
  • 3. Для выше названных правил, используя алгоритм Сугено, постройте графическую поверхность и сравните ее с поверхностями математической функции (см. задание 1) и результатом работы по алгоритму Мамдани (см. задание 2). Сделайте выводы.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >