Algoritma dan Struktur Data

Slides:



Advertisements
Presentasi serupa
Metode Pencarian Heuristik
Advertisements

Heuristic Search Dr. Kusrini, M.Kom.
Praktikum ASDL Pertemuan III – Shortest Path.
Kecerdasan Buatan Pencarian Heuristik.
Graf Berarah PART 5 DOSEN : AHMAD APANDI, ST.
Masalah, Ruang Masalah dan Pencarian
KECERDASAN BUATAN (ARTIFICIAL INTELLIGENCE)
SEARCH 2 Pertemuan ke Lima.
Metode Pencarian/Pelacakan
Pencarian Heuristik.
METODE PENCARIAN HEURISTIK
Hill Climbing Best First Search A*
HEURISTIC SEARCH Presentation Part IV.
KECERDASAN BUATAN (ARTIFICIAL INTELLIGENCE)
Pertemuan 4 Mata Kuliah : Kecerdasan Buatan
Ruang Keadaan (state space)
Pencarian (Searching)
Penyelesaian Masalah Teknik Pencarian
Metode Pencarian & Pelacakan
Metode Pencarian/Pelacakan
SISTEM INTELEGENSIA BUATAN
Heuristic Search Best First Search.
Pencarian Heuristik.
METODE PENCARIAN dan PELACAKAN
Informed (Heuristic) Search
Kecerdasan Buatan Materi 4 Pencarian Heuristik.
STRATEGI PENCARIAN PERTEMUAN MINGGU KE-4.
Disampaikan Oleh : Yusuf Nurrachman, ST, MMSI
Pencarian Heuristik.
TEKNIK PENCARIAN HEURISTIK
Penyelesaian Masalah menggunakan Teknik Pencarian Heuristic Search
Pert 4 METODE PENCARIAN.
Searching (Pencarian)
KECERDASAN BUATAN PERTEMUAN 3.
Penyelesaian Masalah menggunakan Teknik Pencarian Blind Search
Graf Berarah / DIGRAPH PART 5 DOSEN : AHMAD APANDI, ST.
Metode Pencarian dan Pelacakan
TEKNIK PENCARIAN & PELACAKAN
Masalah, Ruang Masalah dan Pencarian
Teknik Pencarian (Searching)
Metode Pencarian/Pelacakan
Metode Pencarian & Pelacakan
Masalah, Ruang Keadaan dan Pencarian
Algoritma dan Struktur Data Lanjut
Pertemuan 6 Pencarian Heuristik
Heuristic Search (Part 2)
Studi kasus Graph Ali Ridho Barakbah.
Pertemuan II : pengenalan graf
Pertemuan 6 Pencarian Heuristik
Metode pencarian dan pelacakan - Heuristik
Algoritma dan Struktur Data Lanjut
Matematika Diskrit Semester Ganjil TA Short Path.
Artificial Intelegence/ P 3-4
TEKNIK PENCARIAN.
STRUKTUR DATA Struktur Data Graf.
MASALAH, RUANG KEADAAN DAN PENCARIAN
Metode Pencarian/Pelacakan
MASALAH DAN METODE PEMECAHAN MASALAH
Fakultas Ilmu Komputer
Informed (Heuristic) Search
Masalah, Ruang Keadaan dan Pencarian
Masalah, Ruang Masalah dan Pencarian
Algoritma dan Struktur Data Lanjut
Algoritma dan Struktur Data
Heuristic Search.
Teori Bahasa Otomata (1) 2. Searching
KECERDASAN BUATAN PERTEMUAN 4.
Heuristic Search Best First Search.
Modul II Masalah, Ruang Masalah dan Pencarian
Graf dan Analisa Algoritma
Transcript presentasi:

Algoritma dan Struktur Data Shortest Path Problem

Metode Pencarian dan Pelacakan Ada 2 teknik dalam pencarian dan pelacakan: Pencarian Buta (Blind Search) Pencarian Melebar Pertama (Breadth First Search) Pencarian Mendalam Pertama (Depth First Search) Pencarian Terbimbing (Heuristic Search) Pendakian Bukit (Hill Climbing) Pembangkit dan Pengujian (Generate and Test) Simulated Anneling Pencarian Terbaik Pertama (Best First Search) Greedy - Dijkstra A*

