Калькулятор нечеткой логики

Материал из Викиучебника — открытых книг для открытого мира
(перенаправлено с «Калькулятор нечёткой логики»)

Руководство по калькулятору нечеткой логики

Механизм предложенный Лотфи Заде по использованию нечетких множеств применялся профессором Ибрагимом Мамдани для формализации нечеткого логического вывода. Машина нечеткого логического вывода является удобным механизмом аппроксимации функций алгебры логики. Функции алгебры логики основываются на традиционном логическом базисе (И, ИЛИ, НЕ) или специальном (штрих Шеффера, стрелка Пирса). 
Поэтому можно записать использование функции, как обобщение формулы: y=f(x1, x2,…,xn); где у – это зависимая переменная, результат логического вывода; f – функция алгебры логики; x1, x2,…,xn – объясняющие переменные, логические посылки.  
Нечеткий логический вывод является аппроксимацией зависимостей вида «Входы − Выход» на основе лингвистических высказываний «Если − То» и логических операций над нечеткими множествами. Для нашей задачи входящим вектором будут данные о ресурсной и затратной эффективности предприятия, а выходным параметром − индекс риска. Структура системы нечеткого вывода показана на рисунке.  

Фаззификатор − преобразует фиксированный вектор влияющих факторов ( X ) в вектор нечетких множеств ( X ) необходимых для нечеткого вывода. 
Нечеткая база знаний − содержит информацию о зависимости Y = f ( X ) в виде лингвистических правил «Если − То». 
Функции принадлежности − используются для представления лингвистических термов в виде нечетких множеств. 
Машина нечеткого логического вывода − на основе правил базы знаний определяет значение входной переменной в виде нечеткого множества ( Y ), соответствующего нечетким значениям входных переменных ( X ). 
Дефаззификатор − преобразует выходное нечеткое множество (Y ) в четкое число (Y ). 
Нечетким множеством A принято считать совокупность пар элементов u и степеней их принадлежности M(u), которые находятся на универсальном множестве U . Для наших целей универсальным множеством мы будем считать, множество всех действительных чисел. 
Эта формула справедлива, как в отношении формальной логики, бинарной логики, так и нечеткой логики. Это утверждение основано на том, что нечеткое множество является обобщением обычных множеств. В обычных множествах степень принадлежности значений входящих в множество равны 1 (Значения абсолютно принадлежат множеству). Пример множества значений от 10 до 20. 
 

u 10 10 20 20 m(u) 0 1 1 0 Входящие значения в нечеткое множество могут иметь переменную степень принадлежности. Степень принадлежности может изменяться от 0 (не принадлежит множеству) до 1 (абсолютно принадлежит). Виды таких множеств представим рисунками.

u 10 12 18 20 m(u) 0 1 1 0

u 10 10 18 20 m(u) 0 1 1 0

u 10 12 20 20 m(u) 0 1 1 0

u 10 15 15 20 m(u) 0 1 1 0

Мы видим, что трапециевидные нечеткие множества могут быть заданы шаблоном координат по оси значений и могут также характеризовать треугольное нечеткое множество.  
Рассмотрим элементы скриптового языка калькулятора нечеткой логики. Переменные нечетких множеств обозначаются прописными буквами английского алфавита. В нотациях скриптового языка логического калькулятора нечеткие множества можно представить в виде шаблона записи нечеткого числа fs{[A-Z] = FS([a-z], [a-z], [a-z], [a-z]);} 
Из шаблона видно, нечеткое множество характеризуется действительными числами. Калькулятору нечеткой логики необходимы входные параметры. Параметры описываются переменными по шаблону var {[a-z] = [0-9];}. 

[a-z] строчные буквы английского алфавита, [0-9] действительные числа.

Нечеткие множества могут быть частями больших универсальных множеств. Для целей численного решения объясняющие универсальные множества должны иметь параметр (переменную действительного числа из формулы xi ) лежащую в пределах универсальных множеств. Зависимые универсальные множества не должны иметь параметр и включают переменную пустой стоки (два апострофа). Шаблон выглядит так fs{ [A-Z]=US([a-z], [A-Z],);} 

Нам потребуется система логических правил для описания функции f нечеткого логического вывода. Шаблон выглядит так rules{[A-Z]=( [A-Z] | [A-Z]);} или rules{[A-Z]=( [A-Z] & [A-Z]);} | - логическая операция «или» & - логическая операция «и»

Результат вычисления функции алгебры логики (y) представляется результатом дефаззификации зависимого универсального множества. 

Приведем простейший пример кода: var{ a=5; b=6; c=9; d=10; i=7.5; j=; } fs{ AA=FS(a,b,c,d); CC=FS(a,b,c,d); } us{ A=US(i,AA); C=US(j,CC); } rules{ CC=(AA|AA); }

Приведем более реалистичный пример, но максимально простой. Пятница, вечер. Муж возвращается домой его встречает жена. У жены есть свойство довольна / не довольна. Не ее настроение влияет муж пришел трезвый или после бара с коллегами. А также величина зарплаты большая или маленькая. 

Универсальное множество трезвость мужа (H) состоит из двух подмножеств (муж трезвый и муж пьяный). Это множество характеризуется диапазоном от 0 до 100 и степенью принадлежности к множествуот 0 до 1.

Муж трезвый (SH) алкоголя нет

u 0 0 0 100 m(u) 0 1 1 0

Муж пьяный 100% (DH)

u 0 100 100 100 m(u) 0 1 1 0

Таким образом входной параметр муж трезвый – пьяный может изменяться от 0 до 100. 

Универсальное множество зарплата мужа (S), так же будет состоять из двух подмножеств. Зарплата малая (LS) 150$ в неделю.

u 150 150 150 1500 m(u) 0 1 1 0

Зарплата большая (HS) 1500$ в неделю.

u 150 1500 1500 1500 m(u) 0 1 1 0

Таким образом входной параметр зарплата малая – большая может изменяться от 150$ до 1500$.

Множество настроение жены (W) определим тремя подмножествами: 

недовольна, средне, довольна на интервале от 0 до 1. Жена недовольна (WU)

u 0 0 0,2 1 m(u) 0 1 1 0

Настроение у жены так себе (WM)

u 0,2 0,5 0,5 0,8 m(u) 0 1 1 0

Жена довольна (WH)

u 0 0,8 1 1 m(u) 0 1 1 0

Составим логические правила настроения жены. ЕСЛИ зарплата малая И трезвый ТО среднее ЕСЛИ зарплата малая И пьяный ТО недовольна ЕСЛИ зарплата большая И трезвый ТО довольна ЕСЛИ зарплата большая И пьяный ТО средне Запишем логические правила в нотации калькулятора. WM = (LS&SH); WU = (LS&DH); WH = (HS&SH); WM = (HS&DH);

Теперь используя скриптовый язык составим калькулятора нечеткой логики определим настроение жены если муж заработал 1000$ и пьян 25%. 

var{ s=1000;h=25;w=; haa=0;hab=0;hac=0;had=100; hba=0;hbb=100;hbc=100;hbd=100; saa=150;sab=150;sac=150;sad=1500; sba=150;sbb=1500;sbc=1500;sbd=1500; waa=0;wab=0;wac=0.2;wad=1; wba=0.2;wbb=0.5;wbc=0.5;wbd=0.8; wca=0;wcb=0.8;wcc=1;wcd=1;} fs{ SH=FS(haa,hab,hac,had);DH=FS(hba,hbb,hbc,hbd); LS=FS(saa,sab,sac,sad);HS=FS(sba,sbb,sbc,sbd); WU=FS(waa,wab,wac,wad);WM=FS(wba,wbb,wbc,wbd);WH=FS(wca,wcb,wcc, wcd); } us{H=US(h,SH,DH);S=US(s,LS,HS);W=US(w,WU,WM,WH);} rules{WM=(LS&SH);WU=(LS&DH);WH=(HS&SH);WM=(HS&DH);} Получим результат, нечеткое множество (настроение жены) при заданных условиях:

Проведя дифаззицикацию этого нечеткого множества методом нахождения центроида получим 0.585. Настроение чуть выше среднего. 

