Algoritma backward chaining atau runut balik adalah salah satu algoritma pada sistem pakar.

Menurut saya cukup membingungkan apabila dibandingkan dengan algoritma forward chaining / runut maju, namun saya yakin dengan memperhatikan pola pengerjaan, algoritma ini cukup mudah dipahami.

Kunci algoritma ini adalah pada premis dan konklusi, layaknya forward chaining, perbedaanya adalah algoritma backward chaining memeriksa konklusi (THEN ..) terlebih dahulu, yang kemudian dicari premisnya (IF ..). Dan tidak lupa, algoritma backward chaining menggunakan stack untuk penyimpanan memori sementara.

Contoh Kasus

Aturan/rules basis pengetahuannya

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN K

Fakta awal yang diberikan adalah A dan F, buktikan apakah K bernilai benar apabila proses inferensi dilakukan dengan cara backward chaining?

Jawab

Langkah 1

Database: A F
Stack: K

Goal: K (sebagai isi awal dari stack). J tidak ada di database, simpan di stack.

Langkah 2

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN **J**
R9 : IF G THEN J
R10 : IF J THEN K
Database: A F
Stack: K J

Sub goal: J

A ada di Database. I tidak ada di Database (simpan di stack).

Langkah 3

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN **I**
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN K
Database: A F
Stack: K J I

Sub goal: I

C tidak ada di database (simpan di stack). H tidak ada di database (simpan di stack).

Langkah 4

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN **H**
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN K
Database: A F
Stack: K J I C H

Sub goal: H

G tidak ada di database (simpan di stack). E tidak ada di database (simpan di stack).

Langkah 5

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN K
Database: A F
Stack: K J I C H G E

Sub goal: E

Aturan dengan konklusi E tidak ada (yang berarti gagal), maka kembali ke langkah ke 2 (namun kita akan memakai R9 dari pada R8).

Langkah 6 (perulangan dari langkah 2)

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN **J**
R10 : IF J THEN K
Database: A F
Stack: K J

Sub goal: J

G tidak ada di database (simpan di stack).

Langkah 7

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN **G**
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN K
Database: A F
Stack: K J G

Sub goal: G

A ada di database. G masukkan ke database.

Langkah 8

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN **J**
R10 : IF J THEN K
Database: A F G
Stack: K J

Sub goal: J

G ada di database. J masukkan ke database.

Langkah 9

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN **K**
Database: A F G J
Stack: K

Sub goal: K

J ada di database. K masukkan ke database.

Langkah 10

R1 : IF ( A AND B) THEN C
R2 : IF C THEN D
R3 : IF (A AND E) THEN F
R4 : IF A THEN G
R5 : IF (F AND G) THEN D
R6 : IF (G AND E) THEN H
R7 : IF (C AND H) THEN I
R8 : IF (I AND A) THEN J
R9 : IF G THEN J
R10 : IF J THEN K
Database: A F G J K
Stack: (kosong)

Karena Goal K ditemukan di database, maka proses pencarian dihentikan. Disini terbukti bahwa K bernilai benar

pemilu 2014 Merasa aneh saya menuliskan artikel ini. Bukannya saya meremehkan para intelek rakyat Indonesia, tapi saya punya pikiran tersendiri bagaimana cara memilih caleg (calon legislatif) pada Pemilihan Umum 9 April nanti dengan cara bodon.

Cukup simpel, jangan pilih caleg yang melanggar peraturan pemilu. Tipsnya seperti berikut:

  • Jangan pilih caleg yang memasang APK (alat peraga kampanye) di tempat ibadah, tiang listrik, dan pohon.
  • Jangan pilih caleg yang menggunakan tempat ibadah sebagai tempat politik praktis alias kampanye. Misal, pengajian sambil bagi-bagi kalender/kartu nama yang gambarnya adalah seorang caleg.
  • Jangan pilih caleg yang bagi-bagi uang (money politic), walaupun jumlahnya hanya Rp 50.000.

Saya yakin masih begitu banyak para caleg yang melakukan tindakan jujur dalam rangka menjaring suara dalam Pemilu, dan tips di atas semoga bisa membantu. :3

Akhirnya setelah begitu lama mencari platform ngeblog untuk blog personal, akhirnya pilihan saya jatuh di Jekyll. Ya .. beberapa platform sudah saya coba seperti Blogspot, Wordpress, dan Roon. Roon merupakan platform yang sempat saya pakai, namun tidak begitu lama. Karena Roon, saya mengenal Markdown sebagai alat ngeblog, terimakasih Roon :3

Bahkan gara-gara “gila” markdown, saya sempat mencari tool markdown untuk Blogspot dan Wordpress. Namun, sama saja, dengan memakai markdown di Blogspot, saya jadi bekerja 2 kali: ketik file markdown kemudian di parse manual ke HTML. Di Wordpress sebetulnya ada plugin markdown, namun gara-gara pikiran idealis saya, sata tidak memakai Wordpress. Wordpress terlalu besar dan berat untuk blog pribadi yang ingin saya buat.

Setelah cukup banyak googling, saya mendapatkan kabar tentang platform blog Roon. Roon cukup keren dan anti-mainstream, editor pun menggunakan markdown, tampilan satu kolom, dan tidak ada fitur kolom komentar built-in (yang ada tombol share Twitter). Tampilan sangat responsif, tapi ada fitur yang kurang: di Roon tidak ada fitur tag maupun kategori! Cukup mengganggu bagi saya secara fitur tag dan kategori seharusnya menjadi fitur utama dan basic untuk sebuah platform blog.

Kekecewaan terhadap Roon membuat saya bermain dengan Google lagi. Saya sempat mampir ke Scriptogr.am, Ghost, dan Postagon. Karena saya adalah pengguna Github dan pecinta Ruby, saya pun mampir ke Jekyll (walaupun saya mampir karena tidak sengaja :v).

Keunggulan Jekyll menurut saya:

  • Berbasis Ruby
  • Non-database, sehingga sangat ringan
  • Bisa dikustom sedemikian rupa
  • Banyak pilihan themes yang sangat menarik, tidak kalah dengan platform lain
  • Fitur komentar menggunakan Disqus

Dengan memanfaatkan Jekyll yang disandingkan dengan Github Pages, sepertinya saya akan betah ngeblog dengan platform ini.

Intermezzo (jalankan Asciinema di Github pages)