fisrule

Описание

Используйте объекты fisrule представлять нечеткий, если затем правила, которые связывают входные условия функции принадлежности с соответствующими выходными функциями принадлежности. Если фрагмент нечеткого правила является антецедентом, который задает функцию принадлежности для каждой входной переменной. Тогдашний фрагмент нечеткого правила является следствием, которое задает функцию принадлежности для каждой выходной переменной. Для получения дополнительной информации о функциях принадлежности и нечетких правилах, смотрите Основы Нечеткой логики.

Создание

Чтобы создать нечеткие объекты правила, используйте функцию fisrule. Используя эту функцию, можно создать одно нечеткое правило или вектор нескольких нечетких правил.

Синтаксис

rule = fisrule
rule = fisrule(ruleText)
rule = fisrule(ruleValues,numInputs)

Описание

пример

rule = fisrule создает одно нечеткое правило с описанием по умолчанию "input1==mf1 => output1=mf1".

пример

rule = fisrule(ruleText) создает одно или несколько нечетких правил с помощью текстовых описаний в ruleText.

пример

rule = fisrule(ruleValues,numInputs) создает одно или несколько нечетких правил с помощью числовых значений правила в ruleValues. Задайте количество входных переменных правила с помощью numInputs.

Входные параметры

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

Текстовое описание правила, заданное как одно из следующего:

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

    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);

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

  • Многословный — Лингвистическое выражение в следующем формате, с помощью IF и ключевых слов THEN:

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

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

    В <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)"
  • Символьный — Выражение, которое использует символы в следующей таблице вместо ключевых слов. Нет никакого символа для ключевого слова IF.

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

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

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

Когда вы задаете правило с помощью текстового описания, fisrule устанавливает Description, Weight и свойства Connection правила на основе описания.

Числовое описание правила, заданное как одно из следующего:

  • Вектор - строка, чтобы задать одно нечеткое правило

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

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

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

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

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

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

Когда вы задаете правило с помощью ruleVlaues, fisrule устанавливает свойство Description с помощью имен переменной и функции принадлежности по умолчанию.

Количество входных переменных для правила, заданного как положительное целое число. Если вы задаете описание правила с помощью ruleValues, необходимо также задать количество входных переменных. fisrule анализирует значения антецедента правила в индексы функции принадлежности для переменных ввода и вывода с помощью numInputs.

Свойства

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

Текстовое описание правила, заданное как строка или вектор символов. Описание правила хранится как символьное выражение, неважно, как вы задаете правило. Например, если вы задаете следующее многословное правило с помощью ruleText:

"IF A IS a AND B IS NOT b THEN X IS x, Y IS NOT y (1)"

Сохраненное правило:

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

Для получения дополнительной информации о многословных и символьных форматах правила смотрите входной параметр ruleText.

Когда вы задаете правило с помощью ruleVlaues, fisrule устанавливает свойство Description с помощью имен переменной и функции принадлежности по умолчанию. Перед использованием правила в нечеткой системе необходимо обновить описание, чтобы использовать имена переменной и функции принадлежности от той нечеткой системы с помощью функции update.

Управляйте антецедентом, заданным как числовой вектор длины M, где M является количеством входных переменных. Каждый элемент Antecedent содержит одно из следующих значений:

  • Положительное целое число — индекс входной функции принадлежности, которая представляет условие IS

  • Отрицательное целое число — отрицание входной функции принадлежности, которая представляет условие IS NOT

  • 0 — A не заботятся об условии, что означает, что правило не использует соответствующую входную переменную

Это значение установлено, когда вы создаете нечеткое правило с помощью ruleValues. Если вы создаете нечеткое правило с помощью ruleText, перед использованием правила в нечеткой системе, необходимо заполнить свойство Antecedent с помощью функции update.

Если вы обновляете индексы в антецеденте правила, использующем запись через точку, свойство Description не обновляется, чтобы отразить изменения. Чтобы обновить описание правила, используйте функцию update.

