PC Press
O nama
O nama
Pretplata
O nama
Postanite saradnik PC-ja
Kontakt sa redakcijom
PC Press
Novi broj
Novi broj   
Pretrazivanje
Arhiva
Arhiva   
PC Online
PC Plus   
Specijalna izdanja
Softver Softver
PC #76 : Mart 2002

 Naslovna  Sadržaj 
Vladimir Cvjetković  

Alatka za ekspertne sisteme

Projektovanje i realizacija ekspertnih sistema nisu više vezani za naučne institute. Uz dosta znanja, potreban je i adekvatan alat. Recimo, CLIPS...

CLIPS je interesantan, ali domaćoj računarskoj javnosti nedovoljno poznat program koji možete nabaviti besplatno. To podrazumeva izvršne (exe) fajlove, potpunu dokumentaciju grupisanu u nekoliko obimnijih PDF knjiga i source kod praćen licencom za slobodno korišćenje i distribuiranje. Osim ovih, danas ne baš uobičajenih pogodnosti, možete birati i operativni sistem u kom ćete koristiti ovaj softver, jer je najnovija verzija CLIPS 6.2 na raspolaganju za Windows 95/98/NT, Mac OS X i Unix.

CLIPS je skraćenica od C Language Integrated Production System. Deo naziva Production System ukazuje na to da se radi o alatki koja se koristi za razvoj softvera u oblasti ekspertnih sistema (ES). ES su vrsta softvera koja se koristi za drugačiji pristup u slučajevima kada uobičajeni metodi, bazirani pre svega na proceduralnom razmišljanju i programiranju, ne daju dobre rezultate – ukoliko, na primer, algoritamsko rešenje ne postoji ili je komplikovano za implementaciju i održavanje, a rešenje koje se bazira na ES-u je elegantnije i manje komplikovano.

Za razliku od klasičnih proceduralnih programa koji se baziraju na algoritmu, ES se bazira na heuristikama predstavljenim u bazi znanja. Heuristika je postupak koji ekspert u datoj oblasti koristi za rešavanje problema, što znači da ES rešava problem imitirajući eksperta. Jedan od glavnih nedostataka ekspertskih sistema je to što, za razliku od algoritamskog rešenja, ES ne daje uvek dobro rešenje, te se sa pravom postavlja pitanje svrhe takvih programa. Gledano iz ljudske vizure, greška nije neobična; ko radi taj i greši, pa se i u zdravstvu najrazvijenijih zemalja ponekad prave greške u dijagnozi, ali to nije razlog da zdravstvena služba bude ukinuta; naprosto nemamo ništa bolje. Slično je i sa ES-om, jer ako se greške ne prave suviše često, njihovo postojanje se toleriše.

Istorijat CLIPS-a

Počeci CLIPS-a datiraju još od 1984. godine kada je odeljak Software Technology Branch u okviru Lyndon Johnson Space centra u agenciji NASA dobio zadatak da razvije jeftinu, lako dostupnu i prenosivu alatku za razvoj ekspertnih sistema. U to vreme sekcija ovog centra za veštačku inteligenciju razvila je više perspektivnih aplikacija, a osnovni problem bila je skupoća hardvera i slaba mogućnost integracije sa programskim jezicima. Krenulo se od postojećeg sistema za razvoj ES-a pod nazivom ART (Automated Reasoning Tool) firme Inference Corporation.

Sličnost je bila koncepcijska i sintaksna, ali prototip CLIPS-a je razvijen samostalno bez korišćenja source koda za ART. CLIPS 1.0 je pokazao mogućnost realizacije projekta; usledile su nove verzije, radilo se na poboljšanju portabilnosti, performansi, novih mogućnosti i prateće dokumentacije. Verzija 3.0 iz 1986. godine bila je dostupna i korisnicima van „svemirske agencije“. U verzijama 4.x nastavljeno je usavršavanje sistema baziranog na pravilima, dok se verzija 4.3 pojavila 1989. godine. Počevši od verzije 5.0 uvode se dva nova načina programiranja – programerske paradigme, predstavljanja znanja i dobro poznato proceduralno programiranje i objektno-orijentisano programiranje (OOP). Proceduralno programiranje je dostupno preko definisanja funkcija; slično jezicima C i C++, na raspolaganju su i uobičajene konstrukcije za brojačke i iterativne petlje kao i nezaobilazno ispitivanje uslova.

Objektno-orijentisano programiranje u CLIPS-u je realizovano preko COOL-a (Clips Object Oriented Language), što podrazumeva karakteristike kao što su apstrakcija, enkapsulacija, nasleđivanje, polimorfizam i dinamičko vezivanje. Korisnici mogu generisati svoje klase ali tako da nasleđuju već postojeće sistemski generisane klase, od kojih je najznačajnija klasa USER; ta klasa se preporučuje kao osnovna u hijerarhiji pošto već poseduje neke metode ili message handlers u terminologiji CLIPS-a. Mogu se koristiti i opterećene funkcije ili generic functions koje omogućavaju postupak koji u C++ zovemo „preklapanje“.

