Upload
kokolina21
View
15
Download
5
Embed Size (px)
Citation preview
Umjetna inteligencija
Drugi projektni zadatak
EKSPERTNI SUSTAV ZA DIJAGNOZU BUBREŽNIH BOLESTI
Ana-Marija Bilić, Monika Burić, Nikolina Dragić
PMF Matematički odjel
10000 Zagreb, Hrvatska
{ambilic, monikab, ndragic }@student.math.hr
Sažetak:. U ovom članku detaljno opisujemo kako smo izradili ekspertni sustav za dijagnozu bubrežnih bolesti koristeći alat
Jess.
Ključne rijeci: Jess, ekspertni sustav, bubreg, bolest, dijagnoza
1. Uvod
Tehnologija svakim danom napreduje i računala sve više zamjenjuju ljude u svim segmentima
života. Zbog toga nam je, od svih ponuđenih zadataka, izrada vlastitog medicinskog
dijagnostičkog sustava bila najzanimljivija. Naš ekspertni sustav dijagnosticira bubrežne
bolesti.
2. Ekspertni sustav i Jess
Ekspertni sustavi su računalni programi koji sadrže određena specifična znanja iz jednog ili
više određenih područja znanosti. Najčešći oblik ekspertnih sustava sastoji se od seta pravila
po kojima se analiziraju informacije (koje su najčešće pružene od strane korisnika) o
specifičnoj vrsti problema, ali i pružanja matematičke analize problema. Ovisno o njihovom
dizajnu, tj. izvedbi, pružaju korisniku određene povratne informacije koje je potrebno poduzeti
da bi se riješio zadani problem. Ekspertni sustavi su dizajnirani i stvoreni da bi rješavali
zadatke u područjima financiranja, medicine, proizvodnje, računovodstva, kontrole procesa
određenih aktivnosti i sl. No, treba napomenuti da ekspertni sustavi nisu savršena umjetna
inteligencija, već su dosta usko orijentirani i često mogu griješiti ako ih se koristi za rješavanje
pojedinih problema izvan domene za koju su stvoreni.
Za izradu našeg ekspertnog sustava koristili smo alat Jess (Java Expert System Shell) –
„pogon na pravila“. Kako se Jess bazira na činjenicama i pravilima koja se aktiviraju jedino
kada je skup određenih činjenica zadovoljen, mora postojati način da se za svako pravilo ispita
da li su tražene činjenice zadovoljene. Nije bitno opisati ni redoslijed ni algoritam kako doći
do rješenja, već samo zadati što je potrebno za rješavanje problema.
3. Implementacija programa
3.1. Činjenice
Naš ekspertni sustav dijagnosticira četiri najčešće bubrežne bolesti koje definiramo kao skup
činjenica.
(deffacts bolesti
(bolest (sifra bubrezni_kamenac) (naziv „Bubrezni kamenac“))
(bolest (sifra upala_mjehura) (naziv „Upala mjehura“))
(bolest (sifra upala_bubrega) (naziv „Upala bubrega“))
(bolest (sifra cista_na_bubregu) (naziv „Cista na bubregu“)))
Svaka bolest ima određen broj simptoma, tj. skup činjenica pitanja sadrži simptom i
bolest kojoj pripada. Neke bolesti zastupljenije su kod žena, odnosno muškaraca te smo i spol
uključili u isti skup činjenica. No, pitanje o spolu postavlja se najviše jedan put, neovisno o
bolesti.
(deffacts pitanja
(pitanje (bolest bubrezni_kamenac)
(simptom bol_u_krizima)
(tekst „Osjecate li bol u krizima?“))
(koji_spol (bolest upala_mjehura) (spol z))
(...)
)
3.2. Pravila
Program radi tako da postavlja jedno po jedno pitanje potpuno neodređenim redosljedom.
Upisuje redni broj u varijable tako da kasnije omogući brisanje pomoću retract.
(defrule pitanje
(dijagnoza)
?p <- (pitanje (bolest ?b) (tekst ?t))
?m <- (moguca ?b)
=>
(printout t crlf ?t " (D/N) ")
(bind ?odgovor (read))
(assert (odgovor ?odgovor ?m ?p)))
• Ako je odgovor NE, gleda bolest na koju se odnosi simptom, ignorira je te više ne
postavlja pitanja vezana za tu bolest.
(defrule ne
?fact <- (odgovor n|N ?b ?p)
=>
(retract ?fact)
(retract ?p)
(retract ?b))
Ako je odgovor neispravan, pretpostavlja se da je odgovor NE.
(defrule neispravno
?fact <- (odgovor ~d&~D&~n&~N $?opcije)
=>
(retract ?fact)
(printout t "Neispravan odgovor = N" crlf)
(assert (odgovor n $?opcije))
)
• Ako je odgovor DA, nastavlja postavljati pitanja vezana za tu bolest, ali to pitanje
izbaci. U slučaju svih pozitivnih odgovora, dijagnosticira tu bolest.
(defrule da
?fact <- (odgovor d|D ?b ?p)
=>
(retract ?fact)
(retract ?p))
Da naš program radi kako treba, koristili smo tri kontrolna stanja: pocelo, slobodan i
dijagnoza. Ta stanja nam služe da se pravila izvršavaju onoliko puta koliko zahtijeva
trenutna situacija.
Na primjer, pravilo pocetak se izvršava kad se „uključi“ kontrolno stanje slobodan, a
ponovno se aktivira kod pravila dijagnoza kad program dijagnosticira (ili ne dijagnosticira)
bolest.
(...)
(defrule pocetak
(slobodan)
=>
(reset)
(assert (pocelo))
(printout t crlf crlf "Zelite dijagnozu? (D/N) ")
(bind ?odgovor (read))
(assert (odgovor ?odgovor)))
Kad se pravilo pocetak izvrši, moguća su dva odgovora na pitanje: DA ili NE. Ako je
odgovor DA, uključi se kontrolno stanje dijagnoza koje upućuje na sljedeće pravilo kojim
se postavljaju pitanja. U slučaju odgovora NE, tj. korisnik ne želi dijagnozu, aplikacija se
završava.
(...)
(defrule dijagnoza
?fact <- (dijagnoza)
(moguca ?b)
(not (pitanje (bolest ?b)))
(not (koji_spol (bolest ?b)))
(bolest (sifra ?b) (naziv ?n))
=>
(printout t crlf "DIJAGNOZA: " ?n crlf)
(retract ?fact)
(assert (slobodan)))
(...)
4. Zaključak Ovaj ekspertni sustav dijagnosticira bolesti bubrežnog sustava i u odnosu na stvarni svijet nije
realan, tj. da bi se dijagnosticirala neka bolest, pacijent treba izvršiti mnogo više pretraga.
No, vidimo da je ovaj ekspertni sustav sa odgovarajućim simptomima na dobrom putu ka
otkrivanju bolesti, te možda jednog dana zamijeni i pravog doktora.
5. Literatura
http://hr.wikipedia.org/wiki/Ekspertni_sustavi http://web.math.hr/nastava/ui/materijali/ http://www.jessrules.com/ http://www.mojezdravlje.net/Zdravlje/medicinski-leksikon/ http://www.dfki.de/~kipp/seminar_ws0607/reports/martin_strauss.pdf