Mata Kuliah: Kecerdasan Artifisial (AI401) | 3 SKS
Setelah pertemuan ini, mahasiswa mampu:
Pertemuan sebelumnya kita belajar:
Masalah: Tidak tahu arah goal!
BFS/UCS mengeksplorasi ke semua arah termasuk yang menjauh dari goal!
"Gunakan pengetahuan tentang domain masalah untuk mengarahkan pencarian!"
Pengetahuan ini disebut HEURISTIK
Heuristik h(n) adalah fungsi yang memberikan estimasi biaya dari node n ke goal terdekat.
Untuk pencarian rute: jarak garis lurus ke goal
| Kota | hSLD ke Bucharest |
|---|---|
| Arad | 366 km |
| Sibiu | 253 km |
| Fagaras | 176 km |
| Pitesti | 100 km |
| Bucharest | 0 km |
Untuk grid-based problems (8-puzzle, pathfinding):
Jumlah jarak horizontal + vertikal setiap tile ke posisi goalnya
Current:
โโโโโฌโโโโฌโโโโ โ 2 โ 8 โ 3 โ โโโโโผโโโโผโโโโค โ 1 โ 6 โ 4 โ โโโโโผโโโโผโโโโค โ 7 โ โ 5 โ โโโโโดโโโโดโโโโ
Goal:
โโโโโฌโโโโฌโโโโ โ 1 โ 2 โ 3 โ โโโโโผโโโโผโโโโค โ 4 โ 5 โ 6 โ โโโโโผโโโโผโโโโค โ 7 โ 8 โ โ โโโโโดโโโโดโโโโ
hManhattan = 1+1+0+2+2+1+0+2 = 9
Selalu ekspansi node dengan h(n) terkecil
def greedy_best_first_search(problem, h):
frontier = PriorityQueue() # ordered by h(n)
frontier.push(initial_state)
explored = set()
while not frontier.empty():
node = frontier.pop() # h(n) terkecil
if goal_test(node):
return solution(node)
explored.add(node)
for successor in expand(node):
if successor not in explored:
frontier.push(successor)
return failure
Arad โ Bucharest:
Hanya 4 node diekspansi!
Bisa menemukan path yang lebih panjang
Bisa terjebak di infinite loop
Path Greedy: 450 km vs Optimal: 418 km
"Kombinasi terbaik dari UCS dan Greedy!"
| Algoritma | f(n) | Optimal? | Informed? |
|---|---|---|---|
| BFS | depth | โ (unit cost) | โ |
| UCS | g(n) | โ | โ |
| Greedy | h(n) | โ | โ |
| A* | g(n)+h(n) | โ | โ |
def a_star_search(problem, h):
frontier = PriorityQueue() # ordered by f(n)
start = Node(initial_state, g=0)
start.f = start.g + h(start.state)
frontier.push(start)
while not frontier.empty():
node = frontier.pop() # f(n) terkecil
if goal_test(node):
return solution(node)
for successor in expand(node):
successor.g = node.g + cost(node, successor)
successor.f = successor.g + h(successor.state)
if successor not in explored:
frontier.push(successor)
| Step | Node | g | h | f |
|---|---|---|---|---|
| 1 | Arad | 0 | 366 | 366 |
| 2 | Sibiu | 140 | 253 | 393 |
| 3 | RimnicuV | 220 | 193 | 413 |
| 4 | Fagaras | 239 | 176 | 415 |
| 5 | Pitesti | 317 | 100 | 417 |
| 6 | Bucharest | 418 | 0 | 418 |
Path: AradโSibiuโRVโPitestiโBucharest = 418 km โ
~11 nodes expanded
Eksplorasi tanpa arah
6 nodes expanded
Terarah ke goal!
Kedua menemukan path optimal 418 km
Heuristik admissible jika tidak pernah overestimate biaya sebenarnya:
untuk semua n, dimana h*(n) = biaya sebenarnya
Contoh: Straight-line distance selalu โค jarak jalan
Teorema: Jika h(n) admissible, maka A* adalah OPTIMAL
A* akan menemukan solusi dengan biaya minimum!
Ketidaksamaan segitiga!
hโ mendominasi hโ jika:
dan keduanya admissible
Heuristik yang mendominasi โ A* lebih efisien!
Contoh: Manhattan > Misplaced Tiles
Soal 1: Jika h(n) = 0 untuk semua n, algoritma apa yang dihasilkan A*?
Penjelasan: f(n) = g(n) + 0 = g(n)
Soal 2: Mana yang BUKAN properti heuristik admissible?
Admissible = tidak overestimate, bukan harus exact
Hilangkan beberapa constraint dari masalah asli. Biaya optimal dari relaxed problem โ heuristik admissible!
| Relaxation | Heuristik |
|---|---|
| Tile bisa teleport ke mana saja | Misplaced Tiles |
| Tile bisa menembus tile lain | Manhattan Distance |
| Tidak ada relaxation | h* (biaya sebenarnya) |
Semakin sedikit relaxation โ heuristik lebih informatif
Jika hโ dan hโ keduanya admissible:
Hasilnya:
A* ekspansi dalam urutan f-value โ goal optimal ditemukan duluan!
| Metrik | Worst Case | Dengan h baik |
|---|---|---|
| Waktu | O(bd) | Mendekati O(d) |
| Ruang | O(bd) | O(bd) |
โ ๏ธ Memori adalah bottleneck utama A*!
Solusi untuk masalah memori:
double heuristic(State n, Target t, vector<Radar>& radars) {
// Jarak ke target
double dist = euclideanDistance(n.pos, t.pos);
// Penalti radar
double penalty = 0;
for (auto& r : radars) {
if (distance(n, r) < r.range)
penalty += r.threat_level;
}
return dist + RADAR_WEIGHT * penalty;
}
Soal 3: Manhattan distance untuk state ini?
Current: [2,1,3,4,5,6,7,8,0] Goal: [1,2,3,4,5,6,7,8,0]
Tile 1: jarak 1, Tile 2: jarak 1 โ Total = 2
| Konsep | Definisi |
|---|---|
| Heuristik | Estimasi biaya ke goal |
| Greedy BFS | f(n) = h(n) |
| A* | f(n) = g(n) + h(n) |
| Admissible | h(n) โค h*(n) |
| Consistent | h(n) โค c + h(n') |
| Dominance | hโ โฅ hโ โ lebih efisien |
Local Search dan Optimization Algorithms
Pertemuan 03: Pencarian Heuristik - Informed Search
Ada pertanyaan?