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

Можно моделировать нечеткую систему вывода (FIS) в Simulink® с помощью или Контроллера Контроллера или Нечеткой логики Нечеткой логики с блоками Ruleviewer. Также можно оценить нечеткие системы в командной строке с помощью evalfis.

Для получения дополнительной информации о создании нечетких систем вывода смотрите Сборку Нечеткие Системы Используя 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 имеет следующие два режима симуляции:

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

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

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

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

Параметры и порты Контроллера Нечеткой логики блок-диаграмма к аргументам ввода и вывода 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. Кроме того, различающийся Контроллер Нечеткой логики, evalfis не поддерживает данные фиксированной точки для симуляции или генерации кода.

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

Блоки

Похожие темы