-
Agent
- Reflex agents: ‘현재’ (과거 메모리) 상황 기반 결정. 미래 결과 고려 X. reflex agent가 합리적(rational)일 수 있는가? → 최적(optimal)과 reflex는 서로 다른 의미로 이해됨(벽 등을 고려하지 않음).
- Planning agents: 특정 ‘목표’를 이루기 위해 계속해서 질문을 던짐. 행위의 가설적인 결과 기반 결정. → 최적과 완전히 결정적임은 서로 다른 의미(행위 이전 다수의 시나리오를 고려함).
-
Search problem (Pacman)
‘문제 설정’에 따라 state space, successor function 등이 달라진다.
-
Pacman’s problem
world state의 agent position, food count, ghost position, agent facing 등 다양한 요소를 고려하면 매우 큰 수(지수적 곱)이므로 모든 계획을 사전에 연산한 planning agents는 효율성이 매우 저조하다. 즉 문제 설정에 따라 state space가 달라진다.
문제 설정에 따른 state space를 확인하기 위해 goal state를 달성했는지 여부를 확인해야 한다.
- path finding: agent positions
- eat-all-dots: agent positions X 2^(food count)
- power pellet을 먹을 때 ghost가 잠시 멈추는 기능을 가진 Pacman의 eat-all-dots 문제 설정의 state space: power pellet booleans, remaining ghost, timer, dot booleans, agent position,
-
State space graphs & search trees
- 그래프에서 각 state는 모든 경우 중 단 ‘한 번’만 발생 가능하다.
- 그래프 전체 구현은 메모리 상 부담이 크다.
- 검색 트리는 현재 상태에서 가능한 경우의 상태를 선택한다.
- 검색 트리는 상위 레벨에서 경험한 노드를 ‘여러 번’ 경험할 수 있다.
따라서 state space graph를 통해 구성한 search tree 길이는 무한할 수 있다.
-
Tree Search
-
초기 상태로 검색 트리를 초기화한다.
-
non-zero candidate expansion(0이 아닌 리프가 있는 노드로 확장)
-
여러 path 중 하나를 고르는 strategy(어떤 프린지를 고를 것인가)
-
해당 노드와 목표 노드의 일치 여부 확인
-
successor로 이어진 fringes 중 하나를 골라 계속 이어지고, 현재 고른 노드와 목표 상태가 동일할 때까지 검색을 이어간다.
-
S-G로 이어지는 여러 선택지 중 한 가지 경로를 택한다.
-
DFS
- Complete: solution이 존재한다면 solution을 찾을 수 있다. solution을 찾을 때까지 DFS를 실행한다(cycle을 방지할 때).
- Optimal: leftmost(노드 선택 기준이 알파벳 기준일 때) path이므로 보장하지 않는다.
- Time complexity: O(b^m). b=branching factor, m=maximum depth
- Space complexity: O(bm), branch factor num*maximum depth
-
BFS
- Complete: solution이 존재한다면 solution을 찾을 수 있다. solution을 찾을 때까지 BFS를 실행한다.
- Optimal: action의 cost가 다르다면 optimal을 보장할 수 없다. BFS는 solution에 도달하는 가장 짧은 경로를 반환하기 때문이다.
- Time complexity: solution의 depth에 따라 달라진다. O(b^s). b=branching factor, s=depth of solution
Space complexity: O(b^s).
-
DFS vs BFS
- BFS wins: solution까지 depth가 얕을 때. 최적의 solution가 rightmost에 존재할 때(DFS에서 찾는 solution은 최단 경로가 아님), 최단 경로를 찾을 때.
- DFS wins: solution까지 depth가 깊을 때.
→ 두 알고리즘의 장점을 결합한 알고리즘(iterative deepening) 존재
- Iterative Deepening
- depth-limit를 두고 DFS를 반복적으로 실행. solution이 없을 때 depth-limit를 1씩 증가시킨다.
- redundant: DFS가 반복적으로 실행되기 때문에 중복 탐색 이슈
-
UCS
- action의 cost가 서로 다를 때 cost-sensitive한 path를 찾는 검색 알고리즘
- 우선순위 큐(cumulative cost)로 fringe를 선택해 다음 노드를 선택한다. 우선순위 큐에 존재하는 fringe의 cost 총합으로 경로를 선택하기 때문에 optimal을 보장한다.
- Complete: solution cost가 유한하고 최소 arc cost가 양수일 때 complete
- Optimal: optimal
- Time complexity: O(b^(C*/ε)), solution’s depth==C*, cost of action==ε. C*/ε==cost of path
- Space complexity: O(b^(C*/ε)). solution이 존재하는 depth(effective depth)까지 모든 계층을 탐색해야 한다. 시간 복잡도와 동일
- UCS는 complete/optimal하지만 모든 방향으로 탐색하기 때문에 비용이 많이 들고 목표 상태에 관해 고려하지 않는다(A* search를 통해 해결).