체스 엔진은 어떻게 "생각"합니까?


28

내가 알고 싶은 것은 움직임을 찾기 위해 엔진을 프로그래밍하는 방법입니다. 나는 그들이 먼저 캡처 및 검사와 같은 가장 강제적 인 선을 계산한다고 확신합니다. 그러나 미묘하고 깊은 위치 이동은 어떻습니까? 그들은 또한 그것들을 매우 빨리 찾는 것처럼 보입니다 (일반적으로 말하면 물론 그런 움직임을 놓치고 있습니다). 마찬가지로 조용한 움직임 / 포지션 아이디어를 찾도록 어떻게 프로그래밍되어 있습니까? 그들은 너무 오래 걸리기 때문에 모든 움직임을 무차별 적으로 강요 할 수는 없으므로, 가장 빨리 움직일 수있는 영리한 방법이 있어야합니다. 플레이어가 현실 세계에서 보드를 통해 생각하는 데 도움이 될 것이라고 생각하기 때문에 이것을 알고 싶습니다.


체스 엔진은 초당 수백만 개의 위치를 ​​확인하므로 실제로 몇 번의 움직임이있을 때까지 모든 것을 볼 수 있습니다.
RemcoGerlich

2
이것은 멋진 질문입니다. 나는 정말 답을 즐겼습니다.
Travis J

기본적으로 검색 알고리즘 (예 : minimax)을 사용하여 미리 검색하고 미리 프로그래밍 된 휴리스틱을 사용하여 위치를 평가합니다. 일부 최신 엔진 (예 : AlphaZero)은 자체 재생을 통해 자체 평가 방법을 개발합니다.
관성 무지

답변:


22

일반적으로 체스 엔진은 의사 결정 트리를 사용합니다. 트리의 루트는 현재 위치이며 합법적 인 이동으로 만들 수있는 각 위치에 대한 자식 노드가 있습니다. 이러한 각 노드에는 차례로 법적으로 이동하여 도달 할 수있는 위치에 대한 하위 노드가 있습니다. 엔진은 기능과 "생각"할 수있는 시간으로 정의 된 깊이까지 트리를 밀어냅니다. 여러 방법으로 도달 할 수있는 위치는 단순히 상호 참조되므로 두 번 이상 고려하지 않아도됩니다. 일단 트리가 생성되면 컴퓨터는 일련의 가중치 규칙을 사용하여 트리의 최종 위치를 분석하고 바람직하지 않거나 상대가 도달 할 수없는 위치를 제거하기 시작합니다. 나무는 한 번만 움직여 컴퓨터가 움직일 때까지 이런 식으로 자릅니다.

http://www.chess.com/blog/zaifrun 에는 체스 엔진이 어떻게 작동하는지 더 자세히 살펴보고 싶다면 체스 엔진을 만드는 시리즈 또는 기사가 있습니다.


답은 30입니다. 엔진이 30 개의 노드를 검색했음을 의미합니까? 또한 Ply는 무엇을 의미합니까?
xaisoft

좀 더 연구하지 않고 Ply가 무엇을 의미하는지 잘 모르겠습니다. 나는 두문자어를 잘 사용하지 못했습니다. 오히려 깊이는 몇 개의 노드 깊이, 각 노드가 절반 이동하거나 깊이 이동하는 것은 프로그래머에 따라 다를 수 있습니다. 그러나 컨벤션은 많은 수의 움직임이 필요하다고 생각합니다.
Edward Goodson

5
플라이는 움직임의 절반입니다. 체스의 움직임은 흰색 + 검은 색으로하면 하나의 완전한 '세트'입니다. 플라이는 그중 절반이므로 하나의 색상입니다.
ErebusBat

21

꽤 복잡한 질문을하고 있지만 기본으로 돌아가는 것이 좋습니다. 고려해야 할 몇 가지 개념이 있습니다.

평가

(실제) 플레이어에게 포지션이 표시되고 "누가이 게임에서 이기고 있습니까?"라고 물으면 어떻게 결정해야합니까? 아마도 재료 차이, 조각이 개발되었거나 "잘"배치 된 정도, 이중 / 격리 / 연결 / 통과 된 폰 (제어 된) 열린 파일, 얼마나 멀리 있는지와 같은 몇 가지 기본 사항을 확인할 것입니다. 폰이있는 보드.

