Propose and Revise in CLIPS

Tulisan ini merupakan lanjutan dari tulisan tentang pemilihan acak di CLIPS. Salah satu strategi untuk memuat sistem pakar yang bersifat konstruksi adalah ‘propose and revise’ yang mengajukan suatu alternatif solusi untuk kemudian dikonsultasikan ke pengguna apakah sudah dapat diterima atau belum. Jika pengguna merasa solusi yang diajukan masih kurang, maka sistem pakar akan mengganti alternatif solusi yang diajukan menjadi alternatif lain (jika memungkinkan). Dalam tulisan ini akan ditampilkan contoh sederhana (pilihan tunggal) yang dipilih secara acak menggunakan strategi random.

Saya menggunakan flag/state pada fakta opsi.

(deftemplate option
	(slot value 
		(type SYMBOL)
	)
	(slot state
		(type SYMBOL)
		(allowed-values unselected selected deselected)
		(default unselected)
	)
)

Sebagai contoh saya akan membuat beberapa pilihan pada bagian deffacts.

(deffacts awal
	(task select)
	(option (value sel1))
	(option (value sel2))
	(option (value sel3))
	(option (value sel4))
)

(defrule init-strategy
	(initial-fact)
	=>
	(set-strategy random)
)

Untuk melakukan pemilihan digunakan kaidah seperti pada tulisan sebelumnya. Fakta yang dipilih diubah state-nya menjadi selected. Fakta kendali (task) diubah menjadi fase berikutnya (propose).

(defrule select
	?f1<- (task select)
	?f 
	(modify ?f (state selected))
	(retract ?f1)
	(assert (task propose))
)

Mekanisme pengajuan (propose) dipecah menjadi beberapa kaidah untuk memperjelas antara penampilan alternatif solusi yang diajukan, pemunculan dialog dengan pengguna, dan pemrosesan jawaban dari pengguna.

(defrule propose
	?f1 
	(printout t "proposed " ?v crlf)
	(retract ?f1)
	(assert (task ask-proposal))
)

(defrule ask-propose
	(task ask-proposal)
	(not (asnwer ?))
	=>
	(printout t "are you ok with this (y/n)")
	(assert (answer (read)))
)

(defrule process-answer-finish
	?f1<- (task ask-proposal)
	?f 
	(retract ?f1)
	(retract ?f)
	(assert (task done))
)

(defrule process-answer-revise
	?f1<- (task ask-proposal)
	?f 
	(retract ?f1)
	(retract ?f)
	(assert (task revise))
)

Setelah respon dari pengguna didapat, langkah selanjutnya adalah membuat revisi (jika diperlukan). Untuk membuat revisi dari alternatif solusi yang diajukan, perlu diperiksa terlebih dahulu apakah alternatif lainnya tersedia. Jika tidak ada alternatif lainnya maka tidak perlu direvisi.

(defrule finish
	(task done)
	=>
	(printout t "done" crlf)
)

(defrule make-revision
	(declare (salience 50))
	?f1 <- (task revise)
	(option (value ?v2) (state unselected));there are other option
	?f 
	(retract ?f1)
	(modify ?f (state deselected))
	(assert (task select))
)

(defrule make-revision-2
	(declare (salience 40))
	?f1 <- (task revise)
	?f 
	(retract ?f1)
	(printout t "option " ?v " is the only alternatives left" crlf)
	(assert (task done))
)

Kode CLIPS diatas jika dijalankan maka akan menghasilkan keluaran seperti berikut.

3 comments

  1. vincent · Desember 17, 2008

    siank…mas saya lagi mengambil TA tentang sistem pakar dengan menggunakan program clips
    mas saya toong bimbingannya yah mas….tentang clips saya belum tau tentang pemakaian..trms sblmnya

  2. vincent · Februari 5, 2009

    salam kenal paktolong doank ini untuk TA akhir saya pak…..semoga bapak dapat membantu saya untuk dapat menggunakan program clips…saya tunggu pak balasan bapak…terima kasih atas respon bapak

  3. moulina · Mei 9, 2009

    bapak TA saya sistem pakar penyakit mata dengan menggunkan clips saya mohon petunjuk atau referensi contoh proram clips thanks

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s