π μΈκ³΅μ§λ₯ νμ μκ³ λ¦¬μ¦ - μ 보 μ΄μ© νμ
π 1. μ 보 μ΄μ© νμ(Heuristic Search)λ?
β μ 보 μ΄μ© νμμ΄λ?
μ 보 μ΄μ© νμ(Heuristic Search)μ λ¬Έμ ν΄κ²°μ μν΄ ν΄λ¦¬μ€ν±(heuristic, κ²½νμ μ 보)μ νμ©νλ νμ λ°©μμ
λλ€.
μ¦, μ΅μ μ κ²½λ‘λ₯Ό λΉ λ₯΄κ² μ°ΎκΈ° μν΄ μμ λΉμ©μ κ³μ°νμ¬ νμμ μ§νν©λλ€.
π μ 보 μ΄μ© νμμ νΉμ§
β λ§Ήλͺ©μ νμ(DFS, BFS)λ³΄λ€ λΉ λ₯΄κ³ ν¨μ¨μ
β λ¬Έμ ν΄κ²°μ μν μΆκ°μ μΈ μ 보(ν΄λ¦¬μ€ν± ν¨μ)λ₯Ό μ¬μ©
β μ΅μ μ ν΄λ₯Ό 보μ₯νμ§ μμ μλ μμ (ν΄λ¦¬μ€ν±μ΄ λΆμ νν κ²½μ° μ±λ₯ μ ν κ°λ₯)
π μ 보 μ΄μ© νμμ΄ μ¬μ©λλ λΆμΌ
λ€λΉκ²μ΄μ μμ€ν (Google Maps, Waze) β μ΅μ κ²½λ‘ μ°ΎκΈ°
κ²μ AI (체μ€, μ€νν¬λννΈ, RPG κ²μ) β μ΅μ μ μμ§μ κ²°μ
λ‘λ΄κ³΅ν (μμ¨μ£Όν, λ‘λ΄ κ²½λ‘ μ€μ ) β μ₯μ λ¬Όμ νΌν΄ μ΄λ
μμ°μ΄ μ²λ¦¬(NLP) β λ¬Έμ₯ μλ―Έ λΆμ λ° κ²μ μ΅μ ν
π 2. ν΄λ¦¬μ€ν± νμ(Heuristic Search)
β ν΄λ¦¬μ€ν± νμμ΄λ?
ν΄λ¦¬μ€ν± νμμ μΆκ°μ μΈ κ²½νμ μ 보λ₯Ό μ΄μ©νμ¬ νμ μλλ₯Ό λμ΄λ κΈ°λ²μ
λλ€.
μ¦, κ°μ₯ κ°λ₯μ±μ΄ λμ κ²½λ‘λ₯Ό μ°μ μ μΌλ‘ νμνμ¬ μ΅μ μ ν΄κ²°μ±
μ μ°Ύλ λ°©μμ
λλ€.
π ν΄λ¦¬μ€ν± νμμ ν΅μ¬ κ°λ
β λ¬Έμ ν΄κ²°μ μν μ§κ΄μ νλ¨ μ¬μ©
β μμ ν νμμ μννμ§ μκ³ , κ°μ₯ μ λ§ν λ°©ν₯μ μ ννμ¬ νμ
β μ νν ν΄λ΅μ 보μ₯νμ§ μμ§λ§, λΉ λ₯Έ ν΄κ²° κ°λ₯
π ν΄λ¦¬μ€ν± νμμ μ£Όμ μκ³ λ¦¬μ¦
μκ³ λ¦¬μ¦μ€λͺ νΉμ§ | ||
그리λ νμ(Greedy Best-First Search) | λͺ©νκΉμ§ κ°μ₯ μ μ λΉμ©μ΄ λλ κ²½λ‘λ₯Ό μ°μ νμ | λΉ λ₯΄μ§λ§ μ΅μ κ²½λ‘ λ³΄μ₯ X |
A* μκ³ λ¦¬μ¦(A-Star Algorithm) | μ€μ λΉμ©κ³Ό μμ λΉμ©μ λͺ¨λ κ³ λ €νμ¬ μ΅μ κ²½λ‘ νμ |
|
π‘ ν΄λ¦¬μ€ν± νμμ λ¬Έμ ν΄κ²°μ λΉ λ₯΄κ² νμ§λ§, ν΄λ¦¬μ€ν± ν¨μμ νμ§μ λ°λΌ μ±λ₯μ΄ λ¬λΌμ§ μ μμ!
π 3. A* μκ³ λ¦¬μ¦ (A-Star Algorithm)
β A* μκ³ λ¦¬μ¦μ΄λ?
A* μκ³ λ¦¬μ¦μ DFSμ BFSμ μ₯μ μ κ²°ν©νμ¬ μ΅μ κ²½λ‘λ₯Ό μ°Ύλ νμ μκ³ λ¦¬μ¦μ
λλ€.
μ΄ μκ³ λ¦¬μ¦μ ν΄λ¦¬μ€ν±(Heuristic) ν¨μλ₯Ό μ¬μ©νμ¬ λ λμ λ°©ν₯μΌλ‘ νμν μ μλλ‘ μ€κ³λμμ΅λλ€.
π A* μκ³ λ¦¬μ¦μ 곡μ
f(n) = g(n) + h(n)
g(n)
: μμμ μμ νμ¬ λ ΈλκΉμ§μ μ€μ λΉμ©h(n)
: νμ¬ λ Έλμμ λͺ©νκΉμ§μ μμ λΉμ© (ν΄λ¦¬μ€ν±)
π A* μκ³ λ¦¬μ¦μ λμ κ³Όμ
μμ λ Έλλ₯Ό μ€ν 리μ€νΈμ μΆκ°νκ³ ,
g(n) = 0
μΌλ‘ μ€μ μ€ν 리μ€νΈμμ f(n)μ΄ κ°μ₯ μμ λ Έλλ₯Ό μ ννμ¬ νμ¬ λ Έλλ‘ μ€μ
νμ¬ λ Έλκ° λͺ©ν λ Έλμ΄λ©΄ νμ μ’ λ£
νμ¬ λ Έλμ μΈμ λ Έλμ λν΄ λ€μμ μν:
μΈμ λ Έλκ° νμ 리μ€νΈμ μμΌλ©΄ 무μ
μΈμ λ Έλκ° μ€ν 리μ€νΈμ μμΌλ©΄ μΆκ°νκ³
g(n)
κ³Όf(n)
μ κ³μ°μΈμ λ Έλκ° μ€ν 리μ€νΈμ μ΄λ―Έ μμΌλ©΄, λ μμ
g(n)
μ΄ λ°κ²¬λ κ²½μ° μ λ°μ΄νΈ
νμ¬ λ Έλλ₯Ό νμ 리μ€νΈμ μΆκ°νκ³ , 2λ² κ³Όμ λ°λ³΅
β A* μκ³ λ¦¬μ¦μ νΉμ§
β ν΄λ¦¬μ€ν± ν¨μλ₯Ό νμ©νμ¬ ν¨μ¨μ μΈ νμ κ°λ₯
β μ΅μ κ²½λ‘λ₯Ό 보μ₯
β λ€λΉκ²μ΄μ
, κ²μ AI, λ‘λ΄ κ²½λ‘ νμ λ±μ νμ©
β A* μκ³ λ¦¬μ¦ μ½λ ꡬν (Python)
import heapq
def a_star(graph, start, goal, h):
open_list = []
heapq.heappush(open_list, (0 + h[start], start))
came_from = {}
g_score = {node: float('inf') for node in graph}
g_score[start] = 0
while open_list:
_, current = heapq.heappop(open_list)
if current == goal:
path = []
while current in came_from:
path.append(current)
current = came_from[current]
path.append(start)
return path[::-1]
for neighbor, cost in graph[current]:
tentative_g_score = g_score[current] + cost
if tentative_g_score < g_score[neighbor]:
came_from[neighbor] = current
g_score[neighbor] = tentative_g_score
f_score = tentative_g_score + h[neighbor]
heapq.heappush(open_list, (f_score, neighbor))
return None
# μμ κ·Έλν
graph = {
'A': [('B', 1), ('C', 4)],
'B': [('C', 2), ('D', 5)],
'C': [('D', 1)],
'D': [('E', 3)],
'E': []
}
# ν΄λ¦¬μ€ν± κ° (μμ )
heuristic = {'A': 6, 'B': 4, 'C': 2, 'D': 1, 'E': 0}
# μ€ν
path = a_star(graph, 'A', 'E', heuristic)
print("A* μκ³ λ¦¬μ¦ νμ κ²°κ³Ό:", path)
π A μκ³ λ¦¬μ¦ μ€ν κ²°κ³Ό μμ
A* μκ³ λ¦¬μ¦ νμ κ²°κ³Ό: ['A', 'B', 'C', 'D', 'E']