• Tidak ada hasil yang ditemukan

Penyelesaian Masalah the Missionaries and Cannibals Problem Menggunakan Algoritma Searching BFS Dan DFS

N/A
N/A
Protected

Academic year: 2021

Membagikan "Penyelesaian Masalah the Missionaries and Cannibals Problem Menggunakan Algoritma Searching BFS Dan DFS"

Copied!
13
0
0

Teks penuh

(1)

Sistem Cerdas

Penyelesaian The Missionaries and Cannibals Problem

menggunakan Algoritma Searching BFS dan DFS

Disusun oleh:

Tommy Boksman

(1361013)

FAKULTAS TEKNOLOGI INFORMASI

UNIVERSITAS ATMA JAYA

MAKASSAR

2015

(2)

1

The Missionaries and Cannibals Problem

1) Terdapat 3 orang misionaris dan 3 kanibal di salah satu sisi sungai.

2) Mereka semua harus menyeberangi sungai menggunakan 1 kapal yang bermuatan maksimal 2 orang.

3) Jika pada salah satu sisi sungai terdapat misionaris dan jumlah misionaris pada sisi tersebut lebih sedikit dari jumlah kanibal pada sisi sungai yang sama maka misionaris akan dimakan oleh kanibal.

Ilustrasi:

Diasumsikan bahwa: = Misionaris

= Kanibal

x = jumlah misionaris di sisi kiri sungai, y = jumlah kanibal di sisi kiri sungai,

z = jumlah kapal di sisi kiri sungai. Jika 0, berarti kapal berada di sisi kanan sungai. Sungai

Sisi Kiri Sisi Kanan

M M M C C C Keadaan Akhir Keadaan Awal M M M C C C M C

(3)

2

State Space:

x y z State Space 0 0 0 (0,0,0) 0 0 1 (0,0,1) 0 1 0 (0,1,0) 0 1 1 (0,1,1) 0 2 0 (0,2,0) 0 2 1 (0,2,1) 0 3 0 (0,3,0) 0 3 1 (0,3,1) 1 0 0 (1,0,0) 1 0 1 (1,0,1) 1 1 0 (1,1,0) 1 1 1 (1,1,1) 1 2 0 (1,2,0) 1 2 1 (1,2,1) 1 3 0 (1,3,0) 1 3 1 (1,3,1) 2 0 0 (2,0,0) 2 0 1 (2,0,1) 2 1 0 (2,1,0) 2 1 1 (2,1,1) 2 2 0 (2,2,0) 2 2 1 (2,2,1) 2 3 0 (2,3,0) 2 3 1 (2,3,1) 3 0 0 (3,0,0) 3 0 1 (3,0,1) 3 1 0 (3,1,0) 3 1 1 (3,1,1) 3 2 0 (3,2,0) 3 2 1 (3,2,1) 3 3 0 (3,3,0) 3 3 1 (3,3,1)

Dengan Initial State = (3,3,1) dan Goal State = (0,0,0).

State berlatar kuning merupakan state yang tidak diperbolehkan, sebab jumlah misionaris pada salah salah satu sisi lebih sedikit dari jumah kanibalnya, sehingga misionaris akan dimakan kanibal.

Production Rule

1) 1 misionaris menyeberang ke sisi kanan sungai. Jika x≥1 dan z=1 maka (x-1, y, 0).

(4)

3 Jika x≥2 dan z=1 maka (x-2, y, 0).

3) 1 kanibal menyeberang ke sisi kanan sungai. Jika y≥1 dan z=1 maka (x, y-1, 0).

4) 2 kanibal menyeberang ke sisi kanan sungai. Jika y≥2 dan z=1 maka (x, y-2, 0).

5) 1 misionaris dan 1 kanibal menyeberang ke sisi kanan sungai. Jika x≥1 dan y≥1 dan z=1 maka (x-1, y-1, 0).

6) 1 misionaris kembali ke sisi kiri sungai. Jika x<3 dan z=0 maka (x+1, y, 1). 7) 2 misionaris kembali ke sisi kiri sungai.

Jika x<2 dan z=0 maka (x+2, y, 1). 8) 1 kanibal kembali ke sisi kiri sungai.

Jika y<3 dan z=0 maka (x, y+1, 1). 9) 2 kanibal kembali ke sisi kiri sungai.

Jika y<2 dan z=0 maka (x, y+2, 1).

10) 1 misionaris dan 1 kanibal kembali ke sisi kiri sungai. Jika x<3 dan y<3 dan z=0 maka (x+1, y+1, 1).

Selain Production Rule di atas, terdapat aturan lain yaitu jika pada salah satu sisi sungai terdapat misionaris dan jumlah misionaris pada sisi tersebut lebih sedikit dari jumlah kanibal pada sisi sungai yang sama maka misionaris akan dimakan oleh kanibal. Hal ini tidak boleh terjadi. Aturan tersebut dituliskan :

Untuk sisi kiri sungai: Jika x > 0 dan x < y maka state tidak diperbolehkan. Untuk sisi kanan sungai: Jika a > 0 dan a < b maka state tidak diperbolehkan. Dimana:

x = jumlah misionaris di sisi kiri sungai. y = jumlah kanibal di sisi kiri sungai. a = jumlah misionaris di sisi kanan sungai. b = jumlah kanibal di sisi kanan sungai.

Diketahui bahwa a = 3-x dan b= 3-y; a > 0; 3-x > 0; 3 > x; x < 3; a < b; 3-x < 3-y; -x < -y; x > y; Sehingga aturan untuk sisi kanan sungai dapat ditulis menjadi: Jika x < 3 dan x > y maka state tidak diperbolehkan.

(5)

4

Penyelesaian dengan Algoritma Breadth First Search

Initial State = (3,3,1) dan Goal State = (0,0,0).

Algoritma BFS menggunakan queue yang bersifat FIFO (First In First Out). State dimasukkan ke dalam queue dan akan di-expand sesuai urutannya. Jika state sudah pernah masuk ke dalam queue Q, akan diberi tanda X.

1) Q = [(3,3,1)] Expand (3,3,1). R1 → (2,3,0) Masuk ke Q. R2 → (1,3,0) Masuk ke Q. R3 → (3,2,0) Masuk ke Q. R4 → (3,1,0) Masuk ke Q. R5 → (2,2,0) Masuk ke Q. 2) Q = [(2,3,0); (1,3,0); (3,2,0); (3,1,0); (2,2,0)]

Expand (2,3,0). Merupakan state yang tidak diperbolehkan, pada sisi kiri sungai terdapat misionaris tetapi lebih sedikit dari jumlah kanibal di sisi sungai yang sama (x>0 dan x<y).

3) Q = [(1,3,0); (3,2,0); (3,1,0); (2,2,0)]

Expand (1,3,0). Merupakan state yang tidak diperbolehkan, pada sisi kiri sungai terdapat misionaris tetapi lebih sedikit dari jumlah kanibal di sisi sungai yang sama (x>0 dan x<y).

4) Q = [(3,2,0); (3,1,0); (2,2,0)] Expand (3,2,0).

R8 → (3,3,1) X. Sudah pernah dimasukkan ke dalam Q. 5) Q = [(3,1,0); (2,2,0)]

Expand (3,1,0).

R8 → (3,2,1) Masuk ke Q.

R9 → (3,3,1) X. Sudah pernah dimasukkan ke dalam Q. 6) Q = [(2,2,0); (3,2,1)] Expand (2,2,0). R6 → (3,2,1) X. R8 → (2,3,1) Masuk ke Q. R10 → (3,3,1) X. 7) Q = [(3,2,1); (2,3,1)] Expand (3,2,1).

(6)

5 R1 → (2,2,0) X. R2 → (1,2,0) Masuk ke Q. R3 → (3,1,0) X. R4 → (3,0,0) Masuk ke Q. R5 → (2,1,0) Masuk ke Q. 8) Q = [(2,3,1); (1,2,0); (3,0,0); (2,1,0)]

Expand (2,3,1). State yang tidak diperbolehkan. 9) Q = [(1,2,0); (3,0,0); (2,1,0)]

Expand (1,2,0). State yang tidak diperbolehkan. 10) Q = [(3,0,0); (2,1,0)]

Expand (3,0,0).

R7 → (3,1,1) Masuk ke Q. R8 → (3,2,1) X.

11) Q = [(2,1,0); (3,1,1)]

Expand (2,1,0). Merupakan state yang tidak diperbolehkan, pada sisi kanan sungai terdapat misionaris tetapi lebih sedikit dari jumlah kanibal di sisi sungai yang sama (x<3 dan x>y).

12) Q = [(3,1,1)] Expand (3,1,1). R1 → (2,1,0) X. R2 → (1,1,0) Masuk ke Q. R3 → (3,0,0) X. R5 → (2,0,0) Masuk ke Q. 13) Q = [(1,1,0); (2,0,0)] Expand (1,1,0). R6 → (2,1,1) Masuk ke Q. R7 → (3,1,1) X. R8 → (1,2,1) Masuk ke Q. R9 → (1,3,1) Masuk ke Q. R10 → (2,2,1) Masuk ke Q. 14) Q = [(2,0,0); (2,1,1); (1,2,1); (1,3,1); (2,2,1)] Expand (2,0,0). State yang tidak diperbolehkan. 15) Q = [(2,1,1); (1,2,1); (1,3,1); (2,2,1)]

Expand (2,1,1). State yang tidak diperbolehkan. 16) Q = [(1,2,1); (1,3,1); (2,2,1)]

(7)

6 Expand (1,2,1). State yang tidak diperbolehkan.

17) Q = [(1,3,1); (2,2,1)]

Expand (1,3,1). State yang tidak diperbolehkan. 18) Q = [(2,2,1)] Expand (2,2,1). R1 → (1,2,0) X. R2 → (0,2,0) Masuk ke Q. R3 → (2,1,0) X. R4 → (2,0,0) X. R5 → (1,1,0) X. 19) Q = [(0,2,0)] Expand (0,2,0). R6 → (1,2,1) X. R7 → (2,2,1) X. R8 → (0,3,1) Masuk ke Q. R10 → (1,3,1) X. 20) Q = [(0,3,1)] Expand (0,3,1). R3 → (0,2,0) X. R4 → (0,1,0) Masuk ke Q. 21) Q = [(0,1,0)] Expand (0,1,0). R6 → (1,1,1) Masuk ke Q. R7 → (2,1,1) X. R8 → (0,2,1) Masuk ke Q. R9 → (0,3,1) X. R10 → (1,2,1) X. 22) Q = [(1,1,1); (0,2,1)] Expand (1,1,1). R1 → (0,1,0) X. R3 → (1,0,0) Masuk ke Q. R5 → (0,0,0) Masuk ke Q. 23) Q = [(0,2,1); (1,0,0); (0,0,0)] Expand (0,2,1).

(8)

7 R3 → (0,1,0) X.

R4 → (0,0,0) X. 24) Q = [(1,0,0), (0,0,0)]

Expand (1,0,0). State yang tidak diperbolehkan. 25) Q = [(0,0,0)]

Expand (0,0,0). Goal State telah dicapai, stop.

Jadi, Algoritma BFS berhasil menemukan solusi untuk the missionaries and cannibals problem setelah melakukan 25 kali perulangan. Dengan melacak jalur yang dilalui, diperoleh solusi:

(3,3,1) R4 (3,1,0) R8 (3,2,1) R4 (3,0,0) R8 (3,1,1) R2 (1,1,0) (2,2,1) R10 (0,2,0) R2 (0,3,1) R8 (0,1,0) (1,1,1) R6 (0,0,0) R5 R4 Initial state Goal State

(9)

8

Ilustrasi penyelesaian dengan Algoritma Breadth First Search

(3,3,1) (2,3,0) R1 (1,3,0) (3,2,0) (3,1,0) (2,2,0) (3,2,1) (2,3,1) (1,2,0) (3,0,0) (2,1,0) R3 R2 R4 R5 R8 R8 R2 R4 R5 (3,1,1) (1,1,0) (2,0,0) (2,1,1) (1,2,1) (1,3,1) (2,2,1) R8 R2 R5 R6 R8 R9 R10 (0,2,0) (0,3,1) (0,1,0) (1,1,1) (0,2,1) (1,0,0) (0,0,0) R2 R8 R4 R8 R6 R5 R3 Initial State Goal State 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

(10)

9

Penyelesaian dengan Algoritma Depth First Search

Initial State = (3,3,1) dan Goal State = (0,0,0).

Algoritma DFS menggunakan stack yang bersifat LIFO (Last In First Out). State akan dimasukkan ke dalam stack dan di-expand dari data terakhir. Jika state sudah pernah masuk ke dalam stack S, akan diberi tanda X.

Jika terdapat beberapa state dengan kedalaman yang sama, akan dimasukkan sekaligus ke dalam

stack. State yang memiliki kedalaman yang sama tersebut akan di-expand sesuai urutan (dari yang paling

kiri). Untuk menunjukkan perbedaan kedalaman, akan digunakan tanda pembatas ||.

1) S = [ |(3,3,1)| ] Expand (3,3,1). R1 → (2,3,0) Masuk ke S. R2 → (1,3,0) Masuk ke S. R3 → (3,2,0) Masuk ke S. R4 → (3,1,0) Masuk ke S. R5 → (2,2,0) Masuk ke S. 2) S = [ |(2,3,0); (1,3,0); (3,2,0); (3,1,0); (2,2,0)| ]

Expand (2,3,0). Merupakan state yang tidak diperbolehkan, pada sisi kiri sungai terdapat misionaris tetapi lebih sedikit dari jumlah kanibal di sisi sungai yang sama (x>0 dan x<y).

3) S = [ |(1,3,0); (3,2,0); (3,1,0); (2,2,0)| ]

Expand (1,3,0). Merupakan state yang tidak diperbolehkan, pada sisi kiri sungai terdapat misionaris tetapi lebih sedikit dari jumlah kanibal di sisi sungai yang sama (x>0 dan x<y).

4) S = [ |(3,2,0); (3,1,0); (2,2,0)| ] Expand (3,2,0).

R8 → (3,3,1) X. Sudah pernah dimasukkan ke dalam S. 5) S = [ |(3,1,0); (2,2,0)| ]

Expand (3,1,0).

R8 → (3,2,1) Masuk ke S.

R9 → (3,3,1) X. Sudah pernah dimasukkan ke dalam S. 6) S = [ |(2,2,0)|; |(3,2,1)| ]

Expand (3,2,1). R1 → (2,2,0) X.

(11)

10 R3 → (3,1,0) X.

R4 → (3,0,0) Masuk ke S. R5 → (2,1,0) Masuk ke S.

7) S = [ |(2,2,0)|; |(1,2,0); (3,0,0); (2,1,0)| ]

Expand (1,2,0). State yang tidak diperbolehkan. 8) S = [ |(2,2,0)|; |(3,0,0); (2,1,0)| ] Expand (3,0,0). R7 → (3,1,1) Masuk ke S. R8 → (3,2,1) X. 9) S = [ |(2,2,0)|; |(2,1,0)|; |(3,1,1)| ] Expand (3,1,1). R1 → (2,1,0) X. R2 → (1,1,0) Masuk ke S. R3 → (3,0,0) X. R5 → (2,0,0) Masuk ke S. 10) S = [ |(2,2,0)|; |(2,1,0)|; |(1,1,0); (2,0,0)| ] Expand (1,1,0). R6 → (2,1,1) Masuk ke S. R7 → (3,1,1) X. R8 → (1,2,1) Masuk ke S. R9 → (1,3,1) Masuk ke S. R10 → (2,2,1) Masuk ke S. 11) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(2,1,1); (1,2,1); (1,3,1); (2,2,1)| ]

Expand (2,1,1). Merupakan state yang tidak diperbolehkan, pada sisi kanan sungai terdapat misionaris tetapi lebih sedikit dari jumlah kanibal di sisi sungai yang sama (x<3 dan x>y).

12) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(1,2,1); (1,3,1); (2,2,1)| ] Expand (1,2,1). State yang tidak diperbolehkan.

13) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(1,3,1); (2,2,1)| ] Expand (1,3,1). State yang tidak diperbolehkan. 14) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(2,2,1)| ]

Expand (2,2,1). R1 → (1,2,0) X.

R2 → (0,2,0) Masuk ke S. R3 → (2,1,0) X.

(12)

11 R4 → (2,0,0) X. R5 → (1,1,0) X. 15) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(0,2,0)| ] Expand (0,2,0). R6 → (1,2,1) X. R7 → (2,2,1) X. R8 → (0,3,1) Masuk ke S. R10 → (1,3,1) X. 16) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(0,3,1)| ] Expand (0,3,1). R3 → (0,2,0) X. R4 → (0,1,0) Masuk ke S. 17) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(0,1,0)| ] Expand (0,1,0). R6 → (1,1,1) Masuk ke S. R7 → (2,1,1) X. R8 → (0,2,1) Masuk ke S. R9 → (0,3,1) X. R10 → (1,2,1) X. 18) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(1,1,1); (0,2,1)| ] Expand (1,1,1). R1 → (0,1,0) X. R3 → (1,0,0) Masuk ke S. R5 → (0,0,0) Masuk ke S. 19) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(0,2,1)|; |(1,0,0); (0,0,0)| ] Expand (1,0,0). State yang tidak diperbolehkan.

20) S = [ |(2,2,0)|; |(2,1,0)|; |(2,0,0)|; |(0,2,1)|; |(0,0,0)| ] Expand (0,0,0). Goal State telah dicapai, stop.

Jadi, Algoritma DFS berhasil menemukan solusi untuk the missionaries and cannibals problem setelah melakukan 20 kali perulangan. Dengan melacak jalur yang dilalui, diperoleh solusi:

(3,3,1) R4 (3,1,0) R8 (3,2,1) R4 (3,0,0) R8 (3,1,1) R2 (1,1,0) (2,2,1) R10 (0,2,0) R2 (0,3,1) R8 (0,1,0) (1,1,1) R6 (0,0,0) R5 R4 Initial state Goal State

(13)

12

Ilustrasi penyelesaian dengan Algoritma Depth First Search

(3,3,1) (2,3,0) R1 (1,3,0) (3,2,0) (3,1,0) (2,2,0) (3,2,1) (1,2,0) (3,0,0) (2,1,0) R3 R2 R4 R5 R8 R2 R4 R5 (3,1,1) (1,1,0) (2,0,0) (2,1,1) (1,2,1) (1,3,1) (2,2,1) R8 R2 R5 R6 R8 R9 R10 (0,2,0) (0,3,1) (0,1,0) (1,1,1) (0,2,1) (1,0,0) (0,0,0) R2 R8 R4 R8 R6 R5 R3 Initial State Goal State 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Gambar

Ilustrasi penyelesaian dengan Algoritma Depth First Search

Referensi

Dokumen terkait

Pada perbandingan 5 metode heuristik loading , kesimpulan yang didapatkan adalah metode heuristik 3 (Maximum Touching Perimeter) memiliki performansi yang lebih

Kemudian, pada saat robot otonom memasuki bagian ruangan yang kedua, hanya terdapat satu kemungkinan posisi pada setiap konfigurasi lingkungan, sehingga searching