Если сократить зарплату до 500; потребление алкоголя увеличить до 80%. var{ s=500;h=80;w=; haa=0;hab=0;hac=0;had=100; hba=0;hbb=100;hbc=100;hbd=100; saa=150;sab=150;sac=150;sad=1500; sba=150;sbb=1500;sbc=1500;sbd=1500; waa=0;wab=0;wac=0.2;wad=1; wba=0.2;wbb=0.5;wbc=0.5;wbd=0.8; wca=0;wcb=0.8;wcc=1;wcd=1;} fs{ SH=FS(haa,hab,hac,had);DH=FS(hba,hbb,hbc,hbd); LS=FS(saa,sab,sac,sad);HS=FS(sba,sbb,sbc,sbd); WU=FS(waa,wab,wac,wad);WM=FS(wba,wbb,wbc,wbd);WH=FS(wca,wcb,wcc, wcd); } us{H=US(h,SH,DH);S=US(s,LS,HS);W=US(w,WU,WM,WH);} rules{WM=(LS&SH);WU=(LS&DH);WH=(HS&SH);WM=(HS&DH);}


Результат: 0.388

Если зарплата 500$, потребление алкоголя 20%. 

var{ s=500;h=20;w=; haa=0;hab=0;hac=0;had=100; hba=0;hbb=100;hbc=100;hbd=100; saa=150;sab=150;sac=150;sad=1500; sba=150;sbb=1500;sbc=1500;sbd=1500; waa=0;wab=0;wac=0.2;wad=1; wba=0.2;wbb=0.5;wbc=0.5;wbd=0.8; wca=0;wcb=0.8;wcc=1;wcd=1;} fs{ SH=FS(haa,hab,hac,had);DH=FS(hba,hbb,hbc,hbd); LS=FS(saa,sab,sac,sad);HS=FS(sba,sbb,sbc,sbd); WU=FS(waa,wab,wac,wad);WM=FS(wba,wbb,wbc,wbd);WH=FS(wca,wcb,wcc, wcd); } us{H=US(h,SH,DH);S=US(s,LS,HS);W=US(w,WU,WM,WH);} rules{WM=(LS&SH);WU=(LS&DH);WH=(HS&SH);WM=(HS&DH);}


Результат: 0.511

В качестве вывода по примеру: Инвестируй в себя, а не в алкоголь. И не только жена будет довольна. 

Рассмотрим более сложный пример

Параметр «Эффективность ресурсная» изменяется в диапазоне от 5 до 25% (универсальное множество U для данного параметра). На этом промежутке можно выделить три множества значений оценок: Эффективность ресурсная низкая, Эффективность ресурсная средняя, Эффективность ресурсная высокая.  Множество «Эффективность ресурсная низкая» лежит в интервале от 5 до 15% − с функцией принадлежности изменяемой от 1 на интервале 5-10% и уменьшением на интервале 10-15% до 0. Множество «Эффективность ресурсная средняя» лежит в интервале от 10 до 20% − с функцией принадлежности изменяемой от 0 до 1 на интервале 10-15% и от 1 до 0 на интервале 15-20%. Множество «Эффективность ресурсная высокая» лежит в интервале от 15 до 25% − с функцией принадлежности изменяемой от 0 до 1 на интервале 15-20% и равной 1 на интервале 20-25%. 
Непрерывность оценки параметра достигается возможностью измерения степени принадлежности элемента универсального множества. Например параметр «Эффективность ресурсная» равен 14% фаззифицируем его (определим принадлежность его к нечетким множествам). Рассмотрим рисунок 2, параметр «Эффективность ресурсная» равен 14% принадлежит к нечеткому множеству «Эффективность ресурсная средняя» со степенью принадлежности 0,8 и к нечеткому множеству «Эффективность ресурсная низкая» со степенью принадлежности 0,2. Обратим внимание, что при любых значениях параметра на универсальном множестве сумма степеней принадлежности отдельных множеств будет равна 1. 

Эффективность ресурсная 1,2

Значения,% Низкая Средняя Высокая Значние эффективности ресурсной равной 14% Принадлежность к множеству "Средняя" Принадлежность к множеству "Низкая"

Графическое представление нечетких множеств параметра 

«Эффективность ресурсная»

Параметр «Эффективность затратная» изменяется в диапазоне от 45 до 105% (универсальное множество U для данного параметра). Как и для предыдущего параметра выделили три множества значений оценок: Эффективность затратная низкая, Эффективность затратная средняя, Эффективность затратная высокая. Нечеткость этих множеств задана функциями принадлежности. 

Графическое представление нечетких множеств параметра 

