Можно симулировать нечеткую систему вывода (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 к аргументам ввода и вывода evalfis
или свойства evalfisOptions
. Следующая таблица показывает параметрам блоков и портам ту карту к evalfis
аргументы.
evalfis Аргумент | Описание | Параметры блоков или порт |
---|---|---|
fis | Нечеткая система вывода | FIS name |
input , когда одна строка | Значения входной переменной | in |
output , когда одна строка | Значения выходной переменной | out |
fuzzifiedIn | Входные параметры Fuzzified | fi |
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
не поддерживает данные фиксированной точки для симуляции или генерации кода.