Anda di halaman 1dari 48

PRAKTIKUM 3 SISTEM PAKAR

Wildcard

Pattern Rule dengan probability (Certainty Factor)

Asisten Praktikum Sistem pakar Departemen Ilmu Komputer Fakultas MIPA IPB

PREVIOUSLY @ PRAKTIKUM 2
Masih ingatkah ini??? (deftemplate mahasiswa

(defrule n1
(mahasiswa (nilai 10)) => (assert (mutu (nilai-mutu A)))) (defrule n2 (mahasiswa (nilai 9)) => (assert (mutu

(slot nama) (slot nrp) (slot nilai)) (deftemplate mutu (slot nilai-mutu)) (deffacts ilkom (mahasiswa (nama aa) (nrp g61) (nilai 10)) (mahasiswa (nama bb) (nrp g62) (nilai 9)) (mahasiswa (nama cc) (nrp g63) (nilai 8)) (mahasiswa (nama df) (nrp g64) (nilai 7)) (mahasiswa (nama ee) (nrp g65) (nilai 6)) (mahasiswa (nama fd) (nrp g66) (nilai 5)))

(nilai-mutu A))))
(defrule n3 (mahasiswa (nilai 8)) => (assert (mutu (nilai-mutu B)))) (defrule n4 (mahasiswa (nilai 7)) => (assert (mutu (nilai-mutu B)))) (defrule n5 (mahasiswa (nilai 6)) => (assert (mutu (nilai-mutu C)))) (defrule n6 (mahasiswa (nilai 5)) => (assert (mutu (nilai-mutu C))))

PREVIOUSLY @ PRAKTIKUM 2
Hasilnya???

SUPAYA LEBIH ELEGAN


(deftemplate mahasiswa (slot nama) (slot nrp) (slot nilai)) (deftemplate mutu (slot nrp) (slot nilai-mutu)) (deffacts ilkom (mahasiswa (nama aa) (nrp g61) (nilai 10)) (mahasiswa (nama bb) (nrp g62) (nilai 9)) (mahasiswa (nama cc) (nrp g63) (nilai 8)) (mahasiswa (nama df) (nrp g64) (nilai 7)) (mahasiswa (nama ee) (nrp g65) (nilai 6)) (mahasiswa (nama fd) (nrp g66) (nilai 5)))

(defrule n1 (mahasiswa (nrp ?x)(nilai 10)) => (assert (mutu (nrp (defrule n2 (mahasiswa (nrp ?x)(nilai 9)) => (assert (mutu (nrp (defrule n3 (mahasiswa (nrp ?x)(nilai 8)) => (assert (mutu (nrp (defrule n4 (mahasiswa (nrp ?x)(nilai 7)) => (assert (mutu (nrp (defrule n5 (mahasiswa (nrp ?x)(nilai 6)) => (assert (mutu (nrp (defrule n6 (mahasiswa (nrp ?x)(nilai 5)) => (assert (mutu (nrp

?x)(nilai-mutu A))))

?x)(nilai-mutu A))))

?x)(nilai-mutu B))))

?x)(nilai-mutu B))))

?x)(nilai-mutu C))))

?x)(nilai-mutu C))))

SUPAYA LEBIH ELEGAN


Hasilnya???

WILDCARD PATTERN

Wildcard Pattern merupakan cara yang digunakan untuk menggantikan suatu simbol yang terdapat di bagian antesenden suatu aturan (LHS)

WILDCARD PATTERN

