Syzygy는 정보를 어떻게 저장합니까?


11

지금까지 찾은 모든 것을 읽음으로써 Syzygy는 win / draw / loss 파일과 zero-to-zero 파일을 모두 사용하지만 이러한 파일이 사용하는 내부 파일 형식에 대한 정보를 찾지 못했습니다. 나는 낮은 수준의 딱딱한 설명을 찾고 있습니다.

답변:


14

포괄적 인 단일 발행물이 없으므로 프로빙 코드 , 생성기 및 Ronald de Man (생성자 작성자)의 다양한 설명 을 기반으로합니다 .


거의 모든 테이블베이스 (일명 거대한 압축 해시 맵)를 조사 할 때 :

  1. 위치가 정규화되었습니다 ...
  2. ... 정수 색인에 매핑되었습니다.
  3. 인덱스는 인덱스가 속한 "블록"을 식별하는 테이블에서 조회됩니다.
  4. 색인 정보를 검색 할 수있을 때까지 블록 압축이 해제됩니다.

그런 다음 일반적으로 통과 캡처를 해결하기위한 프로빙의 "외부"코드가 있습니다.


WDL의 외부 코드로 시작합니다. Syzygy 테이블은 다음 관찰을 기반으로 최적화를 사용합니다. 위치에 특정 값을 달성하는 캡처가 있으면 (예 : 당첨), 위치 자체에 최소한 해당 값이 있습니다 (예 : 당첨). 이 경우 테이블은 압축에 가장 적합한 임의의 낮은 값을 저장할 수 있으며 캡처 할 서브 테이블을 확인하여 쉽게 수정할 수 있습니다.

DTZ를 얻으려면 먼저 WDL 프로브를 수행해야합니다. 위치가 그려지면 DTZ는 0이며 테이블은 압축에 가장 적합한 것을 저장할 수 있습니다. 최상의 이동이 캡처 (WDL 프로브에서 기억할 수있는) 인 경우, DTZ는 WDL에 따라 +/- 1 또는 +/- 101이며, 테이블은 압축에 가장 적합한 것을 다시 저장할 수 있습니다.

폰형 테이블에는 4 개의 서브 테이블이 있으며 "정규 폰"의 각 파일마다 하나씩 있습니다 (정규화 후).

WDL (서브) 테이블은 양면입니다. 즉, 기본적으로 엔드 게임의 각 측면에 대해 두 개의 별도 테이블을 포함합니다 (재료가 대칭이 아닌 한).

DTZ 테이블은 이동할 한쪽 만 저장합니다. 따라서 다른 쪽의 DTZ를 계산하려면 간단한 1 겹 검색이 필요할 수 있습니다.


(1) 정규화 정보 :이 작업을 수행 할 수있는 여러 가지 방법이 있으며 어떤 방법으로 압축이 가장 좋은지 미리 말하기가 쉽지 않습니다. 생성기는 다른 순열을 시도합니다. 조각의 최종 순서는 테이블 파일의 헤더에 저장됩니다.

(2) 일부 조합론. 문제는 불가능한 입장에 대해 큰 격차를 두지 않는 것입니다. 꽤 까다 롭지 만 Syzygy는 여기서 특별한 일을하지 않는다고 생각합니다. 개념적으로 조각 또는 조각 그룹은 머리글에 지정된 순서대로 보드에 배치됩니다.

(3) 압축 된 값은 블록으로 저장됩니다. 블록 크기는 테이블 헤더에 지정되어 있습니다. 인덱스를 블록에 매핑하는 테이블은 희소하므로 올바른 블록에 매우 가까이 점프 한 다음 정확한 블록을 찾으려면 간단한 앞뒤 스캔이 필요합니다. 블록은 최대 65536 개의 위치에 대한 값을 저장할 수 있습니다.

(4) Syzygy 테이블은 RE-PAIR 기반의 사용자 지정 압축을 사용 합니다. 중요한 특징은 실제로 위에서 식별 된 임의의 값을 저장할 수있는 기회를 이용할 수 있다는 것입니다. 압축 해제는 매우 빠르며 원하는 인덱스 값을 사용할 수있게되면 중지 할 수 있습니다.

선택적으로 DTZ 테이블에는 다른 단계 f (wdl, stored value) = real value가 필요할 수 있습니다. 이 추가 DTZ 맵은 테이블 헤더에서 참조되며 8 비트 항목이있는 테이블입니다. (당연히 이것은 폰이 있더라도 7 피스 엔드 게임에는 충분하지 않은 것으로 나타 났으므로 이제 16 비트 항목을 활성화하는 또 다른 플래그가 있습니다).

DTZ 값의 경우 생성기가 테이블의 모든 값이 100 미만인 것으로 판단한 경우 완벽한 재생을 보장하기 위해 정확한 반 이동 카운트가 필요하지 않습니다. 대신 테이블 헤더에 플래그를 설정하고 공간을 절약하기 위해 반 이동을 전체 이동으로 반올림합니다.

또한 WDL 값에서 추론 할 수 있기 때문에 저주받은 최종 게임에 대해 부호 또는 +/- 100의 추가 오프셋을 저장할 필요가 없습니다.

압축 해제가 매우 빠르므로 캐시가 필요하지 않습니다. 대신 엔진은 운영 체제 페이지 캐시를 사용하여 블록을 저장 (아직 압축) 할 수 있습니다.


6 개 테이블에는 150 기가 바이트의 고유 한 위치 3,787,154,440,416에 대한 WDL 및 DTZ 정보가 포함 되므로 위치 당 ~ 0.3 비트입니다.

모든 Syzygy 테이블에서 모두 이러한 영역 중 3 개 이상에서 이전 테이블베이스 형식을 개선하여 매우 작고 빠른 형식입니다. 놀랍게도 발전기는 매우 빠릅니다.

물론 DTZ50을 사용하는 것은 실용적인 선택입니다. 왜냐하면 이것은 확실히 진보를 이루기에 충분한 정보이며 50 이동 규칙의 유무에 관계없이 완벽한 플레이 (실제 결과)를 허용하기 때문입니다. 그러나 지금까지 공개 된 Cfish의 변경 사항 (RdM은 현재 DTM 테이블에서 작업 중임)에 따라 많은 기술이 DTM에도 적용됩니다.

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