Симулируйте системы нечеткого вывода в 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 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 блоком

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

См. также

Блоки

Похожие темы