Можно симулировать систему нечеткого вывода (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 name блока 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 с блоком Ruleviewer. The sltankrule
модель такая же, как и sltank
модель, кроме того, что она использует Fuzzy Logic Controller с блоком 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 | Нечеткие входные значения, полученные путем оценки входа функций принадлежности каждого правила при текущих входах значениях. | 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 | Нечеткие входы | 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
не поддерживает данные с фиксированной точкой для симуляции или генерации кода.