Anda di halaman 1dari 8

Nama : Tiara Aqilla K

Kelas : 3EB11
NPM 27222002
Jurusan : Akuntansi

Laporan Akhir (M8) -


Implementasi Graph

Laporan ini mengulas tentang pembahasan penerapan 8-puzzles dan family tree yang
dilakukan oleh Crown dan Pauline dalam sebuah video di laboratorium. Crown dan Pauline
menjelaskan tentang cara memikirkan sebuah puzzle dan hirarki agar dapat digunakan untuk
menyelesaikan 8 puzzles dengan efektif selain itu juga membahas beberapa fungsi yang akan
digunakan untuk menyelesaikan masalah 8 puzzles.
Crown dan Pauline juga membahas tentang penggunaan algoritma drag untuk
memecahkan masalah dan menggunakan graph untuk mengetahui family tree. Mereka
menjelaskan bagaimana penggunaan bahasa pemrograman web prolog dapat digunakan
untuk melakukan definisi family tree dan memanggil codingnya menggunakan swipe-all.
Program tersebut juga dapat secara pintar mencari keterkaitan antar data yang telah diinput,
sehingga dapat menyelesaikan masalah dengan lebih cepat dan efektif.
Dalam kesimpulannya, pembahasan penerapan 8 puzzles dan family tree dalam video
tersebut sangat penting dan dapat bermanfaat bagi banyak orang yang tertarik dalam bidang
pemrograman. Crown dan Pauline berterima kasih kepada para pendengarnya dan mengajak
mereka untuk menonton kembali video tersebut jika masih ada yang belum dipahami.
Dengan demikian, laporan ini dapat menjadi referensi bagi para pengembang program yang
ingin mengembangkan solusi untuk masalah 8 puzzle dan family tree.
Study Kasus Family Tree dengan Menggunakan Bahasa
Pemprograman

Penjelasan :
1. Variabel male dan female digunakan untuk menyimpan daftar nama orang laki-laki dan
perempuan.
2. Variabel parent digunakan untuk menyimpan informasi hubungan kekerabatan antara
orang tua dan anak. Setiap tuple dalam list parent berisi dua elemen, yaitu nama orang tua
dan nama anak.
3. Variabel child digunakan untuk menyimpan daftar nama anak yang ada dalam data.
4. Aturan yang dibuat dalam coding sebelumnya diubah menjadi fungsi-fungsi Python yang
menerima argumen X dan Y, yang kemudian akan mengembalikan nilai True atau False
tergantung pada apakah aturan tersebut terpenuhi atau tidak.
5. Fungsi family_children digunakan untuk mencari semua anak atau cucu dari seseorang.
Fungsi ini menerima argumen X (nama orang yang ingin dicari anak/cucunya) dan Child
(nama anak/cucu yang ingin dicari). Fungsi ini menggunakan rekursi untuk mencari anak
atau cucu dari seseorang. Jika Child ada dalam daftar child dan merupakan anak langsung
dari X, maka fungsi ini akan mengembalikan True. Jika tidak, fungsi akan mencari semua
anak dari X dan melakukan rekursi untuk setiap anak tersebut. Fungsi akan mengembalikan
True jika Child ditemukan di antara anak atau cucu X, dan False jika tidak ditemukan.

Proses Penyelesaian dan Hasil


1. Menyiapkan Data
Data yang diberikan dalam coding tersebut adalah informasi mengenai hubungan
kekerabatan antara beberapa orang. Terdapat 9 orang dengan informasi apakah mereka
laki-laki atau perempuan, serta informasi mengenai hubungan kekerabatan di antara
mereka. Data ini akan digunakan untuk membuat beberapa aturan yang akan membantu
mengakses informasi kekerabatan.

2. Membuat Aturan
Setelah data disiapkan, langkah selanjutnya adalah membuat aturan dengan
menggunakan bahasa pemrograman Python. Aturan ini akan membantu mengakses
informasi kekerabatan di antara orang-orang dalam data.
Aturan yang dibuat dalam coding tersebut adalah:
● father(X,Y) -> mengembalikan true jika X adalah ayah dari Y.
● mother(X,Y) -> mengembalikan true jika X adalah ibu dari Y.
● son(X,Y) -> mengembalikan true jika X adalah anak laki-laki dari Y.
● daughter(X,Y) -> mengembalikan true jika X adalah anak perempuan dari Y.
● family_children(X, Child) -> mengembalikan true jika Child adalah anak atau
cucu dari X.

