무한한 처리 능력이 주어지면 체스를 완벽하게하는 알고리즘이 있습니까?


29

무한한 처리 능력이 주어지면 컴퓨터가 절대로 체스를 잃지 않도록 체스를 완벽하게 할 수있는 알고리즘이 있습니까?

그렇다면 의사 코드를 어디에서 찾을 수 있습니까?


8
완벽한 체스 란 무엇을 의미합니까?
Herb Wolfe

5
@HerbWolfe 나는 그가 가능한 모든 움직임이 상대방이 그것을 잃을 수 있도록 허용하는 경우에만 상대방이 잃을 것을 강요하고 사임하도록 허용하는 움직임을 결코하지 않는다는 것을 의미한다고 가정합니다.
David Schwartz

5
@DavidSchwartz- "완벽한 체스"는 물론 정의 할 수 없습니다. "무한한 처리 능력"도 마찬가지입니다. 이것은 "0 시간에 모든 명령 시퀀스를 실행"을 의미합니까? "무한한 수의 프로세서가 있습니까?" FWIW- "완벽한 체스"에 대한 나의 정의는 "게임을 잃지 않습니다".
밥 자비스-복직 모니카

24
그렇습니다. 무차별 대입이라고합니다. 무한한 처리 능력으로 알파-베타 프 루닝을 수행 할 필요는 없지만 검색 트리를 보유하기 위해서는 다소 많은 저장 공간이 필요할 수 있습니다.
Michael

4
"알고리즘"의 개념과 무한 처리 능력의 개념은 실제로 혼합되지 않습니다. 알고리즘과 계산 성 이론은 모두 유한 한 단계로 결과를 달성한다는 가정을 기반으로합니다. 무한한 단계를 허용하면 계산 가능한 것과 사라지지 않은 것의 구별이 사라집니다.
Michael Kay

답변:


62

알고리즘이 존재합니까? 예. Zermelo의 정리 에 따르면 체스와 같은 유한 결정적 완전 정보 ​​2 플레이어 게임에는 세 가지 가능성이 있습니다. 우리는 그것이 체스를 위해 무엇인지 알지 못합니다. (반면 체커 가 해결되었습니다 . 두 선수 모두 무승부를 강제 할 수 있습니다.)

개념적으로, 알고리즘은 매우 간단합니다. 완전한 게임 트리 를 구성하고, 리프 노드 (게임 종료 위치)를 분석하고, 승리를 거두거나 사임하거나 추첨을하는 것입니다.

문제는 세부 사항에 있습니다. 대략 10 43 개의 가능한 위치가 있으며 훨씬 더 많은 수의 움직임이 있습니다 (대부분의 위치는 여러 가지 방법으로 도달 할 수 있습니다). 이 알고리즘을 활용할 수있는 컴퓨터는 알려진 유니버스에 맞지 않거나 유니버스가 끝난 후 언젠가는 계산을 마치지 않기 때문에 무한한 강력한 컴퓨터가 필요합니다.


13
@Wildcard 아니오, 그것은 아무것도 가정하지 않습니다 : 그것은 단지 가능한 모든 체스 게임을 포함 하고 있으며 플레이어가 잃지 않는 모든 것을 선택합니다.
23시

11
@ gented, 나는 알고리즘의 "사임"단계를 언급했다. 그것은 반드시 필요한 단계는 아닙니다.
와일드 카드

38
3 회 반복 규칙은 검색 공간을 제한하므로 컴퓨터는 무한히 강력 할 필요는 없으며 천문학적으로 강력 할 필요는 없습니다 .
Hoa Long Tam

9
참고로, 가능한 게임 수 ( 10 ^ 120 )에 대한 하한을 관측 가능한 우주의 원자 수 ( 10 ^ 80 정도 )와 비교하십시오. 가장 간단한 알고리즘은 모든 게임을 찾아 데이터를 저장해야합니다. 원자 당 하나의 게임을 저장하면 관측 가능한 우주에서 추정하는 것보다 10 ^ 40 배 많은 원자가 필요합니다.
엔지니어 토스트

