Disusun Oleh:
Disusun Oleh:
Tim Teaching MK Kecerdasan Buatan
Tim Teaching MK Kecerdasan Buatan
Laboratorium Komputasi Cerdas
Laboratorium Komputasi Cerdas
Fakultas Ilmu Komputer Universitas Brawijaya
Fakultas Ilmu Komputer Universitas Brawijaya
Malang
Malang
2016
2016
MODUL PRAKTIKUM
MODUL PRAKTIKUM
KECERDASAN BUATAN
KECERDASAN BUATAN
TIM PELAKSANA
TIM PELAKSANA
Tim pelaksana perbaikan Modul Praktikum Kecerdasan Buatan Tim pelaksana perbaikan Modul Praktikum Kecerdasan Buatan Penanggung
Penanggung Jawab Jawab / / Pengarah Pengarah : : Ketua Ketua Lab. Lab. Komputasi Komputasi CerdasCerdas Koordinator
Koordinator Modul Modul : : Lailil Lailil MuflikhahMuflikhah Bab
Bab 1. 1. Konsep Konsep Dasar Dasar AI AI : : Yuita Yuita Arum Arum SariSari Bab
Bab 2. 2. Agen Agen cerdas cerdas : : Lailil Lailil MuflikhahMuflikhah Bab
Bab 3. 3. Uninformed Uninformed Search Search : M. : M. Ali Ali FauziFauzi Bab
Bab 4. 4. Informed Informed Search Search : : Imam Imam CholissodinCholissodin Bab
Bab 5. 5. Constraint Constraint Satisfaction Satisfaction Problem Problem : : S. S. H. H. WijoyoWijoyo Bab
Bab 6. 6. Agen Agen Logika Logika : : Ika Ika Kusumaning Kusumaning PutriPutri Bab
Bab 7. 7. First First Order Order Logic Logic : : Nurizal Nurizal D. D. P.P. Bab
Bab 8. 8. Logic Logic Programming Programming : : Lailil Lailil Muflikhah Muflikhah dan dan M. M. Ali Ali FauziFauzi Bab
Bab 9. 9. Ketidakpastian Ketidakpastian (Uncertainty) (Uncertainty) : : Imam Imam Cholissodin Cholissodin dan dan S. S. H. H. WijoyoWijoyo Bab
Bab 10. 10. Bayesian Bayesian Network Network : : Ika Ika Kusumaning Kusumaning Putri Putri dan dan Nurizal Nurizal D. D. P.P. Tim
Tim Editor Editor : : Asisten Asisten 1 1 dan dan 22 Tim
Tim Tata Tata Letak Letak / / Setting Setting : : Asisten Asisten 2 2 dan dan 33 Dokumentasi
DAFTAR ISI
DAFTAR ISI
JUDUL
JUDUL ... ... ii TIM
TIM PELAKSANA PELAKSANA ... ii... ii DAFTAR
DAFTAR ISI...ISI... . iiiiii DAFTAR
DAFTAR TABEL...TABEL... ... vv DAFTAR
DAFTAR GAMBAR ...GAMBAR ... ... vivi KATA
KATA PENGANTAR ...PENGANTAR ... vii... vii BAB 1
BAB 1 KONSEP DASAR KONSEP DASAR AI ...AI ... ... 11 1.1
1.1 Tujuan ...Tujuan ... ... 11 1.2
1.2 Ringkasan Materi ...Ringkasan Materi ... ... 11 1.3
1.3 Tugas Tugas Praktikum ...Praktikum ... ... 33 BAB 2
BAB 2 AGEN AGEN CERDAS CERDAS ... ... 44 2.1
2.1 Tujuan ...Tujuan ... ... 44 2.2
2.2 Ringkasan Materi ...Ringkasan Materi ... ... 44 2.3
2.3 Percobaan ...Percobaan ... ... 55 2.4
2.4 Tugas Tugas Praktikum ...Praktikum ... ... 77 BAB 3
BAB 3 UNINFORM SEARCH UNINFORM SEARCH ... ... 88 3.1
3.1 Tujuan ...Tujuan ... ... 88 3.2
3.2 Ringkasan Materi ...Ringkasan Materi ... ... 88 3.3
3.3 Percobaan ...Percobaan ... ... 1212 3.4
3.4 Contoh ...Contoh ... ... 1313 3.5
3.5 Latihan Praktikum ....Latihan Praktikum ... ... 2424 3.6
3.6 Tugas Tugas Praktikum ...Praktikum ... ... 2727 BAB 4
BAB 4 INFORMED SEARCH ...INFORMED SEARCH ... ... 2828 4.1
4.1 Tujuan ...Tujuan ... ... 2828 4.2
4.2 Ringkasan Materi ...Ringkasan Materi ... ... 2828 4.3
4.3 Percobaan ...Percobaan ... ... 3333 4.4
4.4 Contoh ...Contoh ... ... 3434 4.5
4.5 Latihan Praktikum ....Latihan Praktikum ... ... 4040 4.6
4.6 Tugas Tugas Praktikum ...Praktikum ... ... 4141 DAFTAR
DAFTAR TABEL
DAFTAR GAMBAR
KATA PENGANTAR
Alhamdulillah, puji syukur kehadirat Allah SWT karena atas rahmat dan hidayah-Nya, tim pelaksana dapat menyelesaikan Modul Praktikum Kecerdasan Buatan. Pada modul ini, lebih diarahkan untuk mencoba memahami dan mendalami materi perkuliahan melalui kegiatan praktikum dengan melakukan review beberapa aplikasi, kode program (dalam bentuk Library atau kode lainnya), khusus untuk materi konsep yang memang tidak ada pembuatan kode program sama sekali. Kemudian untuk materi yang memang ada implementasi kodingnya, dilakukan penjelasan lebih detail di kegiatan praktikum, dan diberikan beberapa contoh kode program serta memberikan case study untuk digunakan sebagai latihan, diskusi pembahasan dan sekaligus tugas yang semuanya akan dimasukkan dalam modul. Diharapkan para Praktikan mampu mencoba secara madiri maupun kelompok untuk setiap case study yang diberikan oleh Asisten Dosen mapun Dosen pengampu MK Kecer dasan Buatan, secara langsung.
Kami sadar bahwa modul praktikum ini masih banyak keterbatasan dan pastinya masih sangat jauh dari kata sempurna dan diharapkan masukan dalam bentuk
kritik serta saran yang membangun untuk tetap menjaga kualitas dari materi yang disampaikan terkait materi praktikum MK Kecerdasan Buatan. Demikain pengantar dari kami, mohon maaf jika ada kesalahan dan kekhilafan. Semoga modul ini bermanfaat bagi segenap praktikan. Selamat belajar.
BAB 1
KONSEP DASAR AI
1.1 Tujuan
1. Praktikan mampu memahami konsep dasar AI ( Artificial Intelligence)
2. Praktikan mampu memahami dan menjelaskan peran AI dalam kehidupan sehari-hari.
1.2 Ringkasan Materi
A. Apa itu AI?
AI adalah sebuah sistem yang dibangun untuk menyelesaikan permasalahan dengan cara cara berfikir manusia. AI adalah sebuah cara untuk membuat komputer berfikir cerdas dalam mengolah beberapa representasi pengetahuan tentang masalah-masalah yang ada di lingkungan. AI diharapkan dapat beradaptasi dalam me-nyelesaikan masalah, sehingga akan lebih mudah dikomputasikan dan dinalar dengan logis.
B. Kategori AI
Terdapat 4 kategori AI secara umum yaitu acting like humans, thinking like hu-mans, acting rationally and thinking rationally.
1.
Systems that act like humans
Sebuah sistem dimana beraksi seperti manusia, sistem ini disebut juga dengan Pendekatan Turing Test. Tahun 1950, Alan Turing merancang suatu ujian bagi komputer yang berintelijensia (bot Cerdas) untuk menguji apakah komputer tersebut mampu mengelabuhi seorang manusia/ interrogator melalui komunikasi berbasis teks jarak jauh. Ten-tunya komputer tersebut harus memiliki kemampuan, Natural Language Processing, Knowledge Representation, Automated Reasoning, Machine Learning, Computer Vision, Robotics.
Natural Language Processing: untuk berkomunikasi dengan
manusia
Automated reasoning: untuk mengembalikan dan menjawab
menggunakan data-data yang telah tersimpan
Machine learning: agar mampu beradaptasi dengan
ling-kungan yang baru
Computer Vision: untuk memahami sebuah objek Robotics: untuk memindahkan objek
2.
Systems that think like humans
Sebuah sistem yang berfungsi untuk berfikir seperti manusia, yang sering disebut sebagai Cognitive Modelling Approach. Model ini digunakan dengan cara melalui introspeksi, mencoba menangkap pemikiran kita sendiri saat kita berfikir. “how do you know that you un-derstand ?”. Cognitive science berhubungan dengan penelitian-penelitian dari segi psikologi. Pendekatan Cognitive science meliputi filosofi, psikologi, kecerdasan buatan, neuroscience, linguistics, dan antropologi. Salah satu contoh perangkat lunak yang memiliki sistem AI dengan pen-dekatan cognitive science adalah ELIZA.
3.
Systems that act rationally
Sebuah sistem yang berbuat atau mengambil keputusan secara ra-sional, sering disebut sebagai The Laws of Though Approach. Pendeka-tan ini muncul disebabkan manusia tidak selalu rasional dan logika tidak dapat merepresentasikan segalanya, contohnya adalah masalah ketid-akpastian. Terdapat dua masalah dalam pendekatan ini yaitu:
Tidak mudah membuat pengetahuan informal, lalu menyatakan
da-lam formal term dengan notasi-notasi logika.
Terdapat perbedaan besar antara dapat memecahkan masalah
“secara prinsip” dan memecahkannya “dalam dunia nyata 4.
Systems that think rationally
Sistem yang dapat berfikir secara rasional, biasa disebut sebagai The Rational Agent Approach. Membuat inferensi logis merupakan bagian dari suatu rational agent. Karena untuk melakukan aksi secara rasional adalah dengan menalar secara logis.
Dengan menalar secara logis, maka bisa didapatkan kesimpulan bahwa aksi yang dilakukan akan mencapai tujuan atau tidak.
Keuntungan AI sebagai rational agent :
Rational Agent lebih umum dengan logika (logika adalah bagian dari
rational agent) biasa, karena selain mengandung logika juga mengandung domain knowledge
Dapat digunakan untuk pendekatan dengan metodologi-metodologi
yang bersifat ilmiah. C. AI dalam kehidupan sehari-hari
Berbagai produk AI berhasil dibangun dan digunakan dalam kehidupan sehari-hari. Produk-produk tersebut dikelompokkan ke dalam empat teknik yang ada di AI, yaitu: searching, reasoning, planning dan learning . Contoh-contohnya:
GPS (Rute Optimal)
Permainan Catur
MedicWare (Rekam medis Pasien)
Speech Processing (Pengenalan suara, Pengenalan Pembicara)
Computer Vision
Robotic
1.3 Tugas Praktikum
Sebelum mengerjakan soal di bawah ini pelajari terlebih dahulu materi yang ada di modul praktikum maupun yang ada di materi perkuliahan.
Buatlah sebuah ulasan dalam sebuah video tentang film-film yang mengandung unsur kecerdasan buatan dan kemudian unggah pada Youtube dengan pengaturan pub-lic. Durasi video ulasan tidak lebih dari 5 menit. Ulasan-ulasan tersebut bisa berisi penjelasan-penjelasan karakter tokoh maupun alat yang digunakan dalam film tersebut
BAB 2
AGEN CERDAS
2.1 Tujuan
1. Praktikan mampu memahami konsep Agen Cerdas.
2. Praktikan mampu membuat contoh Agen Cerdas dan bagaimana
menganalisisnya.
2.2 Ringkasan Materi
A. Agen dan Lingkungan
Sistem Agen Cerdas adalah program yang dapat diberi tugas dan dapat menyelesaikan tugasnya secara mandiri, serta mempunyai inteligensi. Dengan bantuan sistem agen tersebut, maka pekerjaan yang membutuhkan waktu lama dapat diselesaikan dengan baik dan lebih cepat. Dengan adanya agen cerdas pada aplikasi diharapkan aplikasi tersebut dapat berpikir dan dapat menentukan pilihan langkah terbaik sehingga dapat mengalahkan manusia.
Definisi Agen Cerdas adalah segala sesuatu yang dapat merasakan lingkungannya melalui peralatan sensor-sensor, bertindak sesuai dengan lingkungannya dan dengan mengunakan peralatan penggeraknya /actuator (Russel dan Norvig). Sebuah agen adalah sebuah sistem komputer yang berada dalam suatu lingkungan dan memiliki kemampuan bertindak secara otonomos didalam situasi lingkungan tersebut sesuai dengan sasaran yang dirancang (Woold-ridge).
Setiap agen yang diciptakan memiliki fungsi agen yang biasanya akan dil-akukan pemetaan antara percept dan tindakannya. Dalam mendesain sebuah agen ra-sional langkah pertama yang selalu dikakukan adalah menspesifikasikan lingkungan kerja yang mungkin terjadi. Fungsi agen yang sudah dibuat berdasarkan lingkungan kerjanya akan dibentuk sebuah program agen yang berjalan di arsitektur fisik dari agen untuk menyelesaikan fungsi agen yang ada.
Terdapat 5 tipe agen cerdas yaitu: Simpel Reflex Agents agen ini merupakan agen paling sederhana dimana agen hanya menerapkan teknik kondisi-aksi, Model-Based Reflex Agents agen ini mampu melakukan pelacakan terhadap lingkungan secara terus menerus sehingga lingkungan dapat dikesan dengan baik dan melakukan tindakan seperti agen reflex sederhana, Goal-Based Agents agen mengetahui tujuan yang ingin dicapai, sehingga agen akan bekerja terus menerus hingga tujuan agen tercapai, Utility-Based Agents agen ini memikirkan kondisi yang baik untuk agen sehingga agen dapat melakukan tugas jauh lebih baik, dan Learning agents merupa-kan agen yang mampu belajar dari pengalaman, sehingga mampu meningkatmerupa-kan kinerja agen itu sendiri.
B. PEAS
Agen memiliki ukuran tertentu dalam kinerjanya ( Performance Measure), ling-kungan tempat bekerja ( Environment ), penggerak sebagai aksi dari suatu kejadian ( Ac-tuators), serta sensor-sensor sebagai penerima kondisi yang ada di lingkungannya (Sensors). Lingkungan kerja (Task Environment ) dari agen ini disingkat PEAS (
P
er- formance measure,E
nvironment ,A
ctuators,S
ensors). Sebagai contoh sebuahautomated taxi driver:
Performance measure: Safe, fast, legal, comfortable trip, maximize profits
Environment: Roads, other traffic, pedestrians, customers
Actuators: Steering wheel, accelerator, brake, signal, horn
Sensors: Cameras, sonar, speedometer, GPS, odometer, engine sensors, keyboard
2.3 Percobaan
A. Agen Cerdas (Vacumm Cleaner) Ketikkan program di bawah ini
Tabel 2.1 Kode Program Agen Cerdas AgenCerdas.java 1 2 3 4 5 6 7 8 9 10
public class AgenCerdas {
private String lingkungan[][]; AgenCerdas(int location){
lingkungan = new String[location][3]; }
public void setKondisi(int i, String Nama,String location,String status){ lingkungan[i-1][0]=Nama; lingkungan[i-1][1]=location; lingkungan[i-1][2]=status; } 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
public void vacumm (int i,String location, String status){ if ("kotor".equals(status.toLowerCase())){ System.out.println("----bersih-bersih----"); status = "bersih"; lingkungan[i][2]=status; vacumm(i,location,status); }else if ("kiri".equals(location.toLowerCase())){ System.out.println("geser kanan-->"); }else if ("kanan".equals(location.toLowerCase())){ System.out.println("<--geser kiri"); } }
public void bersihkan(){
for (int i = 0; i<lingkungan.length; i++){
System.out.println("Lokasi"+lingkungan[i][0]); vacumm(i,lingkungan[i][1],lingkungan[i][2]); }
cek(); }
public void cek (){
for (int i = 0; i<lingkungan.length; i++){ if(!"bersih".equals(lingkungan[i][2])){
bersihkan(); break;
} }
System.out.println("SEMUA SUDAH BERSIH"); }
public static void main(String[] args) { AgenCerdas a = new AgenCerdas(2);
a.setKondisi(1, "Lokasi 1", "kanan", "kotor"); a.setKondisi(2, "Lokasi 2", "kiri", "kotor"); a.bersihkan();
} }
B. Latihan Praktikum
Modifikasi kode program diatas sehingga dapat menyelesaikan task environment pada Gambar 1.2.
Gambar 2.2 Environment Vacumm Cleaner
2.4 Tugas Praktikum
Sebelum mengerjakan soal di bawah ini pelajari terlebih dahulu materi yang ada di modul praktikum maupun yang ada dimateri perkuliahan.
Carilah 2 aplikasi dari 5 tipe agen (simple reflex agents, model-based reflex agents, goal-based reflex agents, utility-based reflex agents dan Learning agents). Berikan review masing-masing aplikasi, kenapa aplikasi tersebut masuk pada tipe agen tertentu ?
BAB 3
UNINFORM SEARCH
3.1 Tujuan
1. Praktikan mampu memahami konsep Problem-solving agent.
2. Praktikan mampu membuat sebuah program strategi pencarian tanpa informasi.
3.2 Ringkasan Materi
A. Problem-Solving Agent
Pada bab ini menjelaskan salah satu jenis agen yang berbasis tujuan yang dise- but dengan problem-solving agent. Problem-solving agent ini memutuskan apa yang harus dilakukan dengan cara menemukan urutan tindakan yang menuju pada state yang diinginkan. Dimulai dengan mendefinisikan secara tepat elemen-elemen yang berkaitan dengan permasalahan ( problem) dan solusi ( solution) dengan memberikan beberapa contoh ilustrasi. Tujuan umum dari bab ini adalah menjelaskan beberapa al-goritma pencarian yang digunakan dalam memecahkan sebuah masalah kemudian membandingkan kelebihan dari setiap algoritma pencarian. Pada dasarnya algoritma bersifat uninformed yang berarti tidak memiliki atau diberikan informasi terkait
per-masalahan maupun definisinya.
Sebuah permasalahan dapat didefinisikan dengan empat komponen yaitu, initial state, successor function, goal test dan path cost. Berikut merupakan penjelasan dari keempan komponen:
- Initial state : Kondisi awal dari sebuah agen yang akan
melakukan tindakan tertentu. Misalkan, Initial state pada permasalahan di Romania dapat ditulis sebagai berikut
) ( Arad In
- Successor Function : Sebuah deskripsi dari tindakan yang mungkin dilakukan oleh agen dengan menggunakan successor function. Penulisan successor function dapat ditulis sebagai berikut.
) ( x FN SUCCESSOR
Formula tersebut mengembalikan nilai pasangan dari tindakan dan suc-cessor (action, successor ) dimana setiap tindakan ada pada state x dan setiap successor adalah kondisi yang dapat dijangkau oleh x dengan mengimplementasikan tindakan. Sebagai contoh, dari kondisi awal
) ( Arad
In , kemudian successor function untuk permasalahan Romania
menjadi seperti berikut.
)} In(Zerind) ), (Go(Zerind ra)), In(Timisoa ara), (Go(Timiso , In(Sibiu)) ), {(Go(Sibiu
- Goal Test : Menentukan apakah keadaan tertentu merupakan goal
state. Biasanya terdapat explicit set dari kemungkinan goal state dan memeriksa apakah state tersebut merupakan salah satu dari goal terse- but. Seperti contoh pada kasus Romania, agen memiliki goal dengan singleton set { In Bucharest ( )}. Tidak jarang sebuah goal dispesifikkan
oleh sebuah property abstrak daripada menyebutkan sebuah state secara eksplisit. Contohnya pada permainan catur, goal yang ingin dicapai dis- but dengan checkmate dimana raja dari lawan sedang diserang dan tidak
dapat melakukan pergerakan.
- Path Cost : Sebuah path cost memberikan numeric cost untuk se-tiap jalur. Agen memilih cost function yang mencerminkan ukuran kinerja agen. Pada kasus di Romania, agen mencoba untuk pergi ke Bu-charest sehingga path cost dapat dihitung dengan menjumlahkan cost dari setiap tindakan berdasarkan jalur yang diambil.
Sebuah solusi suatu permasalahan merupakan sebuah jalan dari initial state menuju pada goal state. Kualitas dari sebuah solusi dihitung dari fungsi path cost dan solusi
yang optimal memiliki path cost yang rendah dari semua solusi.
Permasalahan pada dunia nyata sangatlah banyak dan kompleks sehingga perlu adanya dibuat sebuah abstraksi deskripsi state. Abstraksi merupakan sebuah proses menghapus detail dari sebuah representasi permasalahan. Selain abstraksi deskripsi dari sebuah state, action yang diambil juga dilakukan abstraksi. Misalkan pada pengemudi, mengemudi memiliki banyak aksi, disamping mengubah posisi kendaraan dan penumpangnya juga mengisi bahan bakar, menghasilkan polusi, menyalakan r adio pada kendaraan dan sebagainya.
B. Uninformed Search Strategy
Pada bagian ini membahas lima macam strategi pencarian yang tergolong se- bagai uninformed search atau bisa disebut dengan blind search. Istilah tersebut dapat diartikan bahwa pencarian tersebut tidak memiliki informasi tambahan tentang state yang disediakan pada definisi permasalahan, yang dapat dilakukan oleh algoritma un-informed search adalah menggenerate successor dan membedakan goal state dan non- goal state.
a. Breadth First Search (BFS)
Breadth First Search merupakan strategi sederhana dimana node root yang diekspansi pertama kemudian semua dari successor root yang diekspansi. Secara umum, semua node diekspansi pada level tertentu pada pencarian tree sebelum semua node pada level berikutnya diekspansi. BFS dapat diimplementasikan dengan pencarian tree yang merupakan First-In-First-Out queue (FIFO) dimana node yang dikunjungi pertama akan diekpansi terlebih dahulu. FIFO queue me-letakkan semua succeccor baru pada akhir queue yang berarti bahwa node level atas akan diekspansi sebelum node level bawah.
b. Uniform-cost Search
Breadth First Search bekerja dengan optimal jika semua step cost bernilai sama karena ia selalu mengekspansi node terdekat. Dengan pengembangan yang sederhana, dapat ditemukan algoritma yang optimal dengan segala step function. Uniform-cost search mengekspansi node dengan path cost yang terkecil. Jika setiap path cost bernilai sama akan identic dengan Breadth First Search. Uniform-cost search tidak memperhatikan tentang jumlah dari langkah yag diambil, tetapi tetap memperhatikan tentang total cost. Oleh karena itu, akan terjadi stuck pada infinite loop jika memperluas node yang memiliki zero-cost yang mengarah kembali ke keadaan yang sama.
c. Depth First Search (DFS)
Depth First Search selalu mengekspansi node yang terdalam saat melakukan pencarian. Pencarian dilakukan pada level yang paling dalam dimana node tidak mempunyai successor , kemudian node diekspansi hingga pada level teratas. Strategi ini dapat diimplementasikan pencarian tree yang merupakan Last-In-First-Out queue (LIFO), atau bisa disebut dengan stack. Depth First Search memiliki
kebutuhan memori yang sangat sederhana, hanya membutuhkan tempat penyim- panan untuk single path dari root hingga leaf node bersamaan dengan setiap node pada path tersebut. Setelah node tersebut diekspansi dapat dihapus dari memori
setelah semua turunannya telah dieksplorasi. d. Depth Limited Search
Permasalahan dari tree yang tidak terbatas dapat diatasi dengan cara menye-diakan Depth First Search dengan menentukan batas kedalaman l . Node pada kedalaman l diperlakukan seakan-akan node tersebut tidak memiliki successor . Al-goritma ini memberikan solusi untuk jalan yang tidak terbatas. Depth Limited Search dapat diimplementasikan pada modifikasi sederhana pada tree atau pada rekursif Depth First Search. Depth Limited Search dapat mengakhiri dua kondisi kegagalan, yang pertama saat nilai dari standard kegagalan tidak memiliki solusi dan saat nilai titik potong mengindikasikan tidak ad solusi dalam batas kedalaman (depth limit ).
e. Iterative Deepening Depth First Search
Iterative deepening search adalah strategi umum, sering digunakan dengan mengombinasikan Depth First Search yang menemukan batas kedalaman yang terbaik, yang dilakukan secara bertahap hingga menemukan sebuah goal. Goal akan tercapai ketika batas kedalaman telah terjangkau, kedalaman dari node tujuan pada level paling atas. Iterative deepening search terlihat boros, karena state degenerate berkali-kali namun ternyata ini tidak mengeluarkan banyak cost . Alasannya adalah pada tree yang sama (atau mendekati sama) percabangan pada setiap level, sebagian besar node ada pada tingkat bawah jadi tidak masalah seberapa banyak level teratas yang degenerate secara berulang-ulang.
3.3 Percobaan
function TREE-SEARCH ( problem,fringe) returns a solution or failure
fringe←INSERT(MAKE-NODE(INITIAL-STATE[ problem]), fringe)
loop do
if fringe is empty then return failure
node←REMOVE-FIRST( fringe)
if GOAL-TEST[ problem]applied to STATE(node) succeeds then return node
else
fringe←INSERT-ALL(EXPAND(node,problem), fringe)
end Note:
- Fringe : Queue dari node yang belum diekspansi
- State : Keadaan yang direpresentasikan dengan node
- Expand : Membuat node baru dengan mengaplikasikan tindakan yang memung-kinkan pada node
3.4 Contoh
Penyelesaian masalah Route Planning dari Tottenham Court Road ke
Westminster dengan algoritma BFS. Node.Java
/*
* To change this license header, choose License Headers i n Project Properties. * To change this template file, choose Tools | Template s
* and open the template in the editor. */ package bfs; /** * * @author cahkanor */ import java.util.ArrayList; /**
* The Node class represents a station * in this tutorial and will as such have
* As well as an ArrayList of nodes that will store * any instantiated nodes children.
*/
public class Node {
// A Unique Identifier for our node public String stationName;
// An arraylist containing a list of Nodes that
// This node is directly connected to - It's child nodes. Node leftChild;
Node rightChild; Node middleChild; Node middleChild2;
public Node(String stationName, Node firstChild, Node secondChild){ this.stationName = stationName;
this.leftChild = firstChild; this.rightChild = secondChild;
}
public ArrayList<Node> getChildren(){
ArrayList<Node> childNodes = new ArrayList<>(); if(this.leftChild != null) { childNodes.add(leftChild); } if(this.rightChild != null) { childNodes.add(rightChild); } if(this.middleChild != null) { childNodes.add(middleChild);
} if(this.middleChild2 != null) { childNodes.add(middleChild2); } return childNodes; }
// An auxiliary function which allows // us to remove any child nodes from // our list of child nodes.
public boolean removeChild(Node n){ return false;
}
}
BreadthFirstSearch.java /*
* To change this license header, choose License Headers i n Project Properties. * To change this template file, choose Tools | Template s
* and open the template in the editor. */ package bfs; /** * * @author cahkanor */ import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue;
* basic breadth first search in java */
public class BreadthFirstSearch {
Node startNode; Node goalNode;
public BreadthFirstSearch(Node start, Node goalNode){ this.startNode = start;
this.goalNode = goalNode; }
public boolean compute(){
if(this.startNode.equals(goalNode)){
System.out.println("Goal Node Found!"); System.out.println(startNode);
}
Queue<Node> queue = new LinkedList<>(); ArrayList<Node> explored = new ArrayList<>(); queue.add(this.startNode);
//explored.add(startNode);
while(!queue.isEmpty()){
Node current = queue.remove(); if(current.equals(this.goalNode)) { //System.out.println(explored); explored.add(current); System.out.println("Explored Node : "); explored.stream().forEach((item) -> { System.out.println(item.stationName+" "); });
return true; } else{ if(current.getChildren().isEmpty()) return false; else queue.addAll(current.getChildren()); } explored.add(current); } return false; } }
BFS.java (Main Class) /*
* To change this license header, choose License Headers i n Project Properties. * To change this template file, choose Tools | Template s
* and open the template in the editor. */ package bfs; /** * * @author cahkanor */ public class BFS { /**
*/
public static void main(String[] args) { // TODO code application logic here
Node station1 = new Node("Westminster", null, null); Node station2 = new Node("Waterloo", station1, null);
Node station3 = new Node("Trafalgar Square", station1, station2); Node station4 = new Node("Canary Wharf", station2, station3); Node station5 = new Node("London Bridge", station4, station3);
Node station6 = new Node("Tottenham Court Road", station5, station4);
station1.leftChild = station2; station1.rightChild = station3; station2.middleChild = station3; station2.rightChild = station4; station3.middleChild = station4; station3.middleChild2 = station5; station4.middleChild = station5; station4.middleChild2 = station6; station5.middleChild = station6;
BreadthFirstSearch bfs = new BreadthFirstSearch(station6, station1);
if(bfs.compute())
System.out.print("Path Found!"); }
Output : Explored Node :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Westminster
Path Found!
Queue :
Keterangan : Node yang ditulis dengan huruf tebal adalah node yang diekspan Node yang diberi garis bawah adalah node baru hasil ekspansi
Tottenham Court Road Print :
Tottenham Court Road
Tottenham Court Road - London Bridge Print :
Tottenham Court Road London Bridge
Tottenham Court Road - London Bridge - Canary Wharf Print :
Canary Wharf
London Bridge - Canary Wharf
London Bridge - Canary Wharf - Canary Wharf Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf
London Bridge - Canary Wharf - Canary Wharf - Trafalgar Square Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
London Bridge - Canary Wharf - Canary Wharf - Trafalgar Square - Tottenham Court Road
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road
Canary Wharf - Canary Wharf - Trafalgar Square - Tottenham Court Road
Canary Wharf - Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Canary Wharf - Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square
Canary Wharf - Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Canary Wharf - Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge - Tottenham Court Road
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Tottenham Court Road
Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge - Tottenham Court Road
Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge - Tottenham Court Road - Waterloo
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Waterloo
Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge - Tottenham Court Road – Waterloo - Trafalgar Square
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Waterloo
Trafalgar Square
Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge Tottenham Court Road – Waterloo Trafalgar Square
-Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Canary Wharf - Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge Tottenham Court Road – Waterloo Trafalgar Square -London Bridge - Tottenham Court Road
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road
Trafalgar Square - Tottenham Court Road - Waterloo - Trafalgar Square – London Bridge - Tottenham Court Road – Waterloo - Trafalgar Square - London Bridge -
Tot-Trafalgar Square - Tottenham Court Road - Waterloo - Tot-Trafalgar Square – London Bridge - Tottenham Court Road – Waterloo - Trafalgar Square - London Bridge - Tot-tenham Court Road - Westminster
Print :
Tottenham Court Road London Bridge
Canary Wharf Canary Wharf Trafalgar Square
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Waterloo
Trafalgar Square London Bridge
Tottenham Court Road Westminster
Karena node tujuan (Westminster) sudah ketemu, maka program selesai.
3.5 Latihan Praktikum
1. Formulasikan masalah berikut ini : a. Permasalahan Ember Air
Anda memiliki 2 ember, masing-masing berkapasitas 2 liter dan 1 liter; Pada dua ember tersebut tidak ada tanda ukuran sama sekali. Awalnya keduanya kosong. Anda bisa mengisi air ke dalam ember tersebut. Tujuan Anda adalah mendapatkan tepat satu liter air ke dalam ember yang kapasitasnya 2 liter.
b. 8-Puzzle Problem
c. 4-Queens problem
d. Simple Pac-Man
f. Route Finding
2. 8-Puzzle. Selesaikan permasalahan 8-Puzzle berikut ini secara manual dengan menuliskan detail langkah-langkah yang digunakan
Start State Goal State
a. Selesaikan permasalahan di atas secara manual menggunakan algo-ritama BFS
b. Selesaikan permasalahan di atas secara manual menggunakan algo-ritama DFS
3. Carilah rute dari kota A ke kota I secara manual menggunakan Uniform Cost Search
3.6 Tugas Praktikum
Buatlah program dengan menggunakan algoritma Uniform-cost Search dengan me-modifikasi program BFS pada halaman sebelumnya (Uniform-cost Search mirip dengan BFS, tetapi mempertimbangakan nilai cost, atau dalam kasus ini adalah nilai jarak antar node) pada pencarian rute berikut ini:
Input:
a. Kota asal b. Kota Tujuan Output:
a. Langkah-langkah pencarian rute
b. Rute yang merupakan solusi dan jarak yang ditempuh Kasus khusus yang wajib diujikan:
a. Kota A ke kota D b. Kota H ke kota N c. Kota H ke kota U d. Kota O ke H e. Kota I ke A
BAB 4
INFORMED SEARCH
4.1 Tujuan
1. Praktikan mampu memahami konsep Informed Search.
2. Praktikan mampu membuat sebuah program strategi pencarian dengan informasi.
4.2 Ringkasan Materi
A. Informed Search
Informed search merupakan suatu kaidah yang merupakan metode untuk melakukan pencarian dengan memfokuskan pada informasi tertentu sehingga proses pencarian akan lebih efisien. Informed search mencoba mengurangi jumlah pencarian dengan memilih node-node yang harus dibuka ( expand ). Inti dari metode ini adalah konsep tentang fungsi heuristik. Heuristik merupakan suatu kriteria, metode, atau prinsip dalam memilih antara beberapa kemungkinan aksi yang dianggap paling
efisien untuk mencapai tujuan. Contoh fungsi heuristik pada kasus 8-puzzle :
Heuristik misplaced tile : jumlah angka yang salah tempat h(n) = 5, karena angka 2,8,1,6,7 salah tempat
Heuristik Manhatan distance : jumlah jarak dari angka yang salah tempat h(n) = 1 + 1 + 0 + 0 + 0 + 1 + 1 + 2 = 6
B. Informed Search Strategy
Pada bagian ini membahas lima macam strategi pencarian yang tergolong se- baga informed search atau bisa disebut dengan heuristic search.
a. MiniMax
Algoritma Minimax merupakan algoritma yang digunakan untuk menentukan pilihan untuk memperkecil kemungkinan kehilangan nilai maksimal dengan
menerap-kan prinsip DFS untuk pencariannya. Algoitma ini diterapmenerap-kan dalam permainan yang melibatkan dua pemain seperti tic tac toe, checkers, go dan permainan yang menggunakan strategi atau logika lainnya. Algoritma minimax digunakan untuk memilih langkah terbaik, dimana kedua pemain akan saling berusaha untuk memenangkan permainan, sehingga apabila terdapat pemain yang mengalami keuntungan, pemain lain akan mengalami kerugian senilai dengan keuntungan yang diperoleh lawan dan sebaliknya.
Algoritma minimax akan merepresentasikan pohon dengan 2 simpul, yaitu min node dan max node, dimana min node akan membandingkan semua nilai anaknya dan memilih nilai terendah yang dimiliki anaknya dan max node akan membandingkan semua nilai yang dimiliki anaknya dan memilih nilai terbesar yang dimiliki anaknya. Dalam penentuan langkah yang diambil untuk mendapatkan hasil maksimal, dibutuhkan fungsi heuristic sebagai nilai yang merepresentasikan hasil permainan yang akan terjadi jika langkah tersebut dipilih, seperti 1,0,-1.
12 12 -5 41 -5 12 90 Max node Min node Leaf node
b. Alpha Beta Prunning
Alpha Beta Prunning merupakan metode pengembangan dari metode minimax yaitu untuk mengurangi jumlah simpul yang dibangkitkan dengan memanfaatkan dua nilai, alpha dan beta untuk melakukan pengecekan. Nilai alpha menunjukkan skor
terbaik yang bisa diambil pemain Min. Pruning dilakukan ketika simpul yang sedang dicek pada pemain Max, yaitu n, memiliki skor yang lebih rendah daripada alpha, maka n tidak perlu dicek lagi pada proses selanjutnya. Hal yang sama juga dilakukan pada pemain Min dengan menggunakan nilai beta.
10 10 <=7 >=12 10 12 ? 10 5 ? ? ? ? ? ? ?
c. Best First Seacrh
Best First Seacrh merupakan metode pencarian dengan menggabungkan keun-tungan/kelebihan dari metode pencarian Breadth First Search dan Depth First Search. Metode Best-first search memilih simpul baru yang memiliki biaya terkecil diantara semua leaf nodes (simpul-simpul pada level terdalam) yang pernah dibangkitkan. Penentuan simpul terbaik dilakukan dengan menggunakan sebuah fungsi yang disebut fungsi evaluasi f(n) yang dapat berupa biaya perkiraan dari suatu simpul menuju ke goal atau gabungan antara biaya sebenarnya dan biaya perkiraan tersebut. Beberapa terminologi dalam algoritma best first search adalah sebagai berikut :
Fungsi evaluasi f(n), adalah fungsi yang digunakan untuk membangkitkan simpul
dari simpul sebelumnya
Nilai heuristik h(n), adalah nilai perkiraan yang menjadi dasar dipilihnya simpul
saat ini menjadi simpul terbaik.
Nilai sebenarnya g(n), adalah nilai “jarak” antara simpul akar dengan simpul saat
ini.
Simpul awal disebut juga simpul akar, adalah simpul pertama dalam pohon yang
akan dibentuk.
Simpul sekarang (current node) adalah simpul yang sedang dievaluasi dengan
fungsi evaluasi untuk ditentukan apakah layak atau tidak menjadi solusi.
Kandidat (suksesor) adalah simpul selanjutnya yang hendak diperiksa.
Open list, adalah daftar simpul yang mungkin diakses dari simpul awal atau
simpul yang sedang dijalankan.
Close list, adalah daftar simpul yang saat ini menjadi solusi sementara, yaitu solusi
terbaik saat ini
Simpul tujuan, adalah simpul yang hendak menjadi tujuan akhir
d. Greedy Best First Search
Greedy Best First Search merupakan metode pencarian Best First Search dengan prinsip mengambil keputusan berdasarkan informasi terbaik saat itu (terbesar untuk kasus maksimasi, atau terkecil untuk kasus minimasi) tanpa mempertimbangkan konsekuensi ke depan, sehingga keputusan yang diambil saat ini diharapkan dapat mengantarkan kepada solusi terbaik di akhir. Dalam Greedy Best First Search, keputusan diambil menggunakan fungsi evaluasi f(n) tetapi t anpa mempertimbangkan nilai sebenarnya g(n) karena informasi nilai g(n) tidak berguna sebab Greedy Search tidak peduli dengan nilai sebenarnya. Greedy Search hanya akan mempertimbangkan nilai heuristik h(n) yang ditetapkan dengan aturan tertentu sedemikian rupa sehingga simpul yang dipilih adalah simpul terbaik.
dimana :
f(n) : fungsi evaluasi
h(n) : estimasi biaya dari n untuk sampai pada tujuan
Step 4 Step 3 Step 2 Step 1 (5) (6) (4) (6) (5) (6) (4) (3) (5) (1) (5) (3) A A B C D A E F B C D A E F B C D E F e. A* Search
A star merupakan salah satu algoritma pencarian Best First Search terbaik yang mampu menemukan jalur dengan biaya pengeluaran paling sedikit dari titik permulaan yang diberikan sampai ke titik tujuan yang diharapkan. Dalam metode A star, fungsi f sebagai estimasi fungsi evaluasi terhadap node n, dapat dit uliskan :
dimana :
f(n) : fungsi evaluasi (jumlah g(n) dengan h(n) )
g(n) : biaya (cost) yang dikeluarkan dari keadaan awal sampai keadaan n h(n) : estimasi biaya untuk sampai pada tujuan
f. Hill Climbing
Hill Climbing merupakan sebuah metode pencarian dengan menerapkan proses Gambar : langkah-langkah algoritma Greedy Best First Search
heuristik. Artinya pembangkitan keadaan berikutnya sesuai dengan pembangkitan keadaan sebelumnya, begitu seterusnya sampai pada saat ditemukan solusi kurang op-timal, baru kemudian pembangkitan keadaan berikutnya ditentukan acak, dan diterus-kan ke pembangkitan keadaan berikutnya. Pembangkitan keadaan berikutnya sangat tergantung pada feedback dari prosedur pengetesan. Tes yang berupa fungsi heuristik ini akan menunjukkan seberapa baiknya nilai terkaan yang diambil terhadap keadaan-keadaan lainnya yang mungkin. Metode Hill Climbing menerapkan konsep pencarian Depth First Search, sehingga eksplorasi terhadap keputusan dilakukan dengan cara Depth First Search yaitu dengan mencari path dengan nilai heuristik terkecil yang bertujuan menurunkan cost untuk menuju kepada goal/keputusan.
4.3 Percobaan
Pseudocode metode Gredy Best First Search
DEKLARASI VARIABEL type simpul
parent : simpul heuristik : integer
ch : list of simpul type solusi: simpul
function GreedyBFS(S: list of simpul) list of solusi { fungsi untuk mengembalikan solusi dari himpunan simpul}
DEKLARASI KAMUS
sol : himpunan_solusi stemp : simpul
ALGORITMA stemp= akar S
while stemp bukan daun do
bangkitkan anak stemp
pilih anak yang nilainya paling optimal sol sol ∪ anakstemp
S S-stemp
stemp anakstemp endwhile
4.4 Contoh
Berikut adalah potongan program penyelesaian masalah maze/labirin menggunakan Greedy Best-First Search. Dengan heuris tic function menggunakan eu-clidian distance berikut adalah contoh labirin yang digunakan
0 1 2 3 4 5 6 7
╔═╦═╦═╦═╦═╦═╦═╦═╗
0║
║
║
╠ ╬ ╬ ╬═╬ ╬═╬═╬ ╣
1║ ║
║ ║
║
╠ ╬═╬═╬ ╬ ╬ ╬═╬ ╣
2║ ●║ ║
║ ║
╠ ╬ ╬ ╬═╬═╬ ╬═╬ ╣
3║ ║
║
║ ║
║
╠ ╬ ╬ ╬ ╬ ╬ ╬═╬ ╣
4║ ║ ║ ║ ║ ║ ║ ║ ║
╠ ╬═╬ ╬ ╬ ╬ ╬ ╬ ╣
5║
║ ║ ║
║
╠ ╬═╬═╬═╬ ╬ ╬═╬ ╣
6║
║ ║
║ ║
╠ ╬═╬ ╬ ╬═╬═╬ ╬ ╣
7║
║ ║ ║
║■║
╚═╩═╩═╩═╩═╩═╩═╩═╝
Dengan tanda {
■
}sebagai goal, dan {●
} initial / start. Berikut adalah potongan program yang dibutuhkan.No Class Name : AbstractSearch.java Bisa didownload di : https://gist.github.com/Syafiqq/6ae086bcf13bd2adb8fef2dbdfedc513 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package ai; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List;
public class AbstractSearch {
19 20 21 22 23 24 25 26 27 28 29 30
private char[][] vmap; public AbstractSearch() {
this.startNode = new Pair(0, 0); }
public void createRooms() {
} }
No Class Name : GreedyBestFirstSearch.java Bisa didownload di : https://gist.github.com/Syafiqq/5064e8390d2cf720a2e47b245411ffda 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 26 27 28 29 30 31 32 33 34 35 36 37 package ai; import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class GreedyBestFirstSearch extends AbstractSearch {
public GreedyBestFirstSearch(Pair startNode) {
this.startNode = startNode; super.createRooms();
System.out.println(super.visualizeMap()); }
public void greedy() {
List<Room> queue = new ArrayList<>();
queue.add(rooms[startNode.x][startNode.y]); while(!queue.isEmpty())
{
Collections.sort(queue, (o1, o2) -> o1.cost > o2.cost ? 1 : -1); Room r = queue.remove(0); if(r.goal) { printSolution("greedy", r); System.out.println("Greedy BFS Search:"); System.out.println("Solution step look at output/greedy.txt");
System.out.println(super.visualizeMap()); return;
}
visitedList.add(r);
!visitedList.contains(rooms[r.cur-40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 { rooms[r.current.x][r.current.y + 1].parent = new Pair(r.current.x, r.current.y);
queue.add(rooms[r.current.x][r.current.y + 1]);
}
if(r.s && !visitedList.contains(rooms[r.current.x + 1][r.current.y]) && !queue.contains(rooms[r.current.x + 1][r.current.y]))
{
rooms[r.current.x + 1][r.current.y].parent = new Pair(r.current.x, r.current.y);
queue.add(rooms[r.current.x + 1][r.cur-rent.y]);
}
if(r.w && !visitedList.contains(rooms[r.cur-rent.x][r.current.y - 1]) && !queue.contains(rooms[r.cur-rent.x][r.current.y - 1]))
{
rooms[r.current.x][r.current.y - 1].parent = new Pair(r.current.x, r.current.y);
queue.add(rooms[r.current.x][r.current.y -1]);
}
if(r.n && !visitedList.contains(rooms[r.current.x 1][r.current.y]) && !queue.contains(rooms[r.current.x -1][r.current.y]))
{
rooms[r.current.x - 1][r.current.y].parent = new Pair(r.current.x, r.current.y);
queue.add(rooms[r.current.x - 1][r.cur-rent.y]); } } } }
No Class Name : Pair.java Bisa didownload di : https://gist.github.com/Syafiqq/6aa0e8153dbca1c40f7972a81072134a 1 2 3 4 5 6 7 8 9 10 11 12 package ai;
public class Pair {
int x, y;
public Pair(int x, int y) {
this.x = x; this.y = y; }
No Class Name : Room.java Bisa didownload di : https://gist.github.com/Syafiqq/b4cf7405ac69f479d4e3b7184c3b5901 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package ai;
public class Room {
final Pair current; Pair parent;
boolean goal, e, w, s, n; double cost;
public Room(String alias, int x, int y) { //ESWN this.n = (alias.charAt(0) == '0'); this.e = (alias.charAt(1) == '0'); this.s = (alias.charAt(2) == '0'); this.w = (alias.charAt(3) == '0'); this.current = new Pair(x, y);
cost = Math.sqrt((Math.pow((7 - x), 2) + Math.pow((7 - y), 2)));
} }
No Class Name : Test.java Bisa didownload di : https://gist.github.com/Syafiqq/8fb5857f048bcca42ba8f222b869a845 1 2 3 4 5 6 7 8 9 10 11 12 13 package ai;
public class Test {
public static void main(String[] args) {
Pair startNode = new Pair(2, 1);
GreedyBestFirstSearch greedy = new GreedyBest-FirstSearch(startNode);
greedy.greedy(); }
No File Name : maze.txt Bisa didownload di : https://gist.github.com/Syafiqq/c0b512d0f923a97d643eeeae478b4e94 1 2 3 4 5 6 7 8 1001-1100-1001-1010-1000-1010-1010-1100 0101-0011-0010-1100-0101-1001-1010-0100 0001-1100-1101-0011-0010-0000-1110-0101 0101-0001-0100-1001-1100-0101-1011-0100 0101-0111-0101-0101-0101-0101-1101-0101 0001-1010-0010-0110-0101-0101-0011-0100 0001-1010-1000-1100-0111-0011-1100-0101 0011-1110-0111-0111-1011-1010-0110-0111
Satu blok menyatakan 1 petak labirin yang menggambarkan arah mata angin NESW (North – East – South – West)
Angka 1 : arah tersebut dapat terhubung dengan petak sebelahnya Angka 0 : arah tersebut tidak dapat terhubung dengan petak sebelahnya
Apabila angka tersebut dirubah menghasilkan labirin seperti gambar pada con-toh diatas.
Dengan menggunakan metode Greedy Best First-Search. Agen dapat menemukan goal state dengan melewati lorong seperti gambar berikut.
0 1 2 3 4 5 6 7
╔═╦═╦═╦═╦═╦═╦═╦═╗
0║┌─┐║
║
╠│╬│╬ ╬═╬ ╬═╬═╬ ╣
1║│║└───┐║ ║┌───┐║
╠│╬═╬═╬│╬ ╬│╬═╬│╣
2║└─●║ ║└───┘ ║│║
╠ ╬ ╬ ╬═╬═╬ ╬═╬│╣
3║ ║
║
║ ║ │║
╠ ╬ ╬ ╬ ╬ ╬ ╬═╬│╣
4║ ║ ║ ║ ║ ║ ║ ║│║
╠ ╬═╬ ╬ ╬ ╬ ╬ ╬│╣
5║
║ ║ ║ │║
╠ ╬═╬═╬═╬ ╬ ╬═╬│╣
6║
║ ║
║│║
╠ ╬═╬ ╬ ╬═╬═╬ ╬│╣
7║
║ ║ ║
║■║
╚═╩═╩═╩═╩═╩═╩═╩═╝
pada program GreedyBestFirstSearch.java yang diturunkan dari AbstractSearch.java. Labirin ini terdiri dari beberapa petak / ruangan berdasarkan kordinat x dan y yang direpresentasikan dengan potongan program Pair.java. Setiap petak / ruangan memiliki attribut arah mata angin (NESW) untuk dapat mengidentifikasi ruangan 1 dengan ru-angan lain yang berdampingan ditunjukkan pada Room.java.
Fungsi heuristic h(n) yang digunakan adalah euclidian distance yang menggam- barkan estimasi jarak ruangan tersebut terhadap ruangan tujuan ditunjukkan pada potongan program Room.java. Representasi labirin degenerate berdasarkan data pada maze.txt yang menggambarkan arah mata angin dan jalan tiap petaknya. Berikut con-tohnya. 1011
╔═╗
║
╚═╝
1100╔═╗
║
╚ ╝
0111╔ ╗
║ ║
╚═╝
Fungsi pencarian menggunakan Greedy Best First Search terletak pada fungsi greedy() pada file GreedyBestFirstSearch.java. fungsi ini akan melakukan ekspansi terhadap labirin sampai menuju goal yang ada (terletak pada koodinat {7, 7} berdasar-kan zero-based indexing ). Apabila telah menemukan goal maka node pencarian seca ra rekursif melakukan backward sampai menemukan posisi start / initial state (menggunakan atrribut node.parent).
Algoritma ini dijalankan melalui Test.java dengan initial state / ruangan awal terletak pada koordinat {1, 2} berdasarkan zero-based indexing . Jalur yang dihasilkan oleh algoritma ini akan ditulis pada output/greedy.txt yang berisi Tranversed Node dan Expanded Node berdasarkan one-based indexing
start goal
4.5 Latihan Praktikum
1. Deskripsikan dan tentukan nilai h(n) dan g(n) dari permasalahan berikut a. Graph problem, dimana titik A adalah state awal dan titik D adalah goal.
A B C G F D E b. 8-puzzle problem c. 8-queen problem
2. Selesaikan permasalahan permainan tic tac toe berikut menggunakan algoritma MiniMax dan Alpha Beta Prunning
X
O X X
O O
c. Jika kedua pemain, baik X dan O sama-sama menerapkan algoritma Alpha Beta Prunning, siapakah yang menang?
3. Sesuai dengan graph beserta informasi g(n) & h(n) yang telah anda definisikan pada jawaban soal nomor 1 a, carilah rute dari kota A ke kota D secara manual
menggunakan :
a. Greedy BFS
b. A*
4.6 Tugas Praktikum
Buatlah program (“untuk soal latihan praktikum nomor 3 b” atau “ untuk contoh masalah maze/labirin diatas dengan menggunakan algoritma A* dengan nilai f(n) = g(n)+h(n), misal g(n) adalah tingkat kedalaman penelusuran, dan h(n) adalah jarak Manhattan atau Euclidian”) dengan memodifikasi program pada contoh program di-atas.