Penyelesaian Problem Dengan Pencarian (Blind / Un-Informed Searching) Kecerdasan Buatan/ Artificial Intelligence Penyelesaian Problem Dengan Pencarian (Blind / Un-Informed Searching) Imam Cholissodin, S.Si., M.Kom.
Pokok Bahasan Agen penyelesaian problem Jenis problem/masalah Formulasi problem Contoh problem Strategi pencarian uninformed Algoritma pencarian dasar (BFS & DFS) Robot With AI Latihan Individu + Tugas Kelompok
Agen Penyelesaian Problem Agen pemecahan masalah adalah jenis agen berbasis tujuan. Memutuskan apa yang harus dilakukan dengan mencari urutan tindakan yang mengarah pada keadaaan (states) yang diinginkan. Formulasi Goal. Perumusan masalah. Search mengambil masalah sebagai masukan dan solusi pengembalian dalam bentuk urutan tindakan. Implementasi / Eksekusi.
Agen Penyelesaian Problem Penjelasan : Percept : persepsi yang ada Seq : urutan tindakan State : deskripsi dari keadaan lingkungan sekitar Goal : tujuan yang dicapai Problem : perumusan masalah
Agen Penyelesaian Problem Contoh : Romania Berlibur ke Rumania, saat ini berada di Arad. Penerbangan (keberangkatan) dilakukan besok dari Bucharest Merumuskan tujuan (Formulate goal) : Berada di Bucharest Merumuskan masalah (Formulate problem) : States : berbagai kota sebagai alternatif tempat yang akan dilalui Actions : drive antara kota Cari solusi (Find solution) : Urutan kota yang dilalui untuk mencapai tujuan. Misalnya ; Arad, Sibiu, Fagaras, Bucharest
Jenis Problem/Masalah Deterministic, fully observable Single-state problem Agen tahu persis keadaan sesuatu yang akan diamati. Non-observable Sensorless problem (conformant problem) Agen mungkin tidak mengetahui dimana keberadaan sesuatu yang dicari. Nondeterministic and/or partially observable Contingency problem (keadaan yang tidak pasti) Persepsi yang dapat memberikan informasi baru tentang keadaan saat ini. Unknown state space Exploration problem (Masalah eksplorasi)
Contoh Problem Contoh : vacuum world Single-state, start in #5. Solution?
Contoh Problem Contoh : vacuum world Single-state, start in #5. Solution? [Right, Suck] Sensorless, start in {1,2,3,4,5,6,7,8} e.g., Right goes to {2,4,6,8} Solution?
Contoh Problem Contoh : vacuum world Sensorless, start in {1,2,3,4,5,6,7,8} e.g., Right goes to {2,4,6,8} Solution? [Right,Suck,Left,Suck] Contingency Nondeterministic: Suck may dirty a clean carpet Partially observable: location, dirt at current location. Percept: [L, Clean], i.e., start in #5 or #7 Solution?
Contoh Problem Contoh : vacuum world Sensorless, start in {1,2,3,4,5,6,7,8} e.g., Right goes to {2,4,6,8} Solution? [Right,Suck,Left,Suck] Contingency Nondeterministic: Suck may dirty a clean carpet Partially observable: location, dirt at current location. Percept: [L, Clean], i.e., start in #5 or #7 Solution? [Right, if dirt then Suck]
Formulasi Problem Single-state problem formulation Suatu problem didefinisikan dalam 4 item : initial state e.g., "at Arad" actions or successor function S(x) = set of action–state pairs <action,successor(state)> e.g., S(Arad) = {<Berangkat(Arad Zerind), BeradaDi(Zerind)>, … } goal test, can be explicit, e.g., x = "at Bucharest" implicit, e.g., Checkmate(x) / Skakmat(x) path cost (additive) Menetapkan besarnya biaya untuk setiap jalur yang ada. Mis., jumlah jarak tempuh, jumlah tindakan lain yang dilakukan, dll. c(x, a, y) adalah cost action a dari state x ke state y, diasumsikan ≥ 0. Solusinya adalah suatu urutan tindakan yang mengarah dari keadaan awal (initial state) ke keadaan tujuan (goal state). Kualitas suatu solusi dapat diukur dari nilai fungsi biaya (cost function) yang paling minimal dari jalur (path) yang dilalui.
Formulasi Problem Selecting a state space Dunia nyata luar biasa kompleks dan rumit! State space harus merupakan abstraksi masalah supaya bisa dipecahkan. State = himpunan “keadaan nyata”. Mis : BeradaDi (Arad ) – dengan siapa? kondisi cuaca? Action = kombinasi berbagai “tindakan nyata”. Mis : Berangkat(Arad , Sibiu) – jalan tikus, isi bensin, istirahat, dll. Solution = representasi berbagai “path nyata” yang mencapai tujuan Abstraksi ini membuat masalah yang nyata lebih mudah dipecahkan.
Contoh Problem Contoh : Vacuum Cleaner World State: lokasi agent, status debu. Possible action: DoKeKiri(L), DoKeKanan(R), DoSedot(S). Goal test: semua ruangan sudah bebas debu. Path cost: asumsi step cost sama untuk semua action, mis: Path cost = 1 per action. Successor function mendefinisikan state space sbb:
Contoh Problem State: lokasi 8 buah angka dalam matriks 3x3 Contoh: 8-Puzzle State: lokasi 8 buah angka dalam matriks 3x3 Possible action (move, blank) : left, right, up, down Goal test: apakah konfigurasi angka sudah seperti goal state di atas. Path cost: asumsi, 1 step cost = 1 per move. Path cost = jumlah langkah dalam path.
Contoh Problem sedemikian sehingga tidak ada yang saling Contoh: 8-Queens Problem Letakkan 8 bidak menteri (queen!) sedemikian sehingga tidak ada yang saling “makan” (menteri bisa makan dalam satu baris, kolom, diagonal). State: Papan catur dengan n bidak menteri, 0 ≤ n ≤ 8. Initial state: Papan catur yang kosong. Possible action: Letakkan sebuah bidak menteri di posisi kosong. Goal test: 8 bidak menteri di papan, tidak ada yang saling makan. Note : Formulasi yang lebih baik akan melarang menempatkan queen dalam setiap persegi yang sudah diserang.
Contoh Problem Contoh: Robotic assembly (Perakitan Robot) States: koordinat real-valued bagian sudut sendi robot dari obyek yang akan dirakit. Actions: gerakan terus menerus dari sendi robot. Goal test: perakitan telah lengkap (complete assembly). Path cost: waktu untuk eksekusi (time to execute).
Algoritma Pencarian Dasar Tree search algorithms : Setelah merumuskan masalah → cari solusinya menggunakan sebuah search algorithm Search tree merepresentasikan state space. Search tree terdiri dari kumpulan node: struktur data yang merepresentasikan suatu state pada suatu path, dan memiliki parent, children, depth, dan path cost. Root node merepresentasikan initial state. Penerapan successor function terhadap (state yang diwakili) node menghasilkan children baru → ini disebut node expansion. Kumpulan semua node yang belum di-expand disebut fringe (pinggir) sebuah search tree.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Mulai dari root node (Arad) sebagai current node. Lakukan node expansion terhadapnya. Pilih salah satu node yang di-expand sebagai current node yang baru. Ulangi langkah sebelumnya.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Mulai dari root node (Arad) sebagai current node. Lakukan node expansion terhadapnya. Pilih salah satu node yang di-expand sebagai current node yang baru. Ulangi langkah sebelumnya.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Mulai dari root node (Arad) sebagai current node. Lakukan node expansion terhadapnya. Pilih salah satu node yang di-expand sebagai current node yang baru. Ulangi langkah sebelumnya.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Pada awalnya, fringe = himpunan node yang mewakili initial state. Pilih satu node dari fringe sebagai current node (Kalau fringe kosong, selesai dengan gagal). Jika node tsb. lolos goal test, selesai dengan sukses! Jika tidak, lakukan node expansion terhadap current node tsb. Tambahkan semua node yang dihasilkan ke fringe. Ulangi langkah 2.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Pada awalnya, fringe = himpunan node yang mewakili initial state. Pilih satu node dari fringe sebagai current node (Kalau fringe kosong, selesai dengan gagal). Jika node tsb. lolos goal test, selesai dengan sukses! Jika tidak, lakukan node expansion terhadap current node tsb. Tambahkan semua node yang dihasilkan ke fringe. Ulangi langkah 2.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Pada awalnya, fringe = himpunan node yang mewakili initial state. Pilih satu node dari fringe sebagai current node (Kalau fringe kosong, selesai dengan gagal). Jika node tsb. lolos goal test, selesai dengan sukses! Jika tidak, lakukan node expansion terhadap current node tsb. Tambahkan semua node yang dihasilkan ke fringe. Ulangi langkah 2.
Algoritma Pencarian Dasar Tree search algorithms (Basic idea) : Pada awalnya, fringe = himpunan node yang mewakili initial state. Pilih satu node dari fringe sebagai current node (Kalau fringe kosong, selesai dengan gagal). Jika node tsb. lolos goal test, selesai dengan sukses! Jika tidak, lakukan node expansion terhadap current node tsb. Tambahkan semua node yang dihasilkan ke fringe. Ulangi langkah 2.
Algoritma Pencarian Dasar Implementation: states vs. nodes Sebuah state merepresentasikan abstraksi keadaan nyata dari masalah. Sebuah node adalah struktur data yang menjadi bagian dari search tree. State tidak memiliki parent, children, depth, path cost! Node = state pada path tertentu. Dua node berbeda bisa mewakili state yang sama!
Strategi Pencarian Uninformed Terdapat berbagai jenis strategi untuk melakukan search. Semua strategi ini berbeda dalam satu hal: urutan dari node expansion. Search strategy di-evaluasi berdasarkan: completeness: apakah solusi (jika ada) pasti ditemukan? time complexity: jumlah node yang di-expand. space complexity: jumlah maksimum node di dalam memory. optimality: apakah solusi dengan minimum cost pasti ditemukan? Time & space complexity diukur berdasarkan b - branching factor dari search tree d - depth (kedalaman) dari solusi optimal m - kedalaman maksimum dari search tree (bisa infinite!)
Strategi Pencarian Uninformed Uninformed strategy hanya menggunakan informasi dari definisi masalah. Bisa diterapkan secara generik terhadap semua jenis masalah yang bisa direpresentasikan dalam sebuah state space. Ada beberapa jenis : Breadth-first search Uniform-cost search Depth-first search Depth-limited search Iterative-deepening search
Breadth-First Search Lakukan node expansion terhadap node di fringe yang paling dekat ke root Implementasi: fringe adalah sebuah queue, data struktur FIFO (First In First Out) Hasil node expansion (successor function) ditaruh di belakang BFS traversal queue: a bc cde defg efg fg g
Breadth-First Search Lakukan node expansion terhadap node di fringe yang paling dekat ke root Implementasi: fringe adalah sebuah queue, data struktur FIFO (First In First Out) Hasil node expansion (successor function) ditaruh di belakang BFS traversal queue: a bc cde defg efg fg g
Breadth-First Search Lakukan node expansion terhadap node di fringe yang paling dekat ke root Implementasi: fringe adalah sebuah queue, data struktur FIFO (First In First Out) Hasil node expansion (successor function) ditaruh di belakang BFS traversal queue: a bc cde defg efg fg g
Breadth-First Search Lakukan node expansion terhadap node di fringe yang paling dekat ke root Implementasi: fringe adalah sebuah queue, data struktur FIFO (First In First Out) Hasil node expansion (successor function) ditaruh di belakang BFS traversal queue: a bc cde defg efg fg g
Breadth-First Search BFS menggunakan prisip queue (Contoh lain) 1 2 6 BFS traversal queue: BFS tree: a bef efg fg g ch hd d 1 2 6 8 a b c d e f g h 3 4 5 7
Breadth-First Search Properties of breadth-first search : Complete? Ya, jika b terbatas Time complexity? b + b2+ b3+ . . . + bd+ b(bd− 1) = O(bd +1) → eksponensial dalam d. Space complexity? O(bd +1), karena semua node yang di-generate harus disimpan. Optimal? Ya, jika semua step cost sama, tapi pada umumnya tidak optimal. Masalah utama breadth-first search adalah space : Mis: 1 node memakan 1000 byte, dan b = 10 Jika d = 6, ada 107 node ≈ 10 gigabyte. Jika d = 12, ada 1013 node ≈ 10 petabyte!
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search Lakukan node expansion terhadap node di fringe yang paling jauh dari root. Implementasi: fringe adalah sebuah stack, data struktur LIFO (Last In First Out) Hasil node expansion ditaruh di depan Depth-first search sangat cocok diimplementasikan secara rekursif. DFS traversal stack: a ab abd abdh abdi abe abej abek … abe ab a ac acf acfl acfm acg … acgn acg acgo ac a null
Depth-First Search DFS menggunakan prisip stack (Contoh lain) a b e f DFS traversal stack: DFS tree: a ab abf abfe abg abgc abgcd abgcdh … 1 2 6 7 a b c d e f g h 4 3 5 8
Depth-First Search Properties of depth-first search Complete? Tidak, bisa gagal jika m tak terbatas, atau state space dengan loop . Time complexity? O(bm) → jika m »d , parah! Space complexity? O(bm) → linear space! Optimal? Tidak. Depth-first search mengatasi masalah space : Mis: 1 node memakan 1000 byte, dan b = 10 Jika d = 12, space yang dibutuhkan hanya 118 kilobyte . . . bandingkan dengan 10 petabyte!
Variasi Depth-First Search Backtracking search : lakukan node expansion satu-per-satu. Jika gagal backtrack dan coba nilai successor function yang lain. Depth-limited search : Batasi kedalaman maksimal yang dilihat adalah k. Mengatasi masalah untuk state space tak terbatas. Sayangnya, ada unsur incompleteness baru, jika k < d . Biasanya d tidak diketahui (tapi bisa ada estimasi, mis. diameter suatu graph).
Iterative-Deepening Search Lakukan depth-limited search secara bertahap dengan nilai k yang incremental. Strategi ini menggabungkan manfaat depth dan breadth first: space complexity linier dan completeness terjamin! Lakukan depth-limited search dengan k = 0, 1, 2, . . . sampai tidak cutoff.
Iterative-Deepening Search Iterative deepening search k =0
Iterative-Deepening Search Iterative deepening search k =1
Iterative-Deepening Search Iterative deepening search k =2
Iterative-Deepening Search Iterative deepening search k =3
Iterative-Deepening Search Properties of Iterative-Deepening Search Complete? Ya. Time complexity? db1+ (d − 1)b2+ . . . + bd= O(bd) Space complexity? O(bd ) Optimal? Ya, jika semua step cost sama. Secara sekilas, strategi ini kelihatan tidak efisien, atau boros: banyak usaha terulang! Iterative-deepening search malah lebih cepat dari breadth-first search! N(IDS ) = db + (d − 1)b2+ . . . + (1)bd N(BFS) = b + b2+ . . . + bd+ (bd+1− b) Untuk b = 10 dan d = 5: N(IDS ) = 50 + 400 + 3,000 + 20,000 + 100,000 = 123,450 N(BFS) = 10+100+1,000+10,000+100,000+999,990 = 1,111,100. Pada umumnya, IDS adalah uninformed search strategy yang terbaik jika state space besar dan kedalaman solusi (d ) tidak diketahui.
Perbandingan Algoritma Perbandingan strategi pencarian Kegagalan menangani state yang mengulang dapat membuat masalah linier menjadi eksponensial!
Graph Search Solusinya adalah untuk mencatat state mana yang sudah pernah dicoba. Catatan ini disebut closed list (fringe = open list). Modifikasi algoritma TreeSearch dengan closed list menjadi GraphSearch.
Graph Search Time complexity: sama, jika kita asumsi operasi STATE[node] ∈ closed = O(1) (implementasi dengan hashtable?) Space complexity: DFS dan IDS tidak lagi linier! GraphSearch tidak mencatat path menuju suatu state. Ini mempengaruhi sifat optimality suatu strategi: Uniform-cost dan breadth-first search dengan step cost konstanta masih optimal. Untuk variasi Depth-first dan iterative-deepening search, jika state mengulang ditemukan, periksa apakah path cost-nya lebih kecil → update info node dan anak-anaknya! /
Ringkasan Breadth-first search: completeness terjamin, tapi rakus memory. Uniform-cost search: mirip BFS, optimality terjamin jika cost path ≥ ε untuk ε > 0. Depth-first search: Space complexity linier, tetapi tidak complete (maupun optimal). Depth-limited search: mirip DFS, tetapi kedalaman search dibatasi sampai k. Iterative-deepening search: lakukan DLS secara bertahap dengan k = 0, 1, 2, . . .. Pengulangan state bisa dihindari dengan mencatat state yang sudah pernah dicoba. TreeSearch → GraphSearch.
Latihan Individu (a1) (a2) Selesaikan graf di bawah ini menggunakan algoritma DFS dan BFS berikut dengan hasil setiap langkah (Traversal dan Tree) dimulai dari node 1 untuk (a1) node K untuk (a2) ! (a1) (a2) A B C L E F D G I H J M K
Tugas Kelompok Buatlah video untuk pemecahan/ solusi kasus : 8-Puzzles 8-Queens (Optional) Lalu tuliskan langkah-langkah penyelesaiannya ! (Initial State-nya bebas) Selesaikan graf di bawah ini menggunakan algoritma IDS berikut dengan hasil setiap langkah (Traversal dan Tree) dimulai dari node A (k=2) ! A B C L E F G D I H J M K
Selesai
Robot With AI