Нечеткое правило
Использовать fisrule
объекты для представления нечетких правил if-then, которые связаны входом состоянием функции принадлежности к соответствующим функциям принадлежности к выходу. Если фрагмент нечеткого правила является предшествующим, что задает функцию принадлежности для каждого переменного входа. Последующим является фрагмент нечеткого правила, которая задает функцию принадлежности для каждой выходной переменной. Для получения дополнительной информации о функциях принадлежности и нечетких правилах, смотрите Основы нечеткой логики.
Чтобы создать объекты нечетких правил, используйте 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
ключевое слово и разделите эти условия, используя запятые. The IS NOT
ключевое слово не поддерживается для выходов Sugeno. Если правило не использует заданную выходную переменную, опустите ее из последующего.
Задайте вес, используя положительное числовое значение.
Для примера:
"IF A IS a AND B IS NOT b THEN X IS x, Y IS NOT y (1)"
Symbolic - Выражение, которое использует символы в следующей таблице вместо ключевых слов. Нет символа для 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
условие для систем Мамдани, задайте отрицательное значение. 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
- Вес правила1
(по умолчанию) | положительный числовой скалярВес правила, заданный как положительный числовой скаляр в области значений [0
1
].
Если вы обновляете вес правила с помощью записи через точку, значение веса в Description
также обновляется текст свойства.
Connection
- Правило, предшествующее соединению1
| 2
Переднее соединение правила, заданное как одно из следующих:
1
- Оценить предшествующие правила с помощью оператора AND.
2
- Рассчитать предшествующие правила с помощью оператора OR.
Если вы обновляете соединение правил с помощью записи через точку, то предшествующие операторы в 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
и 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.