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