직관적으로 단순하게 해결할 수 없는 문제에 대해 문제를 파악하고 문제에 해에 이르는 방법을 찾아내는 일련의 과정
문제풀이에 사용될 수 있는 전략: 알고리즘, 시행착오, 경험적 방법, 통찰,
시행착오, 경험적 방법을 통해서 찾는다.
목표한 퍼즐을 만들어지도록
알고리즘으로 해결하기 어렵다.
퍼즐 조각의 배치나 이동방식을, 컴퓨터로 정의한다.
여러 가지 방법으로 계속 시도한다.
여러가지 시행착오를 거치면서 해결한다
퍼즐판에 나열된 퍼즐 조각 배치 형태
초기 상태: 최초에 주어진 상태
목표 상태: 결과에 해당되는 상태
상태묘사: 컴퓨터 내부에서의 표현 방식
연산자: 상태를 변화시키는 도구
상태묘사 언어: 기호 열, 다차원 배열, 벡터, 등등
ex) 연산자
퍼즐 문제 : 빈 칸의 상, 하, 좌, 우 이동
부모 상태: 바뀌기 전 상태
후계 상태: 바뀌고 난 후 상태
초기 상태에서 목표 상태에 도달하기 위해, 일련의 연산자를 찾는다.
초기 상태에서 목표 상태에 도달 하기 위한 탐색을 한다.
상태 공간이 너무 크면 찾기가 힘들어서 여러가지 시행 착오를 거치는 탐색 과정을 거친다.
가능한 탐색에 유용한 방법을 찾아서 탐색을 해야하는 범위를 좁혀야 한다.
선택된 노드에 적용할 모든 연산자를 가한다.
노드의 확장: 가능한 모든 노드를 찾는 과정
탐색이 성공하고 난 후 풀이 경로를 알 수 있도록, 부모 노드의 흔적을 남겨 둔다.
Open: 아직 확장 하지 않은 노드
closed: 이미 확장한 노드
목표 노드의 위치와 무관하게 순서로 노드 확장
시간과 자원을 많이 소비할 경우가 생김
경험적 정보 를 이용하여 탐색을 한다.
목표 위치와 관련된 경험적 정보를 사용.
탐색 진행 방향(깊이 방향) 계속 한쪽 노드로 진행
가장 최근에 생성된 노드를 가장 먼저 확장함
open은 스택 구조 (Last In First Out)
목표와 무관한 경로를 계속 탐색
depth bound!!! 깊이를 제한한다. 너무 오랫동안 한 우물만 파지 말라!!
깊이 제한에 도달하거나, 더이상 경로가 없으면 되돌아 온다.
트리의 레벨 순서에 따라 노드를 확장함
생성된 순서에 따라 노드를 확장함 (first in first out)
천천히 같이 내려간다고 생각하면 됨.
한 노드에서 다른 노드로 이동하는 비용
시작 노드 S 에서 n 까지 비용 g(n)
open 노드중에서 출발 노드로 부터의 경로 비용이 최소인 노드를 선택하여 확장함
open 에 확장한 노드를 넣는데 이때 겹치는 노드가 있을때는 경로가 짧은 놈으로 저장한다.
open을 경로비용 g의 오름차순으로 정렬