fistree

Сеть связанных нечетких систем вывода

Описание

Используйте fistree объект представлять дерево взаимосвязанных нечетких систем вывода.

Создание

Описание

пример

fisTree = fistree(fis,connections) создает сеть взаимосвязанных нечетких системных объектов вывода, устанавливая его FIS и Connections свойства

fisTree = fistree(___,Name,Value) устанавливает Name или DisableStructuralChecks свойство дерева FIS с помощью аргументов name-value. Задайте эти аргументы после того, как аргументы описали в предыдущем синтаксисе. Например, fistree(__,'Name',"mytree") определяет имя дерева FIS к "mytree". Можно задать оба свойства с помощью двух аргументов name-value.

Свойства

развернуть все

Имя дерева FIS в виде строки или вектора символов.

Это свойство доступно только для чтения.

Нечеткие системы вывода в виде массива объектов FIS. Можно задать любую комбинацию mamfis, sugfis, mamfistype2, и sugfistype2 объекты. Каждая нечеткая система вывода в fis массив должен иметь по крайней мере один вход и один выход для fistree конструкция. Оценивать a fistree, каждая нечеткая система вывода должна иметь по крайней мере одно правило.

Связи между нечеткими системами вывода в виде массива строк 2D столбца. Каждая строка представляет связь между двумя объектами FIS. Можно задать два типа связей.

  1. Связи выхода к входу — Задают связь от выхода одного FIS к входу различного FIS.

  2. Связи от входа к входу — Задают связь между двумя входными параметрами так, чтобы они использовали то же входное значение.

Чтобы задать связь, задайте имя FIS и имя переменной для обоих источник место назначения связи. Например, ["fisFrom/out1" "fisTo/in1"] задает связь от выхода out1 из fisFrom FIS к входу in1 из fisTo FIS.

Следующая фигура демонстрирует различные типы подключения с помощью трех объектов FIS, fis1, fis2, и fis3.

The outputs of fis1 and fis2 are both connected to the inputs of fis3. input2 of fis1 is connected to input1 of fis2.

Это дерево FIS включает следующие связи.

  • ["fis1/output1" "fis3/input1"] — Связь от выхода output1 из fis1 к входу input1 из fis3

  • ["fis2/output1" "fis3/input2"] — Связь от выхода output1 из fis2 к входу input2 из fis3

  • ["fis1/input2" "fis2/input1"] — Связь от входа input2 из fis1 к входу input1 из fis2

Связи должны удовлетворить следующим условиям:

  1. fistree объект должен иметь по крайней мере один вход FIS без любой входящей связи и одного FIS выход без любой исходящей связи.

  2. Вход FIS не может иметь больше чем одной входящей связи.

  3. FIS выход может иметь больше чем одну исходящую связь.

  4. Ввод и вывод того же FIS не может быть соединен. Другими словами, вы не можете создать циклы между связанными объектами FIS.

  5. Симметричные связи между двумя входными параметрами не поддерживаются, Например, ["fis1/a" "fis2/b";"fis2/b" "fis1/a"] не поддерживается. Вместо этого задайте ["fis1/a" "fis2/b"] или ["fis2/b" "fis1/a"].

  6. Самовведите циклы, такие как ["fis1/a" "fis1/a"], не поддерживаются.

Это свойство доступно только для чтения.

Входные параметры к дереву FIS в виде массива строк. Входные параметры автоматически определяются с помощью заданных связей fistree объект. Входные параметры FIS без входящих связей включены в Inputs.

Обновите это свойство путем обновления связей fistree объект.

Выходные параметры дерева FIS в виде массива строк. Выходные параметры автоматически определяются с помощью заданных связей fistree объект. FIS выходные параметры без любых исходящих связей включены в Outputs.

Можно обновить это свойство после начальной конструкции fistree объект. Можно удалить существующий вход или добавить дополнительные промежуточные выходные параметры. Outputs должен содержать по крайней мере один выход.

Опция для отключения структурных проверок, когда дерево FIS обновляется после начального создания FIS в виде одного из следующих значений.

  • false — Автоматически обновите связи, входные параметры и выходные параметры. Эта опция гарантирует, что дерево FIS всегда допустимо и может быть оценено.

  • true — Автоматически не обновляйте связи, входные параметры и выходные параметры. В этом случае получившееся дерево FIS может быть в недопустимом состоянии, которое может вызвать ошибку во время оценки.

