Search Algorithms dalam Kecerdasan Buatan (AI)

Apa Itu Search Algorithms dalam AI?

Search Algorithms adalah metode fundamental dalam kecerdasan buatan yang digunakan untuk menemukan solusi optimal dalam ruang masalah (state space) yang sangat besar. Algoritma pencarian memungkinkan AI untuk menjelajahi berbagai kemungkinan dan menemukan jalur terbaik dari state awal menuju state tujuan.

๐ŸŽฏ Definisi Search Problem

Search Problem adalah permasalahan yang didefinisikan oleh:

  • State Space: Himpunan semua state yang mungkin
  • Initial State: State awal dari mana pencarian dimulai
  • Actions: Operasi yang dapat dilakukan untuk berpindah antar state
  • Successor Function: Fungsi yang menentukan state baru dari state saat ini dan action yang diambil
  • Goal Test: Fungsi untuk mengecek apakah suatu state adalah state tujuan
  • Path Cost: Biaya untuk melakukan suatu action (opsional)

State Space vs Search Tree

Penting untuk memahami perbedaan antara State Space Graph dan Search Tree:

State Space Graph

Representasi abstrak dari semua state dan transisi yang mungkin. Setiap node adalah state, dan setiap edge adalah action.

  • Nodes = States
  • Edges = Actions
  • State bisa muncul sekali saja

Search Tree

Struktur yang dikonstruksi saat melakukan pencarian. Setiap node adalah entire path dalam state space graph.

  • Nodes = Paths
  • Children = Expansions
  • State bisa muncul berulang kali
๐Ÿ’ก Insight Penting: Kita konstruksi state space dan search tree secara on-demand (sesuai kebutuhan) dan berusaha mengonstruksi sesedikit mungkin untuk efisiensi. Ini karena state space bisa sangat besar (eksponensial).

Mendefinisikan Search Problem

Contoh 1: Pacman

Mari kita lihat bagaimana problem Pacman dapat dimodelkan sebagai search problem:

1Problem: Eat All Dots

  • States: {(x,y), dot booleans} - posisi Pacman dan status setiap dot
  • Actions: North, South, East, West (NSEW)
  • Successor: Update location dan possibly a dot boolean
  • Goal test: Apakah semua dots sudah dimakan (dots all false)

2Problem: Go to Destination

  • States: (x,y) location
  • Actions: NSEW
  • Successor: Update location only
  • Goal test: is (x,y) = END

Contoh 2: Symbolic Integrator (SAINT, 1961)

SAINT adalah salah satu program AI pertama yang menggunakan search untuk memecahkan masalah kalkulus:

  • States: Ekspresi simbolik matematika
  • Actions: "Common techniques" dalam kalkulus
  • Successor: Ekspresi baru setelah applying technique
  • Goal test: Apakah ekspresi sudah dalam "standard form"

Contoh 3: Machine Translation

Menerjemahkan "ไฝ ๅฅฝๅ—Ž" ke bahasa Inggris:

  • States: Current word sequence
  • Actions: The next word to add
  • Successor: Concatenation of current sequence and next word
  • Goal test: Apakah current sequence memiliki makna yang sama dengan "ไฝ ๅฅฝๅ—Ž"

A* Search: The Best of Both Worlds

A* Search menggabungkan kelebihan UCS (optimal, complete) dengan kelebihan Greedy Search (efficient, guided by heuristic).

Evaluation Function A*

f(s) = g(s) + h(s)

Dimana:

  • g(s): Backward cost - actual cost dari start ke s
  • h(s): Forward cost - estimated cost dari s ke goal
  • f(s): Estimated total cost melalui s
Frontier ← { initial_state } // Priority Queue by f(s) = g(s) + h(s) g(initial_state) ← 0 While Frontier is not empty: Pop node s with smallest f(s) from Frontier If s is a goal state, then terminate For all action a: s' ← successor(s, a) If s' not in Reached: Push s' to Frontier Reached[s'] ← True g(s') ← min( g(s'), g(s) + cost(s, a) ) // Note: UCS adalah special case dari A* dengan h(s) = 0

Hubungan Antar Algorithms

Algorithm Evaluation Function Karakteristik
Uniform Cost Search f(s) = g(s) Hanya backward cost, explore ke semua arah
Greedy Best-First f(s) = h(s) Hanya forward estimate, langsung ke goal
A* Search f(s) = g(s) + h(s) Balance antara path cost dan goal proximity
Weighted A* f(s) = g(s) + w·h(s) w > 1: lebih greedy, w < 1: lebih uniform

Visualisasi: UCS vs A*

๐ŸŽฏ Perbedaan Area Eksplorasi

UCS: Explore dalam lingkaran konsentris dari start, mengabaikan goal direction

A*: Explore dalam bentuk elips yang stretched menuju goal, jauh lebih focused

A* bisa 10-100x lebih cepat dari UCS dengan heuristic yang bagus!

Optimalitas A*: Admissibility vs Consistency

Admissible Heuristic

Heuristic h adalah admissible jika:

0 ≤ h(s) ≤ h*(s)

Dimana h*(s) adalah true minimum cost dari s ke goal. Artinya, heuristic never overestimates.

Consistent (Monotonic) Heuristic

Heuristic h adalah consistent jika untuk semua s dan s':

h(s) ≤ h(s') + cost(s → s')

Ini adalah triangle inequality. Dan h(G) = 0 untuk goal state G.

๐Ÿ“Š Teorema Optimalitas A*:
  1. Jika h consistent: A* returns minimum-cost solution (selalu optimal)
  2. Jika h admissible + tree: A* returns minimum-cost solution
  3. Jika h consistent → h admissible (consistency lebih kuat)

Mengapa Admissibility Penting?

Admissibility memastikan bahwa nodes di shortest path akan di-expand sebelum goal:

Intuisi:

Untuk node A di optimal path ke goal G:

f(A) = g(A) + h(A) ≤ g(A) + h*(A) = cost(optimal path)

Sementara untuk suboptimal goal G₁ yang sudah di-reach:

f(G₁) = g(G₁) > cost(optimal path)

Karena f(A) ≤ f(G₁), node A akan di-expand dulu, sehingga optimal path ditemukan sebelum A* terminate di suboptimal goal.

Contoh: Admissible tapi Tidak Consistent

Perhatikan graph berikut:

Graph: S → A (cost 1), S → B (cost 1), A → C (cost 1), B → C (cost 2), C → G (cost 3)

Heuristic values: h(S)=2, h(A)=4, h(B)=1, h(C)=1, h(G)=0

Semua admissible (≤ true cost), tapi NOT consistent:
h(A)=4 > h(C)=1 + cost(A→C)=1, yaitu 4 > 2 ❌

Dalam kasus ini, dengan graph search biasa, A* mungkin menemukan suboptimal solution. Solusi:

  • Tree search: Treat graph seperti tree (allow revisits)
  • Perbaiki heuristic: Buat consistent

Merancang Heuristic Functions yang Baik

Sebagian besar pekerjaan dalam solving hard search problems adalah menciptakan good heuristics. Heuristic yang bagus dapat membuat perbedaan antara solve dalam seconds vs hours!

Prinsip Desain Heuristic

1. Relaxed Problems

Heuristic sering berasal dari solving relaxed version dari problem, dimana constraints dihilangkan.

2. Admissibility First

Pastikan heuristic admissible untuk guarantee optimalitas. Better: buat consistent.

3. Maximize h(s)

Dalam range admissible, higher h(s) is better - less nodes expanded.

4. Precomputation OK

Boleh precompute heuristic values jika membantu - one-time cost.

Contoh: 8-Puzzle Heuristics

8-Puzzle adalah classic benchmark untuk heuristics:

Heuristic Nodes Expanded (4 steps) Nodes Expanded (8 steps) Nodes Expanded (12 steps)
UCS (h=0) 112 6,300 3,600,000
# Wrong Tiles 13 39 227
Manhattan Distance 12 25 73
๐ŸŽฏ Insight: Manhattan distance adalah heuristic yang lebih baik karena lebih informatif. Untuk dua heuristic admissible h₁ dan h₂, jika h₂(s) ≥ h₁(s) untuk semua s, maka h₂ dominates h₁ dan akan expand fewer nodes.

Teknik Membuat Heuristic

1. Relaxed Problem

Untuk 8-Puzzle:

  • Relax "adjacent tiles": Tile bisa move ke mana saja → # misplaced tiles
  • Relax "one tile per move": Bisa move beberapa tile sekaligus → Manhattan distance

2. Pattern Databases

Precompute exact cost untuk subset dari tiles, gunakan sebagai heuristic untuk full problem.

3. Linear Combination

Jika h₁, h₂, ..., hโ‚™ admissible:

h(s) = max(h₁(s), h₂(s), ..., hโ‚™(s))

Juga admissible dan ≥ semua hแตข!

4. Domain Knowledge

Untuk navigation: straight-line distance
Untuk robot motion planning: Euclidean distance ignoring obstacles
Untuk machine translation: unigram/bigram scores

Inadmissible Heuristics

Meskipun tidak optimal, inadmissible heuristics juga berguna:

  • Bisa jauh lebih cepat dengan trade-off suboptimality kecil
  • Weighted A* dengan w > 1 memberikan bounded suboptimality
  • Berguna untuk very large problems dimana optimal solution not feasible

Perbandingan Lengkap Search Algorithms

