게임 2048 에 대한 최적의 알고리즘은 무엇입니까?

0 Comments

소개

2048 흥미로운 도와 이 게임,우리는 타일 주위에 그들을 결합을 목표로 점점 더 큰 도와 값입니다.

이 튜토리얼에서,우리는 것을 조사하는 알고리즘 플레이 2048 하는 것을 결정하는 데 도움이 최고의 움직임을 만들 각 단계에서 가장 좋은 점수를 얻을 수 있습니다.

2048 게임 방법

2048 의 게임은 4×4 보드에서 재생됩니다., 보드의 각 위치는 비어 있거나 타일을 포함 할 수 있으며 각 타일에는 숫자가 있습니다.

우리가 시작할 때,보드는 임의의 위치에 두 개의 타일을 갖게되며,각 타일에는”2″또는”4″가 있습니다.

이동은 모든 타일을 위,아래,왼쪽 또는 오른쪽으로 한 가장자리로 이동하여 수행됩니다., 이렇게 할 때,어떤의 동일한 가치 있는 인접하여 이동하고있는 함께 병합합니다 끝으로 새로운 타일과 같은 앞의 두 가지:

후 우리는 이동,새로운 타일에 배치됩니다. 이것은 임의의 위치에 배치되며 초기 타일과 같은 방식으로”2″또는”4″가됩니다–”2″90%의 시간과”4″10%의 시간.

게임은 더 이상 움직임이 가능하지 않을 때까지 계속됩니다.

일반적으로 게임의 목표는”2048″의 값을 가진 단일 타일에 도달하는 것입니다., 그러나 게임은 여기서 멈추지 않으며 가능한 한 가장 큰 타일을 목표로 갈 수있는 한 계속 플레이 할 수 있습니다. 이론적으로 이것은”131,072″값을 가진 타일입니다.

문제를 설명

이 게임은 흥미로운 문제이기 때문에 그것은 임의의 구성 요소입니다. 각각의 새로운 타일이 배치 될 위치뿐만 아니라”2″또는”4″가 될지 여부를 올바르게 예측하는 것은 불가능합니다.따라서 매번 퍼즐을 올바르게 풀 수있는 알고리즘을 갖는 것은 불가능합니다., 우리가 할 수있는 최선의 방법은 각 단계에서 최선의 움직임이 될 가능성이있는 것을 결정하고 확률 게임을하는 것입니다.

어느 시점에서 우리가 할 수있는 네 가지 가능한 움직임 만 있습니다. 때로는 몇 가지의 이러한 움직임에 영향을 주지 않습니다 이 보고서에 따라 가치를 만들기–예를 들어,위의 보드의 움직임”아래”아무런 영향이 없기 때문에 모든 타일의 이미에서 아래쪽 가장자리입니다.그런 다음 도전 과제는이 네 가지 움직임 중 어느 것이 가장 좋은 장기 결과를 가져올 것인지를 결정하는 것입니다.,

우리는 알고리즘을 기반으로 Expectimax 하는 알고리즘은 그 자체의 변형 Minimax 알고리즘,하지만 어디 가능한 경로를 통해 우리 나무의 가중치에 의해 확률은 그들이 일어날 것입니다.

기본적으로,우리는 치료하는 게임으로 두 플레이어 게임:

  • 선수 한 인간의 플레이를 이동할 수 있는 보드에서 하나의 네 방향
  • 플레이어 두 컴퓨터 플레이어–할 수 있는 장소를 타일로 빈에 위치 보드

이를 바탕으로,우리는 우리를 생성할 수 있는 나무의 결과에서는 각 이동 가중치의 확률에 의해 각각의 이동이 일어나고 있다., 그러면 어떤 인간의 움직임이 최선의 결과를 줄 가능성이 있는지를 결정하는 데 필요한 세부 사항을 알려줄 수 있습니다.

3.1. 의 흐름도 게임 플레이

일반적인 흐름의 방법 게임플레이 작동합니다:

우리는 즉시 볼 수 있습니다 임의의 측면에서 게임의”추가한 임의의 타일”프로세스에서는 사실 우리는 우리를 찾는 임의의 광장을 추가하는 타일,그리고 우리가 선택한 임의의 값은 타일이 있습니다.

우리의 도전은”다음 이동 결정”단계에서 무엇을해야할지 결정하는 것입니다. 이것은 게임을하는 우리의 알고리즘입니다.,

일반의 오버플로 이것은 믿을 간단하다:

우리 모두가 필요로 하는 시뮬레이션의 각각의 가능한 이동을 결정하는 중에게 최고의 결과,다음 사용합니다.

그래서 우리는 이제 주어진 움직임을 시뮬레이션하고 결과에 대한 점수를 생성하는 알고리즘을 줄였습니다.이것은 두 부분으로 구성된 프로세스입니다. 첫 번째 패스는 이동이 가능한지 확인하고 그렇지 않은 경우”0″의 점수로 일찍 중단하는 것입니다., 이동이 가능한 다음,우리는 우리 것이에 이동하는 실시 알고리즘 우리가 결정하는 방법에 좋은 이동이다.

3.2. 을 결정하는 다음을 움직

의 중요한 부분은 우리의 알고리즘은 지금까지에서 시뮬레이션,이동의 중요한 부분은 우리가 어떻게 생성하는 점수를 각각의 가능한 이동합니다. 이것은 우리의 Expectimax 알고리즘이 들어오는 곳입니다.

우리는 시뮬레이션 가능한 모든 움직임에서 두 선수는 여러 가지 단계를,보는 사람들의 최고의 결과입니다. 인간 플레이어의 경우,이것은 각각”위”,”아래”,”왼쪽”및”오른쪽”이동을 의미합니다.,

에 대한 컴퓨터 플레이어,이미 배치를 모두”2″또는”4″타일로 가능한 모든 빈 위치:

이 알고리즘을 재귀적으로,각 재귀적 단계를 멈추는 경우에만의 어느 깊이에서 실제 이동에 실시 게임입니다.,ulating 점수를 위해 현재 시뮬레이션 board layout

  • 시뮬레이션 가능한 모든 컴퓨터 이동
  • 을 위한 이러한 각각의
    • 시뮬레이션 가능한 모든 인간 움직
    • 을 위한 이러한 각각의
      • Recurse 으로 다시 알고리즘
      • 익 점수를 계산서 인간 움직
    • 추가 점수가 계산 이 컴퓨터에서,이동 가중치에 의해 확률의 이동이 일어나고 있
  • 때 우리 마친 이,우리는 그 다음에 추가로 모든 계산된 점수,그리고 이것은 최종 점수에 대한 이동하고 싶은 현재에서는 게임이다., 기 때문에 우리가 하는 이 네 번이나 대한 각각의 가능한에서 이동 현재의 게임이다–우리는 네 개의 점수,그리고 최고의 사람들은 이동 확인합니다.

    3.3. 점수 보드 위

    이 시점에서 필요한 것은,할 수은 점수를 계산한다. 이것은 게임이 사용하는 것과 같은 득점은 아니지만,이 위치에서 계속 플레이하는 것이 얼마나 좋은지 고려해야합니다.적절한 가중치와 함께 여러 요인을 추가함으로써 달성 할 수있는 많은 방법이 있습니다., 예를 들어,

    • 수의 빈 위치
    • 의 번호를 가능한 병합 즉,횟수는 동일 번호에서 두 개의 인접한 위치
    • 가장 큰 값에서 어떤 위치
    • 의 합계 모든 위치
    • 단조 로움의 보드–이 얼마나 잘 이사회는 구조적,같은 위치 값을 증가합니다.

    Pseudocode

    이제 알고리즘이 어떻게 작동하는지 알았으므로 어떻게 생겼습니까? 알고리즘을 더 자세히 설명하는 몇 가지 의사 코드를 살펴 보겠습니다.,

    우리에는 관심이 없는 실제 연주의 게임에서 알고리즘을 결정하기 위한 움직임,그렇게 시작할 수 있습니다:

    이전과 마찬가지로 우리를 얻은 점은 우리가 어디를 시뮬레이션의 각각의 가능한 움직임에서 시작으로 복귀한 후에는 하나 점수가 최고입니다. 이것은 새로 시뮬레이션 된 보드에 대한 점수를 생성 할 필요가 우리를 떠난다.

    우리는 잠시 후 처리를 중지 할 수 있도록 깊이 제한을 추가했습니다., 기 때문에 우리는 작업을 재귀적 알고리즘,우리는 방법이 필요 그것을 멈추고 그렇지 않으면 잠재적으로 실행원

    이것은 우리에게 우리의 재귀,시뮬레이션 모든 가능한 인간과 컴퓨터 이동 단계의 특정 번호를 결정하는 인간 움직임을 줄 가능한 최상의 결과입니다.남은 유일한 것은 주어진 보드 위치에 대해 최종 점수를 얻는 것입니다. 이를위한 완벽한 알고리즘은 없으며 다른 요소는 다른 결과를 줄 것입니다.,

    성능을 최적화

    지금까지 우리는 알고리즘을 시도하는 게임을 해결하지만,효율적으로 그것이 될 수 있습니다. 때문에 임의의 자연이 게임의 불가능에 완벽하게 최적화된 솔버가 항상 일정 수준의 반복이 단순히 때문에 자연의 과정입니다.적어도 우리가 할 필요가없는 일을 줄이기 위해 최선을 다할 수는 있습니다.,게임에 아무런 영향을 미치지 않는 움직임을 처리하지 않음으로써 위의 알고리즘에서 이미 약간의 최적화를하고 있습니다. 누적 이동 확률을 추적하고 너무 낮아지면 멈추는 것과 같이해야 할 일을 줄일 수있는 다른 방법이 있습니다. 이것은 완벽한 솔루션을 제거 할 위험이 있지만 확률이 낮 으면 어쨌든 거의 확실하게 발생하지 않을 것입니다.작업 할 깊이 제한을 동적으로 결정할 수도 있습니다., 우리 위에 사는 하드 코딩된 제한의 3 지만,우리가 할 수 계산하는 동적으로 이의 모양에 따라 보드의 시작에서 우리의 계산–예를 들어,설정을 수의 빈 사각형의 수 또는 뚜렷한 타일습니다. 이것은 우리가 확장을위한 범위가 적은 보드에서 더 적은 움직임을 통과한다는 것을 의미합니다.

    또한,가능하기 때문에 다시 동일 보드는 위치를 여러 번,우리가 기억할 수 있는 이와 캐쉬에 대한 점수를 그 위치를 대신 다시 계산하면 그들은 매 시간입니다., 잠재적으로 우리를 생성할 수 있는 가능한 모든 보드에 위치 앞의 시간이지만,거대한 숫자가있는 이러한–281,474,976,710,656 다른 가능한 널 포지션 타일을 사용하여 최대 2048 다–그래서 이것은 아마도 가능하지 않습니다.

    그러나 우리가 할 수있는 가장 중요한 최적화는 보드 점수를 생성하기위한 알고리즘을 조정하는 것입니다. 이 작동하는 방법을 결정하는 좋은 널은 계속하는 요인과 가중치는 우리가 사용하는을 위한 이 직접 연결하는 방법을 잘 알고리즘을 재생니다.,

    결론

    2048 해결하기 위해 시도하는 상당히 흥미로운 게임이다. 그것을 해결할 수있는 완벽한 방법은 없지만 게임을 통해 가능한 최상의 경로를 검색 할 휴리스틱을 작성할 수 있습니다.

    같은 일반 원칙이 작동을 위한 모든 두 플레이어 게임–예를 들어,체스–할 수 있는지 예측한 다른 플레이어가 무엇을 할 것입니다 어느 정도의 확실성.왜 이것의 구현을 작성하려고 시도하고 그것이 얼마나 잘 작동하는지 보지 않으시겠습니까?


    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다