Можно смоделировать систему нечеткого вывода (FIS) в Simulink ® с помощью контроллера нечеткой логики или контроллера нечеткой логики с блоками Ruleviewer. Кроме того, можно вычислить нечеткие системы в командной строке с помощьюevalfis.
С помощью контроллера нечеткой логики можно моделировать традиционные системы нечеткого вывода типа 1 (mamfis и sugfis) и системы нечеткого вывода типа 2 (mamfistype2 и sugfistype2). Контроллер нечеткой логики с блоком Ruleviewer поддерживает только системы типа 1.
Дополнительные сведения о создании нечетких систем вывода см. в разделах Создание нечетких систем с использованием конструктора нечеткой логики и Создание нечетких систем в командной строке.
После внедрения системы нечеткого вывода с помощью конструктора нечеткой логики, нейро-нечеткого конструктора или в командной строке можно смоделировать систему в Simulink.
В этом примере управление уровнем воды в резервуаре осуществляется с помощью системы нечеткого вывода, реализованной с помощью блока контроллера нечеткой логики. Откройте окно sltank модель.
open_system('sltank')

Для этой системы управление водой, поступающей в резервуар, осуществляется с помощью клапана. Расход зависит от диаметра выходной трубы, который является постоянным, и давления в баке, которое изменяется с уровнем воды. Поэтому система имеет нелинейные характеристики.
Двумя входами в нечеткую систему является ошибка уровня воды, levelи скорость изменения уровня воды, rate. Выход нечеткой системы - это скорость, с которой открывается или закрывается регулирующий клапан, valve.
Для реализации системы нечеткого вывода укажите параметр имени FIS блока контроллера нечеткой логики в качестве имени объекта FIS в рабочей области MATLAB ®. В этом примере блок использует mamfis объект tank.
Дополнительные сведения об этой системе см. в разделе Управление уровнем воды в резервуаре.
В качестве первой попытки контроля уровня воды установить в FIS следующие правила. Эти правила регулируют клапан только на основании погрешности уровня воды.
Если уровень воды в норме, то не отрегулируйте клапан.
Если уровень воды низкий, откройте клапан быстро.
Если уровень воды высокий, то быстро закройте клапан.
Укажите правила, создав вектор из fisrule объекты и назначение их Rules имущества tank Объект FIS.
rule1 = "If level is okay then valve is no_change"; rule2 = "If level is low then valve is open_fast"; rule3 = "If level is high then valve is close_fast"; rules = [rule1 rule2 rule3]; tank.Rules = fisrule(rules);
Моделирование модели и просмотр уровня воды.
open_system('sltank/Comparison') sim('sltank',100)


Этих правил недостаточно для управления системой, поскольку уровень воды колеблется вокруг уставки.
Чтобы уменьшить колебания, добавьте в систему еще два правила. Эти правила регулируют клапан на основе скорости изменения уровня воды, когда уровень воды находится вблизи уставки.
Если уровень воды в норме и увеличивается, закройте клапан медленно.
Если уровень воды нормальный и понижается, откройте клапан медленно.
Чтобы добавить эти правила, используйте addRule функция.
rule4 = "If level is okay and rate is positive then valve is close_slow"; rule5 = "If level is okay and rate is negative then valve is open_slow"; newRules = [rule4 rule5]; tank = addRule(tank,newRules);
Моделирование модели.
sim('sltank',100)


Уровень воды теперь отслеживает уставку без колебаний.
Можно также моделировать нечеткие системы с помощью контроллера нечеткой логики с блоком Ruleviewer. sltankrule модель совпадает с моделью sltank модель, за исключением того, что в ней используется контроллер нечеткой логики с блоком Ruleviewer.
open_system('sltankrule')

Во время моделирования этот блок отображает средство просмотра правил из приложения Fuzzy Logic Designer.
sim('sltankrule',100)


При приостановке моделирования можно проверить поведение FIS, вручную настроив значения входных переменных в средстве просмотра правил и наблюдая за процессом вывода и выводом.
Можно также получить доступ к редакторам конструктора нечеткой логики из средства просмотра правил. Затем с помощью средства просмотра правил можно настроить параметры нечеткой системы с помощью этих редакторов и экспортировать обновленную систему в рабочую область MATLAB. Для моделирования обновленной FIS перезапустите моделирование. Дополнительные сведения об использовании этих редакторов см. в разделе Создание нечетких систем с помощью конструктора нечеткой логики.
Получить доступ к промежуточным результатам нечеткого вывода можно с помощью блока контроллера нечеткой логики. Эти данные можно использовать для визуализации процесса нечеткого вывода или устранения неполадок в работе FIS. Чтобы получить доступ к этим данным, включите соответствующие параметры в блоке и подключите сигналы к соответствующим портам вывода.
| Параметр блока | Описание | Выходной порт |
|---|---|---|
| Нечеткие входные данные | Нечеткие входные значения, полученные путем оценки входных функций членства каждого правила при текущих входных значениях. | fi |
| Сила стрельбы правила | Сила срабатывания правила, полученная путем оценки предшествующего значения каждого правила. | rfs |
| Выходные данные правила | Выходные данные правила, полученные путем оценки результата каждого правила. | ro |
| Агрегированные выходные данные | Совокупный выход для каждой выходной переменной, получаемый объединением соответствующих выходов из всех правил. | ao |
Дополнительные сведения см. в разделе Контроллер нечеткой логики.
Блок контроллера нечеткой логики имеет следующие два режима моделирования:
Interpreted execution - Моделирование нечетких систем с использованием предварительно скомпилированных файлов MEX. Использование этой опции сокращает время начальной компиляции модели.
Code generation - Моделирование нечеткой системы без предварительной компиляции файлов MEX. Эта опция используется при моделировании нечетких систем для приложений генерации кода. При этом система моделируется по тому же кодовому пути, что и созданный код.
Чтобы выбрать режим моделирования, задайте параметр «Моделирование с использованием блока». По умолчанию блок использует Interpreted execution режим моделирования.
Параметры и порты блока контроллера нечеткой логики соответствуют входным и выходным аргументам evalfis или свойства evalfisOptions. В следующей таблице показаны параметры блоков и порты, которые сопоставляются evalfis аргументы.
evalfis Аргумент | Описание | Параметр блока или порт |
|---|---|---|
fis | Система нечеткого вывода | Название FIS |
input, когда одна строка | Входные значения переменных | in |
output, когда одна строка | Выходные значения переменных | out |
fuzzifiedIn | Нечеткие входные данные | fi |
ruleOut | Выходные данные правила | ro |
aggregateOut | Агрегированные выходные данные | ao |
ruleFiring | Сила стрельбы правила | rfs |
В следующей таблице показаны параметры блока, которые сопоставляются evalfisOptions свойства.
evalfisOptions Собственность | Описание | Параметр блока или порт |
|---|---|---|
NumSamplePoints | Количество точек в выходных нечетких наборах | Количество выборок для дискретизации выходных данных |
OutOfRangeInputValueMessage | Поведение диагностического сообщения при выходе за пределы допустимого диапазона | Входное значение вне диапазона |
NoRuleFiredMessage | Поведение диагностического сообщения при отсутствии запуска правил | Правило не запущено |
EmptyOutputFuzzySetMessage | Поведение диагностического сообщения, когда выходной нечеткий набор пуст | Пустой выходной нечеткий набор |
Остальные параметры блока контроллера нечеткой логики не соответствуют аргументам evalfis. Кроме того, в отличие от блока контроллера нечеткой логики, evalfis не поддерживает данные с фиксированной точкой для моделирования или генерации кода.