Așa cum spune și numele, un sistem expert cu logică fuzzy este un sistem expert cu logică fuzzy.

Necesitatea reprezintă gradul la care evidențele considerate susțin valoarea de adevăr a unei propoziții sau a unei date; posibilitatea reprezintă extinderea la care evidența considerată nu respinge o dată, necesitatea fiindu-i 0 și posibilitatea 1. Când din ce în ce mai multe date sunt considerate necesitatea datei tinde să crească monoton, întotdeauna subiect al restricției cum că necesitatea unei date trebuie să fie egală cu sau mai mică decât posibilitatea ei; cum din ce în ce mai multe evidențe respingătoare sunt considerate, posibilitatea unei date tinde să descrească monoton.

În sisteme care pot stoca două valori de adevăr, acestea fiind posibilitata si necesitatea, o dată despre care nu cunoaștem nimic are necesitatea 0 și posibilitaea 1. O dată despre care se știe că este falsă complet are atât necesitatea cât și posibilitatea egale cu 0. O dată despre care se știe că este adevărată complet are atât necesitatea cât și posibilitatea egale cu 1.

În sisteme care funcționează pe baza stocării unei singure valori de adevăr, aceasta fiind necesitatea, nu se poate distinge între data despre care nu se știe nimic și o dată despre care se știe că este falsă, din moment ce ambele au necesitatea 0. În astfel de sisteme, o dată este considerată falsă până când sunt găsite evidențe susținătoare.

În sistemele bazate pe necesitate este posibil calculul posibilității unei date din evidențele respingătoare; dacă posibilitatea calculată este mai mică decât necesitatea existentă, necesitatea trebuie redusă ca să se supună restricției că necesitatea este mai mică sau egală cu posibilitatea. Totuși, evidențele susținătoare considerate in blocuri de reguli executate secvențial ar putea crește necesitatea redusă. Este de preferat ca mai întâi să se execute blocuri de reguli care să ducă la concluzii preliminarii, care în cele din urmă pot fi ambigue sau contradictorii. Apoi sunt tratate contradicțiile considerând evidențele respingătoare în blocuri executate mai târziu în procesul de raționament.

Rezolvarea Contradicțiilor: Posibilitate și Necesitate Valorile de adevăr pot reprezenta posibilitatea, adică extinderea la care o valoare de adevăr reprezintă extinderea pentru care datele nu refuză o propoziție. Indicăm că necesitatea unei propoziții A prin Nec(A), iar posibilitatea ei prin Pos(A). Aici, vom considera dinamicele unui proces de raționament in mai mulți pași. Într-un astfel de proces, deseori stabilim mai întâi concluzii preliminarii plauzibile care sunt suportate de datele relevante. Dacă aceste concluzii se exclud mutual, atunci excludem concluziile preliminarii care sunt respinse de datele adiționale sau de datele existente la care s-a intrat mai in detaliu. In primă fază considerăm extinderea la care datele suportă o concluzie, aceasta fiind necesitatea; in a doua fază, considerăm dacă oricare data respinge o propoziție, aceasta fiind posibilitatea, și orice schimbare în posibilitatea unei propoziții ar putea avea loc si pe necesitatea acesteia.

Din moment ce acceptăm definiția posibilității și a necesității dată de Dubois și Prade (1988), nu acceptăm ca toate axiomele ce sunt folosite pentru dezvoltarea teoriei posibilității convenționale să fie adevărate pentru raționamentele fuzzy cu sisteme bazate pe reguli. În particular, nu acceptăm axioma care spune că propozițiile implicate sunt imbricate, (A => B => C...), nici utilizarea logicii min-max la combinarea lui NOT A cu A. Această ultimă obiecție este validă în mod special din moment ce o familie logică fuzzy a fost construită care se supune acestor legi fundamentale. Din moment ce este bine cunoscut că logica min-max nu se supune legii mijlocului exclus (A and NOT A = 0), utilizarea ei în combinarea lui A cu NOT A pentru a produce min(a, 1-A) nu este validă. Din aceste motive, tratarea posibilității și a necesității au scos la iveală diferențe substanțiale față de teoria convențională. Lăsând considerațiile teoretice deoparte, această teorie are un mare avantaj: funcționează.

