• Tidak ada hasil yang ditemukan

Lampiran 1 Pseudo code program C++ untuk pembangkitan soal N-puzzle.

N/A
N/A
Protected

Academic year: 2021

Membagikan "Lampiran 1 Pseudo code program C++ untuk pembangkitan soal N-puzzle."

Copied!
14
0
0

Teks penuh

(1)
(2)

Lampiran 1

Pseudo code program C++ untuk pembangkitan soal N-puzzle.

1 Set i to 1

2 FOR each i on index array puzzle 3 IF i is end of index array puzzle 4 Set nilai[i] to 0 5 ELSE 6 Set nilai[i] to i 7 END IF 8 Increment i 9 END FOR 10 Set i to 1

11 FOR each i on index array puzzle 12 IF nilai[i] is 0 13 i is position of 0 14 END IF 15 Increment i 16 END FOR 17 Set i to 1

18 FOR each i on number of randomization step 19 Search position of 0

20 IF nodes available not previous position of 0 21 Random target node from nodes available 22 Switch 0 with target node

23 END IF 24 Increment i 25 END FOR

Baris 1 sampai baris 9 pada lampiran ini digunakan untuk menentukan nilai dari 1 sampai N

pada puzzle, baris 10 sampai baris 16 digunakan untuk mencari posisi kotak bernilai 0 (blank), dan

baris 17 sampai baris 25 digunakan untuk melakukan langkah pengacakan.

(3)

Lampiran 2 Program DLV, Pembangkitan kemungkinan gerak pada langkah pertama (

T=0

).

1 move(1,2,1) v move(1,1,2) :- at(0,0,1,1).

2 move(1,X,2) v move(1,X0,1) :- at(0,0,X,1),n(X),X=X0+1,pos(X0). 3 move(1,2,Y) v move(1,1,Y0) :- at(0,0,1,Y),n(Y),Y=Y0+1,pos(Y0).

4 move(1,X,Y0) v move(1,X0,Y) :- at(0,0,X,Y), n(X), n(Y), X=X0+1, Y=Y0+1, pos(X0), pos(Y0).

5 move(1,X1,1) v move(1,X,2) v move(1,X0,1) :- at(0,0,X,1),X>1,n(S),S>2,X<S,X1=X+1,X=X0+1,pos(X0). 6 move(1,X1,Y) v move(1,X,Y0) v move(1,X0,Y) :-

at(0,0,X,Y),X>1,n(S),S>2,X<S,n(Y),X1=X+1,Y=Y0+1,X=X0+1,pos(Y0),pos(X0). 7 move(1,2,Y) v move(1,1,Y1) v move(1,1,Y0) :-

at(0,0,1,Y),X=1,Y>1,n(S),S>2,Y<S,Y1=Y+1,Y=Y0+1,pos(Y0). 8 move(1,X,Y1) v move(1,X0,Y) v move(1,X,Y0) :-

at(0,0,X,Y),n(X),Y>1,n(S),S>2,Y<S,Y1=Y+1,X=X0+1,Y=Y0+1,pos(X0),pos(Y0). 9 move(1,X1,Y) v move(1,X,Y1) v move(1,X0,Y) v move(1,X,Y0) :-

at(0,0,X,Y),X>1,n(S),S>2,X<S,Y>1,n(S),Y<S,X1=X+1,Y1=Y+1,X=X0+1,Y=Y0+1,pos(X0),p os(Y0).

Sebagai keterangan

X=X0+1

menunjukkan bahwa posisi

X

ada di sebelah kanan

X0

,

X1=X+1

menunjukkan bahwa posisi

X

ada di sebelah kiri

X1

,

Y=Y0+1

menunjukkan bahwa posisi

Y

ada di

atas

Y0

, dan

Y1=Y+1

menunjukkan bahwa posisi

Y

ada di bawah

Y1

.

Baris 1 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di pojok kiri atas.

Baris 2 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di pojok kanan atas.

Baris 3 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di pojok kiri bawah.

Baris 4 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di pojok kanan bawah.

Baris 5 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di sisi atas.

Baris 6 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di sisi bawah.

Baris 7 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di samping kiri.

Baris 8 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 di samping kanan.

Baris 9 adalah aturan pembangkitan kemungkinan gerak jika posisi 0 berada di tengah.

(4)

Lampiran 3 Program DLV, Pembangkitan kemungkinan gerak pada langkah berikutnya (

T>0

).

1 move(T1,2,1) :- at(T,0,1,1),at(T0,0,1,2),T>0,T=T0+1,T1=T+1,not solved(T). 2 move(T1,1,2) :- at(T,0,1,1),at(T0,0,2,1),T>0,T=T0+1,T1=T+1,not solved(T). 3 move(T1,X0,1) :- at(T,0,X,1),at(T0,0,X,2),T>0,T=T0+1,T1=T+1,n(X),X=X0+1,pos(X0),not solved(T). 4 move(T1,X,2) :- at(T,0,X,1),at(T0,0,X0,1),T>0,T=T0+1,T1=T+1,n(X),X=X0+1,pos(X0),not solved(T). 5 move(T1,1,Y0) :- at(T,0,1,Y),at(T0,0,2,Y),T>0,T=T0+1,T1=T+1,n(Y),Y=Y0+1,pos(Y0),not solved(T). 6 move(T1,2,Y) :- at(T,0,1,Y),at(T0,0,1,Y0),T>0,T=T0+1,T1=T+1,n(Y),Y=Y0+1,pos(Y0),not solved(T). 7 move(T1,X0,Y) :- at(T,0,X,Y),at(T0,0,X,Y0),T>0,T=T0+1,T1=T+1,n(X),n(Y),X=X0+1,Y=Y0+1,pos(X0),pos (Y0),not solved(T). 8 move(T1,X,Y0) :- at(T,0,X,Y),at(T0,0,X0,Y),T>0,T=T0+1,T1=T+1,n(X),n(Y),X=X0+1,Y=Y0+1,pos(X0),pos (Y0),not solved(T). 9 move(T1,X,2) v move(T1,X0,1) :- at(T,0,X,1),at(T0,0,X1,1),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,X1=X+1,X=X0+1,pos( X0),not solved(T). 10 move(T1,X1,1) v move(T1,X0,1) :- at(T,0,X,1),at(T0,0,X,2),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,X1=X+1,X=X0+1,pos(X 0),not solved(T). 11 move(T1,X1,1) v move(T1,X,2) :- at(T,0,X,1),at(T0,0,X0,1),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,X1=X+1,X=X0+1,pos( X0),not solved(T). 12 move(T1,X,Y0) v move(T1,X0,Y) :- at(T,0,X,Y),at(T0,0,X1,Y),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,n(Y),X1=X+1,Y=Y0+1 ,X=X0+1,pos(X0),pos(Y0),not solved(T). 13 move(T1,X1,Y) v move(T1,X0,Y) :- at(T,0,X,Y),at(T0,0,X,Y0),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,n(Y),X1=X+1,Y=Y0+1 ,X=X0+1,pos(X0),pos(Y0),not solved(T). 14 move(T1,X1,Y) v move(T1,X,Y0) :- at(T,0,X,Y),at(T0,0,X0,Y),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,n(Y),X1=X+1,Y=Y0+1 ,X=X0+1,pos(X0),pos(Y0),not solved(T). 15 move(T1,1,Y1) v move(T1,1,Y0) :- at(T,0,1,Y),at(T0,0,2,Y),T>0,T1=T+1,T=T0+1,Y>1,n(S),S>2,Y<S,Y1=Y+1,Y=Y0+1,pos(Y 0),not solved(T). 16 move(T1,2,Y) v move(T1,1,Y0) :- at(T,0,1,Y),at(T0,0,1,Y1),T>0,T1=T+1,T=T0+1,Y>1,n(S),S>2,Y<S,Y1=Y+1,Y=Y0+1,pos( Y0),not solved(T). 17 move(T1,2,Y) v move(T1,1,Y1) :- at(T,0,1,Y),at(T0,0,1,Y0),T>0,T1=T+1,T=T0+1,Y>1,n(S),S>2,Y<S,Y1=Y+1,Y=Y0+1,pos( Y0),not solved(T). 18 move(T1,X0,Y) v move(T1,X,Y0) :- at(T,0,X,Y),at(T0,0,X,Y1),T>0,T1=T+1,T=T0+1,n(X),Y>1,n(S),S>2,Y<S,Y1=Y+1,X=X0+1 ,Y=Y0+1,pos(X0),pos(Y0),not solved(T). 19 move(T1,X,Y1) v move(T1,X,Y0) :- at(T,0,X,Y),at(T0,0,X0,Y),T>0,T1=T+1,T=T0+1,n(X),Y>1,n(S),S>2,Y<S,Y1=Y+1,X=X0+1 ,Y=Y0+1,pos(X0),pos(Y0),not solved(T). 20 move(T1,X,Y1) v move(T1,X0,Y) :- at(T,0,X,Y),at(T0,0,X,Y0),T>0,T1=T+1,T=T0+1,n(X),Y>1,n(S),S>2,Y<S,Y1=Y+1,X=X0+1 ,Y=Y0+1,pos(X0),pos(Y0),not solved(T).

21 move(T1,X,Y1) v move(T1,X0,Y) v move(T1,X,Y0) :-

at(T,0,X,Y),at(T0,0,X1,Y),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,Y>1,n(S),Y<S,X1=X+ 1,Y1=Y+1,X=X0+1,Y=Y0+1,pos(X0),pos(Y0),not solved(T).

22 move(T1,X1,Y) v move(T1,X0,Y) v move(T1,X,Y0) :-

at(T,0,X,Y),at(T0,0,X,Y1),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,Y>1,n(S),Y<S,X1=X+ 1,Y1=Y+1,X=X0+1,Y=Y0+1,pos(X0),pos(Y0),not solved(T).

23 move(T1,X1,Y) v move(T1,X,Y1) v move(T1,X,Y0) :-

at(T,0,X,Y),at(T0,0,X0,Y),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,Y>1,n(S),Y<S,X1=X+ 1,Y1=Y+1,X=X0+1,Y=Y0+1,pos(X0),pos(Y0),not solved(T).

(5)

24 move(T1,X1,Y) v move(T1,X,Y1) v move(T1,X0,Y) :-

at(T,0,X,Y),at(T0,0,X,Y0),T>0,T1=T+1,T=T0+1,X>1,n(S),S>2,X<S,Y>1,n(S),Y<S,X1=X+ 1,Y1=Y+1,X=X0+1,Y=Y0+1,pos(X0),pos(Y0),not solved(T).

Pada semua aturan diatas tidak mengizinkan kembali ke posisi tepat satu langkah sebelumnya.

Baris 1 sampai baris 2 adalah aturan pembangkitan kemungkinan gerak langkah ke jika posisi 0

di pojok kiri atas. Pada baris 1 nilai 0 akan bergerak ke kanan. Pada baris 2 nilai 0 akan bergerak

ke bawah.

Baris 3 sampai baris 4 adalah aturan pembangkitan kemungkinan gerak langkah ke jika posisi 0

di pojok kanan atas. Pada baris 3 nilai 0 akan bergerak ke kiri. Pada baris 4 nilai 0 akan bergerak

ke bawah.

Baris 5 sampai baris 6 adalah aturan pembangkitan kemungkinan gerak langkah ke jika posisi 0

di pojok kiri bawah. Pada baris 5 nilai 0 akan bergerak ke atas. Pada baris 6 nilai 0 akan bergerak

ke kanan.

Baris 7 sampai baris 8 adalah aturan pembangkitan kemungkinan gerak langkah ke jika posisi 0

di pojok kanan bawah. Pada baris 7 nilai 0 akan bergerak ke kiri. Pada baris 8 nilai 0 akan

bergerak ke atas.

Baris 9 sampai baris 11 adalah aturan pembangkitan kemungkinan gerak langkah ke jika posisi

0 di atas. Pada baris 9 nilai 0 akan bergerak ke kiri atau ke bawah. Pada baris 10 nilai 0 akan

bergerak ke kiri atau ke kanan. Pada baris 11 nilai 0 akan bergerak ke kanan atau ke bawah.

Baris 12 sampai baris 14 adalah aturan pembangkitan kemungkinan gerak langkah ke jika

posisi 0 di bawah. Pada baris 12 nilai 0 akan bergerak ke kiri atau ke atas. Pada baris 13 nilai 0

akan bergerak ke kiri atau ke kanan. Pada baris 14 nilai 0 akan bergerak ke kanan atau ke atas.

Baris 15 sampai baris 17 adalah aturan pembangkitan kemungkinan gerak langkah ke jika

posisi 0 di kiri. Pada baris 15 nilai 0 akan bergerak ke atas atau ke bawah. Pada baris 16 nilai 0

akan bergerak ke atas atau ke kanan. Pada baris 17 nilai 0 akan bergerak ke kanan atau ke bawah.

Baris 18 sampai baris 20 adalah aturan pembangkitan kemungkinan gerak langkah ke jika

posisi 0 di kanan. Pada baris 18 nilai 0 akan bergerak ke atas atau ke kiri. Pada baris 19 nilai 0

akan bergerak ke atas atau ke bawah. Pada baris 20 nilai 0 akan bergerak ke kiri atau ke bawah.

Baris 21 sampai baris 24 adalah aturan pembangkitan kemungkinan gerak langkah ke jika

posisi 0 di tengah. Pada baris 21 nilai 0 akan bergerak ke bawah, ke atas, atau ke kiri. Pada baris

22 nilai 0 akan bergerak ke atas, ke kiri, atau ke kanan. Pada baris 23 nilai 0 akan bergerak ke

kanan, ke atas, atau ke bawah. Pada baris 24 nilai 0 akan bergerak ke kanan, ke kiri, atau ke

bawah.

(6)

Lampiran 4 Program DLV, akibat jika terjadi gerakan (move).

1 at(T1,0,X1,Y) :- at(T,0,X,Y),move(T1,X1,Y),T1=T+1,pos(Y). 2 at(T1,0,X,Y1) :- at(T,0,X,Y),move(T1,X,Y1),T1=T+1,pos(X).

3 at(T1,N,X,Y) :- at(T,N,X1,Y),move(T1,X1,Y),at(T,0,X,Y),T1=T+1,angka(N),pos(Y). 4 at(T1,N,X,Y) :- at(T,N,X,Y1),move(T1,X,Y1),at(T,0,X,Y),T1=T+1,angka(N),pos(X).

Pada baris 1 menunjukkan jika pada waktu

T

nilai 0 ada di

X,Y

dan bergerak ke

X1,Y

, maka

pada waktu

T1

,dimana

T1=T+1

nilai 0 ada di

X1,Y

.

Pada baris 2 menunjukkan jika pada waktu

T

nilai 0 ada di

X,Y

dan bergerak ke

X,Y1

, maka

pada waktu

T1

,dimana

T1=T+1

nilai 0 ada di

X,Y1

.

Pada baris 3 menunjukkan jika pada waktu

T

nilai

N

ada di

X1,Y

dan nilai 0 ada di

X,Y

, lalu

nilai 0 bergerak ke

X1,Y

, maka pada waktu

T1

,dimana

T1=T+1

nilai

N

ada di

X,Y

.

Pada baris 4 menunjukkan jika pada waktu

T

nilai

N

ada di

X,Y1

dan nilai 0 ada di

X,Y

, lalu

(7)

Lampiran 5 Program DLV, kondisi state pada nilai yang tidak bergerak (frame axiom).

1 at(T1,N,X,Y) :- at(T,N,X,Y),not

move(T1,X,Y),N>0,T1=T+1,pos(X),pos(Y),angka(N),not solved(T).

Aturan diatas menunjukan jika pada waktu

T

nilai

N

ada di

X,Y

dan nilai 0 tidak bergerak ke

X,Y

, maka pada

