Clips

Embed Size (px)

Citation preview

Introduction To CLIPS (C Language Integrated Production System)Prepared by: Edi, SKom, MKM

History Original name: NASAs AI Language (NAIL) Created by: NASA-Johnson Space Center Type of knowledge: Declarative Type of expert system: Rule-based Download: http://clipsrules.sourceforge.net/

Perintah dasar CLIPS(exit) Shut down CLIPS (clear) Hapus semua rule dan fact dari memory (restart CLIPS) (reset) Hapus semua fact dari memory dan reset agenda (run) Eksekusi program CLIPS

Facts and RulesMemasukkan fact ke dalam database fact memakai perintah: (assert (fact)) Menampilkan semua fact dari database: (facts) Contoh: CLIPS> (assert (warna hijau)) (facts) f-0 (warna hijau) For a total of 1 fact

Facts and Rules (Continued)Memasukkan rule: (defrule) Menampilkan semua rule: (rules)

Contoh:(defrule bebek (binatang-adalah bebek) => (asssert (suaranya kwek)) (printout t Itu adalah bebek crlf) )

Pattern MatchingMembuat default fact: (deffacts nama-fact (fact)) Contoh: (deffacts hewan (hewan anjing) (hewan kucing) (hewan bebek) (hewan kura-kura) (berdarah-panas anjing) (berdarah-panas kucing) (berdarah-panas bebek) (bertelur bebek) (bertelur kura-kura) (anak-dari anjing puppy) (anak-dari kucing kitten) (anak-dari kura-kura hatchling) )

Pattern Matching (Continued)CLIPS> (defrule hewan (hewan ?) => (printout t hewan ditemukan crlf)) Hasil: CLIPS> (run) hewan ditemukan hewan ditemukan hewan ditemukan hewan ditemukan CLIPS>

Pattern Matching (Continued)Variables in patterns (defrule daftar-hewan (hewan ?nama) => (printout t ?nama ditemukan crlf)) Hasil: CLIPS> (run) kura-kura ditemukan bebek ditemukan kucing ditemukan anjing ditemukan CLIPS>

Pattern Matching (Continued)Variables in patterns (Continued) (defrule mamalia (hewan ?nama) (berdarah-panas ?nama) (not (bertelur ?nama)) => (assert (mamalia ?nama)) (printout t ?nama termasuk mamalia crlf) )

Buat program dalam CLIPS untuk fact berikut: Kitten termasuk mamalia Puppy termasuk mamalia - Masukkan 2 fact di atas dalam database fact - Cetak ke layar fact-fact tersebut

Getting data from the userMenerima input: (assert (user-input (read))) (defrule apa-nama-anak (hewan ?nama) (not (anak-dari ?nama ?)) => (printout t Apa nama anak dari ?name dalam bahasa Inggris ?) (assert (nama-dari ?nama (read))))

Logic and Math OperatorsLogic OR (defrule payung (or (cuaca panas) (cuaca hujan)) => (assert (butuh payung)))

Logic NOT (defrule tidak-payung (not (or (cuaca panas) (cuaca hujan))) => (assert (tidak butuh payung)))

Logic and Math Operators (Continued)Logic AND (defrule payung (and (cuaca panas) (cuaca hujan)) => (assert (butuh payung)))

Logic and Math Operators (Continued)CLIPS> (+ 5 7) 12 CLIPS> (- 5 7) -2 CLIPS> (* 5 7) 35 CLIPS> (/ 5 7) 0.714 CLIPS>

Quiz (10%)Ubah ekspresi matematika berikut ini ke dalam notasi CLIPS:1. 2. 3. 4. 10+4*19-35/12 20*5-7+8-15/5 (10+7)*24/3-(6*7) ((15+25)/(75/15)) ((8-10)+(2*15))

Wildcard PatternsFacts: (personil-dari beatles john_lennon paul_mccartney george_harrison ringo_starr) (personil-dari westlife shane_filan kian_egan nicky_byrne mark_feehily) (personil-dari bsb nick_carter howie_dorough brian_littrell mclean kevin_richardson) Rule: (defrule nama-band (personil-dari ?band $? => (printout t Ada band yang bernama ?band crlf))

Wildcard Patterns (Cont)Hasil: CLIPS> (run) Ada band yang bernama bsb Ada band yang bernama westlife Ada band yang bernama beatles Coba rule berikut: (defrule personil-band (personil-dari ?band $?personil) => (printout t Personil dari ?band adalah $?personil crlf))

VariablesMembuat temporary variabel, gunakan fungsi bind.f Bentuk umum: (bind ?nama variabel) Contoh:

(defrule jumlah (angka ?x) (angka ?y) => (bind ?total (+ ?x ?y)) (printout t ?x + ?y = ?total crlf) (assert (total ?total)))

Variables (Cont)Membuat variabel global memakai construct defglobal. Bentuk umum: (defglobal ?*variabel1* = string/bilangan ?*variabel2* = string/bilangan ) Contoh: CLIPS> (defglobal ?*var1* = 17 ?*var2* = tujuh ) CLIPS> (reset)

TemplateMembuat template memakai construct deftemplate. Bentuk umum: (deftemplate (slot ) (multislot ) )

Template (Cont)Membuat template untuk facts berikut ini:

(usia Andrew 20) (berat Andrew 80) (tinggi Andrew 188) (tekanan-darah Andrew 130 80)(usia brenda 23) (berat brenda 50) (tinggi brenda 140) (tekanan-darah brenda 120 60)

Template (Cont)Create template: (deftemplate data-pribadi (slot nama) (slot usia) (slot berat) (slot tinggi) (multislot tekanan-darah) )

Masukkan fact:

(assert (data-pribadi (nama Andrew) (usia 20) (berat 80) (tinggi 188) (tekanan-darah 130 80)) (assert (data-pribadi (nama brenda) (usia 23) (berat 50) (tinggi 140) (tekanan-darah 120 60))

Template (Cont)Mengubah nilai dari satu atau lebih slot dari fact, pakai fungsi modify.

Bentuk umum:(modify index ( value)) Contoh: (defrule ulang-tahun ?ulang-tahun (printout t ?nama punya berat ?weight crlf)) Contoh 2: (defrule cek-angka (test (> 6 5)) => (printout t 6 memang lebih besar dari 5 crlf))

Condition (Cont)Fungsi exists digunakan untuk mengecek adanya 1 atau lebih fact yang memenuhi pola yang ditentukan. (defrule cek-orang (exists (data-pribadi (nama ?nama))) => (printout t Hasil pengecekan ada minimal 1 orang di dalam database fact crlf))

Condition (Cont)Fungsi forall digunakan untuk mengecek apakah semua fact memenuhi pola yang telah ditentukan. (defrule cek-semua (forall (data-pribadi (nama ?nama))) => (printout t Setiap data terdapat nama crlf))

ReferenceRobinson, P. (n.d.). Clips Tutorial. University of Hull, UK.