Definiția posibilității și a necesității

Dubois și Prade definesc posibilitatea și necesitatea astfel:

Necesitatea unei propoziții (Nec) reprezintă extinderea la care datele își suportă valoarea de adevăr.

Posibilitatea unei propoziții (Pos) reprezintă extinderea la care datele nu își resping valoarea de adevăr.

Termenul necesitate este analog cu credibilitate în Dempster-Shafer theory, iar termenul posibilitate este analog cu plauzabilitate. Atât posbilitatea cât și necesitatea reprezintă valori de adevăr exprimate prin 0 sau 1. Spre exemplu, să presupunem că avem doar această informație despre propoziția A: necesitatea sa curentă este 0.3, iar posibilitatea ei este 1.0; necesitatea propoziției P care o suportă pe A este 0.4, și necesitatea propoziției Q care respinge A este 0.2. Nec(A), necesitatea pentru care A este adevarată, este atunci max(0.3, 0.4) = 0.4. Din moment ce Q respinge A, extinderea pentru care Q nu respinge A este NOT Nec(Q), sau 0.8. Atunci, considerând aceste date, Nec(A) = 0.4, Pos(A) = 0.8. Dacă limbajul de raționament fuzzy ne permite, am putea specifica valoarea de adevăr a unei propoziții prin cele două valori, posibilitatea si necesitatea. Oricum, puține limbaje pentru raționament fuzzy permit la ora actuală stocarea a mai multor valori de adevăr, în general necesitatea. Dar din moment ce calculăm posibilitatea unei propoziții din necesitățile datelor ce resping, putem lucra cu aspectul cel mai important într-un sistem bazat pe necesități.

Posibilitatea și necesitatea potrivite pentru raționamentul fuzzy bazat pe reguli în mai mulți pași

Vom dezvolta formule pentru posibilitate si necesitate potrivite pentru sisteme complexe de raționament fuzzy bazate pe reguli cu înlănțuire în avans în mai mulți pași. Cele urmărite corespund cu cele menționate de Anderson, cum că sistemele bazate pe reguli oferă o modalitate foarte avantajoasa de a emula raționamentul uman. La al i-lea pas de raționament, indicăm Nec(A) prin Nec(A)i, și Pos(A) prin Pos(A)i. Dacă o relație este întotdeauna adevărată, atunci i-ul poate fi omis

Tipuri de date și valorile lor de adevăr

În primul rând, să considerăm modul în care sistemul nostru utilizează valorile de adevăr. Majoritatea sistemelor de adevăr mențion doar o singură valoare de adevăr, necesitatea; dacă trebuie să avem grijă atât de necesitate cât și de posibilitate, atunci fiecare valoare de adevăr constă în aceste două valori. Să considerăm acum diferitele tipuri de date pe care le-am putea avea. Avem date scalare sau cu o singură valoare; aici intră numerele întregi, numerele în virgulă mobilă și șiruri de caractere; iar pentru fiecare dintre acestea este atașată o valoare. Există de asemenea și mulțimi fuzzy discrete, ale căror membrii sunt cuvinte; iar pentru fiecare membru o valoare este atașată. Dacă aceste cuvinte descriu numere, atunci sunt termeni lingvistici, și mulțimea fuzzy părinte a acestora este o variabilă lingvistică; pentru fiecare termen lingvistic este atașată o funcție de apartenență care mapează tot sau doar o parte din linia reală pe valorile de adevăr pentru termenul lingvistic corespondent. În acest punct, putem observa ca sistemele care mențin atât posibilitatea cât și necesitatea ar putea avea o problemă; funcția de apartenență ar trebui să returneze două valori, atât posibilitatea cât și necesitatea. De fapt, nu cunoaștem astfel de funcții. Necesitatea este returnată, iar posibilitatea este presupusă a fi una. Avem de asemenea numere fuzzy cu funcții de apartenență atașate similare cu funcțiile de apartenență pentru termenii lingvistici. Să considerăm acum inițializarea valorilor datelor cu valori de adevăr. În limbaje precum C, există doi pași în crearea unei date. În primul pas este declarat un șablon care informează compilatorul ce tip de data poate pretinde. În C, de exemplu, o astfel de declarare de date poate fi:

flt x;

Această declarație spune compilatorului să pretindă un vector x de 20 de numere in virgulă mobilă, iar calculatorul va aloca memorie suficientă în care să încapă vectorul. O declarare mai complexă avem pentru o structură. O astfel de structură poate fi in C:

struct Date { day int; month int; year int;};Această declarație informează compilatorul ce să pretindă in structura Date, dar nu alocă memorie încă. FLOPS utilizează declarații de date în mod similar, dar nu identic. O declarare tipică FLOPS a unui element Region ar putea fi:declare Regionrnum intArea fltSize fzset (Small Medium Large)Xbar fltXpos fzset (Left Center Right)Ybar fltYpos fzset (Low Center High);Această declarație nu alocă memorie pentru o instanță a lui Region. Memoria este alocată pentru o instanță de către comanda FLOPS make:make Region; Inițializarea datelor și valori de adevăr

Când comanda se execută, locații de memorie sunt asignate pentru valori și valori de adevăr pentru toate atributele. Din moment ce nici o valoare nu este specificată, numerele sunt inițializate cu 0 și șirurile de caractere sunt vide. Dacă valoarea de adevăr a unui integer, float sau string este inițial necunoscută, atunci necesitatea este 0 și posibilitatea 1. Similar, necesitatea (gradul de apartenență) unui membru al unei mulțimi fuzzy este inițial setat la 0. Posibilitățile sunt explicite (pentru sistemele cu valori de adevăr duale) sau implicite (pentru sistemele bazate pe necesitate) initializate cu 1. In orice caz, comanda make poate specifica valori si valori de adevăr. De exemplu,make Region rnum = 1;va asigna valoarea 1 pentru instanța rnum a lui Region. Dacă o valoare este specificată într-o comandă make dar nu este specificată o valoare de adevăr, atunci necesitatea va fi setată la 1. Dacă dorim, putem specifica o valoare de adevăr diferită, ca în:make Region Area = 25 Area.cf = 800;Desigur, cum în FLOPS valorile de adevăr se află între 0 și 1000, în exemplul dat necesitatea lui Area este de fapt 0.8 pe o scară de la 0 la 1. Funcțiile de apartenență parametrizate pentru numere fuzzy sunt specificate când numerele fuzzy sunt create. Funcțiile de apartenență parametrizate pentru termenii lingivstici sunt create de comanda memf.

Modificările valorilor de adevăr în timpul unui proces de raționament fuzzy

Presupunem ca A este o propoziție; Nec(A)0 și Pos(A)0 sunt inițial valori de adevăr. Presupunem că, drept progrese raționale,

De observat este că adăugând evidențe susținătoare poate afecta necesitatea, dar nu și posibilitatea; adăugând evidențe respingătoare poate afecta posibilitatea, și poate afecta de asemenea și necesitatea. Aproape orice problemă de raționament care nu este banală cere mai mulți pași de raționament. Indicăm pasul de raționament prin indicele i, unde i este inițial 0. Pentru raționamentul în mai mulți pași, când parcurgem de la al i-lea pas de raționament până la al (i+1)-lea, presupunem:

Ecuația reiese din faptul că adăugând evidențe susținătoare poate afecta necesitatea și nu posibilitatea, și adăugând evidențe respingătoare nu poate crește niciodată posibilitățile. În loc sa presupunem acestea, putem presupune următoarele:

Alegerea între cele două devine importantă când condiderăm respingerea evidențelor. Dacă alegem a doua variantă, astfel ca necesitățile să nu scadă niciodată, devine imposibil de admis că am fi comis o greșeală. Acest lucru este foarte important mai ales când se vor rezolvate contradicțiile prin excluderea concluziilor preliminarii incorecte. La sfârșitul pasului al i-lea am determinat Nec(A)i. Considerăm efectul propoziției P asupra lui Nec(A)i, care suportă valoarea de adevăr a lui A și a propoziției Q, care tinde să o respingă. Indicăm efectul propoziției P singură asupra lui Nec(A)i prin Necp(A)i+1 și presupunem

Cu câteva propoziții susținătoare Pj devine: