체스 위치를 평가하는 정확한 방법은 무엇입니까?


13

나는 Minimax 와 같은 컴퓨터 체스 AI 알고리즘 (그리고 어느 시점에서 하나에서 작업 할 수있는 기회를 얻었습니다)에 대해 관심이 있었고 ,이 알고리즘의 핵심 구성 요소는 소위 평가 기능 으로 좋은 보드 구성과 나쁜 것입니다.

다른 말로, 체스 보드의 구성이 주어지면 그것이 어떻게 유리한지, 어느 정도의 확신을 가지고 있는지 어떻게 판단합니까?

예를 들면 다음과 같습니다.

  • 센터 를 소유 하고 있다면 다소 유리합니다.
  • 상대방보다 더 많은 조각을 가지고 있다면 오히려 유리합니다.
  • 당신이 당신의 여왕을 잃어버린 경우, 이것은 바람직하지 않습니다.
  • 전당포에 가까운 폰이 있다면 이것은 유리합니다.
  • ...

체스 게임에 대한 전문 지식을 바탕으로 좋은 평가 기능 을 만드는 방법에 대한 조언을 요청하고 싶습니다 . 그리고 가능하다면, 어느 정도의 호의 (1은 매우 바람직하지 않고, 100은 매우 바람직하다).

결국 아이디어는 가능성의 트리에서 특정 깊이까지 살펴보고 다음 이동에 가장 유리한 구성이 무엇인지에 따라 (향후 몇 가지 이동을 고려하여) 평가하는 알고리즘을 만들 수 있습니다 플레이어에게 유리하고 상대방에게는 유리하지 않습니다. 그러나 좋은 평가 기능이 없다면 알고리즘은 아무것도 아닙니다.


이 질문은 StackOverflow에서 잘 될 것이라고 생각합니다. 이미 체스 AI에 대한 존재에 대한 많은 질문이 있습니다
xaisoft

3
나는 전에 그것을 SO에 게시하려고 생각했지만 건설적인 것이 아니거나 실제 질문이 아닌 것으로 닫힐 것이라고 확신합니다. 어쩌면 코드 자체에 더 중점을 두어야하지만 평가 기능을 위해서는 코드 또는 알고리즘에 대한 것이 아니라 체스에 대한 지식이 필요하다고 생각합니다.
Charles Menguy 23시 36 분

얼마나 정확합니다. 완전히 정확한 유일한 방법은 당신이이기거나 잃거나 묶었습니까?
edwina oliver

답변:



5

@Eve Freeman의 대답에 덧붙여 세계 최고의 컴퓨터 엔진 인 Stockfish가 주어진 위치를 평가하는 방법을 찾는 것이 좋습니다. 는 AS 소스 코드가 열려, 당신은 무료로 할 수 있습니다. 나는 당신이 찾고있는 평가 기능 파일이 생각 이 하나 .


5

나는이 답변에 조금 늦었다는 느낌이 들지만 엔진을 만드는 과정에 있습니다. 소스 코드는 파이썬으로되어 있으며 (알지 못하더라도 읽기가 매우 쉽다) 읽고 싶다면 여기에서 구할 수 있습니다 . 현재 활성화 된 휴리스틱 목록 (게시 시점) :

  • 멀리 개발 된 (반대쪽에 더 가까운) 조각이 더 좋습니다
  • 승진에 ​​가까운 폰은 좋다
  • 킹은 게임의 단계 (개방, 미들 게임, 엔드 게임)에 따라 개별적으로 득점됩니다.
  • 플레이어에게 주교가 둘 다 있으면 보너스를받습니다
  • 플레이어가 성을 쌓았다면 보너스를받습니다
  • 고립 된 폰 (그 주위에 아무것도없는 발)은 좋지 않습니다.
  • 두 배의 폰 (같은 파일에 간격이없는 두 개의 폰)은 좋지 않습니다
  • 8 개의 폰을 모두 갖는 것이 좋은 것은 아니며 불이익을받습니다 (보드를 어지럽히고 방해합니다)
  • 또한 사용되는 이 훌륭한 평가 기능 을 살펴보십시오
  • 주교와 같은 색 사각형에 폰이 더 많은 주교는 불이익을받습니다 (붐비는 상황에서는 좋지 않습니다)
  • 아직 구현되지는 않았지만 계획 : 기사가 더 혼잡 한 상황에서 보너스를받습니다.

그 중 하나에서 게임의 '단계'(예 : 오프닝, 미들 게임, 엔드 게임)에 대해 언급했으며 엔진에 포함시키려는 경우 아마도 내가했던 것과 같은 문제가 발생할 수 있습니다. 그것들을 분리하는 명확한 선. 게임의 단계를 결정하는 내 기능은 몇 가지를 사용합니다.

  • 보드에있는 재료의 양 (모든 조각이 죽 자마자 게임이 오프닝에없는 것으로 표시됨)
  • 움직임의 수 (무엇이든 상관없이 6 번의 완전한 움직임이 시작입니다)
  • 여왕의 움직임 (두 여왕 모두 이동 한 경우 게임을 미들 게임으로 표시)