3. Menjalankan Aturan
Setelah aturan dibuat, langkah selanjutnya adalah menjalankan aturan dengan
menggunakan bahasa pemrograman Python. Berikut adalah contoh penggunaan aturan
untuk mengakses informasi kekerabatan:
a. Untuk mengetahui apakah Lennart adalah ayah dari Donald:
father(lennart, donald)
b. Untuk mengetahui apakah Lena adalah anak perempuan dari Lennart:
daughter(lena, lennart)
c. Untuk mengetahui anak-anak dari Mike:
family_children(mike, Child)
d. Untuk mengetahui apakah Lisa adalah cucu dari Lennart:
family_children(lennart, Child), child(Child), parent(Child, lisa)

4. Hasil
Hasil dari penggunaan aturan tersebut adalah:
a. father(lennart, donald) mengembalikan true, yang artinya Lennart adalah ayah
dari Donald.
b. daughter(lena, lennart) mengembalikan true, yang artinya Lena adalah anak
perempuan dari Lennart.
c. family_children(mike, Child) mengembalikan beberapa nilai Child, yaitu lennart
dan lena, yang artinya anak-anak dari Mike adalah Lennart dan Lena.
d. family_children(lennart, Child), child(Child), parent(Child, lisa) mengembalikan
true, yang artinya Lisa adalah cucu dari Lennart.
Study Kasus 8-Pazzles dengan Menggunakan Bahasa Pemprograman

Berikut adalah kode Python untuk menyelesaikan teka-teki N*N-1 menggunakan


algoritma Branch and Bound dengan menggunakan Priority Queue.
Penjelasan :
Kode ini mengimplementasikan algoritma Branch and Bound untuk menyelesaikan
teka-teki 8-puzzle dengan menggunakan priority queue, class node, calculateCost, dan
newNode. Algoritma ini menggunakan pendekatan heuristik untuk mencari solusi dengan
estimasi biaya minimum. Berikut adalah langkah-langkah penyelesaian yang dilakukan oleh
kode tersebut:

Proses Penyelesaian dan Hasil


1. Pertama, kita menginisialisasi matriks awal (initial) dan matriks tujuan (final) yang
merepresentasikan konfigurasi awal dan konfigurasi yang diinginkan. Angka 0
menandakan kotak kosong.
2. Kemudian, kita menentukan posisi kotak kosong (empty_tile_pos) pada konfigurasi
awal.

3. Selanjutnya, dilakukan pemanggilan fungsi solve() dengan argumen konfigurasi awal,


posisi kotak kosong, dan konfigurasi tujuan. Fungsi ini akan menyelesaikan puzzle 8
dengan menggunakan algoritma Branch and Bound.

4. Dalam fungsi solve(), sebuah priority queue (pq) dibuat untuk menyimpan simpul-
simpul yang sedang diproses. Simpul awal (root) dibuat dengan menghitung biaya (cost)
dari konfigurasi awal terhadap konfigurasi tujuan. Simpul tersebut dimasukkan ke dalam
priority queue.

5. Selama priority queue tidak kosong, dilakukan langkah berikut ini:


● Simpul dengan biaya terendah diambil dari priority queue (minimum).
● Jika simpul tersebut merupakan simpul tujuan (biaya = 0), maka pencarian selesai.
Fungsi printPath() dipanggil untuk mencetak urutan langkah yang ditempuh dari
simpul awal hingga simpul tujuan.
● Jika simpul bukan merupakan simpul tujuan, dilakukan pembuatan simpul-simpul
anak yang memungkinkan dengan menukar posisi kotak kosong dengan angka di
sekitarnya. Setiap simpul anak memiliki biaya yang dihitung berdasarkan kesamaan
dengan konfigurasi tujuan. Simpul anak tersebut dimasukkan ke dalam priority
queue.

6. Setelah pencarian selesai, akan tercetak urutan langkah-langkah yang harus dilakukan
untuk mencapai konfigurasi tujuan.

7. Hasil yang diperoleh adalah sebagai berikut :


Hasil dari eksekusi program ini adalah jalur pergerakan ubin dari keadaan awal hingga
mencapai keadaan tujuan. Setiap langkah perpindahan ubin dicetak dalam bentuk
matriks. Contoh hasil yang dicetak adalah sebagai berikut:
123
560
784

123
506
784

123
586
704

123
586
074

Dalam contoh ini, langkah-langkah perpindahan ubin dari keadaan awal menuju
keadaan tujuan telah berhasil dicetak.

Anda mungkin juga menyukai