스택큐힙리스트

2048 게임에 대한 최적의 알고리즘은 무엇인가요? 본문

카테고리 없음

2048 게임에 대한 최적의 알고리즘은 무엇인가요?

스택큐힙리스트 2023. 12. 22. 10:47
반응형

최근에 2048 게임을 우연히 발견했습니다. 비슷한 타일을 네 가지 방향 중 어느 쪽으로 이동시켜 더 큰 타일로 병합합니다. 각 움직임 후에는 값이 2 또는 4인 임의의 빈 위치에 새로운 타일이 나타납니다. 게임은 모든 박스가 채워지고 타일을 병합할 수 없는 움직임이 없거나 값이 2048인 타일을 만들면 종료됩니다.


첫째, 목표에 도달하기 위해 명확한 전략을 따라야 합니다. 그래서 프로그램을 작성해보기로 생각했습니다.


현재 알고리즘:


game_over가 아닐 때까지:
가능한 각 움직임에 대해:
2-타일과 4-타일의 병합 횟수를 세기
병합 횟수가 큰 움직임 선택하기

저는 2와 4라는 값을 가진 타일을 병합하려고 시도하는 알고리즘을 사용하는 중입니다. 즉, 가능한 한 최소한의 2와 4 타일을 보유하려고 노력합니다. 이렇게 하면 다른 모든 타일이 자동으로 병합되므로 이 전략은 좋아 보입니다.


그러나 실제로 이 알고리즘을 사용하면 게임이 종료되기 전에 약 4000점 정도만 얻을 수 있습니다. 알고 있는 한 최대 점수는 현재 점수보다 훨씬 더 큰 20,000점 정도입니다. 위의 알고리즘보다 더 나은 알고리즘이 있을까요?

답변 1

Petr Morávek(@xificurk)는 내 AI를 가져가서 두 개의 새로운 휴리스틱을 추가했습니다. 첫 번째 휴리스틱은 순위가 증가함에 따라 비단조적인 행과 열에 대한 벌점을 부과했습니다. 이로 인해 작은 숫자의 비단조적인 행이 점수에 강한 영향을 미치지 않지만, 큰 숫자의 비단조적인 행은 점수에 상당한 피해를 입게 됩니다. 두 번째 휴리스틱은 비단조적인 보드에서만 가능한 합병 가능성(인접한 동일한 값)의 개수를 세는 것입니다. 이 두 가지 휴리스틱은 합병하기 쉬운 단조적인 보드를 유도하고, 가능한 경우에는 합병을 정렬하여 더 큰 효과를 얻을 수 있는 보드 위치를 유도합니다.


또한, Petr은 메타 최적화 전략을 사용하여 휴리스틱 가중치를 최적화했습니다. 이 전략은 가중치 자체를 조정하여 가능한 가장 높은 평균 점수를 얻는 것입니다. 이전 알고리즘은 CMA-ES라고 불리는 알고리즘을 사용하였습니다.

이러한 변경 사항의 효과는 매우 중요합니다. 알고리즘은 16384 타일을 13%의 확률로 달성하는 것에서 90% 이상의 확률로 달성하게 되었으며, 알고리즘은 1/3 이상의 확률로 32768을 달성하기 시작했습니다. (과거의 휴리스틱은 한 번도 32768 타일을 만들어내지 못했습니다).


휴리스틱에 대한 개선 여지가 아직 있다고 생각합니다. 이 알고리즘은 분명히 최적이 아니지만, 아주 가까워지고 있다고 느낍니다.


AI가 자신의 게임에서 32768 타일을 1/3 이상의 확률로 달성한다는 것은 큰 이정표입니다. 공식 게임에서 (즉, 세이브상태 또는 되돌리기와 같은 도구를 사용하지 않고) 어떤 인간 플레이어가 32768을 달성한 경우에는 놀랄 것입니다. 65536 타일은 가능성이 높다고 생각합니다!


자체로 AI를 시도해볼 수 있습니다. 코드는 다음 위치에서 확인할 수 있습니다: https://github.com/nneonneo/2048-ai.

답변 2

2048 게임은 단순한 규칙과 연산을 기반으로 한 즐거운 퍼즐 게임입니다. 퍼즐을 해결하기 위한 최적의 알고리즘은 게임에서 높은 점수를 얻을 수 있는 전략적인 움직임을 선택하는 것입니다. 이 논문에서는 2048 게임을 위한 최적 알고리즘에 대해 자세히 설명하고자 합니다. 저희의 연구에서는 검색 엔진 최적화(SEO)를 고려하여 키워드 관리, 링크 빌딩, 웹사이트 내 검색 엔진 노출에 중점을 두었습니다.
먼저, 2048 게임의 최적 전략은 가장 높은 타일을 생성하고 유지시키는 것입니다. 2048 게임은 4x4 크기의 격자에서 시작하며, 타일은 2 또는 4의 값을 가집니다. 가장 효율적인 방법은 최대한 많은 빈 공간을 확보하고 이를 활용하여 큰 타일을 생성하는 것입니다. 그러므로, 움직임을 선택할 때에는 가장 많은 빈 칸이 있는 방향을 선택하는 것이 중요합니다.
각 움직임은 새로운 타일을 추가하고, 기존 타일을 이동 또는 결합하는 과정을 포함합니다. 타일을 이동할 때에는 타일들을 벽에 가까운 방향으로 밀어내는 것이 최선의 전략입니다. 이는 큰 타일과 작은 타일이 서로 인접해 있을 때 결합할 수 있는 기회를 늘려주기 때문입니다.
또한, 숫자 크기에 따라 움직임을 결정하는 것도 중요한 전략입니다. 보통 가장 큰 타일을 기준으로 움직이기 때문에, 큰 타일을 생성하고 유지하는 것이 목표입니다. 큰 타일은 더 높은 점수를 가져다주기 때문에, 숫자의 크기에 따라 우선순위를 부여하는 것이 좋습니다.
최적 알고리즘에 따르면, 가장 적은 움직임으로 높은 점수를 얻을 수 있어야 합니다. 이를 위해서는 가능한 움직임을 미리 예측하고 그에 따른 결과를 평가하는 방법을 사용해야 합니다. 예를 들어, 시뮬레이션을 통해 각 움직임에 대한 10회의 시행을 수행하고 그 결과를 평균하여 가장 높은 점수를 예측할 수 있습니다.
마지막으로, SEO를 고려한 웹사이트 홍보 전략을 수립해야 합니다. 검색 엔진 노출을 높이기 위해서는 웹사이트 콘텐츠에 관련된 키워드를 사용하고, 관련 사이트에 백링크를 생성하여 검색 결과에서 상위에 노출되도록 해야 합니다. 또한, 웹사이트 내부 구조를 최적화하여 검색 엔진이 웹사이트를 쉽게 찾을 수 있도록 해야 합니다.
휴대폰 앱 마켓에서도 검색 노출을 높이기 위해 앱 설명에 키워드를 포함시키고 앱 평점을 높이는 등의 전략을 활용할 수 있습니다. 이는 2048 게임을 더 많은 사용자에게 알리고 높은 다운로드 수를 유도하기 위한 중요한 방법입니다.
본 논문에서는 2048 게임의 최적 알고리즘과 SEO의 중요성에 대해 다루었습니다. 효과적인 게임 전략과 웹사이트 홍보를 통해 2048 게임을 성공적으로 즐길 수 있으며, 검색 엔진 최적화를 통해 더 많은 사용자에게 2048 게임을 홍보할 수 있습니다. 이를 통해 사용자들이 보다 흥미로운 퍼즐 경험을 즐기며 게임의 재미를 극대화할 수 있을 것입니다.

반응형
Comments