이 답변은 길고 늦었고 주제에 맞지 않았지만 어쨌든 도움이 되었기를 바랍니다.


4

놀랍게도, 평가 기능이 무작위 일 때 Minimax 엔진이 합리적으로 잘 작동한다는 것이 밝혀졌습니다 . 이것은 Beale 효과로 알려져 있으며, 더 많은 옵션을 제공하는 포지션과 상대에게 더 적은 옵션을 제공하는 포지션이 일반적으로 선호된다는 원칙의 결과입니다. 무작위 평가를 일관되고 효율적으로 생성하는 한 가지 합리적인 방법은 (게임 시작시 무작위로 선택된 계수를 사용하여) 위치에 대한 Zobrist 해시를 생성하고 해시에서 직접 무작위 평가를 도출하는 것입니다.

규모의 반대 끝에 AlphaZero와 Leela는 큰 신경망을 사용하여 검색된 각 위치에 대해 매우 정교한 평가를 수행 합니다 . 이 네트워크가 어떤 기능을 효과적으로 구현하는지 인간의 용어로 기술하는 것은 비현실적이지만, Stockfish의 평가 기능보다 더 효과적입니다. AlphaZero 연구 논문에 따르면이 접근 방식은 Minimax가 아닌 Monte-Carlo Tree Search에 가장 적합합니다.

반면에 인간 플레이어 나 주석가가 위치의 뉘앙스를 이해하도록 돕기 위해 분석 엔진 을 개발하려는 경우 기존 재료 값과 위치 이론을 사용하여 기존의 평가 기능을 구현하는 것이 좋습니다 . Ed Schröder의 Inside Rebel 이 그 좋은 예 를 보여 주며 여러 Mephisto의 체스 컴퓨터에 사용되는 잘 알려진 엔진의 주요 디자인 기능을 설명합니다. 평가 기능의 각 요소의 상대적 중요성을 결정하기 위해 어느 정도의 기계 학습을 사용하고 GUI에서 표시하기 위해 이러한 요소를 개별적으로 분류 할 수도 있습니다.


3

체스 프로그래머는 평가 기능을 디자인 할 때 강력한 체스 플레이어에 대한 지식에 의존하지 않고 다른 요소를 시험 해보고 다른 엔진과 비교하여 게임에서 테스트하고 유지할 것을 결정합니다. 래리 카우프만은 인간의 이해가 무엇인지에 대한 그의 견해에 대해 약간 이야기하지만, Rajlich와 Dailey는 매우 결과 지향적이며 카우프만의 아이디어 도매를 채택하지 않은 것처럼 들립니다.

내가 흥미로 웠던 한 기사는 Rybka와 Fruit의 평가 기능을 비교 한 Zach Wegner입니다. Rybka가 한 단계 발전했을 수있는 영역 중 하나는 특정 조합의 조각을 기반으로하는 재료 불균형 테이블을 통합하는 것이 었습니다. 카우프만도 이에 관한 기사를 썼습니다.

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm


0

이 링크는 최고의 출발점 IMHO입니다. 나는 이것을 내 체스 프로그램의 출발점으로 사용하고 있으며 이해하기 쉽고 유용하다는 것을 알았습니다.

https://chessprogramming.wikispaces.com/Simplified+evaluation+function


2
링크의 내용을 간단히 확장 해 주시겠습니까?
Pablo S. Ocal

Wikispaces 사이트는 이제 없어졌습니다. 새 집에 대한 수정 된 링크 : chessprogramming.org/Simplified_Evaluation_Function
Chromatix

0

간단히 말해서 체스 엔진의 매개 변수를 조정하는 표준 방법은 다음과 같습니다.

  1. 매개 변수 정의
  2. 매개 변수 공칭 (시작) 값 제공
  3. 엔진을 작동시켜 어떻게 작동하는지 확인하십시오
  4. 성능 향상을 위해 매개 변수 값 조정

그런 다음 성능 목표에 도달 할 때까지 3 단계와 4 단계를 반복하십시오.

이를위한 일반적인 접근 방식은 엔진 토너먼트에서 엔진이 작동하는 실험실을 설정하는 것입니다. 엔진이 두 가지 색상을 모두 연주하는 여러 게임이 사용됩니다. 주요 토너먼트는 매개 변수 값이 B 인 동일한 엔진에 대해 매개 변수 값이 A 인 엔진을 구동하는 것입니다.

