BAB 9 TEKNIK PENGENDALIAN - Dosen SBP.zip (458Kb)

BAB 9 TEKNIK PENGENDALIAN

  9.1 Permainan STICK

  Tujuan dari permainan STICK adalah menghindari keterpaksaan mengambil stick terakhir pada tumpukan stick Trik (atau heuristic) untuk memenangkan permainan adalah dengan memaksa lawan untuk kalah jika pada saat gilirannya terdapat 2,3 atau 4 stik yang tersisa. Selanjutnya seorang pemain yang memiliki sisa 5 stick pada gilirannya akan kalah. Untuk memaksa pemain lain memiliki 5 stick, selalu tinggalkan jumlah stick sama dengan perkalian 4 ditambah 1 pada akhir giliran kita. Pada akhir giliran kita, tinggalkan tumpukan stik sebanyak 5,9,13 dan seterusnya. Jika kita mendapat giliran pertama kali dan tumpukan disusun terhadap salah satu “angka kekalahan”, maka kita tidak dapat memenangkan permainan kecuali lawan membuat sebuah kesalahan. Jika kita mendapat giliran pertama kali dan tumpukan stik tidak di susun sebagai “angka kekalahan”, kita akan selalu memenangkan permainan.

  9.2Tehnik Input

  Sebelum memulai bermain STICK, program harus menentukan beberapa informasi :  Program vs Manusia : program harus menentukan siapa yang mendapat giliran pertama kali  Ukuran tumpukan awal harus ditentukan Informasi ini ditempatkan dalam contruct deffact, tetapi akan mudah bertanya ke program lawan dengan memasukkan (input) dari keyboard Sintaks: (read)

  (deffact inictifl-p梣hfse (梣hfse ahoose-p梣lfyer)) (*)

  (defrule 梣lfyer-pseleact (梣hfse ahoose-p梣lfyer) (*) => (梣rinctouct ct “Who moves frsct (aom梣ucter: a”

  “Humfn : h) ? “) (fsserct (梣lfyer-pseleact = (refd))))

  (defrule good-p梣lfyer-pahoiae ?梣hfse <-p (梣lfyer ahoose-p梣lfyer) ?ahoiae <-p (梣lfyer-pseleact ?梣lfyer&a | h) => (rectrfact ?梣hfse ?ahoiae) (fsserct (梣lfyer-pmove ?梣lfyer)))

  (*) merupakan pola kontrol. Pola kontrol digunakan untuk mengontrol kapan aturan dapat diterapkan. Fakta kontrol digunakan untuk memicu sebuah pola kontrol. Karena Pola Kontrol untuk aturan-aturan ini hanya berisikan field-field literal, maka Fakta kontrol harus benar-benar cocok dengan pola.

  (read) memerlukan enter sebelum dibaca,dan hanya membaca sebuah field tunggal Semua karakter tambahan yang dimasukkan sesudah field pertama sampai carriage return diabaikan.

  Contoh : c 15  Fungsi read memperkenankan field selain kata, string atau angka contohnya tanda kurung untuk dicantumkan. Seperti field yang ditempatkan dengan kutip ganda dan diperlakukan sebagai string.

