Симулируйте нечеткие системы вывода в Simulink

Можно симулировать нечеткую систему вывода (FIS) в Simulink® с помощью или Fuzzy Logic Controller или блоков Fuzzy Logic Controller with Ruleviewer. В качестве альтернативы можно оценить нечеткие системы в командной строке с помощью evalfis.

Используя Fuzzy Logic Controller, можно симулировать традиционный тип 1 нечеткие системы вывода (mamfis и sugfis) и тип 2 нечеткие системы вывода (mamfistype2 и sugfistype2). Блок Fuzzy Logic Controller with Ruleviewer поддерживает только системы типа 1.

Для получения дополнительной информации о создании нечетких систем вывода смотрите Сборку Нечеткие Системы Используя Fuzzy Logic Designer и Сборку Нечеткие Системы в Командной строке.

Симулируйте нечеткую систему вывода

Если вы реализовали нечеткую систему вывода с помощью Fuzzy Logic Designer, с помощью Neuro-Fuzzy Designer, или в командной строке, можно симулировать систему в Simulink.

В данном примере вы управляете уровнем воды в баке с помощью реализованного использования системы нечеткого вывода блока Fuzzy Logic Controller. Откройте sltank модель.

open_system('sltank')

Для этой системы вы управляете водой, которая течет в бак с помощью клапана. Уровень оттока зависит от диаметра выходного трубопровода, который является постоянным, и давление в баке, который меняется в зависимости от уровня воды. Поэтому система имеет нелинейные характеристики.

Два входных параметров к нечеткой системе являются ошибкой уровня воды, level, и скорость изменения уровня воды, rate. Выход нечеткой системы является уровнем, на котором распределительный клапан открывается или закрывается, valve.

Чтобы реализовать нечеткую систему вывода, задайте параметр имени FIS блока Fuzzy Logic Controller как имя объекта 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)

Уровень воды теперь отслеживает заданное значение без колебания.

Можно также симулировать нечеткие системы с помощью блока Fuzzy Logic Controller with Ruleviewer. sltankrule модель совпадает с sltank модель, за исключением того, что это использует блок Fuzzy Logic Controller with Ruleviewer.

open_system('sltankrule')

В процессе моделирования этот блок отображает Средство просмотра Правила из приложения Fuzzy Logic Designer.

sim('sltankrule',100)

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

Можно также получить доступ к редакторам Fuzzy Logic Designer от Средства просмотра Правила. От Средства просмотра Правила можно затем настроить параметры нечеткой системы с помощью этих редакторов и экспортировать обновленную систему в рабочее пространство MATLAB. Чтобы симулировать обновленный FIS, перезапустите симуляцию. Для получения дополнительной информации об использовании этих редакторов смотрите Сборку Нечеткие Системы Используя Fuzzy Logic Designer.

Доступ к промежуточным нечетким результатам вывода

Можно получить доступ к промежуточным нечетким результатам вывода с помощью блока Fuzzy Logic Controller. Можно использовать эти данные, чтобы визуализировать нечеткий процесс вывода или диагностировать производительность FIS. Чтобы получить доступ к этим данным, включите соответствующие параметры в блоке и сигналы подключения к соответствующим выходным портам.

Параметры блоков ОписаниеВыходной порт
Fuzzified InputsВходные значения Fuzzified, полученные путем оценки входных функций принадлежности каждого правила в текущих входных значениях.fi
Rule firing strengthsУправляйте сильными местами увольнения, полученными путем оценки антецедента каждого правила.rfs
Rule outputsУправляйте выходными параметрами, полученными путем оценки следствия каждого правила.ro
Aggregated outputsСовокупный выход для каждой выходной переменной, полученной путем объединения соответствующих выходных параметров от всех правил.ao

Для получения дополнительной информации смотрите Fuzzy Logic Controller.

Режимы симуляции

Блок Fuzzy Logic Controller имеет следующие два режима симуляции:

  • Interpreted execution — Симулируйте нечеткие системы с помощью предварительно скомпилированных файлов MEX. Используя эту опцию уменьшает начальное время компиляции модели.

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

Чтобы выбрать режим симуляции, установите параметр Simulate using блока. По умолчанию блок использует Interpreted execution режим для симуляции.

Сопоставьте функциональность командной строки с блоком Fuzzy Logic Controller

Параметры и порты блок-диаграммы Fuzzy Logic Controller к аргументам ввода и вывода evalfis или свойства evalfisOptions. Следующая таблица показывает параметрам блоков и портам ту карту к evalfis аргументы.

evalfis АргументОписаниеПараметры блоков или порт
fisНечеткая система выводаFIS name
input, когда одна строкаЗначения входной переменнойin
output, когда одна строкаЗначения выходной переменнойout
fuzzifiedInВходные параметры Fuzzifiedfi
ruleOutУправляйте выходными параметрамиro
aggregateOutАгрегированные выходные параметрыao
ruleFiringУправляйте сильными местами увольненияrfs

Следующая таблица показывает параметрам блоков ту карту evalfisOptions свойства.

evalfisOptions СвойствоОписаниеПараметры блоков или порт
NumSamplePointsЧисло точек в выходных нечетких множествахNumber of samples for output discretization
OutOfRangeInputValueMessageДиагностическое поведение сообщения, когда вход вне области значенийOut of range input value
NoRuleFiredMessageДиагностическое поведение сообщения, когда никакие правила не стреляютNo rule fired
EmptyOutputFuzzySetMessageДиагностическое поведение сообщения, когда выходное нечеткое множество пустоEmpty output fuzzy set

Остающиеся параметры блока Fuzzy Logic Controller не сопоставляют с аргументами evalfis. Кроме того, различающийся блок Fuzzy Logic Controller, evalfis не поддерживает данные фиксированной точки для симуляции или генерации кода.

Смотрите также

Блоки

Похожие темы