짐작할 수 있듯이이 접근법의 결과는 다음에 크게 의존합니다.

  • 선택된 매개 변수
  • 매개 변수 지정 방법
  • 테스트 전체에서 매개 변수 값이 변하는 방식
  • 엔진 작동 방식 (제한된 플라이 깊이, 제한된 시간, 감도 등)

이 방법은 또한 많은 시간을 소비 합니다 .

보다 최근의 (그리고 혁신적인 접근법) 2010 년 유전자 알고리즘 기술을 사용하여 a) 매개 변수를 지정하고 b) 매개 변수 값을 조정하는 연구자들에 의해 개발되었습니다. 연구자들은 먼저 그랜드 마스터 게임 세트에 대해 시작, 공칭 파라미터 값 세트로 엔진을 실행 하여 "최고의 움직임"을 효과적으로 선택할 수 있는지 확인했습니다. "최고의 움직임"은 그랜드 마스터가 만든 움직임으로 정의되었습니다 *. 그렇게하지 못한 곳에 기록되었다. 그런 다음 다른 매개 변수 값 세트를 시도하고 상대 성능 대 이전 실행을 판별했습니다.

그런 다음 "적합한"생존의 유전자 알고리즘 원리를 사용하여 매개 변수 값결합 하는 프로그래밍 방식을 시도했습니다. 여기서 "적합"은 이상과 가장 일치하는 출력을 생성하는 것을 의미합니다. (근사치의 품질을 판단하는 데 사용되는 기술인 "최소 제곱 적합"회귀의 통계적 기술에도 문제가 있습니다.)

GM을 모방 할 수있는 엔진 파라미터가 발견 된 후에 만 ​​실제 엔진 토너먼트 단계가 시작됩니다. 이 단계에서 다른 매개 변수 값 세트가 다시 한번 서로에 대해 피트 됩니다 . 유전자 알고리즘 개선 기술이 적용되어 엔진의 더 나은 세대를 지속적으로 생성합니다.

이 연구 프로젝트에서는 조각의 모든 재료 값과 후진 폰, 약한 사각형, 주교 쌍 등과 같은보다 일반적인 전략적 평가 기준을 포함하여 36 개의 매개 변수가 사용되었습니다. 그러나 연구원들은 각 종류의 "킹 압력", "이동성"값, 킹에 인접한 파일의 루크, 반 열린 파일의 루크, a의 킹을 공격하는 루크와 같은 몇 가지 새로운 매개 변수를 추가했습니다. -/ b- / g- / h-file, 전달 된 폰과 방어 왕 사이의 분리 등.

불행히도 연구원들은이 매개 변수 세트를 어떻게 구성했으며 테스트하고 거부 할 수있는 대체 매개 변수에 대해 자세히 설명하지 않습니다. 그것들이 훨씬 더 큰 세트로 시작하여 (시행 및 오류를 통해) 성능에 가장 큰 영향을 미치는 요소와 중요하지 않은 또는 파생 된 요소 중 어느 것이 떨어질 수 있는지를 결정하는 것이 합리적입니다.

이것이 유용 할 것 같으면 여기 에서 연구를 찾을 수 있습니다 .

* 연구자들이 사용한 접근법의 단계에 대한 경고는 순서대로 이루어졌다. John Nunn은 Move by Chess Move 이해에 대한 소개에서 그의 주제를 설명하기 위해 "강력한 대 마스터들 사이의 격투 게임 ..."을 선택했습니다. 그는 다음을 추가합니다.

독자들은이 책에서 게임을 장식하는 물음표의 수를보고 매우 놀랐을 것입니다. 확실히, 당신은 단지 30 개의 게임을 선택할 수 있다고 생각할 것입니다. 사운드 게임을 찾기가 쉬웠을 것입니다. 그러나 나는 그것이 아니라고 확신 할 수 있습니다. ... 복잡하고 치열한 거의 모든 게임에서 결함을 발견 할 수 있습니다. 나는 내 게임이 완전히 정확한 곳이라고 생각한 적이 없어서 개인적으로이 계시들이 괴로워하지 않습니다. 그러나 일부 사람들은 인간이하는 체스가 이전에 생각했던 것보다 덜 정확하다는 것을 인정하기가 어려울 수 있습니다.

Nunn 박사가 제기 한 요점은 연구원이 그랜드 마스터 움직임을 모방하도록 요구함으로써 엔진 파라미터를 설정하는 초기 접근 방식 은 인간의 놀이에 결함있기 때문에 결함이있을 수 있음을 시사합니다 . 실제로 엔진이 이미 인간보다 더 잘 작동한다는 것이 잘 확립되어 있습니다.

따라서 초기 매개 변수를 설정하는 더 나은 방법은 새 엔진을 기존의 우수한 엔진과 비교 하는 것 입니다.


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