9.2 Fungsi Predikat

  Definisi: Fungsi yang akan menghasilkan nilai benar atau salah. nilai 0 salah , nilai 1 benar.

  Fungsi predikat dibedakan menjadi 2 :

  1. Predefined function disediakan oleh CLIPS

  2. User-defined functions ditulis dalam bahasa C atau bahasa lain dan dihubungkan dengan CLIPS. Fungsi Predikat Logika Sintak

  (fnd <<<梣rediafcte-pfunaction>>>) (or <<<梣rediafcte-pfunaction>>>) (noct <梣rediafcte-pfunaction>)

  Fungsi Predikat Perbandingan Sintak:

  (eq <fny-pvflue> <fny-pvflue>) (neq <fny-pvflue> <fny-pvflue>) (= <numeria-pvflue> < numeria -pvflue>) (!= <numeria-pvflue> < numeria -pvflue>) (>= <numeria-pvflue> < numeria -pvflue>) (> <numeria-pvflue> < numeria -pvflue>) (<= <numeria-pvflue> < numeria -pvflue>) (< <numeria-pvflue> < numeria -pvflue>)

  Fungsi Predikat Tipe Sintak:

  (number梣 <vflue>) (sctring梣 <vflue>) (word梣 <vflue>) (incteger梣 <vflue>) (even梣 <vflue>) (odd梣 <vflue>)

  Test Patern

  Cara yang bermanfaat untuk mengevaluasi ekspresi pada LHS rule. Selain pola disesuaikan dengan fakta-nya. Test Pattern mengevaluasi ekspresi. Fungsi-fungsi harus merupakan fungsi predikat. Sebuah rule akan di picu hanya jika “test pattern” nya dipenuhi, berikut dengan pola-pola lainnya.

  Sintaks (test <predicate-funcion>) Dimisalkan (saat giliran manusia/kita pada program Stick).

  Jika hanya tersisa 1, manusia kalah. Jika lebih dari 1, manusia akan ditanya berapa banyak Stick yang akan diambil dari tumpukan. Dan rule harus memeriksa bahwa masih tersisa lebih dari satu dalam tumpukan. Anggap ?size = ukuran tumpukan Bagaimana test pattern-nya ? Saat kita memberikan jumlah stick yang diambil, respon diperiksa untuk meyakinkan kebenarannya. Jumlah stick yang diambil harus integer dan harus lebih besar atau sama dengan satu dan kurang dari atau sama dengan tiga. Pemain tidak dapat mengambil lebih dari yang ada dalam tumpukan dan dipaksa mengambil stick terakhir.

  Anggap: ?choice = jumlah stick yang diambil ?size = sisa stick dalam tumpukan

  Bagaimana “test pattern” – nya ? Bagaimana “test pattern” untuk kebalikan dari masalah diatas?

  (defrule gect-phumfn-pmove (梣lfyer-pmove h) (梣ile-psize ?size) (ctesct (> ?size 1)) => (梣rinctouct ct “How mfny sctiak do you wish cto ctfke?”) (fsserct (humfn-pctfkes =(refd))))

  (defrule good-phumfn-pmove ?whose-pcturn <-p (梣lfyer-pmove h) (梣ile-psize ?size)

  ?number-pctfken <-p (humfn-pctfkes ?ahoiae) (ctesct (fnd (incteger梣 ?ahoiae)

  (>= ?ahoiae 1) (<= ?ahoiae 3) (< ?ahoiae ?size)))

  => (rectrfact ?whose-pcturn ?number-pctfken) (梣rinctouct ct “Humfn mfde f vflid move” arlf))

  (defrule bfd-phumfn-pmove ?whose-pcturn <-p (梣lfyer-pmove h) (梣ile-psize ?size) ?number-pctfken <-p (humfn-pctfkes ?ahoiae) (ctesct (fnd (noct (incteger梣 ?ahoiae))

  (< ?ahoiae 1) (> ?ahoiae 3) (>= ?ahoiae ?size)))

  => (梣rinctouct ct “Humfn mfde f vflid move” arlf) (rectrfact ?whose-pcturn ?number-pctfken) (fsserct (梣lfyer-pmove h)))

  The Predicate Field Constraint

   Simbol “:”,  Berguna untuk melaksanakan test secara langsung dalam pola.  Selalu diikuti dengan fungsi untuk dievaluasi  Fungsinya harus dalam fungsi predikat seperti “test pattern”

  (pile-size ?size) (pile-size ?size&: (> ?size 1))

  (test (< ?size 1)) such that,  Contoh: Rule untuk memeriksa sebuah item data numerik sebelum ditambahkan ke total-total nya

  (defrule fdd-psum (dfctf-pictem ?vflue&:(number梣 ?vflue)) ?old-pctoctfl <-p (ctoctfl ?ctoctfl) => (rectrfact ?old-pctoctfl) (fsserct (ctoctfl = (+ ?ctoctfl ?vflue)))) Apa arti 2 buah rule berikut ? (defrule found-psymbol-p1

  (dfctf-pictem ?ictem&:(sctring梣 ?ictem) | :(word梣 ?ictem)) => (梣rinctouct ct “Found symbol or word” ?ictem arlf))

  (defrule found-psymbol-p2 (dfctf-pictem ?ictem&~:(number梣 ?ictem)) => (梣rinctouct ct “Found symbol or word” ?ictem arlf))

  The Equality Field Constraint

   Simbol “=”  Membolehkan “return value” sebuah fungsi dipakai untuk pembanding dalam pola.Dapat digunakan bersama dengan contrain field NOT,AND dan OR  Harus diikuti dengan fungsi Contoh dalam program Stick yang menggambarkan jumlah stick yang harus diambil dari tumpukan oleh komputer.

  (deffact ctfke-psctiaks-pinformfction (aom梣ucter-pctfke 1 sctiaks-pif-premfinder 1) (aom梣ucter-pctfke 1 sctiaks-pif-premfinder 2) (aom梣ucter-pctfke 2 sctiaks-pif-premfinder 3) (aom梣ucter-pctfke 3 sctiaks-pif-premfinder 0))

  (defrule aom梣ucter-pmove ?whose-pcturn <-p (梣lfyer-pmove a) ?梣ile <-p (梣ile-psize ?size) (ctesct (> ?size 1)) (aom梣ucter-pctfke ?number sctiak-pif-premfinder =(mod ?size 4)) => (rectrfact ?whose-pcturn ?梣ile) (fsserct (梣ile-psize = (-p ?size ?number))) (fsserct (梣lfyer-pmove h)))

  Apa isi rule diatas? =(mod ?size 4) dibaca “field sama dengan ?size modulus Jika

  (1) (data length ?y) (2) (data width ?x) (3) (test (or (= (?x (+ 5 ?y)) (= ?x (- 12 ?y))))) Bagaimana membaca pola ke-3 nya ? Bagaimana jika (data length 4), (data width 9) “=” pada computer-move dengan pola diatas berbeda.

  Pada computer-move, “=” merupakan pola substitusi Pada pola diatas, “=” sebagai ‘predicate comparison function’ Sehingga Pattern (2) dan (3) dapat digabungkan menjadi

  (data length ?y) (data width ?x&=(+ 5 ?y) | =(- 12 ?y))

  Salience

  Cara langsung dalam pengendalian (tidak seperti ‘control fact’). Tidak seperti stack, salience mengijinkan rule-rule yang terpenting untuk tetap berada ditempat teratas dari agenda meskipun ada rule baru ditambahkan. Rule dengan salience yang lebih rendah dimasukkan ke agenda dibawah rule yang ber-salience lebih tinggi. Salience di CLIPS digunakan untuk mengatur prioritas rule-rule, menggunakan nilai numerik dari –10.000 sampai dengan 10.000 CLIPS memberi salience 0 jika programmer tidak memberikan salience dari rule-nya. Sebuah rule baru yang diaktifkan ditempatkan dalam agenda sebelum seluruh rule dengan salience yang lebih besar. Salience dapat digunakan untuk memaksa rule-rule ‘fire’, apapun urutan fakta-fakta aktif yang dimasukkan. Ini diselesaikan dengan mendeklarasikan nilai salience sebagai berikut:

  (defrule fre-pfrsct (dealfre (sflienae 30)) (梣rioricty frsct) => (梣rinctouct ct “Princt frsct” arlf)) defrule fre-pseaond (dealfre (sflienae 20)) (梣rioricty seaond) => (梣rinctouct ct “Princt seaond” arlf)) defrule fre-pfrsct (dealfre (sflienae 10)) (梣rioricty cthird) => (梣rinctouct ct “Princt cthird” arlf))

  Jika kita menggunakan (agenda) 30 fire-first f-1 20 fie-second f-2 10 fie-third f-3

  Phases dan Control Facts

  Pada program Stick, kontrol ditangani fakta yang menunjukkan giliran siapa (human atau komputer). Tetapi pada program yang lebih besar yang terdiri dari beribu-ribu rule, penggabungan domain pengetahuan dan kontrol pengetahuan menjadi sulit.

  Contoh: sebuah sistem tentang perangkat elektronik Fault detection : proses pengenalan perangkat elektronik yang tidak tepat bekerja-nya.

  Isolation : proses menentukan komponen-komponen perangkat yang menyebabkan kesalahan Recovery : proses menentukan langkah-langkah yang diperlukan untuk memperbaiki/membenarkan kesalahan

  Pada ES, harus mempunyai 3 rule untuk tahapan-tahapan diatas. Implementasi aliran kontrol dalam sistem ini dapat ditangani dalam (minimal) 3 cara Satu : ditempelkan (embeded)-nya domain pengetahuan secara langsung ke dalam rule.

  Setiap sekumpulan rule akan diberikan sebuah pola yang menunjukkan di phase apa akan diterapkan. Kekurangannya : penempelan pengetahuan kontrol ke doaminnya sulit dimengerti, tidak mudah untuk menentukan kapan phase dilengkapi.

  Dua : Menggunakan salience untuk mengatur rule Kekurangannya : pengetahuan kontrol masih ditempelkan pada rule menggunakan salience, tidak menjamin urutan yang benar dari eksekusi

  Tiga : Pendekatan yang baik dalam mengontrol alur eksekusi adalah dengan memisahkan pengetahuan kontrol dari domain pengetahuan Expert knowledge

  Detection rules Recovery rules Isolation