Terdapat dua jenis wildcard pattern yang sering digunakan: ?x : mengambil satu simbol yang sesuai $? : boleh tidak mengambil atau mengambil lebih dari satu simbol (biasanya digunakan pada multislot

CONTOH 1
Contoh 1 (band.clp)
(deftemplate member_bands (multislot member-of)) (deffacts nama_band (member_bands (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr)) (member_bands (member-of smash roger_daltrey pete_townsend keith_moon)) (member_bands (member-of kangen_band tracey_thorn ben_watt))) (defrule bands (member_bands (member-of ?band $?)) => (printout t "there is a band called " ?band

crlf))

CONTOH 2
Contoh 2 (akses_single_member.clp) (deftemplate member_bands (multislot member-of)) (deffacts nama_band (member_bands (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr)) (member_bands (member-of smash roger_daltrey pete_townsend keith_moon)) (member_bands (member-of kangen_band tracey_thorn ben_watt))) (defrule band-members (member_bands (member-of ?band ?member $?)) => (printout t ?member " is a member of " ?band crlf))

CONTOH 3
Contoh 3 (akses_multi_member.clp)

(deftemplate member_bands
(multislot member-of)) (deffacts nama_band (member_bands (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr)) (member_bands (member-of smash roger_daltrey pete_townsend keith_moon)) (member_bands (member-of kangen_band tracey_thorn ben_watt))) (defrule band-members (member_bands (member-of ?band $?members)) => (printout t "The members of " ?band " are " $?members crlf))

VARIABEL

VARIABEL.CLP
(deftemplate variabel (slot number)) (deftemplate jumlah (slot total)) (deffacts nilai (variabel (variabel (defrule addup (variabel (variabel

(number 4)) (number 6)))

(number ?x)) (number ?y)) => (bind ?total (+ ?x ?y)) (printout t ?x " + " ?y " = " ?total crlf) (assert (jumlah (total ?total))))

DEFGLOBAL.CLP
(defglobal ?*var1* = 17 ?*oranges* = "seven") (deftemplate variabel (slot number)) (deftemplate jumlah (slot total)) (deffacts nilai (variabel (number 24))) (defrule addup (variabel (number ?x)) => (bind ?total (- ?x ?*var1*)) (printout t ?x " + " ?*var1* " = " ?total "(" ?*oranges* ")" crlf) (assert (jumlah (total ?total))))

Function Templates and Conditions

BIRTHDAY.CLP
(defrule birthday_is ?ulang_tahun <- (ultah (birthday ?name)) ?data-fact <- (personal-data (name ?name) (age ?age)) => (modify ?data-fact (age (+ ?age 1))) (retract ?ulang_tahun))

TES_WEIGHT.CLP
(deftemplate personal-data (slot name) (slot age) (slot weight) (slot height) (multislot blood-pressure)) (deffacts people (personal-data (name Andrew) (age 20) (weight 180) (height 188) (blood-pressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90))) (defrule lardy-bugger (personal-data (name ?name) (weight ?weight)) (test (> ?weight 100)) => (printout t ?name " weighs " ?weight " kg - the fat sod." crlf))

PRINT_AGE.CLP
(deftemplate personal-data (slot name) (slot age) (slot weight) (slot height) (multislot blood-pressure)) (deffacts people (personal-data (name Andrew) (age 120) (weight 80) (height 188) (bloodpressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (bloodpressure 180 90))) (defrule print-ages (and (personal-data (name ?name) (age ?age)) (personal-data (name ?name) (weight ?weight))) => (printout t ?name " weighs " ?weight " at " ?age " years old." crlf))

UMBRELLA.CLP
(deftemplate umbrella (slot weather)) (deffacts cuaca (umbrella (weather raining)) (umbrella (weather snowing)) (umbrella (weather sunny))) (defrule take-an-umbrella (or (umbrella (weather raining)) (umbrella (weather snowing))) => (printout t "Take an umbrella" crlf))

NOT_BIRTHDAY.CLP
(deftemplate personal-data (slot name) (slot age) (slot weight) (slot height) (multislot blood-pressure)) (deftemplate ultah (slot birthday)) (deffacts is_ultah (ultah (birthday Andrew)))

(deffacts people (personal-data (name Andrew) (age 120) (weight 80) (height 188) (bloodpressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90)))
(defrule not-birthday (personal-data (name ?name) (weight ?weight)) (not (ultah (birthday ?name))) => (printout t "It's not " ?name "'s birthday" crlf))

POINTLESS.CLP
(defrule pointless (test (> 6 5)) => (printout t "Six is indeed greater than five" crlf))

EXIST_FORALL.CLP
(deftemplate personal-data (slot name) (slot age) (slot weight) (slot height) (multislot bloodpressure)) (deffacts people (personal-data (name Andrew) (age 20) (weight 80) (height 188) (blood-pressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90))) (defrule person-exists (personal-data (name ?name)) => (printout t "Rule person exists reports there is a person called " ?name crlf))

LANJUTAN......
(defrule are-there-people (exists (personal-data (name ?name))) => (printout t "Rule are-there-people reports there is at least one person" crlf))

(defrule check-each-person (forall (personal-data (name ?name) (age ?umur)) (personal-data (name ?name) (weight ?berat))) => (printout t "Rule check-each-person reports that all persons have a name" crlf))

CERTAINTY FACTOR

Uncertanity
There is a uncertainty in the mind Of experts when make a decision accordance their expertise

Causes of Uncertainty
Not completely and uncertainty information Unknown data Unify the different of view point of experts Imprecise language (always,often,seldom,some times)

Certainty Theory
Certainty factor (cf ), value to measure degree of belief from expert. Maximum value of cf is +1.0 (definitely true) and minimum -1.0 (definitely false). Two aspects: Certainty in the Evidence The evidence can have a certainty factor attached Certainty in Rule

Computation of Certainty Factors


1. Model Net Belief (Shortliffe dan Buchanan)

CF (Rule)=MB(H,E)-MD(H,E)
1; if P(H)=1 Otherwise

MB(H,E) =

max[P(H|E),P(H)]-P(H)/1-P(H) ;

M D(H,E) =

1;

if P(H)=0

min[P(H|E),P(H)]-P(H)/1-P(H) ;

Otherwise

Certainty Factors
2. Direct Interview with Expert
Uncertain Term Definitely not Almost certainly not Probably not Maybe not Unknown Maybe Probably Almost certainly Definitely -1.0 -0.8 -0.6 -0.4 -0.2 to +0.2 +0.4 +0.6 +0.8 +1.0 Certainty Factor

Example :
Expert :If headache and have a cold and fever, then most possibility is influenza Rule : IF evidence 1= headache AND evidence 2= have a cold AND evidence 3= fever THEN seek=influenza (cf = 0.8)

Expert System With CF


In Expert System with CF, knowledge base composed of set of rules with syntax: IF <evidence> THEN <hypothesis>

{cf }

CF refers to degree of belief for hypothesis H when evidence E occured.

Example
Degree of belief for hypothesis H when evidence E occured.
cf (H,E) = cf (E) * cf(Rule)

e.g: IF sky is clear THEN the forecast is sunny {cf 0.8} With cf of sky is clear is 0.5
cf (H,E) = 0.5 * 0.8 = 0.4

Multiple Antecedents
How the CF if we have two evidence? With conjunction (i.e. and)
Use minimum cf of evidence

With disjunction(i.e. or)


Use maximum cf of evidence

Conjunctive Antecedents - Example


Conjunctive Rules:
cf(H, E1 and E2 and Ei) = min{cf(E1 , E2 , Ei )} *cf(Rule)
IF there are dark clouds E1 AND the wind is stronger E2 THEN it will rain {cf 0.8}

If cf(E1) = 0.5 and cf(E2) = 0.9, then

cf(H, E) = min{0.5, 0.9} * 0.8 = 0.4

Disjunctive Antecedents - Example


Disjunctive Rules:
cf(H, E1 or E2 or Ei) = max{cf(E1 , E2 , Ei )} *cf(Rule)
IF there are dark clouds E1 OR the wind is stronger E2 THEN it will rain {cf 0.8} If cf(E1) = 0.5 and cf(E2) = 0.9, then

cf(H, E) = max{0.5, 0.9} * 0.8 = 0.72

Similarly Concluded Rules


How to determine CF if two rules have similar conclusion?
Rule 1: IF weatherperson predicts rain (E1) THEN it will rain {cf 1 0.7}
Rule 2: IF farmer predicts rain (E2) THEN it will rain {cf 2 0.9}

Similarly Concluded Rules


Formula :

Similarly Concluded Rules


New CF value from facts above above can be formulated: cf (cf1,cf2) = cf1+cf2*(1-cf1) = 0.7+0.9(1-0.7) = 0.97

EXERCISE
Determine New Value of CF from some facts in below :
1. IF fever THEN typhus {cf -0.39} 2. IF amount of thrombosis is low THEN typhus {cf -0.51} 3. IF the body is weak THEN typhus {cf 0.87} 4. IF diarhea/constipation THEN typhus {cf 0.63}

Combining CF with CLIPS

Combining CF with CLIPS

Combining CF with CLIPS

Combining CF with CLIPS

Combining CF with CLIPS

Lakukan Beberapa Langkah


- Load -> Reset -> (agenda) - Perhatikan urutan rule yang dijalankan

Rule dengan Salience yang lebih besar akan dieksekusi terlebih dahulu

Modifikasi Salience dari Rule

(defrule both-positif (declare (salience 6)) .... .... ....

(defrule both-negatif (declare (salience 10)) .... .... ....

Lakukan langkah yang sama : Load -> Reset -> Agenda

Lihat pada Agenda:


Akan terlihat bahwa rule dengan salience tinggi, akan dijalankan terlebih dahulu

Combining CF with CLIPS


Cf = 0.8390766