Verziju 5.1 karakterišu poboljšani interfejsi za X Windows, MS-DOS i Macintosh. Verzija 6.0 iz 1993. godine je poboljšala integraciju pravila i COOL, donela grafički interfejs za Windows 3.1x i ujedno napustila agenciju NASA. Sledi višegodišnja pauza do 1998. godine kada se pojavljuje verzija 6.1 čija je osnovna karakteristika podrška za C++ kompajlere. Pojedinosti vezane za CLIPS počev od verzije 6.1 pronaći ćete na www.ghg.net/clips/CLIPS.html , uz primedbu da se link za ovu stranicu ne nalazi na home page-u www.ghg.net , već treba znati tačnu adresu stranice. NASA sajt, odakle se svojevremeno mogla preuzeti verzija 6.0 zajedno sa kompletnim pratećim uputstvima i source fajlovima, više nije dostupan.

Osnovna struktura CLIPS-a

Programi za razvoj ES-a u koje spada i CLIPS nazivaju se shell ili esbt (expert system building tool). Njihove osnovne komponente su baza znanja (knowledge base), mehanizam za zaključivanje (inference engine), radna memorija, veza sa korisnikom (user interface) i sistem za uvid i obrazlaganje zaključaka. Shell ili esbt uglavnom ima sve nabrojane komponente, s tim da korisnik treba da popuni ili kreira bazu znanja koja je u startu prazna (odatle naziv shell, „ljuska“). Baza znanja je prilagođena problemu koji se rešava, a za predstavljanje znanja u CLIPS-u mogu se koristiti pravila (rules), funkcije i COOL.

Pravila su široko rasprostranjen način predstavljanja znanja kod ES-a. Osnovna struktura pravila je slična implikaciji i predstavlja realizaciju logičkog zaključivanja pod nazivom modus ponens. Naime, ako važi p, zatim p=>q, onda važi i q. Ako je p uslov, pravilo je dato sa implikacijom, i ako pravilo važi i uslov je tačan, onda se zaključak q prihvata kao tačan. P i q su činjenice i čuvaju se u radnoj memoriji, dok implikacija predstavlja pravilo i čuva se u bazi znanja. Tokom pretrage baze znanja koja je statična (ne menja se) koristi se mehanizam za zaključavanje, dok je radna memorija dinamička, jer se činjenice menjaju – postavljaju, brišu ili modifikuju.

Način pretraživanja baze znanja kod CLIPS-a je metod ulančavanja unapred (forward chaining) i karakteriše ga povezivanje ili ulančavanje pravila od podataka prema zaključcima, za razliku od metoda ulančavanja unazad (backward chaining) gde je postupak obrnut – od zaključka prema podacima. Interesantno je da je u sistemu sa jednom osnovnom tehnikom ulančavanja moguće simulirati onu drugu. Mike Rychener je u svojoj doktorskoj tezi Production System as a Programming Language for AI dao osnovne karakteristike predstavljanja znanja pomoću pravila. Redosled zapisa pravila u listingu baze znanja nije bitan, redosled izvršavanja pravila ne određuje programer već mehanizam za zaključivanje, a moguć je i inkrementalni razvoj baze znanja dodavanjem novih pravila.

Sledeći bitan momenat jeste otkriće efikasnog algoritma koji koristi mehanizam za zaključivanje pri aktivaciji pravila, tj. za nalaženje pravila koja su zadovoljena postojećim činjenicama. Ako postoji veliki broj činjenica i veliki broj pravila, zaključivanje može da potraje. 1979. godine Charles Forgy je u radu The Rete Algorithm: A fast algorythm for the many pattern / Many Object Pattern Matching razvio RETE algoritam koji omogućava poređenje činjenica i pravila – pattern matching (nalaženje uzoraka). Tek korišćenjem RETE algoritma, sistemi sa ulančavanjem unapred postaju upotrebljivi.

Pravila, funkcije i COOL

Pravila se sastoje od leve (Left hand side) i desne strane (Right hand side). Na levoj strani nalazi se jedan ili više uslova, dok se na desnoj strani pravila nalazi jedna ili više akcija. Kod sistema sa ulančavanjem unapred, kakav je CLIPS, pravilo se aktivira ako su zadovoljeni svi uslovi sa leve strane pravila. Najčešći oblik uslova na levoj strani je tzv. pattern („šablon“), u koji se uklapaju postojeće činjenice u radnoj memoriji. Postupak provere, koji vrši mehanizam za zaključivanje, naziva se pattern matching. Pravilo čiji su svi uslovi na levoj strani zadovoljeni (postoje činjenice koje se uklapaju) aktivira se i dodaje skupu aktiviranih pravila koji se zove agenda. Broj aktiviranih pravila zavisi od konteksta odnosno od trenutnog stanja radne memorije. Jedno isto pravilo može biti aktivirano više puta i to sa različitim skupovima činjenica.