T1

,dimana

T1=T+1

nilai

N

tetap berada di

X,Y

.

(8)

Lampiran 6 Pseudo code program C++, membaca soal N-puzzle yang dibangkitkan.

1 Set ukuran to string on ukuran.dat 2 Set size to integer (ukuran} 3 Set i to 1

4 FOR each string on imperatif.dat 5 Set puzzle to string

6 Set puzzle[i] to integer (puzzle) 7 IF i is number of puzzle

8 break 9 END IF 10 Increment i 11 END FOR

Baris 1 dan 2 pada lampiran ini untuk membaca ukuran puzzle dari

ukuran.dat

. Baris 3

sampai 11 untuk membaca soal N-puzzle dari

imperatif.dat

. Dengan catatan

number of

(9)

Lampiran 7 Pseudo code program C++, memeriksa apakah N-puzzle sudah selesai (solve).

1 Set i to 1

2 FOR each index of array puzzle 3 IF puzzle[i] is 0

4 Set value to number of puzzle - i 5 ELSE

6 Set value to puzzle[i] – i 7 Set value to absolute (value) 8 END IF

9 Sum all of value 10 Increment i 11 END FOR

N-puzzle selesai dan menemukan solusi (solve) jika nilai sudah tersusun dan teruurut

berdasarkan posisinya. Berdasarkan hal tersebut kondisi solusi bisa didapatkan dengan cara nilai

pada kotak dikurangi posisi(indeks)-nya pada array. Pengecualian terjadi pada nilai 0, nilai 0

diganti dengan banyaknya nilai pada puzzle dikurangi posisi(indeks)-nya padaarray. Contoh pada

8-puzzle untuk mengetahui apakah nilai 0 sudah pada posisinya maka 9- [indeks_array].

(10)

Lampiran 8 Pseudo code program C++, iterasi yang memanggil fungsi menggerakan puzzle.

1 Choose max deep (5,10,or 15) 2 Set deep to 2

3 FOR each deep till max deep 4 IF puzzle not solved THEN 5 Move puzzle 6 ELSE 7 break 8 END IF 9 Increment deep 10 END FOR 11

Pada C++

max deep

sudah ditentukan yaitu 5,10,atau 15.Jadi tinggal memilih dengan

maksimal kedalaman yang tersedia untuk menyelesaikan puzzle.

Move puzzle

pada baris 5

berarti memanggil fungsi

idfs()

.

(11)
(12)
(13)
(14)

Referensi

Dokumen terkait

Pusat Informasi dan Komunikasi (PIK) BPK merupakan salah satu tanggung jawab dari Subbagian Layanan Informasi, Biro Humas dan Kerja Sama Internasional BPK. PIK

Pelbagai konflik yang tercitra dalam teks Ayam Jantan Ayam Betina ini adalah hasil kegagalan mengawal diri hayawani sekali gus berlaku penolakan terhadap nilai

Dengan demikian, pemaafan yang dilakukan tidak hanya sekedar berdamai pada perasaan negatif atau yang disebut dengan pemaafan sepihak (McCullough, 2000), tapi juga

• Pengembangan jaringan jalan nasional yang terpadu dengan jaringan jalur kereta api, pelabuhan, bandar udara, serta transportasi sungai dan penyeberangan untuk membuka

Soekarno menegaskan bahwa jika agama Islam ingin mengemukakan tuntutan-tuntutan islam ke dalam Negara Indonesia, Dewan Perwakilan Rakyat ini adalah sarana yang

Dengan demikian, dapat dikatakan bahwa Lokan dan Sepetang dari perairan utara pulau Bengkalis ini masih berada di bawah ambang batas tercemar logam berat

Team Building Program adalah program yang diisi dengan jenis permainan yang umum dilakukan untuk mengisi kegiatan Outbound Training, Fun Outing, Family/Employee Gathering,

Pada saat gempa bumi terjadi dan terjebak di dalam ruangan, sebisa mungkin jangan panik, dianjurkan untuk berdiam diri dulu dalam beberapa waktu, dan berusaha mencari