Obiecte Binare Mari In Guru
CUPRINS
CAPITOLUL 1. INTRODUCERE…………………………………………………1
CAPITOLUL 2. STRUCTURA ȘI OBIECTIVELE
SISTEMELOR EXPERT…………………………………….3
2.1 DEFINIRE ȘI CARACTERISTICI……………………… ………..3
2.2 STRUCTURA UNUI SISTEM EXPERT…………………………4
CAPITOLUL 3. METODE DE REPREZENTARE A
CUNOȘTINȚELOR ……………………………………………6
3.1 INTODUCERE……………………………………………………………….6
3.1.1 NIVELE ȘI COMPONENTE ALE
CUNOAȘTERII………………………………………………………6
3.2 REȚELE SEMANTICE ……………………………………………….10
3.2.1 REȚELE SEMANTICE SIMPLE………………………….11
3.3 IMPEMENTAREA REȚELELOR SEMANTICE
ÎN GURU………………………………………………………………………16
3.4 CADRELE LUI MINSKY ……………………………………………22
3.5 IMPLEMENTAREA CADRELOR LUI MINSKY
ÎN GURU………………………………………………………………………28
CAPITOLUL 4. SISTEME EXPERT BAZATE PE REGULI……….42
4.1 FUNCȚIONAREA SISTEMELOR EXPERT
BAZATE PE REGULI …………………………………………………42
4.2 FIȘIERE RSS ÎN GURU……………………………………………….56
4.3 APLICAȚIE ÎN GURU…………………………………………………65
BIBLIOGRAFIE
DOCUMENTAȚIE GURU
*** MANUAL DE COMPONENTE INTEGRATE , VERSIUNEA 3 MDBS
DORIN ZAHARIA și alții – SISTEME EXPERT , editura SOCIETATEA
ȘTIINȚA ȘI TEHNICĂ ,1998
NOTE DE CURS DE SISTEME EXPERT AN IV
=== CAP1,2,3 ===
CAPITOLUL IV
1.FUNCȚIONAREA SISTEMELOR EXPERT BAZATE PE REGULI DE PRODUCȚIE
ETAPELE UNUI CICLU DE BAZĂ AL MOTORULUI DE INFERENȚE
Motorul de inferențe este inima sistemului expert deorece construiește , utilizând baza de cunoștințe , raționamentele alegând regulile ce urmează a fi folosite și stabilind ordinea de înlănțuire a acestora.
Indiferent de modul de raționament utilizat ciclul de bază al unui motor de inferențe comportă patru etape : selecția , filtrajul , rezolvarea conflictelor și execuția propriu – zisă ( declanșarea regulilor alese ).
Selecția extrage din baza de reguli și din baza de fapte elementele care caracterizează subdomeniul de rezolvare a problemei , adică se realizează o partiție a bazei de cunoștințe care va scurta timpul de căutare pentru etapele următoare.
Filtrajul ( pattern matching ) constă în compararea premiselor regulilor selecționate anterior cu faptele ce caracterizează problema de rezolvat. În urma acestei comparări pot rezulta una sau mai multe sau nici o regulă declanșabilă. Dacă nu se obține nici o regulă declanșabilă înseamnă că s–a înregistrat un eșec pe care Sistemul Expert trebuie să–l explice sau utilizatorul trebuie să răspundă la întrebări ale Sistemului Expert pentru completarea formulării problemei.
Rezolvarea conflictelor este necesară atunci când din etapa de filtraj rezultă mai multe reguli declanșabile și trebuie aleasă una pentru a fi executată.
Pot exista mai multe criterii de alegere , cum ar fi :
regula cu eticheta cea mai mare sau cu eticheta cea mai mică;
regula cea mai complexă sau cea mai puțin complexă; o regula este mai complexă decât alta dacă are numărul de premise mai mare decât cealaltă ;
regula cu prioritatea cea mai mare sau cea mai mică ;
criteriul mixt ce se folosește în situația în care aplicând un singur criteriu nu putem să departajăm o singură regulă.
Execuția regulii alese constă în adăugarea uneia sau mai multor fapte în baza de fapte.
Motorul de inferențe poate folosi trei moduri de raționament :
deductiv ( înainte ) , dirijat de fapte ;
inductiv ( înapoi ) , dirijat de scop ;
mixt.
Raționamentul deductiv
Motorul de inferențe pleacă de la fapte și caută un anume scop. Etapa de filtraj constă în extragerea din baza de cunoștințe a regulilor care au în partea de premise numai fapte aflate în formularea problemei. În urma etapei de rezolvare a conflictelor se alege o singură regulă care va fi executată. Procesul se reia până când se atinge scopul propus sau nu mai există nici o regulă aplicabilă.
Etapele acestui mod de raționament sunt date de următorul algoritm :
Introducere fapte inițiale și scopul urmărit
ÎNCEPUT
Etapa de filtraj
Determinarea regulilor declanșabile (aplicabile)
ATÂTA TIMP cât mulțimea regulilor declanșabile nu este vidă
sau scopul nu a fost atins
EXECUTĂ
Etapa de rezolvare conflicte
Aplicarea regulii alese
Modificarea regulilor declanșabile
SF_EXECUTĂ
SF_ATÂTA_TIMP
SFÂRȘIT.
Raționamentul deductiv aduce două mari avantaje :
dă posibilitatea generării tuturor soluțiilor posibile;
îmbogățește la fiecare ciclu al motorului de inferențe baza de fapte , ceea ce simplifică deducțiile ulterioare.
Acest mod de raționament prezintă și unele inconveniente , cum ar fi :
baza de fapte trebuie să conțină suficiente fapte inițiale, pentru ca sistemul să poată atinge scopul urmărit ( problema trebuie definită în detaliu ) ;
sunt declanșate toate regulile aplicabile, chiar dacă unele nu prezintă interes ;
în unele situații , când numărul de reguli și de fapte este foarte mare , iar scopul nu poate fi atins , există riscul ajungerii la o explozie combinatorie privind numărul de cicluri de bază ale motorului de inferențe ;
nu este interactiv în timpul inferențelor , ceea ce face ca în situațiile de eșec, în care numărul de fapte necunoscute se reduce la unul singur (sau un număr mic) , utilizatorul să nu poată cunoaște această situație în care ar putea interveni.
Raționamentul inductiv
Raționamentul inductiv pleacă de la un scop și este dirijat de acesta în sensul găsirii faptelor care permit realizarea acestuia.
Regulile selecționate sunt cele care au în partea de concluzii scopul specificat inițial. Premisele acestora vor deveni subscopuri ce urmează a fi realizate. Acest proces se repetă până când toate subscopurile obținute sunt demonstrate sau se ajunge la situația de eșec deoarece mulțimea regulilor declanșabile este vidă.
Avantajele principale ale acestui raționament constau într–un spațiu de memorie internă redusă ( arborele de căutare fiind foarte mic ) și timpul de găsire al soluțiilor care este scurt.
Există riscul apariției ciclării : pentru a demonstra A trebuie demonstrat B , pentru a demonstra B trebuie demonstrat A , …
Algoritmul acestui raționament este următorul :
Introducere scop
ÎNCEPUT
Etapa de filtraj
Determinarea regulilor declanșabile (aplicabile)
DACĂ mulțimea regulilor declanșabile este vidă
ATUNCI chestionează utilizatorul
ALTFEL
ATĂTA TIMP cât scopul nu a fost demonstrat și există
reguli declanșabile
EXECUTĂ
Etapa de rezolvare conflicte
Etapa de execuție a regulii alese
Reține premisele regulii alese (subscopuri)
DACĂ un scop nu este rezolvat
ATUNCI reia de la început
SF_DACĂ
SF_EXECUTĂ
SF_ATÂTA TIMP
SF_DACĂ
SFÂRȘIT .
Raționamentul mixt
Are la bază următorul principiu : se fixează un scop , se determină faptele deductibile , se aplică raționamentul inductiv și apoi se aplică raționamentul deductiv pentru a deduce tot ce este posibil.
Sistematizând aceste etape se obține algoritmul :
Parametru de apel : SCOPUL
ÎNCEPUT
ATÂTA TIMP CÂT scopul este necunoscut și deductibil
EXECUTĂ raționamentul inductiv cu eventuale cereri de interogare
EXECUTĂ raționamentul deductiv
Determină faptele deductibile
SF_ATÂTA TIMP
DACĂ scopul este cunoscut
ATUNCI afișează scopul
ALTFEL afișează EȘEC
SF_DACĂ
SFÂRȘIT
Prioritatea între cele două moduri de raționament , inductiv și deductiv , în cadrul raționamentului mixt depinde de natura problemei și de modul de reprezentare a cunoștințelor. Raționamentul mixt se recomandă atunci când problema de rezolvat se pretează la un raționament deductiv , dar spațiul de căutare este larg. Aplicând mai întâi raționamentul inductiv se restrânge spațiul de căutare pentru raționamentul deductiv.
STRATEGII DE CONTROL ÎNTR – UN SISTEM EXPERT
Posibilitățile motorului de inferențe pot fi diferențiate de elemente ca : monotonia, regimul de lucru , modul de parcurgere al arborilor ȘI / SAU. Combinarea acestor elemente duce la obținerea strategiei de control a Sistemului Expert.
Un Sistem Expert funcționează într–o maniera monotonă dacă :
nici o cunoștință ( regulă sau fapt ) nu poate fi ștearsă din bază ;
nici o cunoștință adăugată în bază nu introduce contradicții.
Un Sistem Expert funcționează într–o manieră non – monotonă dacă în timpul procesului deductiv se poate reanaliza veridicitatea unor fapte , ceea ce ar putea duce la cunoștințe noi.
Legat de monotonia sau non – monotonia Sistemului Expert , baza de cunoștințe poate fi exploatată conform principiilor lumii închise sau lumii deschise.
În cazul lumii închise se consideră că toate aserțiunile care nu sunt prezentate explicit în baza de cunoștințe sunt false , iar absența unui fapt care nu este deductibil echivalează cu negarea lui.
Principiul lumii deschise afirmă , contrar primei interpretări , că toate cunoștințele trebuie prezentate explicit în bază.
În caz de eșec motorul de inferențe poate lucra în unul din modurile :
cu revenire , dacă se reîntoarce la inferența realizată în ciclul anterior eșecului , pentru a explora o altă cale de rezolvare ;
irevocabil , dacă se oprește , considerând revenirea la ciclul precedent ca inutilă
PROIECTAREA ȘI REALIZAREA SISTEMELOR EXPERT
CICLUL DE VIAȚA AL UNUI SISTEM EXPERT
Calitatea și utilitatea unui Sistem Expert depind de cunoștințele pe care le încorporează și utilizează și de aceea , realizarea unui Sistem Expert este orientată spre cunoștințe , începând cu identificarea structurilor corespunzătoare domeniului de expertiză și continuând cu colectarea , reprezentarea , validarea și utilizarea acestora.
Ciclul de viață al unui Sistem Expert se compune din următoarele etape :
analiza preliminară ;
modelarea conceptuală ;
colectarea cunoștințelor ;
reprezentarea cunoștințelor ;
validarea sistemului ;
introducerea în exploatare și menținerea în funcțiune.
Conceperea și realizarea unui Sistem Expert presupune în principal existența a două categorii de personal :
experții umani , ale căror cunoștințe sunt corelate și difuzate către utilizatori prin Sistemul Expert ;
cogniticienii , care transpun cunoștințele și strategiile de raționament ale expertului uman în structuri specifice metodei de reprezentare a cunoștințelor și a instrumentelor utilizate.
Alături de aceștia mai participă :
utilizatorii finali , care lucrează cu sistemul valorificând cunoștințele din el ;
proiectanții și programatorii , care realizează conceperea și programarea comunicației cu utilizatorul , transferul de informații de la și către aplicațiile informatice existente , etc.
Structura ciclului de viața al unui sistem expert
Selectarea problemei
Stabilirea mijloacelor
Concepte
Transferul
expertizei de la
expertul uman
spre calculator Structura
Baza de cunoștințe
Sistem Expert final ( operațional )
Analiza preliminară urmărește definirea activității care va face obiectul sistemului expert și alegerea instrumentelor informatice necesare.
Activitatea trebuie să satisfacă cel puțin următoarele cerințe :
să facă apel la cunoștințe aparținând unui domeniu bine delimitat ;
să aibă un nivel mediu de complexitate ;
să fie structurabilă ;
să reprezinte o lucrare repetitivă în timp ;
să fie bine cunoscută de către experți ;
să nu facă apel la tipuri de cunoștințe ce nu pot fi tratate prin una din metodele de reprezentare existente.
După selectarea unei activitați ( probleme ) care să satisfacă criteriile amintite , procesul se continuă cu o analiză mai detaliată , menită să verifice oportunitatea rezolvării ei printr–un sistem expert. Acest lucru este influentat de patru categorii de factori :
natura problemei sau activității ;
rezultatele previzibile ;
expertiza disponibilă ;
utilizatorii finali.
După natura problemei , evaluarea se bazează pe următoarele criterii :
lucrarea este cognitivă , solicitând analiză , sinteză sau decizie ;
implică raționamente sau cunoștințe simbolice ;
folosește un număr mare de parametrii ;
folosește reguli și metode euristice ;
trebuie rezolvată pe baza unor date incomplete ;
solicită explicații și justificări ale rezultatelor sau raționamentelor ;
implică inlănțuiri de raționamente , structurate pe mai multe nivele ;
nu poate fi rezolvată cu metode informatice convenționale.
Din punct de vedere al rezultatelor , evaluarea se bazează pe raportarea efectelor previzibile ale Sistemului Expert la următoarele criterii :
conduce la creșterea semnificativă a cifrei de afaceri ;
conduce la reducerea costurilor ;
determină îmbunătățirea calității serviciilor oferite ;
colectează expertiză pentru care nu există documentație scrisă ;
asigură difuzarea expertizei existente către personalul lipsit de experiență sau către debutanți ;
poate fi realizat cu un efort minim de programare
Din punct de vedere al expertizei disponibile , trebuie avute în vedere următoarele criterii :
există unul sau mai mulți experți recunoscuți în domeniu ;
experții sunt disponibili pentru o perioadă de timp suficientă ;
experții sunt de acord să elaboreze cazuri pentru testarea sistemului și să participe la evaluarea lui.
Pentru viitorii utilizatori se consideră următoarele criterii :
utilizatorii resimt necesitatea sistemului ;
un Sistem Expert nu poate fi utilizat de persoane fără cunoștințe profesionale corespunzătoare.
Sub aspectul instrumentelor informatice pot exista două opțiuni :
realizarea unui motor de inferențe propriu ;
utilizarea unui generator de Sistem Expert care are încorporat motorul de inferență
Alegerea uneia dintre cele două posibilități trebuie să aibă în vedere următoarele criterii :
limbajul de reprezentare al cunoștințelor să fie simplu și cât mai general ;
să existe un mecanism de control eficace , cu posibilități de automodificare și un modul explicativ elaborat ;
comunicarea cu utilizatorul să fie cât mai apropiată de limbajul natural ;
să existe o experiență anterioară , pentru a avea elemente de comparație.
Modelarea conceptuală
Această etapă urmărește definirea structurii conceptuale a cunoștințelor utilizate de expertul uman pentru Sistemul Expert care urmează a fi proiectat. Expertul împreună cu cogniticianul definește noțiunile de bază folosite , relațiile esențiale existente între noțiuni , lucrările principale de efectuat și restricțiile generale care intervin pe parcursul rezolvării problemelor.
Modelarea conceptuală are ca obiective :
identificarea principalelor “ obiecte “ , concepte sau entități din domeniul de expertiză ;
definirea atributelor necesare descrierii obiectelor , conceptelor sau entităților ;
identificarea celor mai importante corelații care există între ele ;
examinarea restricțiilor care intervin în relațiile dintre obiecte ;
specificarea tipurilor de probleme la care va răspunde Sistemul Expert ;
definirea cadrului general de utilizare al Sistemului Expert , atât sub aspectul manierei de comunicare a problemei de rezolvat cât și al interacțiunii cu utilizatorul final.
Colectarea cunoștințelor
În această etapă se urmărește colectarea tuturor cunoștințelor necesare construirii modelelor conceptuale și a bazei de cunoștințe. Principalele inconveniente care apar în realizarea sa sunt :
lipsa de sistematizare inițială , datorată faptului că expertul nu are nevoie să–și sistematizeze cunoștințele ;
omiterea unor cunoștințe care pentru expertul uman sunt subînțelese ;
existența mai multor surse de cunoștințe ;
dificultatea de a identifica , din masa de cunoștințe pe cele relevante ;
necesitatea de a colecta un număr foarte mare de excepții pentru a putea conferi suficientă flexibilitate sistemului .
Descrierea cunoștințelor se poate axa pe următoarele aspecte :
identificarea obiectelor , conceptelor sau noțiunilor folosite , operație privită ca un proces de rezolvare a problemelor legate de eventuale ambiguități ;
descrierea obiectelor , conceptelor sau noțiunilor folosite , prin precizarea atributelor și a valorilor relevante ale acestora ;
organizarea cunoștințelor care constă în precizarea rețelelor ierarhice sau de clasificare ale obiectelor , conceptelor și a noțiunilor folosite.
Colectarea cunoștințelor se poate realiza pe cale manuală sau automată.
Principalul procedeu de culegere manuală este interviul.
BAZA DE
CUNOȘTINȚE
a) Colectarea cunoștințelor prin interviu
COGNITICIAN
BAZA DE
CUNOȘTINȚE
b) Colectarea cunoștințelor prin interacțiune cu sistemul
CAZURI ȘI
EXEMPLE
BAZA DE
CUNOȘTINȚE
c) Colectarea cunoștințelor prin inducție automată
Automatizarea achiziționării cunoștințelor presupune definirea unor instrumente informatice care să asigure următoarele servicii :
asistarea expertului în transmiterea directă a cunoștințelor sale , fără a mai fi necesară participarea cogniticianului ;
sprijinirea cogniticianului în culegerea mai eficientă a cunoștințelor.
Cunoștințele colectate în această etapă nu sunt direct utilizabile ci ele urmează a fi structurate și exprimate adecvat metodei de reprezentare a cunoștințelor și a particularităților motorului de inferențe.
Reprezentarea cunoștințelor
Această etapă urmărește să asigure formalizarea și reprezentarea cunoștințelor în structura adecvată înregistrării lor în baza de cunoștiințe și utilizării de către motorul de inferențe.
Reprezentarea cunoștințelor este o etapă de detaliere a modelelor conceptuale , de traducere în termeni concreți , de aducere la un model comun a diferitelor modele structurale , funcționale , cauzale și cognitive rezultate în etapa de modelare conceptuală. Acest model poate fi considerat un model logic al cunoștințelor sau interfața cu suportul software care asigură implementarea.
Validarea sistemului
Scopul acestei etape este de a verifica măsura în care sistemul obținut poate fi utilizat în practică.
Validarea sistemului trebuie să cuprindă următoarele elemente :
rezultatele furnizate de sistem ;
procesele de raționament care conduc la aceste rezultate ;
metodele de inferență aplicate.
Criteriile care stau la baza validării sistemului sunt :
naturalețea în interacțiune cu utilizatorul uman ;
gradul de acoperire al problemelor din domeniul de expertiză ;
capacitatea de a răspunde la diferite formulări ale problemelor ;
precizia rezultatelor furnizate.
În funcție de rezultatele obținute , validarea poate impune completarea , rafinarea sau îmbogățirea bazei de cunoștințe dar și operarea de modificări.
Introducerea în exploatare și menținerea în funcțiune :
Introducerea în exploatare grupează activitățile necesare trecerii la stadiul de sistem operațional. Acest lucru se realizează pe două nivele :
prin integrarea în structurile organizatorice existente ;
prin integrarea cu aplicațiile informatice aflate deja în exploatare.
Menținerea în funcțiune vizează asigurarea evoluției sistemului prin completarea sau modificarea ulterioară a bazei de cunoștințe și adaptarea sa la evoluția tehnologiilor informatice.
2. FIȘIERE RSS ÎN GURU
Sistemul Guru integrează Sistemele Expert cu celelalte facilități de gestiune a datelor ( baze de date , calcul tabelar , etc. ) permițând dezvoltarea unor noi tipuri de aplicații inteligente dintre care menționăm :
aplicații de procesare a datelor care include facilități de raționament ;
aplicații care accesează automat datele și iau decizii ;
aplicații care gestionează informații incerte , studiază soluțiile posibile și recomandă alternative ;
sisteme expert distribuite utilizând facilitățile de comunicare între calculatoare.
Nucleul unui sistem expert scris în Guru este mulțimea sa de reguli. O mulțime de reguli este o colecție de reguli referitoare la un domeniu specific și care poate fi consultată într–o sesiune de lucru Guru pentru a obține concluzii relativ la o situație din domeniul specificat.
O regulă este o informație care spune motorului de inferență ce acțiuni să execute dacă anumite condiții sunt adevărate. O regulă are următoarea structură :
IF condiții ce trebuie să fie adevărate THEN acțiuni ce vor fi executate
Premisa Concluzie
Dacă pe parcursul consultării , Guru descoperă că este adevărată concluzia atunci regula “ ia foc “ : aceasta înseamnă că Guru realizează acțiunea regulii. Dacă condițiile regulii nu au fost satisfăcute atunci concluziile nu se vor executa. Fiecare regulă nouă introdusă trebuie să aibă un nume care are până la opt caractere alfa – numerice , primul fiind alfabetic. Numele trebuie să difere de cuvintele cheie Guru sau de numele tabelelor , câmpurilor și variabilelor de mediu. Premisa unei reguli începe cu clauza IF și poate fi o expresie logica. Ea poate fi o singură condiție sau mai multe legate între ele prin expresii logice.
Ex :
IF : ……
or
IF : ……
După ce a fost introdusă premisa trebuie specificat ce se dorește ca Guru să realizeze când premisa este adevărată. Concluzia poate fi o secvență ce constă în una sau mai multe comenzi Guru , indiferent care ar fi acestea. Secvența poate consta în comenzi asociate :
THEN : ……
or
THEN : ……
Definiția minimală a unei reguli are urmatoarea structură :
RULE : nume _regulă
IF : expresie logica ( premisa )
THEN : secvența de acțiuni ( concluzie )
O mulțime de reguli conține o colecție de reguli care trebuie consultate pentru luarea unor decizii în diferite probleme. Mulțimea de reguli devine “ expertul “ în sistemul expert.
Când construim o mulțime de reguli se conturează un scop. Acesta este o variabilă a carei valoare trebuie determinată de Guru în cursul consultării. O mulțime de reguli are două componente esențiale :
variabilele scop ;
regulile individuale ;
Crearea unei mulțimi de reguli se face folosind un editor de text sau un editor specializat BUILD. Comanda BUILD prezintă o serie de meniuri menite să formalizeze expertiza unei colecții de reguli din mulțimea de reguli. Poate fi folosită pentru construirea unei noi mulțimi de reguli sau pentru modificarea mulțimii de reguli ale unei expertize într–o aplicație. Când se construiește o mulțime de reguli cu una din comenzile BUILD sau TEXT , mulțimea de reguli va fi salvată într–un fișier al cărui nume este compus din numele mulțimii de reguli plus extensia .RSS ( Rule Set Source ). Folosind editorul de text mulțimea de reguli se construiește, de la prompterul Guru astfel:
Guru > TEXT nume_mulțime_de_reguli.rss
Într – un fișier text , o mulțime de reguli are următoarele componente distincte :
secțiunea GOAL;
secțiunea INITIAL ;
secțiunea DO ;
secțiunea RULE ;
secțiunea VAR ;
secțiunea END.
Secțiunea GOAL începe cu cuvântul GOAL. Nu are clauze opționale.
Are sintaxa:
GOAL : gvar ,
unde gvar este numele unei variabile de lucru care servește la găsirea scopului mulțimii de reguli. Dacă variabila scop nu este specificată când se solicită o consultare atunci gvar devine scopul consultării. Dacă o variabilă scop este declarată într–o consultare newgoal atunci absența scopului gvar este ignorată și variabila specificată ( newgoal ) devine variabila scop pentru consultare.
Secțiunea INITIAL definește secvența de inițializare a inferenței care constă în una sau mai multe comenzi care vor fi executate înainte de a lua în considerare regulile. Aici se află comenzile INPUT necesare pentru a inițializa variabilele utilizate în consultație.
Secțiunea DO este secțiune de încheiere și constă în una sau mai multe comenzi Guru. Acestea vor fi executate după încheierea procesului de raționament.
Secțiunea RULE începe cu cuvântul RULE și are clauze variate. Clauzele pot apare în orice ordine în această secțiune. În mulțimea de reguli putem avea una sau mai multe secțiuni RULE , dar fiecare din aceste secțiuni specifică o singură regulă.
Secțiunea VAR , opțional apare o dată sau de mai multe ori. Fiecare secțiune VAR caracterizează o variabilă de lucru care poate apare cu o valoare UNKNOWN în anumite momente ale inferenței.
Secțiunea VAR poate cuprinde una din următoarele opțiuni :
FIND : Secțiunea FIND conține una sau mai multe comenzi ce pot fi executate pentru a determina valoarea variabilei ;
WHEN : Clauza WHEN este un singur caracter care indică când și dacă se vor executa
comenzile din secțiunea FIND. Există următoarele convenții :
“ F “ – ( First ) – se execută clauza FIND înaintea inferenței ;
“ L “ – ( Last ) – clauza FIND se execută la sfârșit dacă prin inferență nu
s–a putut obține o valoare pentru variabilă ;
“ N “ – ( Never ) – clauza FIND nu va fi executată niciodată ;
LABEL : Clauza LABEL este textul afișat în descrierea variabilei în timpul sau după o
consultare ;
LIMIT : Indicatorul de limită este un număr întreg care specifică numărul maxim de
valori pe care le poate avea simultan variabila de lucru ;
TYPE : Codul TYPE constă în două caractere care indică modul de combinare a
factorilor de certitudine în timpul unei consultații.
Secțiunea END marchează sfârșitul mulțimii de reguli.
Odată ce mulțimea de reguli a fost creată , folosind BUILD or TEXT , se poate compila fișierul înainte de a –l consulta. Compilarea se face cu comanda COMPILE :
Guru > compile nume_mulțime_de_reguli.rss
Rezultatul compilării este salvat într–un fișier al cărui nume este compus din numele mulțimii de reguli plus extensia .RSC ( Rule Set Compiled ).
Comanda BUILD furnizează un meniu accesibil celor mai puțin familiarizați cu aspectele mulțimii de reguli. Se poate accesa RULE SET MANAGER din interfața meniului COMMANDER sau cu comanda BUILD ruleset , unde ruleset este numele unei noi mulțimi de reguli pe care vrem s–o construim sau a unei mulțimi de reguli existente pe care vrem s–o modificăm. Extensia este implicit .RSS. Dacă se omite numele mulțimii de reguli atunci Guru dă un nume mulțimii de reguli.
Se poate realiza comanda BUILD din meniul COMMANDER GURU . Selectând EXPERT SYSTEMS se poate edita mulțimea de reguli.
În continuare se apasă R pentru a selecta opțiunea RULE SET ca în figură :
Din meniul RULE SET se poate crea o nouă mulțime de reguli , selecta și lucra cu o mulțime de reguli deja existentă sau se poate compila mulțimea. CONSULT se selectează pentru a realiza o consultare de la interfața COMMANDER.
După ce s – a efectuat comanda BUILD trebuie dat un nume fișierului , dacă nu a fost deja specificat și meniul BUILD expune meniul selecțiilor :
Definition : Opțiunea Definition dă posibilitatea definirii sau schimbării scopului
mulțimii de reguli ;
Initialization dă posibilitatea realizării inițializărilor ;
Rules : Selectând opțiunea Rules se pot viziona , crea , edita , șterge și copia regulile;
Variables : Selectând opțiunea Variables se pot viziona , crea , edita , șterge și copia
variabilele mulțimii de reguli ;
Exit : La opțiunea Exit avem șansa de a salva sursa mulțimii de reguli , să o compilăm
ori să părăsim lucrul cu mulțimea de reguli .
Următoarea figură reprezintă fereastra editorului mulțimii de reguli:
Edit : Selectând EDIT cursorul se mută la prima pagină de reguli . Se poate edita prioritatea , costul ,Cap(numărul maxim al folosirilor permise ale unei reguli) și strategia utilizată pentru testarea premisei .
Next / Prior : Aceste opțiuni afișează mulțimea de reguli la regula următoare sau la cea
precedentă ;
Return : Se folosește când se dorește întoarcerea la meniul BROWSE.
CONSULTAREA UNUI SISTEM EXPERT
Odată ce a fost creată și compilată o mulțime de reguli , poate fi consultat Sistemul Expert cu comanda CONSULT.
Guru prezintă o mulțime de metode de consultare în funcție de varianta comenzii CONSULT.
Prezentăm în continuare câteva variante de comenzi CONSULT :
CONSULT TO SEEK ( mersul înapoi )
Este probabil cea mai folosită metodă de consultare. Face ca Guru să raționeze invers , de la concluzie la premisă , pentru a găsi valoarea variabilei scop.
Guru găsește toate regulile ale căror concluzii pot furniza rezultate pentru valoarea variabilei scop și selectează pe una dintre acestea. Guru se întoarce apoi să selecteze premisa regulii considerată. Dacă premisa este adevărată atunci regula “ ia foc “
Aceasta înseamnă că acțiunea specificată în concluzie va fi executată și o valoare va fi atribuită variabilei scop. Dacă premisa este falsă atunci regula nu “ ia foc “ și o altă regulă va fi luată în considerație. Dacă premisa are variabile UNKNOWN atunci fiecare din acestea devin scopuri temporare pe care Guru urmărește să le rezolve într–un mod similar. După ce toate scopurile temporare rezultate pentru variabilele unknown din premisa regulii au fost rezolvate , Guru poate sau nu să determine care dintre premise este adevărată și care este falsă.
CONSULT TO TEST ( metoda mersului înainte )
Această metodă de consultare determină Guru să raționeze “ înainte “ , de la premisa regulii la concluzie , în ordinea testării efectelor mulțimii de reguli asupra valorii variabilei scop sau a oricărei variabile care poate fi modificată de acțiunea concluziei regulii. Dacă premisa regulii este adevărată , regula “ ia foc “. Dacă premisa are variabile unknown sau este falsă regula nu “ ia foc “. Ordinea în care regulile sunt selectate este dată de valoarea variabilei E.SORD.
CONSULT TO FIRE
Aceasta determină Guru să încerce să efectueze regula specificată. Dacă premisa acelei reguli este adevărată regula “ ia foc ” , iar în caz contrar nu. Dacă premisa conține variabile unknown Guru utilizează metoda înapoi pentru stabilirea valorilor acestora.
CONSULT TO EXECUTE
Această metodă de consultare determină Guru să considere o submulțime a mulțimii de reguli într–o secvență fixată ( dată ). Fiecare regulă este considerată o singură dată. Dacă premisa este adevărată atunci regula “ ia foc “. Dacă premisa este falsă sau necunoscută atunci nu va fi executată regula.
Deoarece Guru păstrează automat o ordine a regulilor executate în timpul unei consultări , această metoda care folosește mulțimea de reguli dă o cale rapidă de reexecutare a unor linii de raționament care au fost folosite într–o consultare anterioară. Aceasta este foarte folositoare când se dorește reluarea consultării pentru o mulțime de reguli.
=== CAP4 ===
CAPITOLUL I
INTRODUCERE
Inteligența artificială este o tehnologie informatică care s-a dezvoltat pe baza studiului raționamentului uman, pe înțelegerea conceptului de inteligență. Inteligența artificială este produsul cercetărilor efectuate atât în domeniul științelor exacte cât și al celor umaniste: matematicile superioare , informatica teoretică , psihologia cognitivă, lingvistica și epistemologia cunoașterii.
Această tehnologie, în esență , permite reproducerea pe cale artificială a raționamentului uman , automatizarea proceselor cognitive specifice creierului , crearea unor dispozitive de comportament inteligent , captarea cunoștințelor umane și prelucrarea lor simbolică.
Inteligența artificială este acea parte a informaticii care are drept scop executarea pe calculator a unor sarcini pe care omul , în anumite situații , le poate face mai bine decât mașina.
Principalele domenii de utilizare ale Inteligenței Artificiale sunt : demonstrarea automată de teoreme , traducerea automată , recunoașterea automată a formelor , învățarea automată și sistemele expert.
Sistemele expert înmagazinează expertiza umană acumulată prin cunoașterea profundă a unui anumit domeniu , prin experiența dobândită pe parcursul unei vieți în rezolvarea problemelor dificile , nespecifice numite probleme cu probabilități mici și consecințe mari.
Sistemele expert au fost primele aplicații ale inteligenței artificiale care au depășit stadiul de laborator și au trecut testul economiei de piață.
Sistemele expert fac parte din clasa sistemelor bazate pe depozitarea unui număr de cunoștințe care să acopere aproape toate situațiile posibile care pot apare în funcționarea unui sistem biologic , tehnic , social , economic , politic , etc.
Dacă la început sistemele expert au fost dezvoltate în domeniul tehnic și medical , în ultimul timp s-a produs o extindere a acestora în domeniul economic și în special în domeniul financiar-bancar. Acest lucru demonstrează eficacitatea tehnologiilor inteligenței artificiale : sistemele informatice inteligente sunt mult mai simplu de utilizat , mai fiabile , mai performante și deschise spre noi extensii.
CAPITOLUL II
STRUCTURA ȘI OBIECTIVELE SISTEMELOR EXPERT
2.1 DEFINIRE ȘI CARACTERISTICI
Prelucrarea inteligentă are ca pivot central raționamentul artificial , ca imitare a celui natural , efectuat de creierul uman.
Sistemele expert ( SE ) sunt sisteme de programare bazate pe tehnicile Inteligenței Artificiale care reunește cunoștințele experților umani dintr-un domeniu bine definit și apoi le folosesc pentru rezolvarea problemelor din acest domeniu.
Sistemele expert încearcă să imite raționamentele expertului uman prin raționamente artificiale , le multiplică și explicitează experiența expertului uman după prelucrarea cunoștințelor acestuia.
Un expert uman definește și rezolvă probleme din domeniul său de expertiză având capacitatea de a se orienta asupra unor aspecte precum : complexitatea , incompletitudinea , incertitudinea , inconsistența , confuzia , etc.
Sistemul expert , încercând să imite expertul uman , posedă următoarele caracteristici :
cunoștințele sunt independente de mecanismul de raționament
sistemul expert trebuie să fie capabil să explice raționamentele făcute și să argumenteze soluțiile obținute într-un mod cât mai apropiat de expertul uman
cunoștințele manipulate de sistemele expert sunt în general de natura simbolică
sistemele expert trebuie să fie capabile să gestioneze baze de cunoștințe de volum mare și să trateze cunoștințe inexacte și incomplete
sistemele expert utilizează metode empirice care conduc la soluțiile cele mai bune
sistemul expert este specializat într-un anume domeniu și nu în rezolvarea unei singure probleme
Sistemele expert permit extinderea ariei informaticii spre domeniile greu de algoritmizat , în care informațiile sunt preponderent calitative ( educație , juridic ,etc).
Sistemele expert pot fi folosite de sine stătător sau pot fi integrate în alte sisteme informatice.
2.2 STRUCTURA UNUI SISTEM EXPERT
Un sistem expert conține : o baza de cunoștințe , un motor de inferență și un modul explicativ.
Baza de cunoștințe conține o mulțime de cunoștințe dintr-un anume domeniu , cunoștințe care reflectă obiectele lumii reale și relațiile dintre ele. Crearea bazei de cunoștințe constă în preluarea acestora de la expertul uman , modelarea de către cognitician , în conformitate cu cerințele impuse , introducerea în bază și validarea.
Baza de fapte conține datele concrete ale problemei ce trebuie rezolvate dar și faptele rezultate în urma raționamentelor efectuate de motorul de inferență asupra bazei de cunoștințe. Uneori baza de fapte este inclusă în baza de cunoștințe.
Motorul de inferență realizează efectiv prelucrarea în sistemul expert. Pornește de la datele de intrare , activează cunoșințele din baza de cunoștințe și construiește raționamente care conduc la fapte noi , de ieșire.
În urma acțiunii motorului de inferență baza de cunoștințe se îmbogățește fie prin adăugarea unor noi elemente , fie prin modificarea celor existente. Motorul de inferență este independent de baza de cunoștințe.
Modulul explicativ justifică raționamentele efectuate de motorul de inferență , prezintă întrebările la care trebuie să răspundă utilizatorul și verifică coerența bazei de cunoștințe.
Modulul de achiziție al cunoștințelor transformă cunoștințele din forma exprimată de cognitician în forma internă de memorare pe suport și asigură interfața de comunicare cu baza de date sau cu alte sisteme.
Interfața cu utilizatorul facilitează comunicarea utilizatorului cu sistemul expert în sensul specificării datelor de intrare și al furnizării rezultatelor problemei propuse.
Achiziționarea cunoștințelor
Reprezentarea cunoștințelor
Prelucrarea cunostintelor
Utilizarea cunoștințelor
Arhitectura unui sistem expert
CAPITOLUL III
METODE DE REPREZENTARE A CUNOȘTINȚELOR
3.1 INTRODUCERE
3.1.1 NIVELE ȘI COMPONENTE ALE CUNOAȘTERII
Capacitatea sistemelor expert de a furniza rezultate utile depinde de calitatea și volumul cunoștințelor de care el dispune și pe care le folosește pentru efectuarea de raționamente.
Cunoașterea se întemeiază pe trei concepte fundamentale :
faptele – sunt informații primare care descriu elementele domeniului considerat ;
regulile – descriu modul în care se utilizează faptele ;
strategiile de raționament – exprimă modul în care se pot folosi regulile.
Deoarece cunoștințele dintr-un anume domeniu sunt , în multe cazuri , incomplete este necesar să se găsească modalități de reprezentare și de raționament în condiții de incertitudine.
Reprezentările de cunoștințe pot fi de două tipuri :
reprezentări bazate pe logica formală ;
reprezentări bazate pe partajarea proprietăților sau reprezentări succesoriale
Reprezentări bazate pe logica formală
Cunoștințele sunt reprezentate sub formă de propoziții , predicate și expresii de calcul logic. Metodele de reprezentare specifice acestui tip sunt regulile de producție.
Propozițiile reprezintă aserțiuni care pot fi adevărate sau false. Logica propozițiilor oferă un instrument formal pentru a stabili adevărul sau falsitatea propozițiilor. Propozițiile pot fi simple și compuse. Propozițiile compuse se construiesc legând , cu ajutorul conectorilor logici și , sau , nu , mai multe propoziții simple. Alături de conectorii logici propozițiile mai pot fi legate prin relații de implicație și echivalență.
O expresie , care este o propoziție elementară sau compusă se numește formulă de calcul propozițional și se definește astfel :
O propoziție elementară este o formulă
Dacă A este o formulă, atunci nu(A) este și ea o formulă
3. Dacă A și B sunt formule, atunci expresiile următoare sunt de asemenea formule:
(A și B) (A sau B) (dacă A atunci B)
4. Toate formulele admisibile în logica propozițiilor pot fi generate aplicând primele
trei reguli ale acestei definiții
Regulile de producție desemnează o modalitate de reprezentare bazată pe logica propozițiilor.
Reprezentarea cunoștințelor prin reguli de producție se face prin două tipuri de structuri : faptele și regulile.
Faptele reprezintă aserțiuni cu privire la un anumit aspect al realității. Ansamblul faptelor stocate în sistem formează baza de fapte.
Un sistem expert construiește soluția unei probleme printr-o înlănțuire de procese deductive. Faptele singure nu permit deducerea de cunoștințe noi și de aceea se utilizează regulile.
Regulile specifică legăturile dintre fapte și pornind de la ele se pot face deducții.
Forma generală a unei reguli este :
Dacă
<premise>
atunci
<concluzie>
unde atât premisele cât și concluzia sunt fapte.
O regulă are următoarea interpretare : dacă premisele sunt adevărate , adică dacă faptele ce o compun sunt confirmate de baza de fapte , atunci și faptul sau faptele din concluzie sunt adevărate și pot fi adăugate la baza de fapte. Regulile sunt înregistrate în baza de reguli , ordinea de introducere și stocare în sistem fiind nesemnificativă.
Logica predicatelor aprofundează studiul propozițiilor , prin descompunerea propozițiilor elementare în părțile lor constituente. Expresiile , în care prin eliminarea unui element și completarea spațiului cu diverse valori conduc la o mulțime de propoziții adevărate sau false se numesc predicate.
Reprezentarea cunoștințelor se poate face în două moduri :
pe baza logicii predicatelor de ordinul unu , în care utilizarea variabilelor în formularea faptelor și a regulilor este posibilă numai pentru subiecte
pe baza logicii predicatelor de ordinul doi , în care utilizarea variabilelor este permisă și pentru subiecte și pentru predicate.
Uneori este necesar ca o regulă să fie aplicată nu numai asupra unui fapt ci asupra unui grup de fapte.
Regulile de producție se formează conectând două sau mai multe fapte prin implicație logică. Astfel , stuctura abstractă a unei reguli este :
Dacă faptul_1 ( este adevărat )
și faptul_2 ( este adevărat )
…
și faptul_m ( este adevărat )
atunci
faptul_n ( este adevărat )
și se poate interpreta astfel : faptele 1 , 2 , … , m adevărate implică și faptul n adevărat.
Reguli de deducție și inducție
Forma deductivă este:
Dacă premise
atunci concluzie
Forma inductivă este inversul formei deductive:
concluzie
dacă premise
Regulile al căror rol este de a gestiona modul în care acționează alte reguli sunt numite metareguli. Cu ajutorul metaregulilor se pot implementa diverse strategii de raționament într-un sistem expert. Cunoștințele pe care le reprezintă constituie metacunoștințe.
Există situații în care faptele și regulile nu exprimă cunoștințe în totalitate certe ci ele implică un anumit grad de incertitudine. Incertitudinea într-un sistem expert poate proveni și din absența unor informații. O modalitate de rezolvare a acestei probleme constă în introducerea incertitudinii în exprimarea cunoștințelor . Elementelor din baza de cunoștințe li se atribuie un coeficient care exprimă gradul de siguranță al acestora denumit coeficient de certitudine ( QC ). Acest coeficient poate lua valori între 0 și 100 , zero corespunde valorii fals iar 100 valorii adevărat.
Tratarea incertitudinii presupune evaluarea gradului de incertitudine al faptelor de bază cât și combinarea valorilor QC pentru evaluarea gradului de incertitudine al faptelor compuse.
Coeficienții de certitudine ai faptelor compuse se determină pe baza următoarelor reguli :
QC ( A și B ) = minim ( QC ( A ) , QC ( B ) );
QC ( A sau B ) = maxim ( QC ( A ) , QC ( B ) );
QC ( nu A ) = 100 – QC ( A ).
Regulile pot avea coeficienți de certitudine , aceștia exprimând cât de certă este concluzia dedusă pe baza premiselor. Formula de calcul a coeficientului de certitudine al concluziei este :
QC ( concluzie ) = QC ( premise ) * C / 100 , presupunând cazul general :
R : QC = C
Dacă premise
atunci concluzie
Există situații în care aceeași concluzie poate fi dedusă din mai multe reguli diferite. Pentru a obține coeficientul de certitudine al unei asemenea concluzii este necesar să se combine coeficienții returnați de fiecare regulă care o cuprinde :
QC ( R1 , R2 ) = QC ( R1 ) + QC ( R2 ) – ( QC ( R1 ) * QC ( R2 ) / 100 )
Reprezentări bazate pe partajarea proprietăților ( reprezentări succesoriale )
Formalismele succesoriale se bazează pe ideea că ceea ce este adevărat pentru un concept este adevărat și pentru conceptele derivate din el. Astfel , cunoștințele pot fi structurate în ierarhii compuse din mai multe nivele , începând cu cele generale și terminând cu cele particulare. Elementele de pe un nivel conțin descrierea proprietăților care le sunt specifice. Alături de acestea ele “moștenesc“ toate proprietățile nivelelor superioare. Această modalitate de partajare a proprietăților impune o ordonare a cunoștințelor și favorizează operațiile de consultare.
Un concept aflat pe un anumit nivel poate partaja proprietățile mai multor concepte diferite , aflate pe nivelele superioare , situație desemnată de termenul “moștenire multiplă”.
Există mai multe metode de reprezentare a cunoștințelor bazate pe partajarea proprietăților : rețelele semantice , cadrele și reprezentările orientate obiect.
3.2 REȚELELE SEMANTICE
O rețea semantică utilizează metoda grafului pentru reprezentarea cunoștințelor. Rețelele semantice au fost utilizate pentru prima dată în 1968 în scopul prezentării semnificației cuvintelor din limbajul natural.
O rețea semantică are forma unui ansamblu de noduri și arce, orientate și etichetate. Nodurile servesc pentru a reprezenta conceptele (sau entitățile) iar arcele pentru a reprezenta legăturile care există între aceste concepte.
Primul fel de rețea semantică a utilizat un raționament bazat pe proprietatea de moștenire. Această manieră de raționament poate fi descrisă astfel :
fiecare X este Y ; fiecare Y este Z ; atunci fiecare X este Z .
X este Y ; fiecare Y este Z ; atunci X este Z.
3.2.1 REȚELE SEMANTICE SIMPLE
În acest paragraf prezentăm conceptul de rețea semantică simplă și oferim o implementare pentru această manieră de raționament.
Definiția 1 : Considerăm o mulțime finită X. O relație binară peste X este o submulțime X X . Dacă = atunci este numită relația vidă .
Definiția 2 : Fie 1 și 2 două relații binare peste X. Notăm cu 1 2 următoarea relație binară :
( x , y ) 1 2 <=> z X : ( x , z ) 1 și ( z ,y ) 2
Această operație poartă numele de compunerea relațiilor date ( 1 , 2 ) .
Observații :
Este cunoscut faptul că operația de compunere este una asociativă adică
1 ( 2 3 ) = ( 1 2 ) 3 pentru orice relații binare 1 , 2 , 3 .
Dintr-o pereche dată de relații binare ( 1 , 2 ) putem obține 1 2 = deși 1 și 2 .
Definiția 3 : Fie două mulțimi finite X și L0 astfel încât X L0 = . Un element din X este numit etichetă de nod ; elementele din L0 sunt numite etichete de arc. Fie T0 o mulțime de relații binare pe X astfel încât T0. Fie f0 : L0 T0 o funcție surjectivă. Sistemul G = ( X , L0 , T0 , f0 ) este numit graf etichetat.
Un graf etichetat G = ( X , L0 , T0 , f0 ) are următoarea reprezentare. Fiecare nod este reprezentat de un dreptunghi care conține eticheta sa. Trasăm un arc etichetat cu a L0 din nodul x X în nodul y X dacă și numai dacă ( x , y ) f0 ( a ) ( fig.1 ). Fiecare element al lui X va desemna un nod și numai unul ; deci poate fi stabilită o bijecție între X și mulțimea nodurilor. Spunem că a L0 este o etichetă a relației binare f0 ( a ) T0 . Pentru că f0 este o funcție surjectivă , rezultă că fiecare element din T0 are cel puțin o etichetă. a
x
Figura 1
În reprezentarea cunoștințelor relațiile binare apar în diferite feluri. De exemplu , considerăm următoarea piesă de cunoștințe K1:
Orice mâncare are gust și miros. Orice pasăre are aripi și pene. Somonul este un pește. El este roz. Brânza este o mâncare și este albă. Orice pește este un animal. Orice pasăre este un animal. Orice pește este un fel de mâncare. Bob este un papagal. Orice papagal este o pasăre.
Vom considera următoarele obiecte : mâncare , gust , miros , pasăre , aripi , pene , somon , pește , roz , brânză , alb , animal , Bob , papagal. Notăm cu X mulțimea acestor obiecte. Pentru a stabili relațiile binare , trebuie să extragem sensul asociat fiecărei perechi de obiecte. Astfel putem defini următoarele relații binare :
1 = {( mâncare , gust ) , ( mâncare , miros ) , ( pasăre , aripi ) , ( pasăre , pene )}.
2 = {( somon , pește ) , ( brânză , mâncare )}
3 = {( somon , roz ) , ( brânză , alb )}
4 = {( pește , animal ) , ( pasăre , animal ) , ( papagal , pasăre )}
5 = {( Bob , papagal )}
6 = {( pește , mâncare )}
Vom considera că pentru fiecare pereche ( x , y ) aparținând unei asemenea relații binare avem un sens și toate perechile aparținând unei relații binare date au același sens. De exemplu , faptul că ( x , y ) 4 este asociat următorul sens : “ orice x este un y “.
Luăm T0 = { 1 , ……. , 6 } , L0 = { a , b , c , d , e , f } și f0 : L0 T0 definită prin f0 ( ai ) = i pentru i { 1 , …… , 6 } , unde i dă indicele elementului corespunzător din mulțimea L0 . Obținem graful etichetat din Figura 2. Intuitiv , o etichetă x specifică un anumit sens al perechilor conținute în relația binară f0 ( x ). Consecvent , trebuie să combinăm aceste sensuri pentru a obține noi proprietăți ale perechilor , care nu sunt specificate direct în piesa de cunoștințe dată. De exemplu , trebuie să obținem proprietăți de forma Bob are aripi , somonul este un animal , ș.a.m.d.
c a
b a
f
b d
c d
e d
a a
Figura 2
Definiția 4 Fie X o mulțime finită și T0 2XxX. Notăm cu C(T0) cea mai mică mulțime A 2XxX satisfăcând următoarele două proprietăți :
T0 A ;
dacă d1 , d2 A și d1 d2 atunci d1 d2 A.
Următoarea propoziție dă un algoritm pentru calculul lui C(T0).
Propoziția 1 Șirul { Xn }n definit astfel:
X0 = T0
Xn+1 = Xn { d | d1 , d2 Xn : d = d1 d2 } , n 0
satisface următoarele proprietăți :
Xn Xn+1 pentru orice n 0
Dacă Xn = Xn+1 atunci Xn = Xn+p pentru orice p 1
Fie k cardinalul lui X. Atunci există n astfel încât Xn = Xn+1
C(T0) = Xp unde p este cel mai mic n satisfăcând condiția de mai sus
Demonstrație :
Proprietatea i) este evidentă din definirea șirului { Xn }n . A doua proprietate este obținută prin inducție după p. A treia proprietate rezultă din faptul că există relații binare peste X și { Xn }n este un șir crescător. Să demonstrăm în continuare ultima proprietate. Mai întâi , notăm U = n 0 Xn . Evident ,U T0 . Mai mult fie d1 , d2 U astfel încât d1 d2 . Atunci există u , v astfel încât d1 Xn și d2 Xr . Fie q = max{ u ,v }. Cum { Xn }n este un șir crescător , rezultă { d1 , d2 } Xq . Deci d1 d2 Xq+1 U , i.e. U este închiderea compunerii. Demonstrăm prin inducție după n că Xn Y. Pentru n = 0 această propoziție este adevărată pentru că T0 = X0 Y. Presupunem că Xn Y și fie d Xn+1 . Dacă d Xn atunci d Y . Astfel , există d1 , d2 Xn astfel încât d = d1 d2 . Prin ipoteza de inducție avem d1 Y , d2 Y deci d Y. Rezultă X = C(T0). Luând în considerare i – iii , avem C(T0) = Xp , deci p este cel mai mic n pentru care Xn = Xn+1 .
Definiția 5 Fie T0 2XxX . Mulțimea T0 se numește universul cunoașterii. O mulțime de forma :
T0 T C(T0)
Există un număr natural n și există un șir crescător T0 T1 …… Tn = T astfel încât Ti-1 Ti Ti-1 Ti-1 Ti-1 pentru orice i { 1 , … , n } , se numește lumea de raționament pentru T0 .
Intuitiv , toate faptele dintr – o bază de cunoștințe sunt reprezentate de elemente din T0 și L0 . Dimensiunea realității este dată de elementele din T\T0 pentru că numai aceste elemente pot fi obținute în urma unui proces rațional. O cunoștință de nivel superior este încorporată în T\T0 . Deci pentru T = T0 obținem un proces rațional degenerat pentru că numai faptele specificate în piesa de cunoștințe corespondentă pot fi deduse. Semanticile vor fi specificate de sensurile etichetelor care sunt atașate acestor elemente. Acest proces este specificat în următoarea definiție.
Definiția 6 Fie graful etichetat G=(X, L0 , T0, f0 ).Fie T universul rațional pentru T0. O rețea semantică simplă este un tuplu (G,T,L,f,,g,S) unde:
L0L și : LLL este o operație algebrică parțială.
f:LT este o extensie surjectivă a lui f0 astfel încât dacă (a,b) dom() atunci
f((a,b))=f(a) f(b)
S este o mulțime definind spațiul semantic
g: XLXS este numită funcția semantică.
În general , pentru că răspunsul la o interogare este dat în limbaj natural , spațiul semantic S este o mulțime a sentințelor în acest limbaj. Cu alte cuvinte folosim semantici de comunicare. Intuitiv elementul g(x,e,y) specifică semanticile pentru faptul că e este eticheta unei relații binare conținând perechea (x,y).
Definiția 7 Definim funcția : Ui 2 Li L dată de:
(e1,e2) = (e1,e2)
(e1,…..,en)=(…(e1,e2),….,en) pentru n3
Definiția 8 Fie (G,T,L,f,,g,S) o rețea semantică simplă. Notăm cu D(X,Y) mulțimea tuturor drumurilor {(xi ,ei ,xi+1)}ni=1 în G ,unde n1 , x1=X , xn+1=Y și (xi , ei , xi+1) XL0X pentru i{1,..,n}. Pentru d={(xi,ei,xi+1)}ni=1 D(X,Y) notăm pr2d=(e1, …,en) .Definim funcția deduc :XX2S astfel
deduc(X,Y)={g(X,(pr2d),Y)dD(X,Y)}
Definiția 9 Răspunsul la interogare este dat de funcția Ans dată mai jos:
Ans : XX2S {unknown}
Ans(X,Y)=unknown dacă deduc(X,Y)=
Ans(X,Y)= deduc(X,Y) în rest
3.3 IMPLEMENTAREA REȚELELOR SEMANTICE ÎN GURU
În această secțiune dăm o implementare a motorului de inferență pentru rețeaua semantică pentru piesa de cunoștințe K1.
fișierul rețele.ipf:
E.SUPD=true;
release all;
load udf proceduri;
load udf prsem;
use compun;
use semant;
global dim a( 14 ,14 );
global array ee; dim ee( 14 , 14 );
global dim denn(14);
local dim st(16);
global n;
denn(1):=”mancare”;
denn(2):=”miros”;
denn(3):=”gust”;
denn(4):=”brânza”;
denn(5):=”somonul”;
denn(6):=”peste”;
denn(7):=”pasare”;
denn(8):=”aripi”;
denn(9):=”pene”;
denn(10):=”alba”;
denn(11):=”roz”;
denn(12):=”animal”;
denn(13):=”papagal”;
denn(14):=”Bob”.
i:=1;
while (i<=14) do
j:=1;
while (j<=14) do
a(i,j):=0;
j:=j+1;
endwhile;
i:=i+1;
endwhile;
n:=13;
s1:=tblinfo(compun,2);
s2:=tblinfo(semant,2);
input n num using “dd” with “ Introduceți nr de arce:”;
output “Introduceți orientarea arcelor :”;
k:=1;
while ( k<=n ) do
input i num using “dd” with “ Nodul sursă :”;
input j num using “dd” with “ Nodul destinație :”;
input et str using “a” with “ Eticheta :“;
a(i,j):=1;
ee(i,j):=et;
k:=k+1;
endwhile;
output “ Introduceți nodurile pentru care vreți să aflați semantica : țn “;
input ns num using “dd” with “ Nodul sursă :”;
input nf num using “dd” with “ Nodul destinație :”;
k:=1;
st(k):=ns;
k:=2;
st(k):=0;
while ( k>1 ) do
v:=0;
while st(k)<=n and v=0 do
st(k):=st(k) + 1;
v=valid(st,k);
endwhile;
if v=0 then k:=k-1;
else solutie(st,k);
if st(k)=nf then k:=0;
else
k:=k + 1; st(k):=0;
endif;
endif;
endwhile;
input x num using “d” with “ Apăsați o tastă “;
Observația 1 : Nodurile au fost numerotate de la 1 la 14 , iar semnificațiile nodurilor sunt date de tabloul unidimensional denn.
Observația 2 : Etichetele arcelor sunt date în tabloul bidimensional ee iar semanticile corespunzătoare sunt date de funcția sem(i,j,z) , definita în fișierul prsem.kgl .
Observația 3 : Pentru definirea funcției , s–a folosit un tabel compun.itb , iar informațiile care se doresc să se obțină ( funcția deduc ) prin compunerea de etichete sunt rezultatul unui algoritm bazat pe strategia backtraking. Funcțiile folosite pentru aceasta sunt definite în fișierul proceduri.kgl.
fișierul proceduri.kgl :
function valid(array st , k)
global array a;
global n;
local i,x;
x:=1.0;
for i:=1 to k-1 do
x:=x*a(st(i),st(i+1));
endfor
return(x);
endfunction
function solutie(array st , k)
global array ee;
global semant;
global compun;
global s1,s2;
local i,et1,et2,etc,j1,j2;
if k>2 then
et1:=ee(st(1),st(2));
et2:=ee(st(2),st(3));
obtain first from compun;
for j1:=1 to s1 do
if compun.cod1=et1 and compun.cod2=et2 then etc:=compun.codc;
else obtain next from compun;
endif;
endfor;
obtain first from semant;
if k=3 then
for j2:=1 to s2 do
if semant.code=etc then
sem (st(1),st(3),etc);
endif;
obtain next from semant;
endfor
else
for i:=3 to k-1 do
et1:=etc;
et2:=ee(st(i),st(i+1));
obtain first from compun;
for j1:=1 to s1 do
if compun.cod1=et1 and compun.cod2=et2 then etc:=compun.codc;
else obtain next from compun;
endif;
endfor
obtain fist from semant;
for j2:=1 to s2 do
if semant.code=etc then
sem(st(1),st(i+1),etc);
endif;
obtain next from semant;
endfor
endfor
endif
endif
return;
endfunction
fișierul prsem.kgl
function sem(i,j,z)
global array denn;
TEST true
CASE z =”a”:
output “orice” , denn(i) , “are” , denn(j);
endcase;
CASE z =”b”:
output denn(i) , “este” , denn(j);
endcase;
CASE z =”c” or z =”e”
output denn(i) , “este” , denn(j);
endcase;
CASE z =”d”:
output “orice” , denn(i) , “este” , denn(j);
endcase;
CASE z =”f”:
output denn(i) , “este un fel de ” , denn(j);
endcase;
CASE z =”g”:
output denn(i) , “are” , denn(j);
endcase;
ENDTEST
endfunction
3.4 CADRELE LUI MINSKY
Conceptul de cadru apare în diferite moduri în legatură cu reprezentarea și prelucrarea cunoștințelor. Vom prezenta în continuare o modalitate care arată proprietatea moștenită a obiectelor dintr–o astfel de lume.
Termenul de cadre ( frames în engleză ) desemnează o metodă de reprezentare care permite îmbinarea , într–o structură unică , atât a aspectelor declarative cât și a celor procedurale ale cunoștințelor. Această metodă a fost propusă pentru prima oară în 1974 de către cercetătorul american Marvin Minsky.
Considerăm o mulțime finită de obiecte , fiecare obiect fiind definit de o serie de trăsături. Pentru o astfel de colecție de obiecte vom folosi termenul de lume. În general , un cadru poate fi definit ca un detaliu al lumii într–un anumit moment t de timp. De exemplu , putem scrie o lume ca o listă de forma :
[ Cadru (0) , Cadru (t), ……., Cadru(nt)] , dar acesta este cel mai simplu caz când structura poate fi definită ca una liniară. Astfel considerăm că informația privind anumite obiecte dintr–o lume dată este înmagazinată într–un cadru. Fiecare cadru F este caracterizat de :
un nume simbolic N , care este numele cadrului F ; orice cadru are un nume unic ;
o mulțime finită de nume simbolice , fiecare astfel de nume fiind numele unui părinte al lui F ; prin urmare un cadru dat poate avea zero sau mai mulți părinți ;
o mulțime finită de sloturi ; un slot este o pereche ordonată de forma ( atribut , valoare ) , unde atribut este numele simbolic al unor caracteristici , iar valoare este valoarea corespunzătoare ;
În mod consecvent vom reprezenta un cadru F ca în figura 1. Presupunem că atributi atributj pentru i j.
Cadrele sunt unite și legăturile corespunzătoare sunt date de relația părinte – copil. Valorile atribuite sunt fie valori imediate , fie proceduri care calculează aceste valori. O asemenea procedură , care returnează o valoare , este numită demon de unii autori.
Figura 1 : reprezentarea grafică a unui cadru
Să presupunem că cercetăm valoarea V a unui atribut A din cadrul F. Sunt posibile două cazuri:
Există un slot S de forma ( A , V ) sau ( A , P ) unde V este o valoare imediată și P este numele unei proceduri ; în primul caz valoarea lui A este V , iar în al doilea caz valoarea V este dată de procedura P
Nu există nici un slot S pentru F astfel încât A să fie prima componentă a lui S ; în acest caz valoarea atribuită este obținută printr–un părinte al lui F luându–se atributul corespondent moștenit de la unul din părinții săi. Această situație este iterativă , adică dacă fiecare din acești părinți nu conțin atributul corespondent atunci îl căutăm pentru părinții părinților , ș.a.m.d.
SISTEME DE REPREZENTARE A CUNOȘTINȚELOR BAZATE PE CADRELE LUI MINSKY
În acest paragraf avem de-a face cu maniera în care un sistem de reprezentare a cunoștințelor bazate pe cadrele lui Minsky poate fi definit. Pentru a obține un asemenea sistem trebuie să definim componentele sale. Limbajul de reprezentare a cunoștințelor LRe pr este definit în felul următor : din prisma formei sintactice un cuvânt din acest limbaj este de forma :
Cadru( nume , lista_nume , lista_atribut)
unde :
nume este numele cadrului
lista_nume este o listă structurată conținând numele părinților
lista_atribut este o listă structurată ; elementele sale sunt de forma
attr( nume_atribut , valoare) , atrr(nume_atribut,proc(nume))
sau
attr( nume_atribut , demon)
Primul caz specifică faptul că valoare este valoarea imediată a atributului ; în al doilea caz , nume este numele unei proceduri care calculează valoarea respectivă iar ultima formă specifică faptul că avem un atribut abstract și în cazul particular , valoarea este obținută printr–o procedură.
Fără a restrânge generalitatea putem presupune că valoarea atributului este unică. Dacă ar exista mai multe valori pentru un atribut , atunci am putea considera o listă structurată conținând aceste valori.
Dacă stabilim câteva reguli în a defini un nume de cadru , un nume de atribut , ș.a.m.d. atunci putem construi elementele lui LRe pr. De exemplu , următorul cuvânt poate fi un element al acestui limbaj:
Cadru( cutia 1, [ cutie , obiect_metal ] , [ attr ( culoare , rosu ) , ( pondere , 20 )] )
Mai exact , fie Vattr mulțimea tuturor valorilor atribute , Lfr_name mulțimea tuturor numelor de cadru , Lattr mulțimea tuturor numelor atribute și Lparinte mulțimea tuturor numelor de părinți. Fie Lproc mulțimea tuturor numelor proceduri și notăm :
Qattr = Vattr { proc(x) | x Lproc }.
Definiția 1 Forma sintactică a unui element din LRe pr este următoarea :
Cadru( nume_cadru,[p1, …..,ps],[attr(a1,v1),….., attr(ak,vk)])
unde s0,k0 , nume_cadru Lfr_name ,{ p1, …..,ps } Lparinte , ,{ a1, …..,ak } Lattr și
vi Qattr{demon } pentru i{1,..k}.
Comentariu :
Este cunoscut că atunci când definim o mulțime ,{ x1, …..,xn } , înțelegem că xixj
pentru ij. În definiția anterioară am subliniat că { p1, …..,ps } și { a1, …..,ak } sunt niște mulțimi , dar elementele v1,….,vk nu pot defini o mulțime. Prin urmare , câteva valori atribute pot coincide.
2. În definiția 1 cuvintele cadru și attr devin cuvinte cheie în reprezentrarea unui element din LRe pr
Definiția 2 Fie LRe pr limbajul de reprezentare a cunoștințelor definit anterior.
O bază de cunoștințe KB este o submulțime finită a lui LRe pr
Dacă cadru( f ,[ p1,……,ps ] , [ attr ( a1 , v1 ) , … , attr ( ak , vk )] ) KB atunci desemnăm Slot( f ) = {( a1 , v1 ) , …( ak , vk )}și Parinte( f ) = {p1,……,ps }. Definim mulțimea Pred ( f ) ca cea mai mică mulțime satisfăcând condițiile :
Parinte( f ) Pred ( f )
Dacă g Pred ( f ) atunci Parinte( g ) Pred ( f )
Un element al lui Pred ( f ) este numit predecesor al lui f .
Pentru fiecare g Lfr_nume definim KB( g ) în felul următor:
KB( g ) = dacă nu există nici un cadru în KB având numele g.
KB( g ) = {cadru( g ,[ p1,……,ps ] , [ attr ( a1 , v1 ) , … , attr ( ak , vk )] )} dacă cadrul specificat este un element al lui KB
Fie P Lproc . Desemnăm prin Domattr ( P ) mulțimea tuturor nume atribute ale căror valori sunt necesare în executarea lui P. Mai mult , desemnăm prin P ( v1 , …. , vt ) valoarea care este returnată de P dacă valorile v1 , …. , vt sunt folosite.
Definiția 3 Fie KB o bază de cunoștințe. Definim funcția :
CompKB : Lfr_nume x Lattr Vattr { unknown , demon }
astfel : fie ( f , a ) Lfr_nume x Lattr .
CompKB ( f , a ) = v dacă KB( f ) = , ( a,v ) Slot( f ) și v Vattr { demon }
CompKB ( f , a ) = P ( CompKB ( f , b1 ) , … , CompKB ( f , bt ) ) dacă KB ( f ) = ,
{b1 , …. , bt } = Domattr ( P ) și una din următoarele condiții e îndeplinită :
( a , Proc ( P )) Slot( f )
nu există nici un v astfel încât ( a ,v ) Slot( f ) , dar există un element și numai un g Pred ( f ) astfel încât ( a , Proc ( P )) Slot( g )
CompKB ( F, A ) = unknown dacă nici una din condițiile anterioare nu e adevărată
Definiția 4 Definim următoarea relație de inferență :
KB |– ( F,A ) dacă și numai dacă CompKB ( F, A ) Vattr { demon }
Definiția 5 Partea din program care calculează relația de inferență este numită motor de inferență.
Considerăm limbajul de interogare LQ = Lfr_nume x Lattr și limbajul răspuns
LAns = Vattr { unknown , demon }.
Definiția 6 Fie LKB colecția tuturor submulțimilor finite ale lui LRepr .Funcția răspuns Ans : LKB x LQ LAns este definită astfel :
Ans ( KB , ( F,A )) = CompKB ( F, A )
Următoarele operații pot fi realizate pentru o bază de cunoștințe KB utilizând cadrele lui Minsky:
ștergerea unui slot dintr – un cadru dat
ștergerea unui cadru
adăugarea unui slot pentru un cadru dat
adăugarea unui cadru
modificarea valorii unui atribut
căutarea valorii unui atribut pentru un cadru dat , acestea fiind valoarea unei funcții CompKB
Operațiile (1) – (5) sunt realizate de funcția Upd , iar ultima operație ne conduce la funcția Ans .
Vom reprezenta operațiile de mai sus prin următoarele nume simbolice , respectiv:
del_slot , del_frame , add_slot , add_frame , mod ify_value_attr , find_value_attr. Vor deveni cuvinte cheie pentru limbajul L1.
Pentru a descrie operația de actualizare a unei baze de cunoștințe , definim limbajul de intrare corespondent L1 . Forma sintactică a unui cuvânt din L1 este una din următoarele forme:
( del_slot , nume_cadru ,nume_atribut )
( del_frame , nume_cadru )
( add_slot , nume_cadru , nume_atribut , valoare )
( add_frame , cadru )
( mod ify_val_attr , nume_cadru , nume_atribut , valoare )
Mai precis L1 este reuniunea următoarelor mulțimi:
{ del_slot }x Lfr_nume x Lattr
{ del_frame }x Lfr_nume
{ add_slot }x Lfr_nume x Lattr x ( Qattr { demon })
{ add_frame } x LRe pr
{ mod ify_value_attr } x Lfr_nume x Lattr x ( Qattr { demon })
Luând în considerare definiția lui L1 și sensul intuitiv al funcției Upd , pentru un tuplu dat ( KB , ( x , w )) LKB x L1 elementul Upd ( KB , ( x , w )) este o bază de cunoștințe obținută din KB prin operația x indiferent dacă informația w este utilizată. În secțiunea următoare dăm o implementare pentru funcțiile Upd și Ans.
3.5 IMPLEMENTAREA CADRELOR LUI MINSKY ÎN GURU
În această secțiune dăm o implementare posibilă a conceptelor prezentate anterior.
program.ipf
finish all;
release all;
local vb;
perform sforma;
use nume;
use parinti;
use sloturi;
dim opt(7);
opt(1):=”Adaugare cadru”;
opt(2):=”Stergere cadru”;
opt(3):=”Adaugare slot”;
opt(4):=”Stergere slot”;
opt(5):=”Modificarea valorii unui atribut”;
opt(6):=”Consultare”;
opt(7):=”Exit”;
vb:=true;
while vb do
clear
choice:=menu(opt)
test choice do
case 1:
perform adaug_c;
continue;
case 2:
perform sterg_c;
continue;
case 3:
perform adaug_s;
continue;
case 4:
perform sterg_s;
continue;
case 5:
perform modific;
continue;
case 6:
consult cons;
continue;
case 7:
clear;
vb:=false;
endtest
clear;
endwhile
finish all;
Așadar , operațiile care pot fi realizate pentru o bază de cunoștințe utilizând cadrele lui Minsky sunt implementate în programele adaug_c , sterg_c , adaug_s , sterg_s , modific .
Aceste module sunt prezentate în continuare:
fișierul adaug_c.ipf
clear
finish all;
perform f_locale;
rasp:=”y”
while rasp=”y” do
clear;
use nume;
attach 1 to nume;
putform introduc 1;
getform introduc 1;
clear;
nc=nume.nume_cadru;
choice:=nume.nr_parinti;
choice1:=nume.nr_sloturi;
finish nume;
use parinti;
attach 1 to parinti;
parinti.nume_cadru=nc;
test choice do
case 1:
putform f1;
getform f1;
continue;
case 2:
putform f2;
getform f2;
continue;
case 3:
putform f3;
getform f3;
endtest
finish parinti;
clear;
use sloturi;
attach 1 to sloturi;
sloturi.nume_cadru:=nc;
test choice1 do
case 1:
putform fs1;
getform fs1;
continue;
case 2:
putform fs2;
getform fs2;
continue;
case 3:
putform fs3;
getform fs3;
continue;
case 4:
putform fs4;
getform fs4;
continue;
case 5:
putform fs5;
getform fs5;
continue;
end test
finish sloturi;
clear;
putform raspuns;
getform raspuns;
endwhile;
fișierul sterg_c.ipf
release all;
finish all;
local name;
e.supd:=true;
perform sforma;
rasp:=”y”;
while rasp=”y” do
clear;
use nume;
putform nume_cadru;
getform nume_cadru;
obtain record from nume for nume.nume_cadru=name;
mark record in nume with true current;
compress nume;
finish nume;
use parinti;
obtain record from parinti for parinti.nume_cadru=name;
mark record in parinti with true current;
compress parinti;
obtain first record from parinti;
local n,i;
n:=tblinfo(parinti,2);
i:=1;
while i<=n do
test true
case (parinti.parinte1=name):parinti.parinte1:=” “;
endcase;
case (parinti.parinte2=name):parinti.parinte2:=” “;
endcase;
case (parinti.parinte3=name):parinti.parinte3:=” “;
endcase;
case (parinti.parinte4=name):parinti.parinte4:=” “;
endcase;
case (parinti.parinte5=name):parinti.parinte5:=” “;
endcase;
endtest
obtain next record from parinti;
i:=i+1;
endwhile;
finish parinti;
use sloturi;
obtain record from sloturi for sloturi.nume_cadru=name;
mark record in sloturi with true current;
compress sloturi;
finish sloturi;
clear;
putform raspuns;
getform raspuns;
finish nume;
endwhile
fișierul adaug_s.ipf
clear;
finish all;
perform sforma;
rasp:=”y”;
local nrs;
while rasp=”y” do
clear;
putform nume_cadru;
getform nume_cadru;
putform ad_slot;
getform ad_slot;
use nume;
obtain record from nume for nume.nume_cadru=name;
nrs:=nume.nr_sloturi;
nume.nr_sloturi:=nrs + 1;
finish nume;
use sloturi;
obtain record from sloturi for sloturi.nume_cadru=name;
test nrs do
case 1:
sloturi.na2=na;
sloturi.va2=va;
continue;
case 2:
sloturi.na3=na;
sloturi.va3=va;
continue;
case 3:
sloturi.na4=na;
sloturi.va4=va;
continue;
case 4:
sloturi.na5=na;
sloturi.va5=va;
continue;
endtest;
finish sloturi;
clear;
putform raspuns;
getform raspuns;
endwhile;
fișierul sterg_s.ipf
clear;
perform sforma;
rasp:=”y”;
while rasp=”y” do
clear;
use sloturi;
putform nume_cadru;
getform nume_cadru;
putform stergere_slot;
getform stergere_slot;
obtain record from sloturi for sloturi.nume_cadru=name;
test true
case (sloturi.na1=na):
sloturi.na1:=sloturi.na2;
sloturi.va1:=sloturi.va2;
sloturi.na2:=sloturi.na3;
sloturi.va2:=sloturi.va3;
` sloturi.na3:=sloturi.na4;
sloturi.va3:=sloturi.va4;
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na2=na):
sloturi.na2:=sloturi.na3;
sloturi.va2:=sloturi.va3;
` sloturi.na3:=sloturi.na4;
sloturi.va3:=sloturi.va4;
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na3=na):
sloturi.na3:=sloturi.na4;
sloturi.va3:=sloturi.va4;
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na4=na):
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na5=na):
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
endtest
finish sloturi;
use nume;
obtain record from nume for nume.nume_cadru=name;
nume.nr_sloturi:=nume.nr_sloturi –1;
finish nume;
putform raspuns;
getform raspuns;
endwhile;
fișierul modific.ipf
perform sforma;
rasp:=”y”;
while rasp=”y” do
clear;
putform nume_cadru;
getform nume_cadru;
clear;
putform modif_slot;
getform modif_slot;
use sloturi;
obtain record from sloturi for sloturi.nume_cadru=name;
test true
case (sloturi.na1=na):
sloturi.va1=va;
endcase;
case (sloturi.na2=na):
sloturi.va2=va;
endcase;
case (sloturi.na3=na):
sloturi.va3=va;
endcase;
case (sloturi.na4=na):
sloturi.va4=va;
endcase;
case (sloturi.na5=na):
sloturi.va5=va;
endcase;
endtest
clear;
putform raspuns;
getform raspuns;
finish sloturi;
endwhile;
Formele utilizate pentru controlul afișării mesajelor și introducerii datelor sunt definite în fișierele care urmează :
fișierul f_locate.ipf
form f1 at 2,2 to 6,40 put border “FRBW”
at 3,3 to 5,39 put “FOBG”
at 4,5 put “Nume părinte:”
at 4,19 get parinti.parinte1 using “%10a”
endform
form f2 at 2,2 to 7,40 put border “FRBW”
at 3,3 to 6,39 put “FOBG”
at 4,5 put “Nume părinte1:”
at 4,20 get parinti.parinte1 using “%10a”
at 5,5 put “Nume părinte2:”
at 5,20 get parinti.parinte2 using “%10a”
endform
form f3 at 2,2 to 8,40 put border “FRBW”
at 3,3 to 7,39 put “FOBG”
at 4,5 put “Nume părinte1:”
at 4,20 get parinti.parinte1 using “%10a”
at 5,5 put “Nume părinte2:”
at 5,20 get parinti.parinte2 using “%10a”
at 6,5 put “Nume părinte3:”
at 6,20 get parinti.parinte3 using “%10a”
endform
form fs1 at 2,2 to 7,40 put border “FRBW”
at 3,3 to 6,39 put “FOBG”
at 4,7 put “Slotul1:”
at 5,4 put “Nume atribut:”
at 5,18 get sloturi.na1 using “%10a”
at 6,4 put “Valoare atribut:”
at 6,21 get sloturi.va1 num using ”ddddd”
endform
form fs2 at 2,2 to 10,40 put border “FRBW”
at 3,3 to 9,39 put “FOBG”
at 4,7 put “Slotul1:”
at 5,4 put “Nume atribut:”
at 5,18 get sloturi.na1 using “%10a”
at 6,4 put “Valoare atribut:”
at 6,21 get sloturi.va1 num using ”ddddd”
at 7,7 put “Slotul2:”
at 8,4 put “Nume atribut:”
at 8,18 get sloturi.na1 using “%10a”
at 9,4 put “Valoare atribut:”
at 9,21 get sloturi.va2 num using ”ddddd”
endform
form fs3 at 2,2 to 13,40 put border “FRBW”
at 3,3 to 12,39 put “FOBG”
at 4,7 put “Slotul1:”
at 5,4 put “Nume atribut:”
at 5,18 get sloturi.na1 using “%10a”
at 6,4 put “Valoare atribut:”
at 6,21 get sloturi.va1 num using ”ddddd”
at 7,7 put “Slotul2:”
at 8,4 put “Nume atribut:”
at 8,18 get sloturi.na1 using “%10a”
at 9,4 put “Valoare atribut:”
at 9,21 get sloturi.va2 num using ”ddddd”
at 10,7 put “Slotul2:”
at 11,4 put “Nume atribut:”
at 11,18 get sloturi.na1 using “%10a”
at 12,4 put “Valoare atribut:”
at 12,21 get sloturi.va3 num using ”ddddd”
endform
fișierul sforma.ipf
form raspuns at 5,10 to 8,40 put border “FRBW”
at 6,11 to 7,39 put “FOBG”
at 7,13 put “Continuati?(y/n)”
at 7.31 get rasp using “a”
endform
form nume_cadru at 2,2 to 6,35 put border “FRBW”
at 3,3 to 5,34 put “FOBG”
at 4,4 put “Numele cadrului:”
at 4,21 get name using “%10a”
endform
form ad_slot at 2,2 to 6,35 put border “FRBW”
at 3,3 to 5,34 put “FOBG”
at 4,4 put “Nume atribut:”
at 4,21 get name using “%10a”
at 5,4 put “Valoare atribut:”
at 5,25 get va num using “ddddd”
endform
form stergere_slot at 3,3 to 6,35 put border “FRBW”
at 4,4 to 5,34 put “FOBG”
at 5,5 put “Numeatribut:”
at 5,19 get na using “%10a”
endform
form modif_slot at 3,3 to 8,40 put border “FRBW”
at 4,4 to 7,39 put “FOBG”
at 5,5 put “Nume atribut:”
at 5.20 get na using “%10a”
at 6,5 put “Valoare noua a atributului:”
at 6,30 get va num using “ddddd”
endform
form introduc1 at 2,2 to 8,40 put border “FRBW”
at 3,3 to 7,39 put “FOBG”
at 4,4 put “Numele cadrului:”
at 4,21 get nume.nume_cadru using “%10a”
at 5,4 put “Numarul parintilor:”
at 5,25 get nume.nr_parinti using “dd”
at 6,4 put “Numarul sloturilor:”
at 6,25 get nume.nr_sloturi using “dd”
endform
3.5 IMPLEMENTAREA CADRELOR LUI MINSKY ÎN GURU
În această secțiune dăm o implementare posibilă a conceptelor prezentate anterior.
program.ipf
finish all;
release all;
local vb;
perform sforma;
use nume;
use parinti;
use sloturi;
dim opt(7);
opt(1):=”Adaugare cadru”;
opt(2):=”Stergere cadru”;
opt(3):=”Adaugare slot”;
opt(4):=”Stergere slot”;
opt(5):=”Modificarea valorii unui atribut”;
opt(6):=”Consultare”;
opt(7):=”Exit”;
vb:=true;
while vb do
clear
choice:=menu(opt)
test choice do
case 1:
perform adaug_c;
continue;
case 2:
perform sterg_c;
continue;
case 3:
perform adaug_s;
continue;
case 4:
perform sterg_s;
continue;
case 5:
perform modific;
continue;
case 6:
consult cons;
continue;
case 7:
clear;
vb:=false;
endtest
clear;
endwhile
finish all;
Așadar , operațiile care pot fi realizate pentru o bază de cunoștințe utilizând cadrele lui Minsky sunt implementate în programele adaug_c , sterg_c , adaug_s , sterg_s , modific .
Aceste module sunt prezentate în continuare:
fișierul adaug_c.ipf
clear
finish all;
perform f_locale;
rasp:=”y”
while rasp=”y” do
clear;
use nume;
attach 1 to nume;
putform introduc 1;
getform introduc 1;
clear;
nc=nume.nume_cadru;
choice:=nume.nr_parinti;
choice1:=nume.nr_sloturi;
finish nume;
use parinti;
attach 1 to parinti;
parinti.nume_cadru=nc;
test choice do
case 1:
putform f1;
getform f1;
continue;
case 2:
putform f2;
getform f2;
continue;
case 3:
putform f3;
getform f3;
endtest
finish parinti;
clear;
use sloturi;
attach 1 to sloturi;
sloturi.nume_cadru:=nc;
test choice1 do
case 1:
putform fs1;
getform fs1;
continue;
case 2:
putform fs2;
getform fs2;
continue;
case 3:
putform fs3;
getform fs3;
continue;
case 4:
putform fs4;
getform fs4;
continue;
case 5:
putform fs5;
getform fs5;
continue;
end test
finish sloturi;
clear;
putform raspuns;
getform raspuns;
endwhile;
fișierul sterg_c.ipf
release all;
finish all;
local name;
e.supd:=true;
perform sforma;
rasp:=”y”;
while rasp=”y” do
clear;
use nume;
putform nume_cadru;
getform nume_cadru;
obtain record from nume for nume.nume_cadru=name;
mark record in nume with true current;
compress nume;
finish nume;
use parinti;
obtain record from parinti for parinti.nume_cadru=name;
mark record in parinti with true current;
compress parinti;
obtain first record from parinti;
local n,i;
n:=tblinfo(parinti,2);
i:=1;
while i<=n do
test true
case (parinti.parinte1=name):parinti.parinte1:=” “;
endcase;
case (parinti.parinte2=name):parinti.parinte2:=” “;
endcase;
case (parinti.parinte3=name):parinti.parinte3:=” “;
endcase;
case (parinti.parinte4=name):parinti.parinte4:=” “;
endcase;
case (parinti.parinte5=name):parinti.parinte5:=” “;
endcase;
endtest
obtain next record from parinti;
i:=i+1;
endwhile;
finish parinti;
use sloturi;
obtain record from sloturi for sloturi.nume_cadru=name;
mark record in sloturi with true current;
compress sloturi;
finish sloturi;
clear;
putform raspuns;
getform raspuns;
finish nume;
endwhile
fișierul adaug_s.ipf
clear;
finish all;
perform sforma;
rasp:=”y”;
local nrs;
while rasp=”y” do
clear;
putform nume_cadru;
getform nume_cadru;
putform ad_slot;
getform ad_slot;
use nume;
obtain record from nume for nume.nume_cadru=name;
nrs:=nume.nr_sloturi;
nume.nr_sloturi:=nrs + 1;
finish nume;
use sloturi;
obtain record from sloturi for sloturi.nume_cadru=name;
test nrs do
case 1:
sloturi.na2=na;
sloturi.va2=va;
continue;
case 2:
sloturi.na3=na;
sloturi.va3=va;
continue;
case 3:
sloturi.na4=na;
sloturi.va4=va;
continue;
case 4:
sloturi.na5=na;
sloturi.va5=va;
continue;
endtest;
finish sloturi;
clear;
putform raspuns;
getform raspuns;
endwhile;
fișierul sterg_s.ipf
clear;
perform sforma;
rasp:=”y”;
while rasp=”y” do
clear;
use sloturi;
putform nume_cadru;
getform nume_cadru;
putform stergere_slot;
getform stergere_slot;
obtain record from sloturi for sloturi.nume_cadru=name;
test true
case (sloturi.na1=na):
sloturi.na1:=sloturi.na2;
sloturi.va1:=sloturi.va2;
sloturi.na2:=sloturi.na3;
sloturi.va2:=sloturi.va3;
` sloturi.na3:=sloturi.na4;
sloturi.va3:=sloturi.va4;
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na2=na):
sloturi.na2:=sloturi.na3;
sloturi.va2:=sloturi.va3;
` sloturi.na3:=sloturi.na4;
sloturi.va3:=sloturi.va4;
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na3=na):
sloturi.na3:=sloturi.na4;
sloturi.va3:=sloturi.va4;
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na4=na):
sloturi.na4:=sloturi.na5;
sloturi.va4:=sloturi.va5;
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
case (sloturi.na5=na):
sloturi.na5:=” “;
sloturi.va5:=” “;
endcase;
endtest
finish sloturi;
use nume;
obtain record from nume for nume.nume_cadru=name;
nume.nr_sloturi:=nume.nr_sloturi –1;
finish nume;
putform raspuns;
getform raspuns;
endwhile;
fișierul modific.ipf
perform sforma;
rasp:=”y”;
while rasp=”y” do
clear;
putform nume_cadru;
getform nume_cadru;
clear;
putform modif_slot;
getform modif_slot;
use sloturi;
obtain record from sloturi for sloturi.nume_cadru=name;
test true
case (sloturi.na1=na):
sloturi.va1=va;
endcase;
case (sloturi.na2=na):
sloturi.va2=va;
endcase;
case (sloturi.na3=na):
sloturi.va3=va;
endcase;
case (sloturi.na4=na):
sloturi.va4=va;
endcase;
case (sloturi.na5=na):
sloturi.va5=va;
endcase;
endtest
clear;
putform raspuns;
getform raspuns;
finish sloturi;
endwhile;
Formele utilizate pentru controlul afișării mesajelor și introducerii datelor sunt definite în fișierele care urmează :
fișierul f_locate.ipf
form f1 at 2,2 to 6,40 put border “FRBW”
at 3,3 to 5,39 put “FOBG”
at 4,5 put “Nume părinte:”
at 4,19 get parinti.parinte1 using “%10a”
endform
form f2 at 2,2 to 7,40 put border “FRBW”
at 3,3 to 6,39 put “FOBG”
at 4,5 put “Nume părinte1:”
at 4,20 get parinti.parinte1 using “%10a”
at 5,5 put “Nume părinte2:”
at 5,20 get parinti.parinte2 using “%10a”
endform
form f3 at 2,2 to 8,40 put border “FRBW”
at 3,3 to 7,39 put “FOBG”
at 4,5 put “Nume părinte1:”
at 4,20 get parinti.parinte1 using “%10a”
at 5,5 put “Nume părinte2:”
at 5,20 get parinti.parinte2 using “%10a”
at 6,5 put “Nume părinte3:”
at 6,20 get parinti.parinte3 using “%10a”
endform
form fs1 at 2,2 to 7,40 put border “FRBW”
at 3,3 to 6,39 put “FOBG”
at 4,7 put “Slotul1:”
at 5,4 put “Nume atribut:”
at 5,18 get sloturi.na1 using “%10a”
at 6,4 put “Valoare atribut:”
at 6,21 get sloturi.va1 num using ”ddddd”
endform
form fs2 at 2,2 to 10,40 put border “FRBW”
at 3,3 to 9,39 put “FOBG”
at 4,7 put “Slotul1:”
at 5,4 put “Nume atribut:”
at 5,18 get sloturi.na1 using “%10a”
at 6,4 put “Valoare atribut:”
at 6,21 get sloturi.va1 num using ”ddddd”
at 7,7 put “Slotul2:”
at 8,4 put “Nume atribut:”
at 8,18 get sloturi.na1 using “%10a”
at 9,4 put “Valoare atribut:”
at 9,21 get sloturi.va2 num using ”ddddd”
endform
form fs3 at 2,2 to 13,40 put border “FRBW”
at 3,3 to 12,39 put “FOBG”
at 4,7 put “Slotul1:”
at 5,4 put “Nume atribut:”
at 5,18 get sloturi.na1 using “%10a”
at 6,4 put “Valoare atribut:”
at 6,21 get sloturi.va1 num using ”ddddd”
at 7,7 put “Slotul2:”
at 8,4 put “Nume atribut:”
at 8,18 get sloturi.na1 using “%10a”
at 9,4 put “Valoare atribut:”
at 9,21 get sloturi.va2 num using ”ddddd”
at 10,7 put “Slotul2:”
at 11,4 put “Nume atribut:”
at 11,18 get sloturi.na1 using “%10a”
at 12,4 put “Valoare atribut:”
at 12,21 get sloturi.va3 num using ”ddddd”
endform
fișierul sforma.ipf
form raspuns at 5,10 to 8,40 put border “FRBW”
at 6,11 to 7,39 put “FOBG”
at 7,13 put “Continuati?(y/n)”
at 7.31 get rasp using “a”
endform
form nume_cadru at 2,2 to 6,35 put border “FRBW”
at 3,3 to 5,34 put “FOBG”
at 4,4 put “Numele cadrului:”
at 4,21 get name using “%10a”
endform
form ad_slot at 2,2 to 6,35 put border “FRBW”
at 3,3 to 5,34 put “FOBG”
at 4,4 put “Nume atribut:”
at 4,21 get name using “%10a”
at 5,4 put “Valoare atribut:”
at 5,25 get va num using “ddddd”
endform
form stergere_slot at 3,3 to 6,35 put border “FRBW”
at 4,4 to 5,34 put “FOBG”
at 5,5 put “Numeatribut:”
at 5,19 get na using “%10a”
endform
form modif_slot at 3,3 to 8,40 put border “FRBW”
at 4,4 to 7,39 put “FOBG”
at 5,5 put “Nume atribut:”
at 5.20 get na using “%10a”
at 6,5 put “Valoare noua a atributului:”
at 6,30 get va num using “ddddd”
endform
form introduc1 at 2,2 to 8,40 put border “FRBW”
at 3,3 to 7,39 put “FOBG”
at 4,4 put “Numele cadrului:”
at 4,21 get nume.nume_cadru using “%10a”
at 5,4 put “Numarul parintilor:”
at 5,25 get nume.nr_parinti using “dd”
at 6,4 put “Numarul sloturilor:”
at 6,25 get nume.nr_sloturi using “dd”
endform
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Obiecte Binare Mari In Guru (ID: 161124)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