6
이 대답은 "무한한 강력한 컴퓨터"를 언급 할 때까지 매우 좋습니다. 그건 하지 당신이 무슨 뜻인지, 그 구절은 질문이나 토론에 속하지 않습니다.
Don Hatch

25

https://en.wikipedia.org/wiki/Endgame_tablebase를 참조 하십시오 .

무한한 컴퓨터 성능으로 시작 위치에 대한 테이블을 만들고 체스를 해결할 수 있습니다.

실제로, 현재의 슈퍼 컴퓨터를 사용하여 최대 7 명의 "남성"(전당과 조각, 왕을 세는 것)을 가진 위치 만이 해결되었으므로 체스를 풀지 못하고 있습니다. 문제의 복잡성은 조각의 수에 따라 기하 급수적으로 증가합니다.


9
참고로, 실제로 그러한 테이블을 생성 한 경우, 정보를 저장 한 내용에 관계없이 관측 가능한 우주보다 약 10 ^ 43 배 정도 무게가 나갑니다. 관찰 가능한 우주에는 ~ 10 ^ 123 개의 가능한 체스 위치와 ~ 10 ^ 80 개의 바리온 만 있다고 생각하면됩니다.
Shufflepants

6
@ baryons를 사용하여 저장한다고 말한 @ Shufflepants?
Michael

3
@Christoph 정보를 보존하고 무한한 처리 능력을 갖춘 탐지기와 슈퍼 컴퓨터를 가지고 있다고 가정하면 구골 플렉스와 같은 과정을 거치면서 테이블베이스를 호킹 방사선으로 읽을 수 있습니다.
Shufflepants

3
@Shufflepants 실제 우승 전략은 전체 테이블베이스보다 훨씬 적은 공간을 필요로합니다. 예를 들어, Nim은 설명하기 쉬운 승리 전략을 가지고 있으며 가능한 모든 상태의 거대한 테이블을 구축 할 필요가 없습니다.
Federico Poloni

1
명시된이 솔루션은 실행 가능하지 않습니다. 이러한 테이블의 질량은 블랙홀을 형성하고 데이터를 유출하는 것은 불가능합니다.
emory

19

실제로 처리 능력 이 무한 하다면 그러한 알고리즘은 실제로 쓰기 가 쉽지 않습니다 . 체스가이 있기 때문에 유한 가능한 상태의 수를, 당신은 이론에 불과으로 반복 그들을 통해 모든 당신까지 완벽한 플레이의 경로를 찾을 수 있습니다. 엄청나게 비효율적이지만 , 처리 능력 이 무한 하다면 중요하지 않습니다.


그건 사실이 아니야. 그는 당신에게 무한한 처리 능력이 있지만 무한 공간에 대해서는 아무 말도하지 않았습니다.
ubadub

@ubadub : 무한한 공간이 필요하지 않습니다. 게임의 길이는 50 이동 규칙으로 인해 제한되며, 가능한 모든 이동을 한 위치에서 정렬하도록 규칙을 구성 할 수 있습니다. 정렬 할 수 있으므로 정수로 저장할 수 있습니다. 이것은 전체 트리를 걷는 데 필요한 모든 메모리입니다. 시간이 무한하다면 원하는만큼 나무를 걸을 수 있으므로 가능한 모든 체스 게임을 저장할 필요는 없습니다.
vsz

게임의 길이는 제한되어 있지만 매우 큽니다. 다른 사람이 지적했듯이, 그러한 모든 게임을 저장하기 위해 테이블을 만들면 "정보를 저장 한 내용에 관계없이 관측 가능한 우주보다 대략 10 ^ 43 배의 무게가 나올 것입니다. 관찰 가능한 우주에서 체스 위치와 ~ 10 ^ 80
baryons

