Achizitia de Cunostinte si Evaluarea de Expresii Fuzzy



Instrument software pentru

Achizitia de Cunostinte si Evaluarea de Expresii Fuzzy

(principii si metode de implementare)





Structura aplicatiei pe module este dupa cum urmeaza (in ordinea in care apar in bara de unelte principala):

modulul pentru administrarea Domeniilor de discurs

modulul pentru administrarea Multimilor fuzzy

modulul pentru administrarea Numerelor fuzzy

modulul pentru administrarea Modificatorilor lingvistici

modulele pentru administrarea Cuantificatorilor si Operatorilor lingvistici nu au fost implementate in aceasta versiune

modulul pentru Evaluarea de Expresii Fuzzy

modulul pentru Descrierea contextului



Inainte de a trece la descrierea fiecarui modul, tin sa fac unele precizari cu privire la elementele independente de mediul Visual Basic care au fost folosite in dezvoltarea aplicatiei.


Este vorba de baza de cunostinte care in fapt este o baza de date relationala proiectata folosind Microsoft Access'97.

Atentie! Pentru a aduce modificari in structura bazei de cunostinte dar care sa nu-i afecteze functionalitatea, vor trebui ca relatiile sa fie pastrate avand structura curenta, bineinteles aceasta se refera si la tipul campurilor, indecsi, samd. Deci, este bine ca eventualele modificari ale bazei de date MSAccess sa se limiteze doar la adaugari la structura. Este absolut necesar sa nu se faca conversia bazei de date de la versiunea Access'97 la o alta versiune tot in scopul de a nu afecta functionalitatea.


O alta observatie este faptul ca baza de cunostinte, chiar daca are extensia CKB (Context KnowledgeBase), aceasta este recunoscuta ca si structura de catre MSAccess'97.


Consider necesar sa fac unele precizari in legatura cu modul de reprezentare interna a multimilor fuzzy continui si discrete:

multimile fuzzy continui ca si reprezentare a functiei de apartenenta, s-a ales ca in baza de date sa se reprezinte fiecare pereche cheie (valoare, grad) pentru specificarea punctelor din grafic pentru delimitarea elementelor corespunzatoare: nucleu si zone de imprecizie

multimile fuzzy discrete sunt reprezentate in baza de date in tabela corespunzatoare prin perechea (valoare, grad). Pentru valoare este specificat codul elementului in relatie cu elementul declarat ca si element discret in tabela pentru elemente discrete ale domeniilor.


Pentru detalii, consultati baza de date folosind MSAccess'97. Veti gasi acolo explicatii detaliate privind utilitatea fiecarei tabele respectiv camp in parte.




Revenind la implementarea modulelor aplicatiei, in continuare sunt descrise cateva elemente comune tuturor modulelor:

fiecare modul in parte ale la baza o ferestra (FORMular in VBasic), ca si interfata de dialog cu utilizatorul. De notat este faptul ca cea mai mare parte a codului este scris "in spatele" obiectelor grafice ca raspuns la interactiunea utilizatorului cu acestea (control dirijat de evenimente).

fiecare modul, are implementata o metoda de regasire a informatiilor si actualizarea proprietatilor obiectelor grafice (Ex: actualizarea listei cu domeniile definite in contextul curent).

fiecare modul are implementate metode pentru modificarea datelor existente corespunzatoare fiecarui element caracteristic conceptelor folosite (termenul lingvistic folosit pentru specificarea unei multimi fuzzy, limitele absolute sau relative ale unui domeniu de discurs, samd).

fiecare modul are implementate metode pentru actualizarea informatiilor din baza de cunostinte (salvarea informatiilor referitoare la elementele descrise, modificate, samd).

in caz de necesitate, o fereastra (formular) poate deschide alt formular pentru a putea reprezenta informatiile referitoare la anumite elemente (cazul proprietatilor multimilor fuzzy), sau dupa caz, extinderea formularului (modulul pentru domenii, numere fuzzy, modificatori, samd).

majoritatea modulelor au o bara de instrumente pentru accesarea functiilor de administrare a elementelor pe care le gestioneaza.





Domenii de discurs - DomainsDialog


Metode (subrutine/functii) folosite:


setDefaultSettings()

actualizeaza informatiile pentru initializarea elementelor grafice. Regaseste domeniile definite in baza de cunostinte si actualizeaza lista cu domenii

domainsToolbar_ButtonClick(ByVal Button As MSComctlLib.Button)

identifica butonul apasat din bara de unelte si executa codul corespunzator

addNewDomain()

initializeaza mediul pentru definirea unui nou domeniu

deleteDomain()

sterge domeniul ales din lista impreuna cu toate multimile fuzzy definite pe acel domeniu

saveCommand_Click()

salveaza informatiile corespunzatoare definirii/modificarii domeniului ales

showDomainProperties()

afiseaza informatiile corespunzatoare domeniului ales


Acestea sunt functiile mai importante implementate. In plus, acest modul mai ofera posibilitatea de vizualizare a multimilor fuzzy deja definite pe anumite domenii si accesul catre modulul pentru administrarea elementelor ce definesc domeniile discrete (pentru domenii discrete) - vezi metoda de identificare a optiunilor puse la dispozitie prin intermediul barei de unelte.





Multimi fuzzy - SetsDialog


Metode (subrutine/functii) folosite:


setDefaultSettings()

actualizeaza informatiile pentru initializarea elementelor grafice. Regaseste domeniile definite in baza de cunostinte cat si multimile fuzzy deja specificate corespunzatoare si actualizeaza lista cu domenii si multimi fuzzy.

setsToolbar_ButtonClick(ByVal Button As MSComctlLib.Button)

identifica butonul apasat din bara de unelte si executa codul corespunzator. Aici, cel mai adesea se trece controlul catre formularul ce se ocupa de proprietatile multimilor fuzzy. Asupra acestuia se va reveni.

showRelatedSets()

filtreaza afisarea in lista cu multimi fuzzy, doar a acelor multimi ce sunt definite pe domeniul ales din lista ascunsa (combo) cu domeniile

deleteSelectedSet()

sterge din baza de cunostinte multimea aleasa din lista



Proprietatile multimilor fuzzy - SetPropDialog


setDefaultSettings()

regaseste datele corespunzatoare multimii fuzzy sau initializeaza mediul pentru definirea unei noi multimi fuzzy

showSetProperties()

actualizeaza informatiile referitoare la multimea fuzzy aleasa

initDiscreteValues()

regaseste datele corespunzatoare elementelor discrete ale domeniului de discurs pe care se defineste multimea si actualizeaza lista cu elemente disponibile cat si cele deja folosite pentru a descrie multimea curenta

saveCommand_Click()

salveaza informatiile corespunzatoare multimii fuzzy cu care se lucreaza

initGraph() si drawGraph()

initializeaza zona respectiv afiseaza graficul corespunzator punctelor de referinta definite. In plus, exista implementate metodele graphPicture_MouseUp graphPicture_MouseDown si graphPicture_MouseMove ce permit folosirea tehnicii Drag&Drop pentru modificarea coordonatelor unui punct in grafic. De notat este faptul ca aceste puncte sunt memorate intr-un tablou dinamic pentru o mai buna manevrare, procedeu folosit si in modulul pentru evaluarea de expresii fuzzy din aceleasi considerente.

normalizePoints()

folosita pentru a ordona punctele in ordine crescatoare dupa valoarea specificata ca apartinand domeniului de valori permise


Mai sunt implementate metode pentru conversia valorilor reale la cele corespunzatoare graficului (transpunerea in grafic a punctelor specificate).





Numere fuzzy - FnumbersDialog


Metode (subrutine/functii) folosite:


setDefaultSettings()

actualizeaza informatiile pentru initializarea elementelor de interfata. Aici se face regasirea tuturor numerelor fuzzy definite in contextul curent impreuna cu proprietatile corespunzatoare.

fNToolbar_ButtonClick(ByVal Button As MSComctlLib.Button)

permite executarea operatiilor de administrare a numerelor fuzzy (adaugare, modificare, stergere, samd)

saveCommand_Click()

permite salvarea informatiilor cu privire la un numar fuzzy

deleteFN()

permite stergerea unui numar fuzzy din baza de cunostinte

showFNProperties()

afiseaza informatiile cu privire la un numar fuzzy

drawGraph()

afiseaza reprezentarea grafica a modului in care un numar fuzzy afecteaza conform proprietatilor specificate





Modificatori lingvistici - ModifiersDialog


Metode (subrutine/functii) folosite:


setDefaultSettings()

regaseste informatiile cu privire la modificatorii lingvistici definiti in contextul curent cu scopul de a initializa mediul de lucru cu acestia

modifiersToolbar_ButtonClick(ByVal Button As MSComctlLib.Button)

permite executarea operatiilor de lucru cu modificatorii lingvistici (adaugare, modificare, stergere, samd)

downCommand_Click()

decrementeaza gradul in care afecteaza modificatorul lingvistic ales din lista

upCommand_Click()

incrementeaza gradul in care modificatorul afecteaza

saveCommand_Click()

salveaza modificarile facute asupra proprietatilor unui modificator lingvistic

deleteModifier()

sterge modificatorul ales





Construirea si Evaluarea Expresiilor fuzzy - ExprEvDialog


Metode (subrutine/functii) folosite:


setDefaultSettings()

regaseste informatiile cu privire la domenii, multimi, modificatori, numere fuzzy, samd,  definite in contextul curent si actualizeaza elementele de intefata

showExpression()

afiseaza expresia construita conform elementelor utilizate in constructor pentru prima metoda de evaluare (evaluarea gradului de credibilitate/adevar corespunzator expresiei construite)

showEvExpression()

afiseaza expresia construita conform elementelor utilizate in constructor pentru cea de-a doua metoda de evaluare (evaluarea gradului de apartenenta a unei valori specificate la toate multimile definite pe domeniul ales, cu aplicarea modificatorilor lingvistici pe acele multimi ce accepta sa le fie aplicat un modificator)

isOkToModify(setID As Integer, domain As Integer) As Integer

verifica daca o multime poate fi modificata (i se poate aplica un modificator lingvistic). Intoarce -1 daca se poate aplica modificator la stanga, 1 daca se poate aplica modificator la dreapta si 0 daca nu accepta modificator.

modifyLeft(depth As Integer)

modifica la dreapta multimea cu care se lucreaza

modifyRight(depth As Integer)

modifica la stanga multimea cu care se lucreaza

getGrade(value As Double) As Double

intoarce gradul de apartenenta calculat corespunzator valorii specificate prin value

evaluateCommand_Click()

executa operatiile de evaluare a expresiei folosind prima metoda de evaluare

evalCommand_Click()

executa operatiile de evaluare a expresiei folosind cea de-a doua metoda de evaluare



Descrierea contextului - ContextPropDialog


Metodele folosite aici nu fac decat sa actualizeze campurile corespunzatoare din tabela cu proprietatile contextului, acestea referindu-se la un Identificator pentru context, cateva elemente pentru a descrie acest context, cat si unele note/observatii ce se pot face. Aceste metode sunt cat se poate de simple si nu fac obiectul unui studiu complex.




Pentru alte informatii cu privire la modul de functionare si utilizarea acestor module si pentru a intelege mai bine modelul adoptat, aveti la dispozitie aplicatia impreuna cu ghidul de utilizare/asistenta, codul sursa impreuna cu toate elementele utilizate in dezvoltare, baza de date in a carei structura sunt integrate comentarii asupra tabelelor (relatiilor), campurilor, modului in care sunt implementate relatiile intre campurile diferitelor tabele.










Pentru alte informatii, trimiteti un eMail la adresa lt_mirel@hotmail.com