체스 엔진을 작성하는 데 어떤 패러다임이 사용됩니까?


9

체스 게임 엔진을 작성하려는 경우 어떤 프로그래밍 패러다임 (OOP, 절차 등)을 사용하고 왜 누구를 선택해야합니까? 체스 엔진이란 현재 보드를 평가하고 컴퓨터의 다음 움직임을 결정하는 프로그램의 일부를 의미합니다.

체스 엔진을 작성하는 것이 재미있을 것이라고 생각했기 때문에 묻습니다. 그런 다음 함수형 프로그래밍 학습을위한 프로젝트로 사용할 수있게되었습니다. 그런 다음 일부 문제가 기능적 패러다임에 적합하지 않은 것으로 나타났습니다. 그런 다음 이것이 좋은 토론 사료가 될 수 있습니다.


1
이것은 C 컴파일러를 처음부터 작성하는 것과 유사합니다. 나는 바퀴를 재발 명하지 않을 것이다. 나는 기존의 것들을 먼저 공부할 것입니다.
Job

10
@ Job : 저의 목표는 결과보다는 프로세스입니다. 매우 나쁜 엔진으로 끝나더라도 문제를 분석하고 공격하는 방법을 개발하는 데 가치가있을 수 있다고 생각합니다. 특히 프로세스에서 새로운 프로그래밍 방법을 배우면 더욱 그렇습니다.
찌르다

1
행운을 빕니다. 실제 고용주가 처음부터 개발을 요구하지는 않지만 인터뷰 중에는 문제를 어떻게 공격 할 것인지 묻습니다.
Job

6
@Job은 프로그래밍 라이프를 수용하는 데있어 많은 부분이 필요하다.

1
@Mark, 삶을 포용하는 것은 어떻습니까?) = 여행, 언어, 연극,시, 야외 등? 나는 프로그래밍을 좋아하지만 그 자체로하지 않을 때는 1000 개의 다른 일을해야합니다.
직업

답변:


7

내가 아는 한 평가는 병렬화 가능한 문제가 아니지만 다른 체인을 평가하는 것은 여러 코어와 멀티 스레딩을 사용하기 위해 확실히 작성할 것입니다.

기능성이든 반 기능성이든 맛의 문제입니다. 개인적으로 OOP로 가서 C #과 같은 기능적 프로그래밍 및 병렬화 지원을 사용합니다.

참고로, 체스 엔진을 작성한다면 실제로 체스에 대해 "생각할 수있는"엔진을 만들려고합니다. 보드 평가를 사용하여 모든 가능한 조합을 죽이고 매우 잘 수행했습니다. 그러나 더 사고 / 퍼지 한 체스 엔진을 만드는 데 많은 진전이 없었습니다. 도전이 될 것입니다! :)

정말 까다로운 포지션 플레이와 강한 움직임 (! 또는 !!로 표시)이있는 게임을 찾아 엔진을 훈련하고 테스트하는 데 사용하십시오.


2

나는 그것이 당신의 목표에 달려 있다고 생각합니다. 경쟁력있는 제품을 작성하려는 경우 가장 낮은 수준의 평가자에서 최대 효율성을 원할 것입니다. 여기에서 비트 레벨 병렬 처리를위한 많은 기회가 있습니다. 해시 테이블에 대한 많은 기회도 있습니다. 또한 병렬 처리를 활용할 수있는 기회. 그런 다음 더 높은 수준에서는 AI에 적합한 시스템을 원할 것이므로 아마도 함수형 프로그래밍 언어를 의미 할 것입니다. 분명히, 당신은이 모든 일을하고 싶지 않고, 그중 하나 또는 두 개를 고르고, 프로젝트가 더 좋은 프로그램과 경쟁하지 않을 것이라는 사실에 만족해야합니다.


2

The Turk 라는 체스 엔진에서 OOP 패러다임을 선택했습니다 . 체스 엔진의 첫 번째 버전은 OOP보다는 절차가 더 많았으며, 코드 블록이 길고 디자인이 열악하여 체스 엔진을 개선하기가 너무 어렵다는 것을 알았습니다.

체스 엔진을 작성하는 동안 달성하려는 목표에 따라 다릅니다. 너무 강한 체스 엔진을 만들려면 느린 바인딩 바인딩으로 인해 OOP 언어 로이 작업을 수행 할 수도 없습니다. 프로그래밍을 배우고 체스 엔진을 작성하여 재미를 얻으려면 관리되는 언어와 OOP가 친구가 될 것입니다. 체스 엔진을보다 절차 적으로 작성하는 것이 가능하기 때문에 C #을 선택하도록 제안 할 수 있습니다.


ELO는 어떻게 평가합니까? Crafty와 비교할 때?

@ Thorbjørn Ravn Andersen-C로 작성된 뛰어난 오픈 소스 체스 엔진 중 하나이며 체스 프로그래밍에 그의 인생을 보낸 Robert M. Hyatt 박사. 불행히도 나는 elo 등급을 테스트하기 전에 할 일이 많이 있기 때문에 elo 등급을 테스트하지 않았습니다. 현재 평가는 조각 값을 평가하기 때문에 평가가 약하고 여전히 필요한 모든 알고리즘을 구현하지 않았습니다. 불행히도 나는이 프로젝트에 지금 쓸 시간이 없습니다. 언젠가 계속할 수 있기를 바랍니다.
Freshblood

아 죄송합니다. 실제로 플레이 할 수 있다고 생각했습니다. 내 잘못이야.

@ Thorbjørn Ravn Andersen-거기에 몇 가지 릴리스와 최신 저장소 변경 세트를 게시 할 준비가되었습니다. 나는 그것이 현재로서는 꽤 약하다고 말하고 싶었다.
Freshblood

2

나는 포스 언어를 배우기위한 수단으로 간단한 체스 프로그램을 이식했다. 그것은이 매우 긴급한 문제에 잘 맞는 것으로 판명되었고, 나는 많은 것을 배웠습니다. 오픈 스택을 사용하면 알고리즘에 대한 더 큰 통찰력을 제공하는 고유 한 방식으로 알파-베타 검색을 구현할 수있었습니다.

핵심 알고리즘 (알파-베타 깊이 우선 검색, 평가)이 재귀적이고 기능적으로 엄격하기 때문에 기능적 프로그래밍은 체스 프로그램에 유용 할 것이라고 생각할 것이다. 그러나 체스 프로그램은 효율성으로 인해 죽고 현재 기능 기능 언어의 어느 것도 그 목표를 가지고 있지 않습니다. 100 개의 최첨단 엔진은 모두 메모리 사용, 멀티 스레딩, 전역 상태 및 코드 생성을 최대한 제어하기 위해 명령형 언어 (주로 C / C ++, Delphi)를 사용합니다. 모든 기능 언어는 핵심 데이터 구조에 동적 메모리 할당을 사용하는데, 이는 체스 프로그램의 죽음입니다.

나는 여전히 누군가가 기능적 언어를 사용하여 상위 100 개의 체스 엔진에 침입하려고 시도하는 것을보고 싶습니다.

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