2
@ubadub : 사실이지만, "모든 게임을 저장하는 테이블"에 대해서는 이야기하지 않았습니다. 전체 트리의 모든 노드를 메모리에 보유 할 필요가없는 많은 트리 관련 알고리즘이 있습니다.
vsz

@ vsz 좋은 포인트
ubadub

13

질문을 직접 해결하기 위해 : 예. 그러한 알고리즘이 있습니다. 이를 minimax라고합니다. (엔드 게임 테이블베이스는이 알고리즘 (뒤로!)을 사용하여 생성되지만, 기존의 단순 미니 맥스 알고리즘 만 있으면됩니다.) 이 알고리즘은 두 플레이어의 제로섬 게임을 완벽하게 재생할 수 있습니다. 여기에서 의사 코드를 찾으십시오.

https://ko.wikipedia.org/wiki/Minimax

이 알고리즘의 변형은 최신 컴퓨터 체스 프로그램에서 사용됩니다.


4

완벽한 체스를하는 알고리즘이있을뿐만 아니라, (무한한 자원을 주었을 때) 결정적인 완벽한 지식 유한 듀레이션 2 인 게임을 완벽하게 하는 짧은 프로그램을 작성할 수 있습니다 .

게임 엔진은 게임의 규칙을 알 필요조차 없습니다. 필요한 것은 "게임 상태"의 불투명 한 표현이며 (a) 모든 게임 상태를 제공하고, 법적 다음 게임 상태 목록을 제공하고 (b) 게임 상태를 제공하고, 플레이어의 승리 여부를 결정하는 기능 1 , 플레이어 2의 승리, 무승부 또는 종료 상태가 아닙니다.

이러한 기능이 주어지면 간단한 재귀 알고리즘이 게임을 "해결"합니다.

이 사실은 chessprogrammer (minimax)와 Acccumulation (python에서 프로그램 버전을 제공하는 사람)이 이전 답변에서 암시했습니다.

나는 20 년 전에 그런 프로그램을 썼습니다. 나는 noughts-and-crosses (당신이 미국인이라면 틱택 토)를 연주함으로써 그것을 테스트했습니다. 물론 완벽한 게임이었습니다.

물론 이것은 심각한 게임을 위해 상상할 수있는 모든 컴퓨터에서 빠르게 넘어 질 것입니다. 재귀 적이기 때문에 스택에 전체 게임 트리를 효과적으로 구축하므로 다른 답변에서 언급 된 10 ^ 123 개의 체스 상태를 분석하기 전에 "스택 오버플로"(매우 의도 한 것)를 얻게됩니다. 그러나이 작은 프로그램이 원칙적으로 작동한다는 것을 아는 것은 재미 있습니다.

나에게 이것은 AI에 대해 흥미로운 것을 말해줍니다. 그러나 당신이 생각하는 많은 "지능"은 Deep Blue, Go Go 또는 실제로 인간 체스 또는 Go에 의해 전시된다고 생각합니다. 솔루션. 문제는 합리적인 시간에 최적의 솔루션은 아니지만 좋은 솔루션을 얻는 방법입니다.


알고리즘은 완벽한 지식의 2 인 게임에만 작동합니다. 함수 (a)의 구현이 게임 규칙을 위반하기 때문에 Stratego 와 같은 숨겨진 정보 게임 에는 적용되지 않습니다. 잠재적으로 무한한 지속 시간의 게임에서도 실패합니다. 예를 들어, 체스에서 50 이동 규칙을 삭제하고 보드 주위에서 서로를 쫓는 두 왕이 승리 할 수있는 상태가 아니라고 말할 수는 없습니다. 말할 수있는 것은 그것이 최종 상태가 아니라는 것입니다.
Mark

유효한 포인트. 답변을 편집하겠습니다.
gareth

3

단순화를 위해 무승부 또는 무한한 이동 순서를 무시합니다. 알고리즘이 이해되면, 그러한 경우로 확장하는 것은 특히 어렵지 않습니다.

먼저 일부 정의는 다음과 같습니다.

  1. 그 움직임을하는 플레이어의 게임에서이기는 움직임은 승리하는 움직임입니다.

  2. 그 움직임을하는 플레이어의 게임에서지는 동작은지는 동작입니다.

  3. 다른 플레이어에게 최소한 한 번의이기는 움직임을 남기는 움직임도지는 것입니다. (상대방은 그 움직임을 취하고 손실을 강요 할 수 있기 때문에)

  4. 다른 플레이어에게만지는 동작 만 남는 동작은 승리하는 동작입니다. 상대방이 어떤 행동을하든 승리하게됩니다.

  5. 완벽한 전략은 남은 움직임이 있으면 항상이기는 ​​동작을하고 남은 동작 만 잃는 경우에는 사임합니다.

이제 완벽한 전략을 작성하는 것은 쉽지 않습니다. 가능한 모든 이동 시퀀스를 분해하고 승리 / 손실 이동을 식별하십시오. 교착 상태를 무시하면 결국 모든 움직임을 승리 움직임 또는 잃어버린 움직임으로 식별합니다.

이제 전략은 사소합니다. 가능한 모든 움직임을보십시오. 승리 한 움직임이 남아 있으면 하나를 잡고 승리하십시오. 지는 동작 만 남아 있다면, 상대방이 당신을 잃을 수 있기 때문에 사임하십시오.

교착 상태 가능성을 포함하도록 전략을 조정하는 것은 어렵지 않습니다.

업데이트 : 모든 동작이 어떻게 더 많은 승리 또는 잃어버린 움직임으로 식별되는지 확실하지 않은 경우 다음을 고려하십시오.

  1. 승리로 이어지는 모든 움직임은 승리하는 움직임입니다.
  2. 손실을 초래하는 모든 움직임은지는 움직임입니다.
  3. 상대방이이기거나지는 움직임 만 갖는 모든 움직임은이기거나지는 움직임입니다.
  4. n가장 긴 체스 게임에서 움직임의 수를 호출 하십시오. (우리는 제한되지 않은 시퀀스를 무시하고 있지만 포함하는 것은 어렵지 않습니다.)
  5. n우리가 고려해야 할 이전의 움직임 은 없습니다 .
  6. n-1이전의 움직임을 가진 모든 움직임은 움직임이 n가장 긴 게임을 끝내기 때문에 승리하는 움직임 또는지는 움직임 입니다.
  7. 따라서 심도있는 모든 움직임은 n-2승리 한 움직임 또는지는 동작 만 따르므로 그 자체가 승리하는 움직임 또는지는 동작입니다.
  8. 그리고 다시 첫 번째 움직임으로 돌아갑니다.

1
이동 승패에 대한 귀하의 정의는 충분하지 않습니다. 예를 들어, 첫 번째 움직임은 게임에서 이기지 못하고 (# 1) 상대를 잃는 움직임 만 남기지 않기 때문에 (# 4) "이기는 움직임"이 아닙니다. 또한 게임을 잃거나 (# 2) 상대를 승리로 이길 수 없습니다 (# 3). "손실 된 움직임"이 아닙니다. 귀하의 전략에 따르면 모든 이동은 "승리 이동"또는 "손실 이동"으로 정의되어야하며, 이는 사용자가 정의한대로는 아닙니다.
원자력 왕

2
@NuclearWang 모든 움직임을 승리 움직임 또는 잃어버린 움직임으로 정의합니다. 세 번째 대안은 무엇이라고 생각하십니까? 가능한 모든 체스 게임의 트리를 시각화하십시오 (현재 우리는 관계 또는 무한 시퀀스를 제외하고 있음을 기억하십시오). 모든 체인은 승리 또는 손실로 끝납니다. 이 트리를 통해 모든 움직임을 승리 움직임 또는 잃어버린 움직임으로 식별합니다.
David Schwartz

13
@NuclearWang 첫 번째 움직임 한 명의 플레이어에게 승리하는 움직임이거나 체스는 (틱택 토와 같은) 완벽한 게임으로 그려진 게임입니다. 우리는이 알고리즘을 실행할 컴퓨팅 성능을 가진 사람이 아무도 없기 때문에 아무도 더 직접적인 증거를 찾지 못했습니다.
hobbs December

8
체스에는 무작위성 및 숨겨진 정보가 없으므로 "아마도"의 여지가 없습니다. 모든 직책은이기거나 잃어 버리거나 추첨됩니다 (우리가 그렇게 식별 하지 못하더라도 ). 그리고이 설명은 단순성을 위해 "그리기"옵션을 생략하지만, 대부분 1) 규칙에 따라 그려지면 위치가 그려지고, 2)이기는 움직임이 없으면 위치가 그려 지지만 상대방 이이기는 움직임이없는 최소한 한 번의 움직임.
hobbs December

2
@DavidSchwartz : 누군가가지는 위치에 있지 않으면 완벽하지 않은 모든 움직임은 나쁩니다. 패배 포지션에서는 일반적으로 하나의 "완벽한"움직임이 없습니다 (강제 이동 상황 제외). 어떤 법적인 움직임이라도 상상할 수있는 (아마도 잘 계획된) 상황에서 유일한 승리 또는 추첨 움직임 일 가능성이 있기 때문입니다. 그러나 사임은 명백한 최악의 "이동"으로 보인다. 게임이 d4에서 White의 승리로 해결되었다고 가정합니다. 당신은 응답 체스 프로그램을 재생하려는 것 1. d4과를 ...resigns?
supercat

2

: 당신은 세 가지 기능을 가지고 가정 win_state, get_player그리고 next_states. 에 대한 입력 win_state은 게임 상태이며, 흰색이 체크 메이트 인 경우 -1, 드로우 인 경우 0, 검은 색이 체크 메이트 인 경우 1, None그렇지 않으면 출력입니다. 에 대한 입력 get_player은 게임 상태이며 출력이 검은 색이면 -1이고 흰색이면 1입니다. 에 대한 입력 next_states은 합법적 인 이동으로 인해 발생할 수있는 다음 게임 상태 목록입니다. 그런 다음 게임 상태와 플레이어가 주어지면 다음 함수는 해당 플레이어가 이길 수있는 게임 상태를 알려줍니다.

def best_state(game_state,player)
  def best_result(game_state):
     if win_state(game_state):
        return(win_state)
     else:
         player = get_player(game_state)
         return max([best_result(move)*player for move in next_states(game_state)])*player
  cur_best_move = next_states(games_state)[0]
  cur_best_outcome = -1
  for state in next_states(game_state):
     if best_result(state)*player > cur_best_outcome:
           cur_best_outcome = best_result(state)*player
           cur_best_move = state
return(best_move)

0

룩업 테이블 사용

예. 그것은 간단합니다. 무한한 처리 능력이 필요하지 않습니다. 필요한 모든 보드 위치에 대해 해당 위치에서 가장 잘 플레이 할 수있는 룩업 테이블이 필요합니다. 의사 코드는 다음과 같습니다.

def play-move(my-color, board-position):
    return table-of-best-moves[my-color, board-position]

캐치

유일한 발견은이 룩업 테이블이 은하계보다 훨씬 크거나, 아마도 은하계보다 더 커야하고, 우주가 존재하지 않는 한, 현재의 우주 시대보다 더 길어질 것입니다. 체스에서 발견되지 않은 규칙 성으로 인해 지금보다 훨씬 간단합니다. 그러나이 룩업 테이블이있는 경우 매번 완벽한 이동을 선택하는 서브 루틴은 단 하나의 CPU 명령으로 구현 될 수 있습니다.

또한 체스에 대한 현재의 지식을 감안할 때 완벽한 플레이가 당신을 잃지 않도록 보장 할 수있는 방법이 없습니다. 예를 들어, 완벽한 플레이가 화이트의 승리를 보장한다면, 블랙이 완벽하게 플레이하더라도 블랙은 잃게됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.