… Pencarian Buta: tidak ada informasi awal yang digunakan untuk proses pencarian.  Waktu aksesnya lama  Besarnya memori yang digunakan Pencarian Heuristic: ada informasi awal yang digunakan untuk proses pencarian. Menggunakan suatu fungsi yang menghitung biaya perkiraan (estimasi) dari suatu simpul tertentu menuju ke simpul tujuan -> disebut fungsi heuristic Aplikasi yang menggunakan fungsi heuristic : Google

Shortest Path Problem (SPP) Persoalan Shortest Path Problem  bentuk umum permasalahan jalur terpendek. Contoh kasus: Penentuan rute perjanalanan bus/truk. Perencanaan investasi. Penentuan rute pesawat terbang. Jalur yang ada dapat direpresentasikan menggunakan graph.

Implementasi Jalur ke Graph Karakteristik graph untuk SPP: Graph Berarah G=(V, E). V = kumpulan vertex / node  kota E = kumpulan edge  jalur / jalan Cij adalah cost atau jarak untuk edge(i,j) Source Node = 1 Destination Node = n Variabel :

Contoh Data

Formulasi Secara matematis, persoalan SPP dapat diformulasikan sbb: Untuk mencari jalur terpendek dapat digunakan bermacam-macam algoritma SPP yang ada.

Jenis-jenis Algoritma SPP Algoritma Dijkstra Algoritma Bellman-Ford Algoritma A* Algoritma Floyd-Warshall Algoritma Johnson Algoritma Genetik

Algoritma Dijkstra Ditemukan oleh Edger Wybe Dijkstra. Merupakan salah satu algoritma SPP yang bekerja secara greedy. Prinsip kerja: Pada setiap langkah, ambil sisi yang berbobot minimum yang menghubungkan sebuah simpul yang sudah terpilih dengan sebuah simpul lain yang belum terpilih. Lintasan dari simpul asal ke simpul yang baru haruslah merupakan lintasan yang terpendek di antara semua lintasannya ke simpul-simpul yang belum terpilih.

Langkah-langkah Algoritma Dijkstra Memilih titik awal. Menghitung jarak ke setiap node tetangga. Memilih jarak terdekat dari setiap node tetangga. Ulangi langkah 2 jika belum tiba di node tujuan. Memberi nilai pada setiap node, nilai 0 untuk node awal dan ‘~’ untuk node lain. Menandai setiap node belum dikunjungi. Untuk node sekarang, hitung jarak pada tiap node tetangga dengan menjumlahkan jarak node sekarang + jarak menuju node tetangga. Jika jarak < jarak tercatat pada node tersebut maka nilai jarak pada node tersebut diganti.

… Menandakan node sekarang sebagai node yang telah dikunjungi. Node ini tidak akan dikunjungi lagi. Menandai node tetangga dengan jarak terdekat sebagai node selanjutnya kemudian langkah ke-3 dilakukan untuk node tersebut

Contoh Contoh Penyelesaian SPP dengan Dijkstra

Contoh 2 (node 1 ke node 7)

Implementasi Graph Ke Program Graph dalam Java: Dengan Java, Graf dapat dibuat menjadi sebuah bentuk obyek. Objek yang dapat kita bentuk adalah vertexnya. Lalu atribut-atribut yang dapat dimasukan ke dalam objek tersebut antara lain label, node-node yang berhubungan dengan vertex tersebut, dan jaraknya. Karena setiap vertex dapat terhubung dengan banyak vertex, maka digunakan kelas Vector (bawaan java).

Langkah-langkah Buat sebuah projek java application dengan nama GrafSederhana. Kelas-kelas yang harus dibuat: Main (Utama) Vertex XNode

Kelas Main Dibuat langsung saat generate projek

Kelas XNode Tambahkan atribut: private Vertex vertex; private int panjang; Buat konstruktor XNode(Vertex vertex, int panjang) Di dalam konstruktor beri perintah untuk inisialisasi atribut vertex dan panjang. Tambahkan fungsi getVertex() dan getPanjang().

Kelas Vertex Tambahkan atribut: private String label. private Vector<XNode> xnodes. Buat konstruktor Vertex(String label) Di dalam konstruktor beri perintah untuk inisialisasi atribut label dan xnodes. Tambahkan fungsi getLabel() dan getXNode().

Coba Projek Di kelas main, buat sebuah objek vector dengan nama listV. Setelah itu, tambahkan beberapa objek vertex ke dalamnya. Kemudian buat perulangan untuk mencetak label dari vertex-vertex yang sudah dimasukkan ke dalam listV.

Implementasi Dijkstra Node Buat kelas dengan nama Node (kelas turunan dari kelas Vertex). Tambahkan atribut: private int nilai private boolean kunjung private int tipeNod Buat getter dan setter untuk semua atribut tersebut. Buat konstruktor untuk ketiga atribut ditambah kontruktor kelas parent.

… Node Override fungsi addXNode lalu isi fungsi dengan koding berikut: for (XNode xNode : super.getXNodes()) if(xNode.getNode().getLabel().equals(xnode.getNode().getLabel())) return; //proteksi apakah relasi baru dibuat atau bukan. if(baru) xnode.getNode().addXNode(new XNode(this, xnode.getPanjang()), false); super.getXNodes().add(xnode);

.. XNode Tambahkan atribut: private Node nod Buat setter dan getter untuk atribut tersebut. Buat konstruktor untuk atribut node dan panjang.

… Main Buat vector dengan nama listNode yang hanya dapat menyimpan objek dari Node. Masukkan 6 objek Node ke dalam vector Vector<Node> listNode = new Vector<Node>(); listNode.add(new Node("1", -1, false,0)); listNode.add(new Node("2", -1, false,1)); listNode.add(new Node("3", -1, false,1)); listNode.add(new Node("4", -1, false,1)); listNode.add(new Node("5", -1, false,2)); listNode.add(new Node("6", -1, false,1));

Main Buat relasi antar node berdasarkan koding berikut: … Main Buat relasi antar node berdasarkan koding berikut: listNode.get(0).addXNode(new XNode(listNode.get(1), 7), true); listNode.get(0).addXNode(new XNode(listNode.get(2), 9), true); listNode.get(0).addXNode(new XNode(listNode.get(5), 14), true); listNode.get(1).addXNode(new XNode(listNode.get(2), 10), true); listNode.get(1).addXNode(new XNode(listNode.get(3), 15), true); listNode.get(2).addXNode(new XNode(listNode.get(3), 11), true); listNode.get(2).addXNode(new XNode(listNode.get(5), 2), true); listNode.get(3).addXNode(new XNode(listNode.get(4), 6), true); listNode.get(4).addXNode(new XNode(listNode.get(5), 9), true);

Main Tambahkan koding berikut: … Main Tambahkan koding berikut: Node nodAwal = null,nodAkhir = null,nodSkr = null; for (Node nod : listNode) { if(nod.getTipeNod() == 0) nodAwal = nod; else if(nod.getTipeNod() == 2) nodAkhir = nod; } if(nodAwal == null) return; nodAwal.setNil(0); nodSkr = nodAwal; Vector<Node> listPath = new Vector<Node>(); listPath.add(nodSkr);

… Main while(nodSkr != nodAkhir){ Node nodNext = nodSkr; int inc = 0; for (XNode xNode : nodSkr.getXNodes()) if(!xNode.getNode().isKunjung()){ if(xNode.getNode().getNil() != -1){ if((nodSkr.getNil()+xNode.getPanjang()) < xNode.getNode().getNil()) xNode.getNode().setNil(nodSkr.getNil()+xNode.getPanjang()); }else if(inc == 0){ nodNext = xNode.getNode(); inc++; if(xNode.getNode().getNil() < nodNext.getNil()) } nodSkr.setKunjung(true); nodSkr = nodNext; listPath.add(nodSkr); for(Node nod : listPath) System.out.print(nod.getLabel()+",");