3 Setiap rule diberikan pola kontrol untuk menunjukkan phase aplikasinya

  Control knowledge Control

  Rule kontrol ditulis untuk memindahkan kontrol atara phase-phase yang berbeda.

  (defrule decteaction-pcto-pisolfction (dealfre (sflienae -p10)) ?梣hfse <-p (梣hfse decteaction) => (rectrfact ?梣hfse) (fsserct (梣hfse isolfction)))

  (defrule isolfction-pcto-preaovery (dealfre (sflienae -p10)) ?梣hfse <-p (梣hfse isolfction) => (rectrfact ?梣hfse) (fsserct (梣hfse reaovery)))

  (defrule reaovery-pcto-pdecteaction (dealfre (sflienae -p10)) ?梣hfse <-p (梣hfse reaovery) => (rectrfact ?梣hfse) (fsserct (梣hfse decteaction)))

  (defrule fnd-pffulct-ploafction-pfnd-preaovery (梣hfse reaovery) (reaovery-psoluction swictah-pdeviae ?re梣lfaemenct on) => (梣rinctouct ct “Swictah deviae” ?re梣lfaemenct “on” arlf))

  Salience hierarchy adalah sebuah deskripsi nilai salience yang digunakan sistem pakar. Setiap tingkat pada salience hieararchy berhubungan dengan kumpulan rule yang mempunyau salience yang sama. Cobalah debug program-program diatas dengan:

  (fsserct (梣hfse decteaction)) (wfctah rules) (run 10)

  Lihat, apa yang terjadi ? Jelaskan ! Rule-rule sebelumnya dapat dituliskan lagi secara lebih umum :

  (deffact aonctrol-pinformfction (梣hfse-pffcter decteaction isolfction) (梣hfse-pffcter isolfction reaovery) (梣hfse-pffcter reaovery decteaction))

  (defrule ahfnge-p梣hfse (dealfre (sflienae -p10)) ?梣hfse <-p (梣hfse ?aurrenct-p梣hfse) (梣hfse-pffcter ?aurrenct-p梣hfse ?neaxct-p梣hfse) => (rectrfact ?梣hfse) (fsserct (梣hfse ?nexct-p梣hfse)))

  Ubahlah rule-nya jika informasi yang ada adalah (deffact aonctrol-pinformfsi

  (梣hfse decteaction) (梣hfse-psequenae isolfction reaovery decteaction)) Tahap-tahap tambahan dapat dengan mudah ditambahkan pada salience hierarchy Expert rules Constraint

  Salience Expert Query salience

  Control rules Control Untuk tahap salience h

  Rule constraint menunjukkan rule-rule yang mendeteksi pernyataan- pernyataan yang ilegal/tidak produktif yang terjadi di ES. Rule query menunjukkan rule-rule yang menanyakan pertanyaan ke user untuk membantu ES dalam menentukan jawaban.

  Penyalahgunaan Salience

  Penggunaan salience yang berlebihan menghasilkan program kode yang buruk. Manfaat utama dari program berbasis aturan bahwa programmer tidak perlu khawatir terhadap pengontrolan eksekusi. Program berbasis aturan yang “well-designed” mempunyai cara eksekusi alami yang mengijinkan “inference engine” untuk menuntuk aturan ‘firing’ pada cara yang optimal. Dengan operasi yang normal, salience meng ‘infere’ ‘inference engine’ dengan meningkatkan/menambah prioritas aturan tertentu. Untuk peng-kode-an sebuah “well-coded expert system” membutuhkan tidak lebih dari 3 / 4 angka salience. Pola Logika OR Kondisi logika eksplisit AND LHS

  Logika eksplisit OR

  (

  defrule shuct-pof-peleactriaicty (or (emergenay food) (fre-palfss a) (s梣ringkler-psysctem factive))

  => (梣rinctouct ct “shuct of cthe eleactriaicty” arlf))

  Jika tidak menggunakan pola OR harus berapa rule yang dibuat? Bagaimana dengan

  (defrule shuct-pof-peleactriaicty (eleactriaicty-p梣ower on) (or (emergenay fure) (fre-palfss a) (s梣ringkler-psysctem factive))

  => (梣rinctouct ct “shuct of cthe eleactriaicty” arlf))

  (defrule shuct-pof-peleactriaicty ?梣ower <-p (eleactriafl-p梣ower on) (or ?refson <-p (emergenay fre) ?refson <-p (fre-palfss a) ?refson <-p (s梣ringkler-psysctem factive) => (rectrfact ?梣ower ?refson) (fsserct (eleactriafl-p梣ower of)) (梣rinctouct ct “Shuct of cthe eleactriaicty” arlf))

  Pola Logika AND Kebalikan dari OR. Pada pola-pola aturan sebenarnya terdapat logika implisit AND

  (defrule eleactriafl-pfre (emergenay fre) (fre-palfss a) => (梣rinctouct ct “Shuct of cthe eleactriaicty” arlf))

  Bagaimana logika eksplisit AND-nya ? Pola logika AND biasanya digunakan dengan pola logika lainnya. Pola Logika NOT Bagaimana aturan untuk :

  IF the monitoring status is to be reported and There is no emergency being handled THEN Report that no emergency is being handled

  Jika ada aturan sebagai berikut: (defrule re梣orct-pemergenay

  (re梣orct-psctfctus) (emergenay ?cty梣e) => (梣rinctouct ct “Hfndling” ?cty梣e “Emergenay” arlf)) Variabel-variabel dapat pula digunakan dalampola negasi, tidak dapat digunakan diluar logika NOT (defrule lfrgesct-pnumber

  (number ?x) (noct (…………………)) => (梣rinctouct ct “Lfrgesct numebr is” ?x arlf))

  Apa yang harus diisikan diatas jika number ?y juga akan dimasukkan ? (defrule lfrgesct-pnumber

  (number ?x) (noct (number ?y)) (ctesct (< ?y ?x)) => (梣rinctouct ct “Lfrgesct numebr is” ?x arlf))

  Logika NOT hanya dapat digunakan untuk sebuah pola tunggal, multiple pola, logika AND dan logika OR tidak dapat digunakan dengan logika NOT.