MAD…..Math_C

We are NOT MAD! but we are Member At Discrete Math C….

Prolog Simple Expert System (Step Of Six Counters)

Posted by madmathc pada November 24, 2009

MAD-Math-C (MEMBER AT DISCRETE MATHEMATIC CLASS C)

Final Project

Simple Expert System Using Prolog

@author Mo2ncha’09

Assalamualaikum Wbr.

Kali ini kami memberikan contoh sebuah permasalahan sederhana, yaitu ada sebuah papan dengan 3 titik hitam dan 3 titik putih saling berhadapan dan di tengah-tengahnya diberikan ruang/spasi, seperti gambar dibawah ini:

Dari gambar diatas diketahui bahwa tujuannya adalah membuat urutan langkah yang tepat untuk menukarkan hitam dan putih saling berlawanan, dengan aturan yang berlaku adalah sebagai berikut:

  1. Hitam dan putih harus bergerak bergantian dan saling berlawanan arah
  2. Setiap biji hitam maupun putih dapat bergerak secara horizontal maupun vertikal
  3. setiap biji hitam maupun putih dapat melompati satu biji lainnya kedalam sebuah ruang kosong

Bagaimana cara  menulis program Prolognya untuk mencari semua kemingkinan cara untuk melakukan hal tersebut tanpa perulangan?  Sebagai contoh, input query yang kita masukkan adalah:

?-play (w,s(w,w,w,e,b,b,b),s(b,b,b,e,w,w,w),S,R).

maka Prolog harus menjawab seperti ini :

S=[s(w,w,w,e,b,b,b),s(w,e,w,b,b,b,b),…,s(b,b,b,e,w,w,w)].

R=[[w,2,4],[b,6,2],[w,4,6],…,[w,4,6]].

Penjelasannya adalah [w,2,4] menunjukkan biji putih akan bergerak dari posisi 2 sampai dengan posisi 4, bukan dari output “,…,”. Tetapi setiap biji yang ada harus mengandung histori dari tiap-tiap tempat yang telah di tempati (setelah lompatan/jalan), jumlah maksimal gerakan yang ada mungkin berbeda konfigurasinya.

Cek query dari Prolognya:
?-play (_, s (w, w, w, e, b, b, b), s (b, b, e, w, w, b, w ),_,_).

  • Apa artinya jawaban ini? Petunjuk: pertama adalah memecahkan masalah untuk bermain / 4 tanpa R variabel.
  • Bagaimana cara mencari pergerakan alternatifnya (alternate movement?)

Solusinya (mudah-mudahan kalau saya tidak salah):
%pergerakan tepi pinggir/corner edge movement
move(C, 1, 2, s(C, e, X3, X4, X5, X6, X7), s(e, C, X3, X4, X5, X6, X7)).
move(C, 1, 3, s(C, X2, e, X4, X5, X6, X7), s(e, X2, C, X4, X5, X6, X7)).
move(C, 7, 5, s(X1, X2, X3, X4, e, X6, C), s(X1, X2, X3, X4, C, X6, e)).
move(C, 7, 6, s(X1, X2, X3, X4, X5, e, C), s(X1, X2, X3, X4, X5, C, e)).

% pergerakan arah tengah/center edge movement
move(C, 4, 2, s(X1, e, X3, C, X5, X6, X7), s(X1, C, X3, e, X5, X6, X7)).
move(C, 4, 3, s(X1, X2, e, C, X5, X6, X7), s(X1, X2, C, e, X5, X6, X7)).
move(C, 4, 5, s(X1, X2, X3, C, e, X6, X7), s(X1, X2, X3, e, C, X6, X7)).
move(C, 4, 6, s(X1, X2, X3, C, X5, e, X7), s(X1, X2, X3, e, X5, C, X7)).

% gerak melompat/jump movement
move(C, 2, 6, s(X1, C, X3, X4, X5, e, X7), s(X1, e, X3, X4, X5, C, X7)).
move(C, 3, 5, s(X1, X2, C, X4, e, X6, X7), s(X1, X2, e, X4, C, X6, X7)).

% menjelaskan semua kemungkinan gerakan — 20 gerakan dari segala arah
% define all the required movement — 20 movements from all directions
make_movement(C, N1, N2, List1, List2) :- move(C, N1, N2, List1, List2).
make_movement(C, N1, N2, List1, List2) :- move(C, N2, N1, List2, List1).

% Pergerakan alternatif dari biji hitam dan biji putih
% alternate moving a black counter and a white counter
nextPlayer(b, w).
nextPlayer(w, b).
alternate(Present, Next) :- nextPlayer(Present, Next).

play_move(C, X, X, A, [X], []).
play_move(C, X, Y, A, [X|P], [[C, N1, N2]|B]) :- make_movement(C, N1, N2, X, Z),
alternate(C, Next),
not(member(Z, [X|A])),
play_move(Next, Z, Y, [X|A], P, B).
play(C, X, Y, S, R):- play_move(C, X, Y, [], S, R).

Mohon saran dan kritiknya jika terdapat kesalahan dalam posting ini.

Wassalamualaikum Wbr.

Mo2ncha dkk

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

 
%d blogger menyukai ini: