수색…


A * 소개

A * (별표)는 한 노드에서 다른 노드로 경로를 찾는 데 사용되는 검색 알고리즘입니다. 그래서 이것은 Breadth First Search 또는 Dijkstra의 알고리즘 , Depth First Search 또는 Best First Search와 비교 될 수 있습니다. A * 알고리즘은 그래프 전처리가 옵션이 아닌 효율성과 정확도가 더 뛰어나다 고하는 그래프 검색에 널리 사용됩니다.

A *는 Best First Search의 전문 분야로, 평가 f 의 기능이 특정 방식으로 정의됩니다.

f (n) = g (n) + h (n) 은 초기 노드가 사고 노드 n 으로 가도록 조건화 된 목표들에 대한 최소 비용이다.

g (n) 은 초기 노드에서 n 까지의 최소 비용입니다.

H (n)은 N으로부터 N에 가장 가까운 목적으로 최소 비용

A *는 정보에 입각 한 검색 알고리즘으로 가능한 최소 시간 ( 가능한 추론을 사용하는 경우)에서 가장 작은 경로 (최소 비용의 경로)를 항상 보장합니다. 그래서 그것은 완전 하고 최적 입니다. 다음 애니메이션은 A * search-

검색

A * 알고리즘을 이용한 8- 퍼즐 문제 해결

문제 정의 :

8 개의 퍼즐은 3 x 3 격자 (9 개의 사각형 포함)로 구성된 간단한 게임입니다. 사각형 중 하나가 비어 있습니다. 목표는 여러 위치로 정사각형으로 이동하고 "목표 상태"에 숫자가 표시되도록하는 것입니다.

8 퍼즐

8- 퍼즐 게임의 초기 상태와 최종 상태에 도달하면 초기 상태에서 최종 상태에 도달하는 데 가장 비용 효율적인 경로를 찾습니다.

초기 상태 :

_ 1 3
4 2 5
7 8 6

최종 상태 :

1 2 3
4 5 6
7 8 _

가정되는 추론 :

이 문제에 대한 발견 적 발견으로서 현재와 최종 상태 사이의 맨해튼 거리를 고려해 보자.

h(n) = | x - p | + | y - q |
where x and y are cell co-ordinates in the current state
      p and q are cell co-ordinates in the final state

총 비용 함수 :

따라서 전체 비용 함수 f(n) 는 다음과 같이 주어진다.

f(n) = g(n) + h(n), where g(n) is the cost required to reach the current state from given initial state

예제 문제의 해결책 :

먼저 초기 상태에서 최종 상태에 도달하는 데 필요한 휴리스틱 값을 찾습니다. 비용 함수, g (n) = 0, 초기 상태에 있음

h(n) = 8

로서 상기 값이 얻어지고, 1 의 현재 상태가 1 개 수평 거리 거리보다 1 최종 상태이다. 2 , 5 , 6 마찬가지예요. _ 는 2 개의 수평 거리와 2 개의 수직 거리에 있습니다. 따라서 h(n) 총 가치는 1 + 1 + 1 + 2 + 2 = 8입니다. 총 비용 함수 f(n) 는 8 + 0 = 8과 같습니다.

이제는 초기 상태에서 도달 할 수있는 상태가 발견되며 _ 을 오른쪽 또는 아래로 이동할 수 있습니다.

따라서 이러한 움직임을 이동 한 후에 얻은 상태는 다음과 같습니다.

1 _ 3    4 1 3
4 2 5    _ 2 5
7 8 6    7 8 6
 (1)      (2)

다시 총 비용 함수는 위에 설명 된 방법을 사용하여 이러한 상태에 대해 계산되며 각각 6 및 7로 나타납니다. 우리는 상태 (1) 인 최소 비용으로 상태를 선택했습니다. 다음 가능한 이동은 왼쪽, 오른쪽 또는 아래로 이동할 수 있습니다. 이전에 우리가 그 상태에 있었기 때문에 우리는 좌로 이동하지 않을 것입니다. 오른쪽 또는 아래로 이동할 수 있습니다.

다시 우리는 (1)에서 얻은 상태를 찾는다.

1 3 _    1 2 3
4 2 5    4 _ 5
7 8 6    7 8 6
 (3)      (4)

(3)은 비용 함수를 6으로 유도하고 (4)는 4로 이끈다. 또한 (2)는 비용 함수가 7이되기 전에 얻은 것을 고려할 것이다. 그것들로부터 최소값을 선택하면 (4)가된다. 다음 가능한 이동은 왼쪽 또는 오른쪽 또는 아래로 이동할 수 있습니다. 우리는 주를 얻는다 :

1 2 3    1 2 3    1 2 3
_ 4 5    4 5 _    4 8 5
7 8 6    7 8 6    7 _ 6
 (5)      (6)      (7)

(5), (6), (7)에 대한 비용은 각각 5, 2, 4와 같습니다. 또한, 이전의 상태 (3)과 (2)는 각각 6과 7입니다. 우리는 (6) 인 최소 비용 상태를 선택했다. 다음 가능한 움직임은 위 (Up), 아래 (Down)이고 명확히 아래로 내려 가면 우리는 마지막 상태로 나아가며 경험적 함수 값은 0이됩니다.

A * 장애물이없는 미로를 통한 길 찾기

다음 4x4 격자가 있다고 가정 해 봅시다.

시작 4x4 그리드

이것이 미로 라고 가정합시다. 그러나 벽 / 장애물은 없습니다. 출발점 (녹색 사각형)과 끝점 (빨간색 사각형) 만 있습니다. 초록색에서 붉은 색으로 가려면 대각선으로 이동할 수 없다고 가정 해 봅시다. 그래서 녹색 사각형에서 시작하여 우리가 이동할 수있는 사각형을 확인하고 파란색으로 강조 표시합니다.

그리드 # 2

다음으로 이동할 사각형을 선택하려면 2 개의 휴리스틱을 고려해야합니다.

  1. "g"값 -이 노드가 녹색 사각형과 얼마나 멀리 떨어져 있는지 나타냅니다.
  2. "h"값 -이 노드가 빨간색 사각형과 얼마나 멀리 떨어져 있는지 나타냅니다.
  3. "f"값 - "g"값과 "h"값의 합입니다. 이것은 어떤 노드로 이동할 지 알려주는 마지막 번호입니다.

이러한 추론을 계산하기 위해 다음 식을 사용합니다. distance = abs(from.x - to.x) + abs(from.y - to.y)

이것은 "Manhattan Distance" 공식으로 알려져 있습니다.

녹색 사각형의 왼쪽 바로 옆에있는 파란색 사각형에 대한 "g"값을 계산해 봅시다 : abs(3 - 2) + abs(2 - 2) = 1

큰! 우리는 다음 값을 얻었습니다 : 1. 이제 h 값을 계산해 봅시다 : abs(2 - 0) + abs(2 - 0) = 4

완전한. 이제 "f"값을 얻습니다. 1 + 4 = 5

따라서이 노드의 최종 값은 "5"입니다.

다른 모든 파란 사각형에 대해서도 동일하게합시다. 왼쪽 상단의 숫자는 "g"값이고 오른쪽 상단의 숫자는 "h"값인 반면 각 사각형의 중앙에있는 큰 숫자는 "f"값입니다.

그리드 # 3

모든 파란색 노드에 대해 g, h 및 f 값을 계산했습니다. 자, 우리가 뭘 선택하니?

어느 것이 든 가장 낮은 f 값을가집니다.

그러나이 경우에 우리는 같은 f 값을 갖는 2 개의 노드를 갖습니다. 5. 어떻게 그 노드를 선택합니까?

간단히 하나를 선택하거나 우선 순위를 설정하십시오. 나는 보통 이렇게 우선 순위를 선호 : "오른쪽> 위로> 아래로> 왼쪽"

f 값이 5 인 노드 중 하나는 '아래'방향으로, 다른 노드는 '왼쪽'방향으로 이동합니다. Down은 Left보다 우선 순위가 높으므로 우리는 "Down"을 사용하는 사각형을 선택합니다.

이제 우리는 휴리스틱을 계산 한 노드를 주황색으로 표시하고 이동하지는 않았지만 우리가 시안 색으로 선택한 노드를 표시합니다.

그리드 # 4

좋아, 시안 노드 주위의 노드에 대해 동일한 경험적 방법을 계산해 보겠습니다.

그리드 # 5

모든 옵션이 동일한 f 값을 가지기 때문에 다시 시안 노드에서 노드를 선택합니다.

그리드 # 6

시안 노드가 가지고있는 유일한 이웃에 대한 경험적 방법을 계산해 봅시다.

그리드 # 7

좋아요, 우리는 다음과 같은 패턴을 따를 것이기 때문에 :

그리드 # 8

다시 한 번 노드의 이웃에 대한 경험적 방법을 계산해 봅시다.

그리드 # 9

거기로 가자.

그리드 # 10

마지막으로, 우리는 우리 옆에 승리 한 광장 이 있다는 것을 알 수 있습니다. 그래서 우리는 거기로 이동하고, 우리는 끝납니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow