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