강력한 AI를 갖춘 XQWizard용 XiangQi(중국 체스) 엔진
중국 체스 게임 프로그램 ElephantEye(코끼리 눈) 버전: 3.15
Xiangqi 백과사전 네트워크* 2008년 3월
(* 이메일 : [email protected])
1. 소개
ElephantEye는 GNU Lesser General Public License를 준수한다는 전제하에 체스 애호가와 프로그래머가 ElephantEye와 해당 소스 프로그램을 자유롭게 사용할 수 있는 무료 중국 체스 프로그램입니다.
ElephantEye의 중국 이름은 "코끼리 눈"이며, "말 다리" 및 "대포 프레임"과 함께 중국 장기의 "장기판 위의 3차원"을 구성합니다. ElephantEye는 일반적으로 체스 기록 편집 소프트웨어인 ElephantBoard와 함께 사용됩니다. 이는 명확한 계획을 가지고 있음을 의미합니다(Board는 영어로 "보드"를 의미함). (참고: ElephantBoard는 이제 "Chess Wizard"로 이름이 변경되었습니다.)
2. 엔진 계약
ElephantEye는 UCCI 3.0을 지원합니다. Light Red Xiangqi 사용자는 UCCI 엔진 어댑터(UCCI2QH)를 통해 ElephantEye 엔진을 호출할 수 있습니다.
(1) 지원되는 UCCI 명령은 다음과 같습니다.
우치
설정...
위치 {fen <fen_str> | startpos} [이동 <move_list>]
금지 이동 <move_list>
가서 [생각해 보세요 |
폰더히트 [무승부] |
프로브 {fen <fen_str> | startpos} [이동 <move_list>]
그만두다
(2) 반환할 수 있는 UCCI 정보는 다음과 같습니다.
id {이름 <engine_name> | 버전 <version_name> | copyright <copyright_info> | 작성자 <user_name>}
옵션...
우치오크
정보...
{nobestmove | bestmove <best_move> [숙고하다 <숙고하다>] [무승부 |
pophash [bestmove <최고_이동>] [하한 <값> 깊이 <깊이>] [상한 <값> 깊이 <깊이>]
안녕
3. 매개변수 설정
UCCI 엔진인 ElephantEye에는 설정할 수 있는 여러 매개변수가 있습니다(<체스 마법사>에서 직접 설정 가능).
(1) 라이브러리 시작:
기본 열기 라이브러리는 10,000개의 대칭 위치를 포함하는 ElephantEye 프로그램(ELEEYE.EXE)의 현재 디렉터리에 있는 BOOK.DAT입니다.
(2) 생각하는 시간:
생각의 깊이를 제한하는 것은 일반적으로 좋은 선택이 아닙니다. 시간 제한을 설정하고 프로그램이 자동으로 시간을 할당하도록 하는 것이 좋습니다. 킬링게임을 풀거나 상황을 분석할 때, 프로그램은 무한히 생각할 수 있고 언제든지 생각을 멈출 수 있다.
(3) 교체 테이블 크기:
대체 테이블의 크기는 프로그램 실행 속도에 거의 영향을 미치지 않으며 기본 설정인 16MB이면 충분하지만 ElephantEye는 여전히 대체 테이블의 크기를 설정하는 기능을 제공합니다. 메모리가 허락한다면 느린 체스를 할 때 대체 테이블의 크기를 적절하게 늘릴 수 있지만 실제 메모리의 절반을 초과하지 않는 것이 좋습니다.
(3) 재단 정도:
프로그램 작업 속도를 높이기 위해 ElephantEye는 기본적으로 빈 클리핑을 사용하며 부정적인 영향의 가능성은 최소화됩니다. 가장 낮은 수준에서만 공백 자르기가 비활성화됩니다.
(4) 지식의 양:
지식의 양은 상황 평가의 정확성과 관련이 있으며, ElephantEye의 지식 수준 중 가장 낮은 수준만 상황 평가 기능을 사용하지 않습니다(하위 권한의 값만 고려). 리뷰에 대한 지식을 바탕으로 위치 등을 분석합니다. 이 상황에서는 이 설정을 시도해 볼 수 있습니다.
(5) 무작위성:
ElephantEye는 4가지 수준의 무작위성을 제공합니다. 무작위성이 클수록 프로그램이 최선의 움직임이 아니라고 생각하는 움직임을 제시할 가능성이 더 높지만, "최선의 움직임이 아님"은 이점이 없는 것은 아니며 특히 오프닝 라이브러리가 활성화되지 않은 경우 적절하게 증가합니다. 무작위성을 피할 수 있습니다. 프로그램은 동일한 상황에서 동일한 동작을 수행합니다.
4. 규칙
버전 2.0부터 ElephantEye는 "일방적인 장기 패배 결정" 규칙을 지원할 뿐만 아니라 "장기 패배 결정"도 지원합니다. "히트"에는 "체크"와 "캐치"가 포함됩니다. 프로그램 복잡성의 제한으로 인해 다음 세 가지 상황만 "catch"로 인식됩니다.
A. 뿌리가 있는 말과 전차 또는 포병(폰);
B. 뿌리가 있는 수레와 말 포병(폰);
C. 대포는 전차나 뿌리박힌 기병(폰)을 포획합니다.
ElephantEye는 UCCI 명령인 banmoves...를 지원하기 때문에 복잡한 상황에서 긴 동작을 정확하게 식별하지 못할 수도 있지만, 사용자가 엔진이 "긴 동작"을 금지했다고 생각하면 다음의 "금지 설정" 기능을 사용할 수 있습니다. <체스마법사> 엔진을 강제로 바꿔보자.
5. 게임 알고리즘
ElephantEye는 엄격하고 효과적인 게임 알고리즘을 사용하는 무차별 체스 프로그램입니다.
(1) 비트 행과 비트 열을 사용하여 생성기를 이동합니다.
비트 행(BitRanks) 및 비트 열(BitFiles)은 슬라이딩 체스 조각(자동차 및 대포)의 이동 생성(특히 캡처 이동)에 도움이 됩니다. 비트 행 및 비트 열은 광선 작업 대신 조회 테이블을 사용할 수 있습니다. ElephantEye에서는 비트 행과 비트 열의 기술이 이동 생성기뿐만 아니라 고정 결정에도 사용됩니다.
(2) 정적 상황 검색:
정적 검색을 수행할 때 ElephantEye는 장군을 캡처하거나 제거하기 위한 동작을 검색했습니다. 캡처할 동작을 검색할 때 ElephantEye는 강을 캡처할 수 없는 폰이나 방어 중이 아닌 비숍을 캡처하는 군인과 같은 중요하지 않은 캡처를 필터링했습니다. 대기 방법은 정적 검색 범위에 포함되지 않습니다.
(3) 사이클 이동 및 장거리 감지:
ElephantEye는 반복 동작이 발생하면 어느 쪽이 리더인지 판단할 수 있으며 캡틴을 금지하는 규칙을 활용합니다. 그러나 현재 ElephantEye는 긴 잡기를 식별할 수 없습니다.
(4) 교체 테이블:
ElephantEye는 중국 체스 프로그램 "Running Horses"의 디자인 아이디어를 참조하여 깊이 우선 및 항상 덮이는 이중 레이어 교체 테이블을 사용하고 로우 아웃(하이 아웃) 경계 수정 교체 테이블 업데이트 전략을 채택합니다.
(5) 검사를 통한 블랭크 절단:
ElephantEye는 R=2인 빈 클리핑을 사용하고 최종 게임 단계에서는 확인된 빈 클리핑을 사용합니다.
(6) 반복 심화/아이 먹기 동작/킬러 동작/역사 테이블 영감:
ElephantEye의 이동 정렬은 매우 간단하고 명확하며, 이어서 반복 심화 이동, 좋은 캡처 이동, 킬러 이동 및 생성 이동이 기록 테이블에 따라 정렬됩니다.
(7) 일반/단독은 다음을 확장해야 합니다.
선택적 확장의 경우 ElephantEye는 일반 확장과 일반 확장만 사용합니다.
(8) 알파-베타 주요 변종 검색:
ElephantEye는 전통적인 재귀 알파-베타 기본 변형 검색을 사용합니다.
(9) 라이브러리 시작:
ElephantEye의 오프닝 라이브러리에는 1990년부터 2005년까지 전국 체스 개인 대회, 단체 대회, 우양 컵, 리그 및 기타 게임의 상위 8,000개 게임에서 추출된 총 10,000개의 대칭 동작이 포함되어 있습니다.
(10) 무대 뒤 사고 및 시간 배분 전략:
ElephantEye는 배경 사고 기능을 지원하며 기간 기반 및 초과 근무라는 두 가지 시간 할당 전략을 제공하여 자동으로 시간을 합리적으로 할당합니다.
6. 도서관 개관
ElephantEye의 오프닝 라이브러리는 "ElephantEye 오프닝 라이브러리 메이커"를 통해 제작할 수 있습니다. 제작 도구를 실행한 후 먼저 PGN 게임 기록이 있는 폴더를 선택한 다음 이를 오프닝 라이브러리 파일(보통 BOOK.DAT)로 저장해야 합니다. 일반적으로 오프닝 라이브러리를 생성하는 데 사용되는 체스 기록의 수가 많을수록 생성되는 오프닝 라이브러리 파일의 크기도 커집니다.
생성된 오프닝 라이브러리를 ElephantEye에 효과적으로 적용하려면 ElephantEye 디렉터리에 있는 BOOK.DAT를 생성된 오프닝 라이브러리 파일로 교체하기만 하면 됩니다. <Chess의 "엔진 설정" 대화 상자에서 오프닝 라이브러리 파일을 지정할 수도 있습니다. 마법사>.
7. 상황 평가 기능 라이브러리
ElephantEye 버전 2.1부터 프로그램의 검색 부분과 상황 평가 부분이 분리되었습니다. 검색 부분은 API 함수를 호출하여 상황 평가 부분과 결합됩니다.
다른 체스 프로그래머들도 ElephantEye를 기반으로 더욱 자유롭게 플레이할 수 있습니다. LGPL 계약에 따르면 검색과 상황 평가의 두 부분은 독립적인 프로그램 라이브러리로 취급되며, 어느 부분을 사용하려면 해당 부분의 소스 프로그램만 공개하면 됩니다. 즉, 상황평가 부분이 오픈코드를 사용하지 않는다면 프로그래머는 이 부분의 소스 프로그램을 공개할 의무가 없으며, 검색 부분도 마찬가지이다.
ElephantEye의 상황평가 API 함수 인터페이스는 다음과 같이 정의됩니다.
A. 상황 평가 엔진 이름: const char *GetEngineName(void);
B. 위치 사전 평가 기능 인터페이스: void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval);
C. 위치 평가 함수 인터페이스: int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta);
그 중 PositionStruct와 PreEvalStruct는 각각 position.h와 pregen.h에 정의된 구조를 준수해야 합니다.
8. 소스 프로그램
ElephantEye의 소스 프로그램에는 9개의 모듈이 포함되어 있으며 내용은 대략 다음과 같습니다.
(1) ucci.h/ucci.cpp
Windows 및 Unix에서 라인 입력 수신 프로그램을 포함한 UCCI 명령 해석 모듈;
(2) pregen.h/pregen.cpp
Zobrist 배열을 생성하고 사전 설정 테이블을 이동하기 위한 모듈입니다. ElephantEye의 사전 설정 테이블은 두 부분으로 나뉩니다. 하나는 체스 말(말 없음, 루크, 대포 및 기타 모든 말 포함)에 대한 사전 설정 테이블입니다. 두 번째는 위치 행 및 위치 열 기술을 구현합니다. 이동을 생성할 때 번거로운 경계 판단을 피하는 다른 체스 말.
(3) position.h/position.cpp
주로 동작과 상황의 데이터 구조와 기능을 설명합니다. 상황 처리는 이 모듈의 초점입니다. 처리 내용에는 상황 초기화, FEN 문자열 가져오기, 체스 말 이동, 킬러 수의 합리성 판단, 일반 판단, 리더 및 주기 감지, 말 값 조정, 등. 또한 5개의 보조 힘 위치 값 테이블도 포함됩니다.
(4)genmoves.cpp
이동 생성기에는 조각을 캡처하는 이동과 조각을 캡처하지 않는 이동을 생성하는 두 가지 유형이 포함되어 있지만 장군을 제거하는 이동만 생성할 수는 없습니다. 어린이 식사 동작을 생성하는 동안 각 동작에는 해당 MVV(LVA)(또는 준SEE) 값이 할당됩니다. 이 모듈에는 MVV(LVA) 값을 계산하기 위해 체스 조각이 보호되는지 여부를 구체적으로 결정하는 기능도 있습니다. 보호된 체스 조각의 경우 MVV-LVA 값을 계산합니다(보호되지 않은 체스 조각의 경우 계산되지 않음). , MVV 값만 계산합니다. 따라서 체스 말에 루트가 있는지 확인하는 프로그램도 이 모듈에 포함되어 있습니다.
(5) 해시.h/hash.cpp
대체 테이블, 이력 테이블 및 이동 목록 관리 모듈에는 대체 테이블 할당 및 액세스, 주요 변형 획득 및 기타 작업이 포함됩니다.
(6) book.h/book.cpp
도서관 독서모듈을 오픈합니다.
(7) movesort.h/movesort.cpp
목록 정렬 모듈을 이동합니다.
(8) search.h/search.cpp
정적 검색, 전체 검색 및 루트 노드 검색의 세 가지 주요 프로세스 외에도 검색 모듈에는 반복 심화 제어, 배경 사고, 시간 할당, 검색 매개변수 통계 및 검색 정보 출력도 포함됩니다. 이 모듈은 전체 프로그램의 핵심 모듈입니다.
(9) eleeye.cpp
주 프로그램(즉, 주 기능).
(10) preeval.h/preeval.cpp
보조 전원 위치 배열 사전 생성기인 ElephantEye는 "공격/방어"와 "오프닝/중간 게임/엔드 게임"의 두 가지 매개변수를 기반으로 보조 전원 위치 배열을 선형적으로 조정합니다.
(11) 평가.cpp
상황 평가 기능의 경우 ElephantEye는 4단계 게으른 평가 메커니즘을 채택합니다. 가장 거친 수준은 특수 체스 패턴만 평가하고, 다음 수준은 봉쇄를 평가하고, 다음 수준은 루크의 유연성을 평가하고, 가장 높은 수준은 방해 요소도 평가합니다. 기사의.
9. 프로그램 성과
ElephantEye의 디자인은 검색 알고리즘에 중점을 두었지만 상대적으로 지식이 부족합니다. 2.8GHz 프로세서에서는 초당 약 1,000,000개의 노드를 검색할 수 있으며(일반 검색 및 정적 검색 포함), 일반적인 중간 게임 상황에서 1분 이내에 약 11개의 레이어를 검색할 수 있습니다.
체스 파워 측면에서 ElephantEye는 "Qiyin" 및 SaoLa(Chess Challenger)와 같은 프로그램과 동등한 수준이지만 위치 평가 기능의 결함으로 인해 ElephantEye는 최고의 상용 체스 소프트웨어(Xie Master, Xie Master)와는 거리가 멀습니다. Xiangqi Family, Xiangqi Qibing, Qi) 여전히 일정한 차이가 있습니다.
ElephantEye는 Lianzhong 및 Yitian과 같은 체스 게임 웹사이트에서 테스트되었으며 Lianzhong.com의 기록은 약 2,500점, Yitian의 빠른 체스 기록은 약 2,000점, 느린 체스의 기록은 약 1,500점입니다.
2005년 9월, 대만 체스 소프트웨어 매니아인 Shi Jinshan 씨의 도움으로 ElephantEye는 타이페이에서 열린 제10회 ICGA 컴퓨터 올림피아드 중국 체스 단체전에 참가하여 7승 5패 14패를 기록했습니다. 2006년 8월 11개 프로그램 순위: ElephantEye 베이징에서 열린 제1회 전국컴퓨터게임선수권대회에 출전해 전적 7승 2패 11패로 18개 프로그램 중 7위를 기록했다.
10. 관련 자료
ElephantEye의 소스 프로그램은 SourceForge의 XiangQi Wizard 프로젝트에서 공개되었으며 해당 페이지는 다음과 같습니다.
http://sourceforge.net/projects/xqwizard/
ElephantEye의 버전 개선 사항은 SourceForge SVN 사이트에 실시간으로 공개됩니다. 액세스 주소는 다음과 같습니다.
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
TortoiseSVN과 같은 SVN 클라이언트 프로그램을 사용하여 최신 코드를 얻을 수 있습니다(개발자와 완전히 동기화됨). TortoiseSVN 소개 및 다운로드 주소는 다음과 같습니다.
http://sourceforge.net/projects/tortoisesvn/
ElephantEye는 UCCI를 지원하는 체스 프로그램(예: <Chess Wizard>)에서 실행되어야 합니다. <Chess Wizard> 설치 프로그램에는 최신 버전의 ElephantEye가 포함되어 있습니다.
<체스위자드>는 다음 홈페이지에서 다운로드 받으실 수 있습니다.
http://www.skycn.com/soft/24665.html (스카이 소프트웨어 스테이션)
http://www.onlinedown.net/soft/38287.htm (화준 소프트웨어 파크)
ElephantEye 자체의 소스 프로그램 외에도 ElephantEye의 소스 프로그램 패키지에는 다음과 같은 추가 모듈이 포함되어 있습니다.
(1) 베이스 코드(base): 조립 지침, 시스템 기능 호출 및 기타 기능을 제공합니다.
(2) 중국 체스 규칙 모듈(접속): ElephantEye 코드를 사용하기 위한 다른 소프트웨어에 대한 인터페이스를 제공합니다.
(3) 오프닝 라이브러리 생산 모듈(BOOK): 오프닝 라이브러리 BOOK.DAT를 생성하는 코드;
(4) UCCI 엔진 리그 시뮬레이터(LEAGUE): UCCI 엔진 테스트 및 경쟁을 위한 자동 일괄 매치 플랫폼을 제공합니다.
(5) UCCI 엔진 검색 트리 분석기(TREE): UCCI 엔진용 검색 경로 분석 도구(UCCI 2.2+ 지원)
(6) XQF 체스 기록 도구(XQFTOOLS): XQF 및 기타 체스 기록을 PGN으로 변환하는 도구를 제공합니다.
(7) Light Red Chess Adapter(UCCI2QH): Light Red Chess가 UCCI 엔진을 호출할 수 있는 인터페이스를 제공합니다.
(8) 밝은 빨간색 체스 엔진은 UCCI 어댑터(QH2UCCI)를 지원합니다. "Dream Egg" 밝은 빨간색 체스가 UCCI 엔진 테스트에 참여할 수 있는 인터페이스를 제공합니다.
(9) BBS 체스(BBSCHESS): Visual Basic으로 제작된 체스 위치 설정 도구로, 여러 대학의 BBS에 컬러 체스 위치를 붙여넣을 수 있습니다.
(10) 체스판 이미지 생성기(FEN2BMP): 체스 및 중국 장기의 FEN 파일을 BMP 파일로 변환할 수 있는 실용적인 도구입니다.
(11) 단순화 및 전통적 트랜스코딩, UNIX 텍스트 트랜스코딩, Base64 트랜스코딩 등을 포함한 코딩 변환(코덱)
(12) 기타 도구(MISC): 단순 네트워크 통신, 파이프라인 테스트 및 기타 도구를 포함합니다.
(13) 문서 문서(DOC): 즉 "중국 장기 프로그래밍 탐구" 시리즈;
(14) 체스 참가 기록(CCGC): 제1회 전국컴퓨터게임선수권대회(CCGC)에 참가한 ElephantEye의 모든 체스 기록.
ElephantEye에 대한 더 자세한 정보를 얻으려면 Xiangqi Encyclopedia 웹사이트에 로그인하세요.
http://www.xqbase.com/