«Эффективность затратная» Выходная переменная «Индекс риска» изменяется в диапазоне от 0 до 1 (универсальное множество U для данного параметра). Характеризуется пятью нечеткими множествами значений оценок: Индекс риска очень низкий, Индекс риска очень низкий, Индекс риска средний, Индекс риска высокий, Индекс риска очень высокий. Нечеткость этих множеств задана функциями принадлежности, (рисунок).

Графическое представление нечетких множеств выходной переменной «Индекс риска» 

Характеристикой логических посылок будут нечеткие множества, а логический вывод будет обеспечиваться Нечеткой базой знаний «Системой правил».  

Нечеткая база знаний «Система правил» эффективность эффективность ресурсная затратная затратная Логический вывод Индекс риска ВЫСОКАЯ И ВЫСОКАЯ ТО ОЧЕНЬ НИЗКИЙ ВЫСОКАЯ И СРЕДНЯЯ ТО НИЗКИЙ ВЫСОКАЯ И НИЗКАЯ ТО СРЕДНИЙ СРЕДНЯЯ И ВЫСОКАЯ ТО НИЗКИЙ СРЕДНЯЯ И СРЕДНЯЯ ТО СРЕДНИЙ СРЕДНЯЯ И НИЗКАЯ ТО ВЫСОКИЙ НИЗКАЯ И ВЫСОКАЯ ТО СРЕДНИЙ НИЗКАЯ И СРЕДНЯЯ ТО ВЫСОКИЙ НИЗКАЯ И НИЗКАЯ ТО ОЧЕНЬ ВЫСОКИЙ

 	Используя программный комплекс  в качестве машины нечеткого логического вывода и деффазификатора построим модель оценки риска инвестиций.   

var{ ua=17.5;ub=85;uc=; aaa=5;aab=5;aac=10;aad=15; aba=10;abb=15;abc=15;abd=20; aca=15;acb=20;acc=25;acd=25; baa=45;bab=45;bac=50;bad=75; bba=51;bbb=75;bbc=75;bbd=99; bca=75;bcb=100;bcc=105;bcd=105; caa=-0.05;cab=-0.05;cac=0;cad=0.25; cba=0;cbb=0.25;cbc=0.25;cbd=0.5; cca=0.25;ccb=0.5;ccc=0.5;ccd=0.75; cda=0.5;cdb=0.75;cdc=0.75;cdd=1; cea=0.75;ceb=1;cec=1.05;ced=1.05;} fs{ AA=FS(aaa,aab,aac,aad);AB=FS(aba,abb,abc,abd);AC=FS(aca,acb,acc,acd); BA=FS(baa,bab,bac,bad);BB=FS(bba,bbb,bbc,bbd);BC=FS(bca,bcb,bcc,bcd); CA=FS(caa,cab,cac,cad);CB=FS(cba,cbb,cbc,cbd);CC=FS(cca,ccb,ccc,ccd); CD=FS(cda,cdb,cdc,cdd);CE=FS(cea,ceb,cec,ced);} us{ A=US(ua,AA,AB,AC);B=US(ub,BA,BB,BC);C=US(uc,CA,CB,CC,CD,CE);} rules{ CA=(AC&BC);CB=(AC&BB);CC=(AC&BA);CB=(AB&BC);CC=(AB&BB);CD =(AB&BA);CC=(AA&BC);CD=(AA&BB);CE=(AA&BA);}


Результат: 0,331 Нечеткий вывод является аппроксимацией зависимостей «входов − выхода», она дает представление о численном значении «Индекса риска» − ИР от значений входов «Эффективность ресурсная» − ЭР и «Эффективность затратная».− ЭЗ. Отдельные численные значения работы машины нечеткого логического вывода приведены в таблице. Результаты зависимостей Значений входов Значение выхода «Эффективность ресурсная» «Эффективность затратная» «Индекса риска» 15% 75% 0,5 14% 70% 0,584 17,5% 85% 0,3305 12,5% 65% 0,669 12,5% 85% 0,516 10% 50% 0,951 20% 100% 0,0492

Выводы:

  1. Подтверждена возможность использования аппарата нечеткой логики для решения широкого класса трудно формализуемых экономических задач.
  2. Построена работающая машина нечеткого вывода, которая может быть использована для построения экспертных систем.
  3. Получены численные значения результата работы машины нечеткого вывода.

Абаев Владимир Александрович, Садыкова Зульфира Флоридовна