1997 년 Deep Blue가 Kasparov를 제치고 컴퓨터 체스 엔진이 향상되었습니다.
알고리즘이 나아 졌습니까? 아니면 빠른 하드웨어 등으로 인해 동일한 알고리즘이 더 빠르게 실행되어 주로 개선 되었습니까?
전자의 경우 이러한 알고리즘 개선이 공개됩니까?
그렇다면 어떻게 개선 되었습니까? 그들에 대해 어디서 읽을 수 있습니까?
1997 년 Deep Blue가 Kasparov를 제치고 컴퓨터 체스 엔진이 향상되었습니다.
알고리즘이 나아 졌습니까? 아니면 빠른 하드웨어 등으로 인해 동일한 알고리즘이 더 빠르게 실행되어 주로 개선 되었습니까?
전자의 경우 이러한 알고리즘 개선이 공개됩니까?
그렇다면 어떻게 개선 되었습니까? 그들에 대해 어디서 읽을 수 있습니까?
답변:
컴퓨터 체스 전용 포럼 인 TalkChess를 살펴볼 수도 있습니다 . : 나는 당신을 위해 재미있을 수있는 최근의 스레드 발견 7~8년의 네 간격으로 30 년 동안 진행을
(이전) 최상위 엔진 간의 두 가지 일치 항목이 동일한 하드웨어 에서 재생됩니다 . 이 테스트는 최근 몇 년 (2002-2017) 동안 주로 소프트웨어 개선을 통해 얻은 것임을 시사합니다. 테스트에서 Stockfish (2017)는 RobboLito (2009)에 비해 94/100의 인상적인 점수를, RobboLito는 Shredder (2002)를 92/100으로 분쇄했습니다.
중요한 말 : 병렬 컴퓨팅은 구형 엔진에서 구현되지 않기 때문에 테스트는 단일 코어에서 수행되었습니다. 결과적으로 병렬 머신의 하드웨어 이득은 측정되지 않습니다. 반면에 병렬 컴퓨팅도 소프트웨어의 이점이라고 주장 할 수 있습니다. 검색 알고리즘을위한 효율적이고 확장 성이 뛰어난 병렬화를 설계하고 구현하는 것은 쉽지 않습니다.
건어 알고리즘의 개선이 공공 그래서 엔진은 오픈 소스입니다. https://chessprogramming.wikispaces.com 에 많은 문서가 있습니다.
Deep Blue에 사용되는 알고리즘을 말할 수는 없지만 체스 프로그래밍의 개선 사항을 설명하고 설명하려고합니다. 속도가 가장 향상되었습니다. Deep Blue는 다중 프로세서 전용 컴퓨터를 사용했기 때문에 비교가 불가능합니다.
https://chessprogramming.wikispaces.com/ 은 훌륭한 소스이지만 탐색하기는 어렵습니다.
체스 엔진을 개선하기 위해 조정 된 3 가지 주요 기능은 평가, 이동 생성 및 검색 기능입니다.
규칙에는 많은 예외가 있으므로 평가는 프로그래밍하기가 가장 어렵습니다. 하드 드라이브 공간이 저렴 해짐에 따라 eval 기능을 사용하면 더 많은 예외를 평가할 수 있습니다.
이동 생성 및 이동과 함께 이동 생성은 여러 번 수행되어야하므로 많은 메모리를 소비합니다. 가장 일반적인 생성 기능은 사서함, 비트 보드, 0x88, 8x8, 확장 보드 (10x10, 10x12) 및 미리 정해진 이동 배열 / 테이블입니다 (* 인덱스 이동 테이블을 사용합니다). 현재 비트 보드가 더 빠르며 매직 비트 보드를 사용하면이 속도가 최대 30 % 향상됩니다. cratfy 체스 엔진의 교수이자 제작자 인 Robert Hyatt 박사는 속도가 크게 증가하지 않았다고 주장합니다.
초기 검색 기능은 기본 최소-최대 기능이었습니다. 기본적으로 당신은 상대의 점수를 이동하고 최소화하기 위해 측면의 점수를 최대화하려고했습니다. 알파-베타가 첫 개선이었습니다. 조옮김 테이블, 컷오프 값, 흡인 창 및 히스토리 휴리스틱으로 검색되는 동작 수를 줄였습니다. 이것은 깊이 우선 검색입니다. 또 다른 움직임을 찾는 것이 결실을 맺지 않기를 바라는 가장 깊은 "최상의"움직임을 검색하려는 내부 반복 심화 검색도 있습니다.
참고 : 내 인덱스 테이블. GNUChess와 Jester는 모두 인덱스 배열을 사용하여 이동을 생성합니다. 가능한 이동으로 배열을 채워 엔진을 초기화합니다. 여섯 조각을 가지고 각 광장에서 사용할 수있는 합법적 인 움직임을 계산합니다. 따라서 각 조각에는 [64] [8] 배열이있었습니다. 이 아이디어를 가져 와서 두 개의 인덱스와 테이블로 압축했습니다. 테이블에는 16 개의 이동이 가능한지, 하나의 인덱스는 이동의 오프셋을 보유하고, 다른 하나는 마스크를 보유하는 값을 보유합니다.
오프셋 [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};
마스크 [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};
그런 다음 이동 테이블에 대해 허용되는 오프셋에서 마스크의 유효성을 찾는 것만 큼 슬라이딩 이동 생성이 쉽습니다.
Every time that a new eval concept in included into a chess engine, more code, and therefore more HD space is required.
보드 평가 기능은 일반적으로 CPU 캐시에 적합하도록 설계되었습니다. CPU 캐시 << RAM << HD. HD 크기는 차이가 없습니다.
알고리즘이 나아 졌습니까?
분명히 그렇습니다.
더 빠른 하드웨어와 소프트웨어 덕분에 동일한 알고리즘이 더 빠르게 실행되어 개선이 이루어 졌습니까?
경미 : 알고리즘이 나아지면 소프트웨어가 나아 지므로 "또는"이 없습니다.
무어의 법칙에 따르면 프로세서 속도는 대략 18 개월마다 두 배가 될 것입니다. 그것은 20 년 만에 약 13 배가되었다는 것을 의미합니다. 이로 인해 현대 프로세서는 8,000 배 빠른 속도를 자랑합니다. 따라서 엔진 성능의 가장 큰 향상은 하드웨어 속도가 빠르기 때문입니다.
전자의 경우 이러한 알고리즘 개선이 공개됩니까?
그렇다면 어떻게 개선 되었습니까? 그들에 대해 어디서 읽을 수 있습니까?
글쎄요, 그것은 전자가 아니라 후자였습니다. 그럼에도 불구하고 개선 사항은 대부분 오픈 소스이며 Stockfish와 같은 엔진의 소스를 다운로드하여 자유롭게 볼 수 있습니다 . 버전 9가 나오면 특정 소스 코드 링크가 만료 될 수 있으므로 일반적인 Stockfish 다운로드 링크를 제공 할 가치가 있습니다.
That means it has doubled roughly 13 times in 20 years.
무어의 법칙을 잘못 인용 한 것 같습니다. 프로세서 속도에 대해서는 아무 것도 말하지 않습니다. 실제로, 한동안 두 배가되지 않았습니다.
hardware and software
알고리즘 구현에서와 같이 소프트웨어를 의미했지만 (ASM vs C ++) 혼동되는 방식을 볼 수 있습니다. 결정된.
알고리즘에 관한 모든 것.
인간 체스 플레이어를 타는 것은 당시 세계에서 가장 강력한 컴퓨터 중 하나를 사용했습니다. 이 무차별 컴퓨팅 방식을 통해 Deep Blue는 약 6 ~ 8 개의 움직임을 예측할 수있었습니다. 치열한 경쟁에서 기계는 Kasparov를 3 1/2 게임으로 2 1/2로 이겼습니다.
6 년 후 카스파로프는 사람 대 기계의 또 다른 대회에 참여했습니다. 이번에는 딥 블루의 후임자 인 딥 주니어와 대결했습니다. 결과는 3 경기 연속으로 그려졌다. 가장 큰 차이점은 Deep Junior가 Deep Blue의 컴퓨팅 성능의 약 1 %를 사용하는 컴퓨터에서 실행되었다는 것입니다. 체스 재생 알고리즘은 컴퓨팅 성능이 수백 배 적은 사실상 동일한 결과를 달성 할 정도로 향상되었습니다.
면책 조항 : 전문가가 아닙니다.
알고리즘이 향상되었으며 1995 년 (Deep Blue는 1999 년 기억)에서 실행되는 오늘날 최고의 엔진이 카스파로프를 능가 할 것입니다. 내가 이해하는 것처럼 알고리즘에는 두 가지 측면이 있습니다.
검색 . 예를 들어 여왕을 여왕으로 데려 가면 인간의 상대가 자동으로 다시 채집을 보게됩니다. 그러나 컴퓨터의 경우 QxQ에 대한 모든 가능한 응답을 평가합니다. 거의 항상, 이것은 처리 능력을 낭비합니다. 좋은 검색 알고리즘은 이러한 "분기"가 모두 관련이 없기 때문에 줄입니다.
표준 검색 알고리즘은 alpha-beta pruning 이며 초기 체스 컴퓨터에서 사용되었습니다. Deep Blue가 알파-베타 가지 치기를 사용했는지는 모르겠지만 최신 엔진은 그렇지 않습니다. 결과적으로 그들의 검색은 "안전하지 않은"것입니다. 예를 들어, 여왕을 다시 잡는 것 이외의 다른 움직임이 게임에서 이겼을 수도 있습니다. 그러나 이런 일이 발생하는 경우는 드물며 그 결과 깊이가 매우 높아집니다. ( "깊이"는 엔진이 얼마나 깊이 검색하는지에 대한 기술 용어입니다. 예를 들어, 깊이 30까지 검색하는 엔진은 깊이 20까지만 검색하는 엔진을 능가 할 가능성이 있습니다.
평가 . 이것은 엔진 코드의 다른 갈래입니다. 특정 위치가 주어지면 흰색, 검은 색 또는 동등한 위치에 더 적합합니까? 여기에는 모든 종류의 기능이 포함될 수 있습니다. 예 :
오늘날의 엔진은 Deep Blue보다 위치를 훨씬 잘 평가합니다.
알고리즘의 공개 여부에 관해서, Stockfish는 현재 세계에서 가장 강력한 엔진이며 오픈 소스입니다. Github 에서 직접 코드를 다운로드 할 수 있습니다 .