Skup aktiviranih pravila – agenda je linearno uređen, tako da se izvršava pravilo sa vrha. Redosled pravila može se delimično odrediti zadavanjem prioriteta pravila (salience), koji se kreće u intervalu od –10000 do +10000. Na „vrhu“ se nalazi pravilo sa najvećim salienc-om, a u slučaju da ih ima više njihov redosled se određuje na osnovu usvojene strategije rezolucije konflikta. CLIPS ima 7 različitih strategija rezolucije konflikta. Najpoznatije su po dubini (depth), gde je pravilo na vrhu konfliktnih pravila aktivirano sa najsvežijom činjenicom, dok kod strategije po širini (breadth) pravilo aktivirano sa najsvežijom činjenicom ide na dno, tj. ispod svih činjenica sa istim salienc-om. Po izvršavanju pravila sa vrha, aktivacija tog pravila se uklanja sa liste. Ponovna aktivacija je moguća tek ako se pravilo osveži (refresh), ili ako se neke činjenice uklone (retract) pa ponovo postave (assert). Primer definicije – konstrukcije pravila dat je na slici 1.

Navedeno pravilo ima dva uslova i salience 1000. Adresa činjenice koja se uklapa u prvi uslov dodeljuje se promeljivoj ?adresa1, dok se adresa činjenice koja se uklapa u drugi uslov dodeljuje promenljivoj ?adresa2. Znak => odvaja levu od desne strane pravila. Akcije na desnoj strani su brisanje (retract) činjenica koje su aktivirale pravilo, štampanje (printout) promenljivih i postavljanje nove činjenice (assert) u memoriju.

Objekti kao primerci klase u kombinaciji sa pravilima ponašaju se slično činjenicama, tj. mogu da zadovoljavaju levu stranu pravila. Osim toga, objektima se mogu slati poruke kojima se pozivaju metode ili funkcije članice klase. Analogno pokazivaču this u C++-u, u CLIPS-u postoji promenljiva ?self koja se koristi za referenciranje članova klase tekućeg ili aktivnog objekta.

Funkcije su konstrukcije koje imaju ime, listu argumenata i niz akcija koje se izvršavaju. Posebna vrsta funkcija tzv. generičke funkcije mogu imati više od jednog metoda, pri čemu metodi predstavljaju funkcije istog imena, ali sa različitim brojem i/ili tipom argumenata. Izbor odgovarajućeg metoda vrši se na osnovu predatih argumenata. Interesantno je da za date argumente može biti više primenljivih metoda, tako da se u tom slučaju mora izvršiti rangiranje metoda, i izvršava se metod sa vrha liste. Po potrebi, ovaj metod može da poziva i druge metode koji su takođe primenljivi ali su zaklonjeni metodom sa vrha liste; postupak se zove Generic dispatch. Slična situacija javlja se i kod slanja poruka objektima kada se pozivaju funkcije članice – metodi, jer može biti više metoda sa istim imenom, ali koji pripadaju različitim klasama na liniji nasleđivanja. Svi ti metodi su primenljivi, ali se bira metod koji pripada klasi datog objekta.

Sve u svemu, CLIPS omogućava raznovrsno predstavljanje znanja korišćenjem više programerskih tehnika, kao i složeno zaključivanje koje se bazira na pattern matching-u, rezoluciji konfliktnih pravila, korišćenju Generic i Message dispatch.

Sistemi bazirani na CLIPS-u

Na pomenutom sajtu CLIPS-a može se naći pregršt adresa, a jedna od važnijih je ai.iit. nrc.ca/fuzzy/fuzzy.html koja pripada instituciji National Research Council of Canada. Na institutu za informacionu tehnologiju razvijena je verzija CLIPS-a FuzzyCLIPS. U originalnom CLIPS-u se ne koristi mogućnost eksplicitnog predstavljanja nesigurnosti, nepouzdanosti ili neodređenosti. Pošto je veoma važna oblast primene ES-a u slučajevima kada nisu poznati svi podaci, potrebno je predstaviti ih na adekvatan način. Nepouzdanost ili nesigurnost se u FuzzyCLIPS-u predstavljaju faktorima pouzdanosti CF (Certainty Factors), dok se neodređenost predstavlja preko fuzzy logike. Zaključivanje se time dosta usložnjava sa jedne strane, a sa druge dobijaju se znatno veće mogućnosti modelovanja realnog sistema. FuzzyCLIPS se ponaša kao osnovna verzija CLIPS-a kada se ne koriste CF i Fuzzy. FuzzyCLIPS je takođe dostupan za PC (Windows), Macintosh i Unix (Sun).

Ako ne želite da kompajlirate mnoštvo source fajlova ali ipak želite da funkcionalnost CLIPS-a ugradite u Visual C++ ili Visual Basic program, na raspolaganju su vam dll biblioteke. Izaberite link CLIPS DLL/C++ Wrappers na osnovnoj strani, koji će vas odvesti na sajt sa koga ćete moći da download-ujete dll i razne druge fajlove. Link CLIPS Related Web Locations otkriće vam niz raznih lokacija i projekata koji se baziraju na CLIPS-u, što samo potvrđuje vrednosti koje CLIPS donosi.