이제 필요한 경우 위의 내용을 기반으로 위치 점수를 계산하는 체계적인 방법을 제시 할 수 있습니다. 예를 들어, 폰의 가치는 1 포인트이고, 전달 된 폰의 가치는 0.3 포인트 더 높다고 결정할 수 있습니다. 격리 또는 이중 폰의 가치는 약간 떨어질 수 있습니다. 모든 것을 합하면 즉각적인 위치에 대한 추정값을 얻습니다.

이것을 평가 라고 하며 기본적으로 모든 체스 프로그램은 위치를 평가할 수있는 방법이 있습니다 (일반적으로 매우 약한 참신 AI 체스 엔진은 무시).

그러나 미묘하고 깊은 위치 이동은 어떻습니까?

글쎄, 우리는 위치 평가의 표면을 거의 긁지 않았다. 평가 기능의 실제 구현은 단순화되어 초당 더 많은 위치가 평가 될 수 있도록하거나 (거칠게도) 더 복잡하여 평가되는 위치는 줄어들지 만 신뢰도는 높아질 수 있습니다. 평가 기능이 수백 또는 수천 개의 개별 정보를 고려하는 것은 드문 일이 아닙니다.

수색

위의 내용을 구체적으로 배제했습니다. 대부분의 실제 플레이어는 즉시 생각할 것입니다. 어느쪽에서든 즉시 게임에서 이길 수있는 방법이 있습니까? 메이트 또는 "매달린"조각이 보입니까? 이것을 사소한 것은 쉽지만 사소한 것입니다.

플레이어가 조합에 대해 완전히 확신 한다는 것은 무엇을 의미 합니까? 결국 모든 옵션을 계산 한 것으로 요약됩니다. 실제 플레이어는 일반적으로이 작업을 수행하지 않습니다 (사소한 또는 매우 강요된 동료 제외) 대부분의 경우 우리는 소수의 옵션 만 고려하고 "비 구조적"이거나 명백히 손실을 초래하는 것으로 보이는 다른 사람들을 배제합니다 . 우리는 종종이 계산 중에 실수를 저지 릅니다. 예를 들어, 이동 명령의 변경으로 위협이 사라지는 것을 알 수 있습니다. 요점은 조합을 완전히 확신하려면 실제로 각 결론을 가정하여 결론을 내리는 모든 방법을 계산해야한다는 것입니다 플레이어는 가능한 최고의 이동 만 할 수 있습니다 ( "최소 / 최대"라고 함).

이제 체스가 컴퓨터가 계산할 수있는 것보다 훨씬 더 큰 검색 공간 (이것이 "앞으로 가능한 모든 이동"이라고 함)을 갖는다는 점을 감안할 때 타협이 필요합니다. 인간과 마찬가지로 컴퓨터는 특정 기준에 따라 전체 사고 방식을 무시하기로 결정할 수 있습니다. 이를 휴리스틱이라고 합니다. 무차별 대입으로 조합을 확신 할 수는 있지만 복잡한 평가 기능은 종종 위협의 존재를 감지 할 수 있습니다 (예 : 포크, 꼬치 기회 등을 계산하여 해당 방향으로 검색하도록 유도 할 수 있음) ).

결국 컴퓨터는 매우 빠르지 만 휴리스틱이 컴퓨터를 매우 깊이 계산할 수있게합니다. 즉, 최신 엔진이 완전히 계산하는 방식에 놀라게 될 수 있습니다. 일반적으로 빠른 게임에서도 3 가지를 넘습니다.

결론 / 모든 것을 결합

요약하자면, 평가 기능에는 많은 지능이 내장되어 있습니다 (즉, 일반 인간 플레이어보다 더 많은 것을 고려함). 휴리스틱은 컴퓨터가 아마도 잘 끝나지 않을 것이라고 생각하는 생각을 줄 이도록합니다. 컴퓨터는 매우 빠릅니다. 그것들을 합치면이기는 것이 매우 어렵습니다.


6

답변에 동의합니다.

나는 로마의 실험실 비디오 중 하나에서 GM Roman Dzindzichashvili 가 그것에 대해 이야기 한 것을 기억합니다. 누가 어떤 비디오인지 기억이 나지 않습니다 (누군가가 세부 사항을 알고 있다면 내 대답을 편집하십시오).

Roman은 프리츠 엔진 개발자 가 그의 친구 라고 말했다 . 그래서 로마는 프리츠가 얼마나 좋은지 알아보기 위해 테스트했으며, 개발자는 프릿츠가 복잡한 결정을 내리기 위해서는 (예를 들어 위치 적 우위를 위해 재료를 희생하면서) 프로그램에게 말하는 것과 같이 조각의 가치를 바꿔야한다고 로마에게 말했다. 나쁜 감독은 1 점, 열린 대각선의 감독은 7 점, 기사는 가까운 지점에서 5 점을 얻습니다 ...

나는 각 조각의 정확한 숫자를 모르지만 그것이 작동하는 방식이며, 이제 엔진은 나쁜 감독을 희생시키는 데 아무런 문제가 없으며 각 위치에서 각 조각의 가치를 말할 수 있다면 무엇이든 할 것입니다.

편집하다

체스 프로그래밍 위키 도 참조하십시오 .


4

컴퓨터가 충분히 깊어 보이고 (25 회 이상) 가능한 모든 움직임을 확인하는 것은 불가능합니다.

가능한 것은 알파-베타 가지 치기 (Alpha-beta pruning) 라는 기술 인데, 이는 인간과 비슷하지만 더 나은 컴퓨터가 유망한 연속만을 따른다는 것을 의미합니다.

그들은 위치를 일정하게 평가하고 (일부 코드화 된 규칙, 재료, 왕의 안전, 활동, 폰 구조 등을 평가 함) 최상의 위치로 이끄는 변형을 조사합니다.

그들이 수백만의 위치를 ​​1 초 안에 평가할 수있을 정도로 효율적으로 관리하는 방법은 여전히 ​​마법에 가깝습니다.

요약하자면, 당신은 맞습니다, 그들은 전략적 체스를한다면 모든 움직임을 볼 수는 없지만 괜찮은 움직임을 매우 빠르게 볼 수 있습니다. 문제는 여전히 그들이 볼 수있는 매우 장기적인 계획과 지평에 있지만, 현재 진행 중입니다. 더 적극적으로 연주). 컴퓨터조차도 자신 만의 스타일을 가지고 있습니다!


3

알파-베타 가지 치기는 단순히 나쁘게 나오는 줄을 찾으면 해당 후보 이동을 멈추고 다른 시도를 시도한다는 것을 의미합니다. 그것은 뒤로 가지 치기의 한 유형으로 결과적으로 좋은 움직임을 놓치지 않을 것입니다. 이와 반대로 정방향 전정은 추측에 기반을두고 있습니다. 실용 전정, 늦게 움직임 감소 및 면도는 전진 전정의 한 유형이며, 모두 어떤 유형의 이동을 고려해야하는지에 대한 프로그래머의 느낌에 의존합니다. 앞으로 가지 치기를 많이하는 프로그램은 짝을 이끄는 놀라운 희생을 놓칠 수 있지만, 반면에 실제로는 많은 나쁜 움직임을 제거하므로 선호하는 움직임을 자세히 살펴볼 수 있습니다.

대부분의 엔진은 모든 가능성을 검사하면서 처음 몇 번의 움직임을 심도있게 검색합니다. 이동이 실패하지 않으면 (즉, 이미 고려한 이동보다 분명히 나빠 보인다) 검색을 조금 더 확장하십시오. 일반적으로 확인, 캡처, 메이트 위협 등이없는 대기 위치에 도달 할 때까지 각 라인을 계속 탐색 한 다음 평가를 수행합니다. 조용한 이동은 검색 트리에있을 때는 고려되지 않을 수 있지만 게임에서 실제 위치에 도달하면 엔진은 모든 이동을 조용하고 예리하게 봅니다. 실제로 엔진 출력에서 ​​이것을 볼 수 있습니다. 엔진이 갑자기 몇 번의 이동을 고려하지 않은 이동을 선호하는 경우.

엔진은 너무 빨리 계산하기 때문에 먼저 어떤 움직임을보아야하는지 고려하는 것이 중요하지 않지만 인간에게는 이것이 중요한 질문입니다. Jonathan Tisdall은 자신의 저서 인 Ches Your Chess Now에서 이것에 대한 답을 얻었습니다. 공격을 받으면 가장 폭력적인 움직임을 먼저 볼 것을 제안합니다. 방어 할 때 가장 어려운 라인을 먼저 봅니다. 또한 어떤 움직임을 먼저 볼지 결정할 때 위치 규칙 (예 : 중앙 집중화, 조정)을 인용합니다.

관련된 다른 책으로는 Emmanuel Neimann의 Invisible Chess Moves와 Charles Hertan의 Forces Chess Moves가 있으며,이 두 책 모두 날카로운 입장에서 가능성이 없거나 놀라운 움직임을 고려하는 것이 중요하다고 주장합니다. Hertan은 그러한 전술을위한 '컴퓨터 눈'개발에 대해서도 이야기합니다.

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