Управляйте следствием, заданным как числовой вектор длины N, где N является количеством выходных переменных. Каждый элемент Consequent содержит одно из следующих значений:

  • Положительное целое число — индекс выходной функции принадлежности, которая представляет условие IS

  • Отрицательное целое число — отрицание выходной функции принадлежности, которая представляет условие IS NOT

  • 0 — A не заботятся об условии, что означает, что правило не использует соответствующую выходную переменную

Это значение установлено, когда вы создаете нечеткое правило с помощью ruleValues. Если вы создаете нечеткое правило с помощью ruleText, перед использованием правила в нечеткой системе, необходимо заполнить свойство Consequent с помощью функции update.

Если вы обновляете индексы в следствии правила, использующем запись через точку, свойство Description не обновляется, чтобы отразить изменения. Чтобы обновить описание правила, используйте функцию update.

Управляйте весом, заданным в виде положительного числа в области значений [0 1].

Если вы обновляете вес правила с помощью записи через точку, значение веса в тексте свойства Description также обновляется.

Управляйте предшествующей связью, заданной как одно из следующего:

  • 1 — Оцените антецеденты правила с помощью операции И.

  • 2 — Оцените антецеденты правила с помощью операции ИЛИ.

Если вы обновляете связь правила с помощью записи через точку, предшествующие операторы в тексте свойства Description также обновляются.

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

updateОбновите нечеткое правило с помощью нечеткой системы вывода

Примеры

свернуть все

Создайте нечеткое правило по умолчанию.

rule = fisrule
rule = 
  fisrule with properties:

    Description: "input1==mf1 => output1=mf1 (1)"
     Antecedent: 1
     Consequent: 1
         Weight: 1
     Connection: 1

Чтобы изменить свойства правила, используйте запись через точку. Например, задайте вес правила 0.5.

rule.Weight = 0.5;

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

rule = fisrule("if service is poor and food is delicious then tip is average (1)");

Также можно задать то же правило с помощью символьного текстового описания.

rule = fisrule("service==poor & food==delicious => tip=average")
rule = 
  fisrule with properties:

    Description: "service==poor & food==delicious => tip=average (1)"
     Antecedent: []
     Consequent: []
         Weight: 1
     Connection: 1

Перед использованием rule с нечеткой системой обновите правило Antecedent and Consequent свойства с помощью функции update.

fis = readfis("tipper");
rule = update(rule,fis)
rule = 
  fisrule with properties:

    Description: "service==poor & food==delicious => tip=average (1)"
     Antecedent: [1 2]
     Consequent: 2
         Weight: 1
     Connection: 1

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

rule = fisrule([1 2 2 0.5 1],2)
rule = 
  fisrule with properties:

    Description: "input1==mf1 & input2==mf2 => output1=mf2 (0.5)"
     Antecedent: [1 2]
     Consequent: 2
         Weight: 0.5000
     Connection: 1

Перед использованием rule с нечеткой системой обновите правило свойство Description с помощью функции update.

fis = readfis("tipper");
rule = update(rule,fis)
rule = 
  fisrule with properties:

    Description: "service==poor & food==delicious => tip=average (0.5)"
     Antecedent: [1 2]
     Consequent: 2
         Weight: 0.5000
     Connection: 1

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

rules1 = ["if service is poor or food is rancid then tip is cheap (0.5)"...
          "if service is excellent and food is not rancid then tip is generous (0.75)"];

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

fuzzyRules1 = fisrule(rules1)
fuzzyRules1 = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                                Description                        
         __________________________________________________________

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

Также можно задать несколько правил с помощью массива числовых описаний правила.

rules2 = [1 1 1 0.5 2;
          2 -1 3 0.75 1];
fuzzyRules2 = fisrule(rules2,2)
fuzzyRules2 = 
  1x2 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                            Description                   
         _________________________________________________

    1    "input1==mf1 | input2==mf1 => output1=mf1 (0.5)" 
    2    "input1==mf2 & input2~=mf1 => output1=mf3 (0.75)"

Введенный в R2018b