Exsys Corvid
Exsys Corvid este destinat pentru a va ajuta sa descrieti etapele logice într-un proces de luare a unei decizii într-un mod care permite transmiterea cunostiintelor catre altii ca si cum acestia ar dialoga cu un expert uman. Practic acest lucru este similar modului în care cineva ar explica altei persoane cum sa rezolve o anumita problema.
Primul pas în crearea unei aplicatii Corvid este de a alege o problema care sa poata fi descompusa în etape logice. Pe masura ce va creste experiente dumnavoastra în lucrul cu Corvid veti învata sa utilizati metode avansate de abordare a unor probleme complexe. Pentru început însa vom selecta o problema simpla, care poate fi descrisa doar cu câteva reguli.
Problema trebuie sa poata fi rezolvata utilizând o logica ce se bazeaza pe propozitii de forma 14114d324o :
" Daca......... atunci......"
" În caz ca......... stiu ca......"
Partea de IF poate contine mai multe conditii compuse. De exemplu:
Daca masina nu porneste si indicatorul de combustibil este pe gol Atunci masina nu are combustibil.
În caz ca e duminica si e vreme buna stiu ca Alex probabil joaca fotbal.
Dupa cum se va vedea sistemele Corvid poseda mai multe tehnici de tratare a probabilitatii.
Una dintre cele mai bune utilizari ale lui Exsys Corvid este pentru rezolvarea problemelor care implica selectarea celei mai bune solutii atunci când exista mai multe solutii posibile.
Exemplu demonstrativ simplu dar care va demonstra multe dintre caracteristicile fundamentale ale lui Exsys Corvid:
- problema de a decide pe care drum sa se mearga la serviciu cu masina de acasa spre serviciu :
pe autostrada - este drumul cel mai rapid atâta timp cât pe autostrada nu sunt probleme de trafic. Daca sunt astfel de probleme, acest drum devine îngrozitor de încet. De asemenea nu exista benzina pe autostrada.
pe strazile orasului - este un drum încet dar sigur. Exista foarte multe benzinarii deschise non-stop. Chiar daca exista probleme de trafic, sunt atâtea strazi alternative încât acest drum este întotdeauna sigur.
pe drumul de coasta - este un drum spendid de-a lungul coastei pe vreme buna, dar dificil pe vreme proasta si noaptea. Dureaza cam la fel de mult ca si drumul pe strazile orasului. Nu are însa benzinarii. Când e posibil este drumul perfect.
Transpunerea pasilor de rezolvare în reguli IF
Atunci strazile orasului sunt singura varianta.
Atunci sa nu se aleaga drumul de coasta.
si nu sunt probleme de trafic pe autostrada
Atunci mergeti pe autostrada.
si nu sunt probleme de trafic pe autostrada
Atunci nu mergeti pe autostrada.
Atunci drumul de coasta se prefera.
Variabile Corvid
Toata logica în Corvid este definita prin utilizarea variabilelor Corvid. Variabilele sunt componentele pe care Corvid le utilizeaza pentru a forma reguli si a descrie logica sistemului. Când ruleaza o aplicatie Corvid, variabilele care sunt utilizate în partea de IF a regulii vor trebui sa aiba asignata o valoare. Aceste valori pot proveni din:
întrebarea directa a utilizatorului ca acesta sa introduca valoarea
derivarea acestor valori din alte reguli
alte surse precum o baza de date
Exista sapte tipuri de variabile, dar majoritatea sistemelor pot fi proiectate utilizând doar trei dintre acestea:
Variabile de tip Lista Statica - aceasta este o lista simpla multivaloare. Este variabila Corvid cel mai des utilizata si este indicat sa fie utilizata oricât de des este posibil. Aceasta variabila este formata dintr-o propozitie si doua sau mai multe valori posibile.
Exemplu:
Conditiile de drum sunt bune/rele
Sunt probleme de trafic pe autostrada? Da/Nu
Judetul de domiciliu este: Alba
Bihor
Variabile numerice - care pot avea un domeniu de valori numerice( cu mult prea multe valori posibile spre a fi cuprinse într-o lista statica).
Exemplu:
IF numarul de litri de combustibil în rezervor este mai mic decât 20
THEN strazile orasului sunt singura posibilitate
Variabile de confidenta - aceste variabile sunt de obicei optiunile posibile dintre care sistemul trebuie sa aleaga cea mai buna solutie. Lor li se poate asigna o valoare de confidenta care arata daca respectivele solutii sunt o recomandare adecvata sau neadecvata. O anumita variabila poata avea asignata diferite valori prin mai multe reguli. Aceste valori sunt combinatii din toate regulile pentru a determina o valoare de confidenta finala pentru acea variabila. Corvid permite mai multe moduri de a combina valorile de confidenta. Cel mai simplu mod este însumarea lor. Va puteti închipui valorile ca un numar de puncte care se aduna sau scad din scorul unei solutii posibile(sau unei recomandari). Într-o regula, variabilelor de confidenta li se asigneaza o valoare în partea THEN a regulii astfel:
Exemplu:
Daca conditiile de drum sunt rele
Atunci drumul_de_coasta=-100
Noduri
Logica de luare a deciziilor în Corvid este descrisa utilizând "nodurile". Un nod poate fi gândit ca o propozitie în partea de IF sau de THEN a unei reguli.
Exemplu:
IF trebuie sa ajungi repede la serviciu: Da
AND sunt probleme de trafic pe autostrada: Nu
THEN autostrada=20
Exista 2 noduri IF si un nod THEN.
Observatie:
Nodurile pot fi încuibate, astfel încât sa se aplice tuturor nodurilor de sub ele. Astfel rezulta o diagrama logica arborescenta, care permite o viziune de ansamblu a logicii si ajuta sa se verifice daca sunt acoperite toate cazurile posibile.
Exemplu:
Blocuri Logice în Corvid
Blocurile logice într-un sistem Corvid indica modul CUM sa se faca un anumit lucru, în timp ce blocurile de comanda indica CE sa se faca si CÂND.
IF
AND
ADD
THEN
VARIABLE
Blocurile de comanda Corvid
Blocurile de comanda pot include un control procedural foarte complex, cu bucle repetitive si imbricate(încuibate), dar majoritatea sistemelor au blocuri de comanda foarte simple cu doar câteva comenzi.
Blocurile de comanda tipice spun sistemului pentru care variabile sa derive valori si apoi sa afiseze rezultatele.
Add a
new Command Block pentru a începe un bloc de comanda.
Exista 2 tipuri de comenzi ce pot fi adaugate unui bloc de comanda:
Comenzi de control
Comenzi operationale
Comezile de control trateaza buclele FOR, WHILE sau IF (cu ajutorul gupului de butoane de control din stânga-jos a ferestrei. Acestea sunt comenzi foarte puternice pentru sisteme avansate, dar sunt rar necesare în majoritatea sistemelor.
Comenzile operationale spun aplicatiei Corvid sa efectueze anumite operatii specifice.
Exemplu:
Se da click pe butonul Add care deschide fereastra Commands(Fig.1.1), Tab-ul Variables, cel mai utilizat, permite construirea a trei tipuri de comenzi pentru variabile.
Fig.1.1
Corvid cere automat utilizatorului valorile unor variabile într-o ordine determinata de logica sistemului. Câteodata dezvoltatorul s-ar putea sa doreasca sa forteze ca valoarea unei variabile sa fie ceruta la un anumit moment.
Majoritatea sistemelor simple utilizeaza o singura comanda DERIVE pentru a executa regulile.
În exemplul nostru, trebuie spus sistemului Corvid sa utilizeze regulile din blocurile logice pentru a calcula valoarea pentru fiecare variabila de confidenta din sistem(fiecare solutie posibila - drum spre serviciu - fiind o variabila de confidenta).
Exemplu:
Derive a value from TO BE and Logic Block
All Confidence Variables
Rezulta DERIVE CONF
Fig.1.2
Astfel vor fi testate toate regulile din blocurile logice care seteaza valori pentru variabilele de confidenta. Daca sunt necesare pentru aceasta valorile altor variabile, utilizatorul sistemului va fi întrebat pentru a furniza acea informatie.
Mai trebuie utilizata însa si o comanda pentru afisarea rezultatelor. Toate comenzile sunt adaugate relativ la comanda curenta selectata.
Exemplu:
|
Command
|
Rezulta fereastra Command, din care se selecteaza Tab-ul Results(Fif.1.3).
Fig.1.3
Se bifeaza :
Display Default Results Screen
|
Rezulta
Vor fi derivate valori pentru toate variabilele de confidenta, utilizând înlantuirea si introducerea datelor necesare de catre utilizator iar în cele din urma vor fi afisate valorile tuturor variabilelor setate în sistem.
Executia
Pentru lansarea în executie se foloseste
butonul Run.
Corvid construieste automat o pagina HTML
si utilizeaza applet-ul Corvid Runtime, care este
afisat în fereastra CorvidBrowser. Se raspunde la
întrebari, se afiseaza rezultatul, se alege butonul Back, Restart sau butonul Exit din dreapta jos pentru a încheia
executia. Applet-ul Corvid Runtime contine motorul
de inferente Corvid. Acesta este creierul sistemului Corvid. El verifica
blocul de comanda pentru a vedea ce actiune i s-a spus sa
faca si apoi utilizeaza blocurile logice pentru a face ceea ce i
s-a spus.
Exemplu implementat în Corvid:
Prima etapa:adaugarea variabilelor:
Variabile de tip Lista Statica
Conditii_de_drum
Ajuns_repede
Trafic_pe_autostrada
Variabile numerice
Cantitatea_de_combustibil
Variabile de confidenta
Autostrada
Drumul_de_coasta
Strazile_orasului
Pentru adaugarea variabilelor dam click
pe icon-ul variabilei: Add/Edit
Variables.
Aceasta va duce la afisarea ferestrei Variables:
Fig.1.4
Fereastra Variables are mai multe optiuni. În partea stânga gasim si selectam variabila dorita. Pentru a adauga o variabila noua dam click pe butonul New. Aceasta actiune duce la afisarea ferestrei de dialog New Variable:
Fig.1.5
În aceasta fereastra introducem numele variabilei, selectam tipul acesteia si apoi click pe butonul Ok.
Toate variabilele au un nume si un prompt.
Numele variabilei este prescurtarea folosita ca referinta a variabilei în Blocul Logic, formule, comenzi etc. Numele acesteia trebuie sa fie usor de identificat si de înteles.
Promptul este textul care poate fi folosit pentru a cere utilizatorului valoarea variabilei ca în final sa o afiseze ca si rezultat. Prompt-ul se introduce în fereastra Variable la Main Prompt. Toate variabilele au un Promp care descrie în detaliu destinatia variabilei:
Fig.1.6
Exista diferite controale care pot fi utilizate pentru a atribui valori unei variabile. Tipul controlului poate fi selectat alegând Tab-ul Ask With, iar de aici se selecteaza unul dintre controalele dorite:
Fig.1.7
Cel mai des utilizat control este Radio Button. Exeplu de Radio Button:
Numai o valoare poate fi selectata din cadrul acestui grup în timp ce oricare alta valoare selectata anterior se deselecteza implicit.
Checkbox-ul se aseamana cu butoanele radio, doar ca pot fi selectate mai multe valori simultan. Exemplu de checkbox:
Daca variabila este de tip Lista Statica, vom selecta Tab-ul Static List:
Fig.1.8
Variabilele de tip Static List au o lista posibila de valori folosita pentru definirea logica a sistemului si pe care utilizatorul o poate selecta. Definirea textului valorii este similar cu definirea prompt-ului pentru variabile. La fel ca si în cazul prompt-ului, acesta este o prescurtare a numelui.
Full Text
Full Text este textul care descrie valoarea. Acesta poate avea orice lungime. Full Text-ul va fi afisat utilizatorului când sistemul cere valorile variabilei.
Short Text
Short text-ul este o valoarea unica a variabilei(Fig.1.8).
Dupa completarea valorii la Full Text se alege butonul Copy sau tasta Enter de la tastatura pentru transcrierea valorii si la Short Text(Fig.1.8).
Variabilele numerice pot avea o limita minima(Lower Limit) si o limita maxima(Upper Limit) în care se pot încadra(Fig.1.9). Sunt acceptate doar valorile Integer. Daca utilizatorul, în timpul executiei atribuie o valoare în afara limitelor aceasta nu va fi acceptata.
Fig.1.9
Variabila de tip colectie este o lista de tip sir de puncte. Punctele pot fi adaugate sau mutate din lista de sistem. Variabilele Collection sunt folosite adesea cu MetaBlocurile.
Variabilele de confidenta calculeaza o valoare finala de confidenta a variabilelor. O variabila poate avea asociate mai multe valori prin mai multe reguli.
Parametrul Calculation controleaza cum pot fi combinate diferite reguli pentru a se obtine o valoare de confidenta finala.
SUM - aduna toate valorile asignate unei variabile
AVERAGE - face media tuturor valorilor asignate unei variabile
MAX - returneaza valoarea maxima asignata
MIN - returneaza valoarea minima asignata, etc(Fig.1.10).
Fig.1.10
A doua etapa:adaugare Logic Block
Pentru a adauga un
bloc logic se da click pe icon-ul Add a New Logic Block .
Actiunea are ca efect afisarea ferestrei Logic Block:
Fig.1.11
În lista de tip drop down din partea de sus a ferestrei este afisat numele blocului logic, implicit acesta este Logic Block1. Pentru schimbarea numelui se da click pe butonul Edit Name.
Blocul logic este alcatuit din mai multe noduri IF si THEN care descriu logica sistemului.
Pentru a adauga un nod IF alegem din grupul IF din partea de jos a ferestrei butonul Add. Aceasta alegere are ca efect deschiderea fereastrei Add to block (fig.1.12). În partea stânga a ferestrei sunt specificate toate variabilele active în momentul actual:
Selectam variabila care ne intereseaza si din fereastra dreapta tab-ul Static List selectam valoarea dorita pentru aceasta variabila
Click Add to List
Fig.1.12
Click pe butonul Done din partea stânga jos se adauga nodul în fereastra Logic Block.
Daca exista mai multe noduri IF acestea se adauga în blocul logic astfel:
Folosind butonul Below din grupul AND pentru a adauga un nod dupa nodul selectat
Folosind butonul Above din grupul AND pentru a adauga un nod înaintea nodului selectat
Folosind butonul Below din grupul Same Level pentru a adauga un nod la acelasi nivel cu cel selectat, dar pozitionarea acestuia în blocul logic va fi dupa nodul selectat.
Folosind butonul Above din grupul Same Level pentru a adauga un nod la acelasi nivel cu cel selectat, dar pozitionarea acestuia în blocul logic va fi înaintea nodului selectat.
Adaugarea nodurilor THEN
Din partea de jos a ferestrei se alege din grupul THEN butonul Variable. În urma acestei actiuni se deschide fereastra Add to Block, adaugarea nodului THEN fiind similara cu adaugarea nodurilor IF. Logic Block1 va fi urmatorul(Fig.1.13):
Fig.1.13
Pentru exemplul nostru avem înca 2 blocuri logice, care sunt prezentate mai jos(Fig.1.14; Fig.1.15). Construirea acestora este similara cu cea a blocului logic prezentat mai sus.
Fig.1.14
Fig.1.15
A treia etapa: adaugare Command Block
Dând click pe icon-ul Add a New Command Block ,
se va deschide fereastra Command Block.
Din partea de jos a ferestrei se alege din grupul Command butonul Add( a se vedea explicatiile de la blocurile de comanda).
A patra etapa: lansarea în executie
Aceasta se face dând click pe icon-ul Run .
|