exponenta event banner

addRule

Добавить правило в систему нечеткого вывода

Описание

fisOut = addRule(fisIn) добавляет одно нечеткое правило в систему нечеткого вывода fisIn с описанием по умолчанию "input1==mf1 => output1=mf1" и возвращает результирующую нечеткую систему в fisOut.

пример

fisOut = addRule(fisIn,ruleDescription) добавляет одно или несколько нечетких правил, используя описания правил в ruleDescription.

Примеры

свернуть все

Загрузите систему нечеткого вывода (FIS) и очистите существующие правила.

fis = readfis('tipper');
fis.Rules = [];

Добавьте правило в FIS.

ruleTxt = 'If service is poor then tip is cheap';
fis2 = addRule(fis,ruleTxt);

fis2 эквивалентно fis, за исключением того, что указанное правило добавляется в базу правил.

fis2.Rules
ans = 
  fisrule with properties:

    Description: "service==poor => tip=cheap (1)"
     Antecedent: [1 0]
     Consequent: 1
         Weight: 1
     Connection: 1

Загрузите систему нечеткого вывода (FIS) и очистите существующие правила.

fis = readfis('tipper');
fis.Rules = [];

Укажите следующие правила с помощью символьных выражений:

  • Если service является poor или food является rancid тогда tip является cheap.

  • Если service является excellent и food не является rancid тогда tip является generous.

rule1 = "service==poor | food==rancid => tip=cheap";
rule2 = "service==excellent & food~=rancid => tip=generous";
rules = [rule1 rule2];

Добавьте правила в FIS.

fis2 = addRule(fis,rules);

fis2 эквивалентно fis, за исключением того, что указанные правила добавляются в базу правил.

fis2.Rules
ans = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                               Description                      
         _______________________________________________________

    1    "service==poor | food==rancid => tip=cheap (1)"        
    2    "service==excellent & food~=rancid => tip=generous (1)"

Загрузите систему нечеткого вывода (FIS) и очистите существующие правила.

fis = readfis('mam22.fis');
fis.Rules = [];

Укажите следующие правила, используя индексы членских функций:

  • Если angle является small и velocity является big, то force является negBig и force2 является posBig2.

  • Если angle не является small и velocity является small, то force является posSmall и force2 является negSmall2.

rule1 = [1 2 1 4 1 1];
rule2 = [-1 1 3 2 1 1];
rules = [rule1; rule2];

Добавьте правила в FIS.

fis2 = addRule(fis,rules);

fis2 эквивалентно fis, за исключением того, что указанные правила добавляются в базу правил.

fis2.Rules
ans = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                                       Description                               
         ________________________________________________________________________

    1    "angle==small & velocity==big => force=negBig, force2=posBig2 (1)"      
    2    "angle~=small & velocity==small => force=posSmall, force2=negSmall2 (1)"

Входные аргументы

свернуть все

Система нечеткого вывода, заданная как одна из следующих:

  • mamfis объект - система нечеткого вывода Мамдани

  • sugfis object - система нечеткого вывода Sugeno

  • mamfistype2 объект - Type-2 система нечеткого вывода Мамдани

  • sugfistype2 object - Type-2 система нечеткого вывода Sugeno

Описание правила, указанное с помощью определения текстового или числового правила

Описание текстового правила

Для описания текстового правила укажите ruleDescription в качестве одного из следующих:

  • Строковый или символьный вектор, задающий одно правило

    rule = "If service is poor or food is rancid then tip is cheap";
  • Строковый массив, где каждый элемент соответствует правилу. Например:

    ruleList = ["If service is poor or food is rancid then tip is cheap";
                "If service is good then tip is average";
                "If service is excellent or food is delicious then tip is generous"];
  • Символьный массив, где каждая строка соответствует правилу. Например:

    rule1 = 'If service is poor or food is rancid then tip is cheap';
    rule2 = 'If service is good then tip is average';
    rule3 = 'If service is excellent or food is delicious then tip is generous';
    ruleList = char(rule1,rule2,rule3);

Для каждого правила используйте один из следующих форматов текста правила:

  • Verbose - лингвистическое выражение в следующем формате с использованием IF и THEN ключевые слова:

    "IF <antecedent> THEN <consequent> (<weight>)"

    В <antecedent>, укажите функцию членства для каждой входной переменной, используя IS или IS NOT ключевое слово. Подключите эти условия с помощью AND или OR ключевые слова. Если правило не использует заданную входную переменную, опустите ее из предшествующего значения.

    В <consequent>, укажите условие для каждой выходной переменной с помощью IS или IS NOT и разделите эти условия запятыми. IS NOT ключевое слово не поддерживается для выходов Sugeno. Если правило не использует заданную выходную переменную, опустите ее из последующей.

    Укажите вес, используя положительное числовое значение.

    Например:

    "IF A IS a AND B IS NOT b THEN X IS x, Y IS NOT y (1)"
  • Symbolic - выражение, использующее символы в следующей таблице вместо ключевых слов. Нет символа для IF ключевое слово.

    СимволКлючевое слово
    ==IS (в правиле antecedent)
    ~=IS NOT
    &AND
    |OR
    =>THEN
    =IS (в последующем правиле)

    Например, следующее символическое правило эквивалентно предыдущему подробному правилу.

    "A==a & B~=b => X=x, Y~=y (1)"

Описание числового правила

Для описания числового правила укажите ruleDescription в качестве одного из следующих:

  • Вектор строки для указания одного нечеткого правила

  • Массив, где каждая строка ruleValues задает одно правило

Для каждой строки описание числового правила имеет столбцы M + N + 2, где M - количество входных переменных, а N - количество выходных переменных. Каждый столбец содержит следующую информацию:

  • Первые M столбцов указывают индексы входных членских функций и соответствуют Antecedent свойство правила. Для обозначения NOT укажите отрицательное значение. Если правило не использует данный вход, установите соответствующий индекс равным 0. Для каждого правила по крайней мере один индекс входной функции членства должен быть ненулевым.

  • Следующие N столбцов определяют выходные индексы членских функций и соответствуют Consequent свойство правила. Для обозначения NOT для систем Mamdani укажите отрицательное значение. NOT условия не поддерживаются для выходов Sugeno. Если правило не использует данный вывод, установите соответствующий индекс равным 0. Для каждого правила по крайней мере один индекс выходной функции членства должен быть ненулевым.

  • Столбец M + N + 1 указывает вес правила и соответствует Weight свойство правила.

  • Последний столбец указывает предшествующий нечеткий оператор и соответствует Connection свойство правила.

Выходные аргументы

свернуть все

Система нечеткого вывода, заданная как одна из следующих:

  • mamfis объект - система нечеткого вывода Мамдани

  • sugfis object - система нечеткого вывода Sugeno

  • mamfistype2 объект - Type-2 система нечеткого вывода Мамдани

  • sugfistype2 object - Type-2 система нечеткого вывода Sugeno

fisOut содержит добавленные правила вывода, при этом все другие свойства соответствуют свойствам fisIn.

Вопросы совместимости

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

В R2018b изменилось поведение

Предупреждает, начиная с R2019b

Представлен в R2018b