Algorithm Complete Optimal Time Complexity Space Complexity
BFS ✅ Yes ✅ Yes (unit cost) O(b^d) O(b^d)
DFS ❌ No ❌ No O(b^m) O(bm)
IDS ✅ Yes ✅ Yes (unit cost) O(b^d) O(bd)
UCS ✅ Yes ✅ Yes O(b^(C*/ฮต)) O(b^(C*/ฮต))
Greedy ❌ No ❌ No O(b^m) O(b^m)
A* ✅ Yes* ✅ Yes* Exponential Exponential

* A* complete dan optimal jika heuristic admissible
b = branching factor, d = depth of solution, m = maximum depth, C* = optimal cost, ฮต = minimum cost

Kapan Menggunakan Algoritma Mana?

Gunakan BFS Jika:

  • Semua actions unit cost
  • Solution shallow
  • Space tidak masalah
  • Butuh optimal solution

Gunakan DFS Jika:

  • Space sangat terbatas
  • Solusi deep
  • Any solution acceptable
  • Tree structure (no cycles)

Gunakan IDS Jika:

  • Butuh optimal + complete
  • Space terbatas
  • Tidak tahu depth of solution
  • Large branching factor

Gunakan UCS Jika:

  • Variable action costs
  • Butuh optimal solution
  • Tidak ada good heuristic
  • Space cukup available

Gunakan Greedy Jika:

  • Ada good heuristic
  • Speed > Optimality
  • Approximate solution OK
  • Huge state space

Gunakan A* Jika:

  • Ada admissible heuristic
  • Butuh optimal solution
  • Want speed of Greedy
  • This is usually best choice!
๐Ÿ† Winner dalam Most Cases: A* dengan good heuristic adalah champion untuk most practical problems. Kombinasi optimal + efficient membuatnya pilihan default dalam game AI, robotics, navigation, dan planning.

Aplikasi Praktis Search Algorithms

Search algorithms adalah workhorses dalam AI modern, digunakan di berbagai aplikasi:

๐Ÿ—บ️ Navigation & Routing

  • Google Maps: A* dengan traffic-aware heuristic
  • Robot path planning: A* dalam configuration space
  • Autonomous vehicles: Real-time replanning dengan D*

๐ŸŽฎ Game AI

  • Pathfinding: A* untuk NPC movement
  • Strategy games: Minimax dengan alpha-beta pruning
  • Puzzle solving: IDA* untuk Rubik's cube, Sokoban

๐Ÿค– Robotics

  • Motion planning: RRT + A* hybrid
  • Task planning: Forward state space search
  • Manipulation: Configuration space search

๐Ÿ“ฆ Logistics & Scheduling

  • Warehouse optimization: Path planning untuk robots
  • Delivery routing: TSP dengan search heuristics
  • Job scheduling: State space search dengan constraints

๐Ÿงฌ Computational Biology

  • Protein folding: Search dalam conformation space
  • Sequence alignment: Dynamic programming variant
  • Drug design: Molecular docking search

๐Ÿ’ก Other Applications

  • Theorem proving: Search untuk proof
  • Circuit design: Search untuk optimal layout
  • Natural language: Parsing, machine translation

Kesimpulan

Search algorithms adalah fondasi essential dalam kecerdasan buatan. Dari uninformed methods seperti BFS dan DFS yang menjelajahi secara blind, hingga informed methods seperti A* yang menggunakan domain knowledge untuk guide pencarian, setiap algoritma memiliki trade-offs dan use cases yang tepat.

๐ŸŽฏ Key Takeaways

  • Uninformed search (BFS, DFS, UCS) tidak menggunakan domain knowledge, hanya problem definition
  • BFS optimal untuk unit costs, DFS memory-efficient tapi not optimal
  • UCS (Dijkstra) optimal untuk variable costs, explore uniformly ke semua arah
  • Informed search menggunakan heuristic h(s) untuk guide pencarian
  • Greedy Best-First cepat tapi not optimal, bisa mislead oleh bad heuristic
  • A* combines best of both: f(s) = g(s) + h(s) - optimal + efficient
  • Admissible heuristic (h ≤ h*) guarantees A* optimality
  • Consistent heuristic (triangle inequality) ensures monotonic f-values
  • Good heuristic design adalah kunci - bisa 1000x speedup!
  • Choice of algorithm bergantung pada problem properties dan constraints

Memahami search algorithms tidak hanya penting untuk academic purposes, tetapi juga fundamental untuk building intelligent systems yang dapat solve complex real-world problems. Dari navigation apps di smartphone Anda hingga autonomous robots dan game AI, search algorithms bekerja di balik layar untuk find optimal solutions efficiently.

Dengan framework yang solid dalam uninformed dan informed search, plus kemampuan merancang good heuristics, Anda sekarang memiliki toolkit powerful untuk tackle wide variety of AI problems!

๐Ÿš€ Ready to Implement?

Search algorithms adalah skill praktis yang dapat langsung diimplementasikan.

"Cara terbaik untuk mempelajari algoritma pencarian adalah dengan menerapkannya sendiri."

Komentar