Нечеткое правило
Используйте объекты 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
.
ruleText
— Текстовое описание правилаТекстовое описание правила, заданное как одно из следующего:
Строка или вектор символов, задающий одно правило
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
— Числовое описание правилаЧисловое описание правила, заданное как одно из следующего:
Вектор - строка, чтобы задать одно нечеткое правило
Массив, где каждая строка 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
с помощью имен переменной и функции принадлежности по умолчанию.
numInputs
— Количество входных переменныхКоличество входных переменных для правила, заданного как положительное целое число. Если вы задаете описание правила с помощью 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
.
Antecedent
— Антецедент правилаУправляйте антецедентом, заданным как числовой вектор длины M, где M является количеством входных переменных. Каждый элемент Antecedent
содержит одно из следующих значений:
Положительное целое число — индекс входной функции принадлежности, которая представляет условие IS
Отрицательное целое число — отрицание входной функции принадлежности, которая представляет условие IS NOT
0
— A не заботятся об условии, что означает, что правило не использует соответствующую входную переменную
Это значение установлено, когда вы создаете нечеткое правило с помощью ruleValues
. Если вы создаете нечеткое правило с помощью ruleText
, перед использованием правила в нечеткой системе, необходимо заполнить свойство Antecedent
с помощью функции update
.
Если вы обновляете индексы в антецеденте правила, использующем запись через точку, свойство Description
не обновляется, чтобы отразить изменения. Чтобы обновить описание правила, используйте функцию update
.
Consequent
— Следствие правилаУправляйте следствием, заданным как числовой вектор длины N, где N является количеством выходных переменных. Каждый элемент Consequent
содержит одно из следующих значений:
Положительное целое число — индекс выходной функции принадлежности, которая представляет условие IS
Отрицательное целое число — отрицание выходной функции принадлежности, которая представляет условие IS NOT
0
— A не заботятся об условии, что означает, что правило не использует соответствующую выходную переменную
Это значение установлено, когда вы создаете нечеткое правило с помощью ruleValues
. Если вы создаете нечеткое правило с помощью ruleText
, перед использованием правила в нечеткой системе, необходимо заполнить свойство Consequent
с помощью функции update
.
Если вы обновляете индексы в следствии правила, использующем запись через точку, свойство Description
не обновляется, чтобы отразить изменения. Чтобы обновить описание правила, используйте функцию update
.
Weight
— Управляйте весом1
(значение по умолчанию) | положительный числовой скалярУправляйте весом, заданным в виде положительного числа в области значений [0
1
].
Если вы обновляете вес правила с помощью записи через точку, значение веса в тексте свойства Description
также обновляется.
Connection
— Управляйте предшествующей связьюУправляйте предшествующей связью, заданной как одно из следующего:
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)"
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.