Позвольте этой опции повысить вычислительную эффективность, когда вы программно создадите дерево FIS.

Функции объекта

evalfisОцените нечеткую систему вывода
plotfisОтобразите нечеткую систему вывода
getTunableSettingsПолучите настраиваемые настройки из нечеткой системы вывода
getTunableValuesПолучите значения настраиваемых параметров от нечеткой системы вывода
setTunableValuesЗадайте значения настраиваемого параметра нечеткой системы вывода

Примеры

свернуть все

Создайте Mamdani нечеткая система вывода и Sugeno нечеткая система вывода.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','fis2','NumInputs',2,'NumOutputs',1);

Задайте связь от выхода fis1 к первому входу fis2.

con1 = ["fis1/output1" "fis2/input1"];

Создайте дерево FIS с помощью нечетких систем вывода и связи.

tree = fistree([fis1 fis2],con1);

Визуализируйте дерево.

plotfis(tree)

Создайте дерево с двумя ФИССОМ и никакие связи.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);

fisT = fistree([fis1 fis2],[]);

Отобразите древовидную настройку FIS.

plotfis(fisT)

Можно добавить FIS в дерево FIS путем добавления объекта FIS к свойству FIS дерева.

Добавьте fis3 к дереву FIS.

fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fisT.FIS(end+1) = fis3;

Соедините выходные параметры fis1 и fis2 к входным параметрам fis3.

fisT.Connections = [
    "fis1/output1" "fis3/input1";
    "fis2/output1" "fis3/input2"];

Отобразите обновленную древовидную настройку FIS.

plotfis(fisT)

Удалите первый FIS (fis1) от дерева FIS.

fisT.FIS(1) = [];

Отобразите обновленную древовидную настройку FIS.

plotfis(fisT)

Соответствующая связь с первым входом fis3 также удален.

Создайте fis1, fis2, и fis3, каждый с двумя входными параметрами и одним выходом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте связь между входом 2 из fis1 и вход 1 из fis2.

con3 = ["fis1/input2" "fis2/input1"];

Создайте и отобразите дерево FIS.

fuzzTree = fistree([fis1 fis2 fis3],[con1;con2;con3]);
plotfis(fuzzTree)

Отобразите входные параметры дерева FIS. Эти входные параметры соответствуют всем свободным входным параметрам, которые не имеют входящей связи.

fuzzTree.Inputs
ans = 3×1 string
    "fis1/input1"
    "fis1/input2"
    "fis2/input2"

Оцените нечеткое дерево. Задайте значения для входа 1 из fis1, введите 2 из fis1, и вход 2 из fis2. Значение для входа 2 из fis1 также применяется, чтобы ввести 1 из fis2.

output = evalfis(fuzzTree,[0.8 0.25 0.7]);

Создайте два объекта FIS, каждого с двумя входными параметрами и одним выходом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);

Соедините выход fis1 к второму входу fis2.

con = ["fis1/output1" "fis2/input2"];

Создайте дерево FIS.

fuzzTree = fistree([fis1 fis2],con);

Отображаемые выводы дерева FIS. По умолчанию, открытый FIS выход от fis2 выход дерева FIS.

fuzzTree.Outputs
ans = 
"fis2/output1"

Визуализируйте дерево FIS.

plotfis(fuzzTree,Legend="on")

Добавьте выход fis1 к списку выходных параметров.

fuzzTree.Outputs(end+1) = "fis1/output1";

Отобразите обновленный список выходов дерева FIS.

fuzzTree.Outputs
ans = 2×1 string
    "fis2/output1"
    "fis1/output1"

Визуализируйте дерево FIS. Добавленный промежуточный выход подсвечен.

plotfis(fuzzTree,Legend="on")

Оцените дерево FIS. Результат содержит выходные параметры от fis2 и fis1.

evalfis(fuzzTree,[0.5 0.2 0.8])
ans = 1×2

    0.1579    0.1579

Удалите первый выход из списка.

fuzzTree.Outputs(1) = [];

Отобразите обновленный список выходов дерева FIS.

fuzzTree.Outputs
ans = 
"fis1/output1"

