🔗 관련 문서: Wikipedia - 탐색 알고리즘
탐색(Search)은 문제의 답이 될 수 있는 것들의 집합을 상태 공간(state space)으로 간주하고, 초기 상태에서 목표 상태에 도달하기 위한 경로를 체계적으로 검색하는 과정이다. 인공지능에서 탐색은 추론, 계획 수립, 게임 플레이 등 다양한 문제 해결의 근간이 되는 기법이다.
탐색 문제는 일반적으로 다음 다섯 가지 요소로 정의된다.
여러 탐색 알고리즘의 성능은 다음 네 가지 기준으로 비교한다.
탐색은 크게 맹목적 탐색(uninformed / blind search)과 목표까지의 거리에 대한 추가 정보를 활용하는 정보 기반 탐색(informed / heuristic search), 그리고 경로 전체가 아닌 현재 상태 주변만 살피는 지역 탐색(local search)으로 나눌 수 있다.
맹목적 탐색은 목표까지 남은 거리 등 문제에 특화된 추가 정보(휴리스틱) 없이, 상태 공간의 구조만을 이용해 체계적으로 탐색하는 방법이다.
시작 노드로부터 얕은 깊이의 노드부터 순차적으로 모든 형제 노드를 탐색한 뒤 다음 깊이로 내려가는 방법이다. 목표 상태를 찾을 때까지 생성된 모든 노드를 큐(queue, FIFO)에 넣어 관리하므로 메모리 사용량이 크다는 단점이 있다. 그러나 각 단계에서 이동 비용이 모두 동일(균일)하다면, 얕은 깊이의 해부터 확인하므로 완비적이며 최적해(전역 최적값)를 보장한다.
한 방향으로 갈 수 있는 만큼 깊이 내려간 뒤, 더 이상 진행할 수 없으면 되돌아와(backtracking) 다른 경로를 탐색하는 방법이다. 스택(stack, LIFO) 구조로 관리되어 BFS에 비해 메모리 부담이 적지만, 먼저 도달한 해가 최단 경로라는 보장이 없어 최적성을 보장하지 않는다. 또한 무한히 깊은 경로나 순환이 있는 공간에서는 완비성도 보장되지 않는다.
탐색 깊이에 제한을 두는 깊이 제한 탐색(depth-limited search)을 적용하면 무한 루프는 방지할 수 있지만, 제한된 깊이 안에 해가 없으면 찾지 못하고, 설령 찾아도 최단 경로라는 보장은 여전히 없다.
각 경로의 누적 비용 $g(n)$이 가장 낮은 노드부터 우선적으로 확장하는 방법이다. 이동 비용이 모두 동일하지 않은 경우에도 완비적이며 최적해를 보장하지만, 비용이 낮은 노드를 계속 우선 처리하기 위해 우선순위 큐를 사용해야 하므로 계산·메모리 부담이 크다.
시작 노드 S에서 목표 노드 G까지 아래와 같이 간선 비용이 서로 다른 그래프가 주어졌다고 하자.
균일 비용 탐색은 매 단계마다 프론티어(frontier, 우선순위 큐) 중 누적 비용 $g(n)$이 가장 작은 노드를 꺼내 확장한다. 이 그래프에서 탐색이 진행되는 과정을 표로 정리하면 다음과 같다.
| 단계 | 확장 노드(pop) | $g(n)$ | 설명 |
|---|---|---|---|
| 1 | S (시작) | 0 | 이웃 A($g=2$), B($g=1$), D($g=4$)를 프론티어에 추가 |
| 2 | B (최소) | 1 | C의 경로 발견 (S–B–C, $g=1+1=2$) → 프론티어에 추가 |
| 3 | A (최소) | 2 | G 후보 추가 (S–A–G, $g=2+5=7$) |
| 4 | C (최소) | 2 | G까지 더 짧은 경로 발견 (S–B–C–G, $g=2+3=5$) → 기존 $g=7$보다 짧아 갱신 |
| 5 | D (최소) | 4 | G 경로 재계산 (S–D–G, $g=4+2=6$) → 기존 $g=5$보다 커서 갱신 안 함 |
| 6 | G (최소, 목표!) | 5 | 목표 노드가 프론티어에서 최솟값으로 뽑혔으므로 탐색 종료 |
S→A→G(비용 $2+5=7$)와 S→D→G(비용 $4+2=6$)는 거쳐 가는 간선이 2개뿐이라 S→B→C→G(간선 3개)보다 언뜻 더 빠른 경로처럼 보일 수 있다. 그러나 균일 비용 탐색은 간선의 개수가 아니라 각 경로의 누적 비용 $g(n)$만을 비교하므로, 실제로는 비용 5인 S→B→C→G가 최적해로 선택된다.
탐색 깊이 제한을 0부터 시작하여 점차 1씩 증가시키면서 깊이 우선 탐색을 반복 수행하는 방법이다. DFS의 낮은 메모리 사용량과 BFS의 완비성·최적성(균일 비용 조건에서)을 동시에 갖춘 절충안으로 평가된다.
정보 기반 탐색은 목표까지 남은 비용을 추정하는 휴리스틱 함수 $h(n)$을 활용하여 탐색 효율을 높이는 방법이다.
휴리스틱 함수 $h(n)$값, 즉 목표까지 남았다고 추정되는 비용이 가장 작은 노드를 우선적으로 확장하는 방법이다. 지금까지의 실제 이동 비용은 고려하지 않으므로 계산이 빠르지만, 최적해를 보장하지 못한다.
A* 알고리즘은 시작 노드로부터 실제로 소요된 비용 $g(n)$과 목표까지 남은 비용의 추정치인 휴리스틱 함수 $h(n)$을 함께 고려한 평가함수를 사용한다.
당신이 서울역(출발)에서 남산타워(목적지)까지 가려고 한다.
이렇게 매 순간 "현재까지의 노력($g$)"과 "남은 거리의 직관($h$)"을 더해 가장 효율적인 선택을 반복한다.
시작 노드 S에서 목표 노드 G까지 아래와 같은 그래프가 주어졌다고 하자.
A*는 매 단계마다 Open List(아직 방문하지 않은 후보 노드들) 중 $f(n)=g(n)+h(n)$이 가장 작은 노드를 골라 확장한다. 이 그래프에서 A*가 동작하는 과정을 표로 정리하면 다음과 같다.
| 단계 | 확장 노드 | $g(n)$ | $h(n)$ | $f(n)=g+h$ | 설명 |
|---|---|---|---|---|---|
| 1 | S (시작) | 0 | 3 | 3 | 이웃 A, B를 Open List에 추가 |
| 2 | A ($f=3$, 최소) | 1 | 2 | 3 | B의 경로 발견 (S–A–B, $g=3$) → 기존 $g=4$보다 짧아 갱신 / G 후보 추가 ($g=6$) |
| 3 | B ($f=4$, 최소) | 3 | 1 | 4 | G까지의 경로 발견 (S–A–B–G, $g=4$) → 기존 $g=6$보다 짧아 갱신 |
| 4 | G ($f=4$, 최소, 목표!) | 4 | 0 | 4 | 목표 노드가 Open List에서 최솟값으로 뽑혔으므로 탐색 종료 |
처음에는 S → A → G 경로(비용 $1+5=6$)로도 갈 수 있었지만, A를 확장하는 과정에서 B를 거쳐 더 짧은 경로($g=3$)가 발견되어 갱신되었고, 이어서 B를 확장하면서 G까지의 경로도 더 짧게($g=4$) 갱신되었다. 결과적으로 A*는 S → A → B → G, 총 비용 4의 경로를 찾아내는데, 이는 이 그래프에서 가능한 가장 낮은 비용의 경로(최적해)와 일치한다.
이처럼 휴리스틱이 허용적(실제 비용을 과대평가하지 않음)이면, 도중에 $g(n)$이 더 나은 값으로 계속 갱신되더라도 A*가 목표 노드를 Open List에서 최솟값으로 꺼내는 순간 그 경로는 항상 전역 최적해임이 보장된다.
지역 탐색은 지금까지의 경로를 기억하지 않고, 현재 상태 주변(이웃)만을 살피며 상태를 개선해 나가는 방법이다. 메모리 사용이 적어 큰 문제에 적합하지만, 탐색 트리 전체를 보지 못하므로 전역 최적값을 보장하지 못하는 경우가 많다.
현재 상태의 이웃 상태들 중 가장 개선되는 방향으로만 이동하는 탐욕적(greedy) 지역 탐색 기법이다. 구현이 간단하고 계산이 빠르지만, 주변 이웃보다는 낫지만 전체적으로는 최선이 아닌 지역 최적값(local optimum)에 빠지면 그 지점에서 더 이상 나아가지 못하는 한계가 있다. 따라서 전역 최적값을 보장하지 않는다.
언덕 오르기의 지역 최적값 문제를 완화하기 위해, 일정 확률로 더 나쁜 상태로도 이동을 허용하는 기법이다. 금속을 서서히 냉각시키며 안정적인 결정 구조를 얻는 담금질(annealing) 과정에서 착안했으며, 탐색이 진행될수록(온도가 낮아질수록) 나쁜 상태로의 이동 확률을 점차 줄여나간다.
주요 탐색 기법의 완비성·최적성을 정리하면 다음과 같다. (단, 완비성·최적성은 상태 공간이 유한하고 이동 비용이 0보다 큰 일반적인 조건을 기준으로 한다)
| 탐색 기법 | 완비성 | 최적성 | 비고 |
|---|---|---|---|
| BFS | O | O (비용 균일 시) | 메모리 부담 큼 |
| DFS | △ (무한공간 X) | X | 메모리 부담 적음 |
| UCS | O | O | 비용 비균일에도 최적 |
| IDS | O | O (비용 균일 시) | DFS의 메모리 + BFS의 완비성 |
| 탐욕적 최우선 탐색 | X | X | $h(n)$만 고려 |
| A* (허용적 휴리스틱) | O | O | $f(n)=g(n)+h(n)$ |
| 언덕 오르기 | X | X | 지역 최적값에 빠질 수 있음 |