Kong Eunho

탐색 1

2025년 09월 23일 12시
카테고리 - LECTURE, 인공지능개론


인공지능개론(정명희) 4주차 강의내용

탐색 Preview

탐색과 문제 해결

상태 공간 탐색

상태 공간과 탐색

상태(state)

탐색(search)

상태 공간(state space)

상태 공간 그래프(state space graph)

탐색문제 예제

상태공간 예제

  1. 초기 상태 (Initial State) : 문제 시작점
    예 : 8-puzzle에서 타일이 섞여 있는 초기 보드
  2. 상태공간 (State Space) : 가능한 모든 상태들의 집합.
    각 상태는 하나의 노드로 표현 (트리 또는 그래프)
  3. 연산자 (Operators) : 현재 상태 → 새로운 상태로 바꾸는 규칙
    8-puzzle에서는 빈칸을 상하좌우로 움직이는 것
  4. 목표 상태 (Goal State) : 문제의 해결 상태
    예 : 타일이 순서대로 정렬된 상태
  5. 비용 함수 (Path Cost) : 상태 전이(transition)에 드는 비용
    예 : 한 번 움직일 때 비용 = 1 (최단 이동 횟수 찾기)

예) 8-Puzzle 문제 모델링

  1. 상태공간 :
    모든 가능한 3x3 보드 배치를 노드로 생각 → 총 9! = 362,880개 상태
    (단, 실제 도달 가능한 상태는 절반 ≈ 181,440개)
  2. 연산자 :
    • UP: 빈칸을 위쪽 타일과 교환
    • DOWN: 아래쪽과 교환
    • LEFT: 왼쪽과 교환
    • RIGHT: 오른쪽과 교환
  3. 비용 함수 :
    • 각 이동의 비용 = 1
    • 경로 비용 = 이동 횟수 합계 → 최단 이동 경로를 찾는 것이 목표

인공지능에서의 탐색 기법

추론을 통한 탐색

탐색 트리 구축

1) 맹목적(무정보) 탐색(blind search)

(1) 너비 우선 탐색(Breadth-First Search, BFS)
• 시작 정점 방문 후 시작 정점과 연결된 모든 정점들을 왼쪽부터 차례 대로 방문
• 그 후 level의 순서에 따라 차례로 탐색
• 즉 level 0, level 1, level 2, … 의 순서로 탐색
• 그림에서 1, 2, 3, 4, 5, 6의 순서로 방문 • Queue이용, 최적해 보장 → 메모리 많이 필요

(2) 깊이 우선 탐색(Depth First Search, DFS)
• 첫 정점(node) 방문, 왼쪽으로 이동하여 계속 탐색
• 탐색할 정점이 없으면, 되돌아와서 순환적으로 탐색
• 그림에서 1, 2, 3, 4, 5, 6의 순서로 방문
• Stack, 재귀 구현 → 장점(메모리 적음) vs 단점(최적성 X)

(3) 반복적 깊이심화(증가) 탐색(Iterative Deepening Search, IDS)
• 깊이 한계를 1씩 증가 시키며 그때마다 깊이 우선 탐색 을 반복적으로 실행 하는 알고리즘
• 반복적 깊이심화 탐색(IDS)의 작동 방식
① 깊이 1에서 시작 : 깊이 한계(depth limit)를 0으로 설정하고 깊이 우선 탐색을 실행합니다.
② 점진적 깊이 증가 : 깊이 한계를 1씩 늘려가며 각 단계마다 깊이 우선 탐색을 반복적으로 실행합니다.
③ 목표 탐색 : 목표 노드에 도달할 때까지 이 과정을 반복합니다.
• 메모리 효율과 최단경로 보장
• DFS + BFS의 장점만을 취하는 알고리즘
• 맹목적 탐색 적용시 우선 고려 대상

(4) 양방향 탐색
• 초기노드와 목적노드에서 동시에 너비 우선 탐색을 진행
• 중간에 만나도록 하여 초기 노드에서 목표 노드로의 최단 경로를 찾는 방법

맹목적(무정보) 탐색 정리
너비우선 탐색(BFS)은 최적의 해를 찾으나 메모리 사용이 비효율적이다.
깊이우선 탐색(DFS)은 메모리 사용이 효율적이나 최적의 해를 보장하지 못한다.
반복적 깊이우선 탐색(IDS)은 메모리 사용이 효율적이면서도 최적의 해를 보장한다.

2) 경험적(정보이용)탐색(informed search)

(1) A* 알고리즘 (경로 탐색)
• 지식을 이용하여 탐색 진행
• ‘문제 해결에 매우 효과적인 탐색 알고리즘
• 출발점(시작)에서 목표지점(끝)까지의 최적 경로 탐색의 한 방법
• 가장 비용이 적거나 짧은 경로 찾기(전체 비용을 최소로 하는 노드 확장)
• 평가 함수 f를 사용하여 다음에 이동할 경로를 결정함
비교) 다익스트라 알고리즘 – 시작점은 있고 임의의 목표점에 대해 최단 거리 찾는 방식

휴리스틱 함수heuristic function
• 상태의 좋은 정도를 측정하는 평가 함수evaluation function
• 인공지능에서는 평가 함수를 휴리스틱 함수heuristic function라 부름
Ex) 8-puzzle 두 가지 휴리스틱 함수
① 불일치 수: 제자리에 없는 수를 셈
② 맨해튼 거리의 합: 제자리를 찾아가는데 필요한 거리의 합

• 경험적 탐색은 경험적 평가 함수 h(n)를 사용하여 목표 상태까지의 좋은 정도를 평가한다.
• 일반적으로 경험적 탐색은 최적의 해를 보장하지는 못한다.
• 그러나 A* 알고리듬은 경험적 탐색 방법임에도 불구하고, h(n)이 허용성을 만족하면 최적의 해를 보장한다.

(2) 언덕 오르기 (hill climbing)
• 현재 노드 -> 휴리스틱 평가 값이 가장 좋은 것 하나만을 선택해서 확장하는 기법
• 매 단계 가장 좋은 이웃 하나로 “오르기”; 큐/백트래킹 거의 없음(지역탐색)
• 장점: 메모리·구현 매우 단순, 매우 빠름.
• 단점: 지역 최적/평지(plateau)/능선(ridge)에 갇힘
→ 무완전, 비최적.
① 먼저 현재 위치를 기준으로 해서, 각 방향의 높이를 판단한다.(노드의 확장)
② 만일 모든 위치가 현 위치보다 낮다면 그 곳을 정상이라고 판단한다(목표상태인가의 검사).
③ 현 위치가 정상이 아니라면 확인된 위치 중 가장 높은 곳으로 이동한다(후계 노드의 선택).

(3) 최상우선 탐색 (best-first search)
• 가장 유망해 보이는 노드를 먼저 선택하여 탐색하는 방식
• 노드의 평가 함수 f(n)(유망도를 나타내는 휴리스틱 값) 값을 기준으로 우선순위 큐에서 가장 작은 값을 가진 노드를 꺼내 확장

알고리즘 :
① 시작 노드를 f(start) 값으로 우선순위 큐에 넣음
② 큐가 빌 때까지 반복:
• f(n)이 가장 작은 노드를 꺼냄
• 목표라면 경로 반환
• 이웃 노드 생성 후 f(n) 계산 → 큐에 추가
③ 큐가 비면 해 없음

f(n)에 따라 다양한 변형 가능:
• Greedy Best-First: f(n)=h(n) → 순수 휴리스틱 기반, 빠르지만 최적해 보장 X
• A* 탐색: f(n)=g(n)+h(n) → 경로비용+휴리스틱, h가 허용적(admissible)이면 최적해 보장

• 최상우선탐색은 A* 탐색 알고리즘 과정과 유사
• 차이점은 노드의 값을 계산하는 방식
• 최상우선탐색 - 현재 노드로부터 목표 노드까지의 거리 (휴리스틱 목적함수)
• A* 탐색 - (출발 노드 ~ 현재 노드까지의 거리) + (현재 노드~목표 노드까지의 예상 거리)

◀ 이전 글 LECTURE, 객체지향프로그래밍II
C++ 함수와 참조, 복사 생성자
2025-09-18
목록으로 다음 글 ▶ LECTURE, 인공지능개론
탐색 2
2025-09-30