Визуализируйте дерево FIS без удаленного выхода. Визуализация указывает что выход fis2 не использовано.

plotfis(fuzzTree,Legend="on")

Оцените дерево FIS снова. Результат теперь содержит выход только fis2.

evalfis(fuzzTree,[0.5 0.2 0.8])
ans = 0.1579

Этот пример показывает конструкцию инкрементного дерева FIS. Для получения дополнительной информации о типах нечетких древовидных структур смотрите Нечеткие Деревья.

Создайте нечеткие системы fis1, fis2, и fis3, каждый с двумя входными параметрами и одним выходом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "color";
fis1.Inputs(2).Name = "doors";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(2).Name = "power";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis3.Inputs(2).Name = "autopilot";
fis3.Outputs(1).Name = "prediction";

Создайте связь между выходом 1 из fis1 и вход 1 из fis2.

con1 = ["fis1/output1" "fis2/input1"];

Создайте связь между выходом 1 из fis2 и вход 1 из fis3.

con2 = ["fis2/output1" "fis3/input1"];

Создайте дерево FIS.

incTree = fistree([fis1 fis2 fis3],[con1;con2]);

Визуализируйте древовидную структуру. На каждом уровне древовидной структуры дополнительный вход объединен с выходом предыдущего уровня.

plotfis(incTree)

Figure FIS Tree Plot: fistreemodel contains an axes object. The axes object contains 25 objects of type line, text, patch. These objects represent Free or intermediate outputs, Free inputs, Connections.

Этот пример показывает конструкцию агрегированного дерева FIS. Для получения дополнительной информации о типах нечетких древовидных структур смотрите Нечеткие Деревья.

Создайте нечеткие системы fis1, fis2, и fis3, каждый с двумя входными параметрами и одним выходом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "dist_obs";
fis1.Inputs(2).Name = "angle_obs";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(1).Name = "dist_tar";
fis2.Inputs(2).Name = "angle_tar";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis3.Outputs(1).Name = "heading_robot";

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте дерево FIS.

aggTree = fistree([fis1 fis2 fis3],[con1;con2]);

Визуализируйте древовидную структуру.

plotfis(aggTree)

Этот пример показывает конструкцию каскадного дерева FIS. Для получения дополнительной информации о типах нечетких древовидных структур смотрите Нечеткие Деревья.

Создайте нечеткие системы fis1, fis2, fis3, и fis4, каждый с двумя входными параметрами и одним выходом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "dist_obs";
fis1.Inputs(2).Name = "angle_obs";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(1).Name = "dist_tar";
fis2.Inputs(2).Name = "angle_tar";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis4 = mamfis('Name','fis4','NumInputs',2,'NumOutputs',1);
fis4.Inputs(2).Name = "preheading_robot";
fis4.Outputs(1).Name = "heading_robot";

Создайте связь между выходом 1 из fis1 и вход 1 из fis3.

con1 = ["fis1/output1" "fis3/input1"];

Создайте связь между выходом 1 из fis2 и вход 2 из fis3.

con2 = ["fis2/output1" "fis3/input2"];

Создайте связь между выходом 1 из fis3 и вход 1 из fis4.

con3 = ["fis3/output1" "fis4/input1"];

Создайте дерево FIS.

casTree = fistree([fis1 fis2 fis3 fis4],[con1;con2;con3]);

Визуализируйте древовидную структуру.

plotfis(casTree)

Этот пример показывает конструкцию параллельного дерева FIS. Для получения дополнительной информации о типах нечетких древовидных структур смотрите Нечеткие Деревья.

Создайте нечеткие системы fis1, fis2, и fis3, каждый с двумя входными параметрами и одним выходом.

fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);

Создайте дерево FIS, таким образом, что объекты FIS параллельно; то есть, дерево не содержит соединений и всего FIS, выходными параметрами являются древовидные выходные параметры FIS.

parTree = fistree([fis1 fis2],[]);

Визуализируйте дерево.

plotfis(parTree)

Оцените дерево FIS.

output = evalfis(parTree,[0.1 0.3 0.8 0.4]);

Сгенерируйте окончательный результат путем подведения итогов древовидных выходных параметров FIS.

finalOutput = sum(output);
Введенный в R2019a