도 부츠의 병아리 진흥 규칙이 정말로 중요합니까?


9

부츠 장기 에서는 병아리 (일본인 전당포)가 닭 (금 장군)으로 승격합니다. 내 경험에 따르면이 프로모션은 거의 발생하지 않으며 많은 실수를 한 후에 의심됩니다.

도 부츠의 병아리 진흥 규칙이 정말로 중요합니까? 즉, 병아리 홍보가 중단되면 게임이 실제로 변경됩니까? (그리고 병아리가 대신 마지막 줄에 붙어 있습니까?)

실제로 변화한다는 것은 포지션 (승리, 패배 또는 추첨) 변경의 분류 또는 승소 한 포지션에서 승리를 거두기위한 정확한 움직임 순서를 의미합니다.

답변:


6

프로모션 규칙은 실제로 중요합니다. 완벽하게 플레이하면 승격 규칙을 취소하면 게임이 흰색 / 고트 승리 대신 무승부로 끝납니다. 실제로, 초기 위치에서의 4 가지 움직임의 평가는 이러한 방식으로 변한다.

구현에 버그가 없는지 다시 확인하기 위해이 결과를 얻기 위해 두 가지 독립적 인 방법을 사용했습니다.

  1. 요정체 변종을 포함 하여 알파 베타 검색 엔진, 즉 내 쇼크 포크 (쇼기 변형 포함)를 사용하는 엔진을 사용 하여 프로모션 규칙 을 사용 중지 하기 전후에 심층 검색 (~ 1 시간)을 실행 한 결과는 다음과 같습니다.
  2. 이후 해결 된 게임도 부츠 쇼기는 그것을 위해 tablebase 발전기가있다. 나는 사용하고 오픈 소스 tablebase 발생기해제 프로모션에 수정 (이 코드베이스를 잘 알고 내가하지,하지만 두 방법의 결과가 일치하기 때문에, 내 변화는 잘 작동 것 같다). 두 규칙 세트로 테이블베이스 생성을 실행하고 결과를 확인했습니다. 아래에서 찾을 수 있습니다.

1. 검색 결과

입력:

setoption name multipv value 4
setoption name hash value 4096
setoption name UCI_Variant value dobutsu
position startpos
go depth 90

승격 규칙이있는 출력 :

info depth 90 seldepth 87 multipv 1 score mate -43 nodes 2423491649 nps 889420 hashfull 338 tbhits 0 time 2724798 pv c1c2 a4a3 c2c1 b3b2 a1b2 c4b3 C@a1 C@a2 c1c2 a2a1+ b2a1 b3c2 b1c2 a3b3 c2b1 b4a3 E@b2 a3b4 b2c1 b3a3 a1b2 a3a4 b1c2 b4c4 b2c3 a4a3 c3b2 a3a2 C@a1 a2b2 c2b2 G@b3 b2b1 E@a3 G@c2 C@c3 c2b2 c4b4 b2a2 b4a4 a2a3 a4a3 a1a2 a3b4 b1a1 G@c2 a1b1 b4c4 E@a1 b3b4 a1b2 c4b3 a2a3 b4c4 b1a1 c2c1 b2c1 b3a3 G@a2 a3b3 a2b2 b3a4 b2a2 C@a3 c1b2 a3a2 a1a2 c3c2 C@b3 E@c3 b2c3 c4c3 b3b4+ a4b4 E@b2 c3b3 a2b1 b3b2 b1b2 E@a3 b2a1 E@b2 a1b1 G@a1 b1c2 C@c3
info depth 90 seldepth 87 multipv 2 score mate -43 nodes 2423491649 nps 889420 hashfull 338 tbhits 0 time 2724798 pv b1c2 b3b2 a1b2 c4b3 c2b1 a4a3 C@a1 C@a2 c1c2 a2a1+ b2a1 b3c2 b1c2 a3b3 c2b1 b4a3 E@b2 a3b4 b2c1 b3a3 a1b2 a3a4 b1c2 b4c4 b2c3 a4a3 c3b2 a3a2 C@a1 a2b2 c2b2 G@b3 b2b1 E@a3 G@c2 C@c3 c2b2 c4b4 b2a2 b4a4 a2a3 a4a3 a1a2 a3b4 b1a1 G@c2 a1b1 b4c4 E@a1 b3b4 a1b2 c4b3 a2a3 b4c4 b1a1 c2c1 b2c1 b3a3 G@a2 a3b3 a2b2 b3a4 b2a2 C@a3 c1b2 a3a2 a1a2 c3c2 C@b3 E@c3 b2c3 c4c3 b3b4+ a4b4 E@b2 c3b3 a2b1 b3b2 b1b2 E@a3 b2a1 E@b2 a1b1 G@a1 b1c2 C@c3
info depth 90 seldepth 87 multipv 3 score mate -43 nodes 2423491649 nps 889420 hashfull 338 tbhits 0 time 2724798 pv b1a2 a4a3 a2b1 b3b2 a1b2 c4b3 C@a1 C@a2 c1c2 a2a1+ b2a1 b3c2 b1c2 a3b3 c2b1 b4a3 E@b2 a3b4 b2c1 b3a3 a1b2 a3a4 b1c2 b4c4 b2c3 a4a3 c3b2 a3a2 C@a1 a2b2 c2b2 G@b3 b2b1 E@a3 G@c2 C@c3 c2b2 c4b4 b2a2 b4a4 a2a3 a4a3 a1a2 a3b4 b1a1 G@c2 a1b1 b4c4 E@a1 b3b4 a1b2 c4b3 a2a3 b4c4 b1a1 c2c1 b2c1 b3a3 G@a2 a3b3 a2b2 b3a4 b2a2 C@a3 c1b2 a3a2 a1a2 c3c2 C@b3 E@c3 b2c3 c4c3 b3b4+ a4b4 E@b2 c3b3 a2b1 b3b2 b1b2 E@a3 b2a1 E@b2 a1b1 G@a1 b1c2 C@c3
info depth 90 seldepth 85 multipv 4 score mate -42 nodes 2423491649 nps 889420 hashfull 338 tbhits 0 time 2724798 pv b2b3 c4b3 a1b2 a4a3 C@a1 C@a2 c1c2 a2a1+ b2a1 b3c2 b1c2 a3b3 c2b1 b4a3 E@b2 a3b4 b2c1 b3a3 a1b2 a3a4 b1c2 b4c4 b2c3 a4a3 c3b2 a3a2 C@a1 a2b2 c2b2 G@b3 b2b1 E@a3 G@c2 C@c3 c2b2 c4b4 b2a2 b4a4 a2a3 a4a3 a1a2 a3b4 b1a1 G@c2 a1b1 b4c4 E@a1 b3b4 a1b2 c4b3 a2a3 b4c4 b1a1 c2c1 b2c1 b3a3 G@a2 a3b3 a2b2 b3a4 b2a2 C@a3 c1b2 a3a2 a1a2 c3c2 C@b3 E@c3 b2c3 c4c3 b3b4+ a4b4 E@b2 c3b3 a2b1 b3b2 b1b2 E@a3 b2a1 E@b2 a1b1 G@a1 b1c2 C@c3

승격 규칙이없는 출력 :

info depth 90 seldepth 52 multipv 1 score cp 0 nodes 2745548262 nps 965315 hashfull 244 tbhits 0 time 2844199 pv b1a2 a4a3 a2b1 b3b2 a1b2 c4b3 C@a1 b4a4 c1c2 b3c2 b1c2 G@b3 b2c3 C@c4 c3b2 a4b4 E@a2 c4c3 c2c1 b3b2 c1b2 E@b3 b2b1 b3a4 G@b2 b4c4 b1c1 a4b3 a2b3 a3b3 b2b3 c4b3 G@b2 b3c4 E@b3 c4b4 c1b1 G@a3 b3a2 b4c4 b1c1 E@a4 c1b1 a4b3 b2b3 a3b3 a2b3 c4b3 G@b2 b3b4 E@b3
info depth 90 seldepth 52 multipv 2 score cp 0 nodes 2745548262 nps 965315 hashfull 244 tbhits 0 time 2844199 pv b1c2 b3b2 a1b2 c4b3 c2b1 a4a3 C@a1 b4a4 c1c2 b3c2 b1c2 G@b3 b2c3 C@c4 c3b2 a4b4 E@a2 c4c3 c2c1 b3b2 c1b2 E@b3 b2b1 b3a4 G@b2 b4c4 b1c1 a4b3 a2b3 a3b3 b2b3 c4b3 G@b2 b3c4 E@b3 c4b4 c1b1 G@a3 b3a2 b4c4 b1c1 E@a4 c1b1 a4b3 b2b3 a3b3 a2b3 c4b3 G@b2 b3b4 E@b3
info depth 90 seldepth 50 multipv 3 score cp 0 nodes 2745548262 nps 965315 hashfull 244 tbhits 0 time 2844199 pv b2b3 c4b3 a1b2 a4a3 C@a1 b4a4 c1c2 b3c2 b1c2 G@b3 b2c3 C@c4 c3b2 a4b4 E@a2 c4c3 c2c1 b3b2 c1b2 E@b3 b2b1 b3a4 G@b2 b4c4 b1c1 a4b3 a2b3 a3b3 b2b3 c4b3 G@b2 b3c4 E@b3 c4b4 c1b1 G@a3 b3a2 b4c4 b1c1 E@a4 c1b1 a4b3 b2b3 a3b3 a2b3 c4b3 G@b2 b3b4 E@b3
info depth 90 seldepth 59 multipv 4 score cp 0 nodes 2745548262 nps 965315 hashfull 244 tbhits 0 time 2844199 pv c1c2 a4a3 c2c1 b3b2 a1b2 c4b3 C@a1 b4a4 c1c2 b3c2 b1c2 G@b3 b2c3 C@c4 c3b2 a4b4 E@a2 c4c3 c2c1 b3b2 c1b2 E@b3 b2b1 b3a4 G@b2 b4c4 b1c1 a4b3 a2b3 a3b3 b2b3 c4b3 G@b2 b3c4 E@b3 c4b4 c1b1 G@a3 b3a2 b4c4 b1c1 E@a4 c1b1 a4b3 b2b3 a3b3 a2b3 c4b3 G@b2 b3a4 E@b3 a4b4 b1c1 G@a3 b3a2 b4c4 c1b1 E@b3

입출력의 의미에 대한 자세한 내용은 UCI 프로토콜 설명 을 참조하십시오.

2. 테이블베이스 결과

입력:

show lines

승격 규칙이있는 출력 :

Gc4-c3 : #-78  (25.00%)
Lb4-c3 : #-78  (25.00%)
Lb4-a3 : #-78  (25.00%)
Cb3xb2 : #-76  (24.99%)

승격 규칙이없는 출력 :

Cb3xb2 : 0     (25.00%)
Gc4-c3 : 0     (25.00%)
Lb4-c3 : 0     (25.00%)
Lb4-a3 : 0     (25.00%)

참고 :

  • 메이트 거리는 두 가지 이유로 다릅니다.
    • Stockfish는 USI 프로토콜을 사용하지 않는 한 전체 이동에서 메이트 거리를 계산하지만 테이블베이스 생성기는 플라이로 계산합니다 (반 움직임).
    • 테이블베이스 결과는 정확해야하지만 검색에서 반드시 가장 짧은 메이트 방법을 찾을 필요는 없습니다.
  • 두 소프트웨어는 서로 다른 좌표계를 사용하여 정사각형을 설명하기 때문에 (순위 순서가 거꾸로 됨) 이동 문자열을 비교할 때 서로 섞이지 않도록주의하십시오.

1
정말 흥미롭고 예상치 못한 결과입니다! 나는 테이블베이스 생성기를 조금 연구했지만 그런 작은 변화가 내 목표를 달성 할 것이라는 것을 깨닫지 못했습니다. 어쨌든, 당신은 요정-메기 출력을 조금 더 설명 할 수 있습니까? (왜) "cp 0"은 그리기를 의미합니까?
hkBst

1
네, 저도 놀랍습니다. 의견을 보내 주셔서 감사합니다. UCI 프로토콜 설명에 대한 링크를 추가했습니다. 특정 질문에 : 예, cp 0은 측면이 센티 폰 (1 / 체스 폰의 100 분의 1) 단위로 움직이는 이점을 나타 내기 때문에 추첨을 의미합니다.
Fabian Fichter

1

나는 지금 Fabian Fichter의 대답 이 정확 하다고 확신 합니다. Fabian의 답변에 대한 다음 해설은 다른 사람들에게 같은 것을 확신시키는 데 도움이 될 수 있습니다.

1. 병아리 프로모션 제거로 영향을받는 것으로 보이는 포지션

수정 된 Stockfish의 게시 된 결과를 분석하면 모든 게임이 S / -l- / ge-/-E-/-LG / cC 위치에 매우 빠르게 수렴됩니다.

$ ./dobutsu -vs900
Loading tablebase... done
1. setup S/-l-/ge-/-E-/-LG/cC
1. show board
  ABC 
 +---+
1| l | c
2|ge |
3| E |
4| LG| *C
 +---+
1. show lines
Eb3xa2 : #-72  (67.13%)
C  *a4 : #-70  (32.87%)   <---  apparently quite strong
Gc4-c3 : #-46  ( 0.00%)
C  *c2 : #-36  ( 0.00%)
C  *c1 : #-28  ( 0.00%)
Eb3-a4 : #-26  ( 0.00%)
Lb4-a4 : #-26  ( 0.00%)
C  *a1 : #-24  ( 0.00%)
C  *c3 : #-22  ( 0.00%)
C  *a3 : #-20  ( 0.00%)
Eb3-c2 : #-12  ( 0.00%)
Lb4-c3 : #-2   ( 0.00%)
Lb4-a3 : #-2   ( 0.00%)

그런 다음 Sente가을 재생 C*a4하여 왼쪽 하단에 병아리를 떨어 뜨립니다. 처음에는 이것이 상당히 낭비 적이라고 생각했지만 테이블베이스에 따르면 실제로 전혀 나쁘지 않습니다.

1. C  *a4
  ABC 
 +---+
1| l | *c
2|ge |
3| E |
4|CLG| 
 +---+

이제 흥미로운 일이 발생합니다. 테이블베이스는 Stockfish와 동의합니다. 사자를 옆으로 밟는 것은 무승부이지만 병아리와 싸우기 위해 병아리를 떨어 뜨리는 것은 어떻습니까?

2. show lines
C  *a3 : #69   (99.57%)   <---  winning chick drop
C  *c2 : #91   ( 0.21%)
C  *c1 : #91   ( 0.21%)
C  *a1 : 0     ( 0.00%)
Ga2-a1 : 0     ( 0.00%)
Eb2-c1 : 0     ( 0.00%)
Eb2-a1 : 0     ( 0.00%)
Lb1-a1 : 0     ( 0.00%)   <---  draws the game
C  *c3 : #-28  ( 0.00%)
Lb1-c1 : #-22  ( 0.00%)
Eb2-c3 : #-20  ( 0.00%)
Eb2-a3 : #-20  ( 0.00%)
Ga2-a3 : #-18  ( 0.00%)
Lb1-c2 : #-2   ( 0.00%)
2. C  *a3
  ABC 
 +---+
1| l | 
2|ge |
3|cE |
4|CLG| *
 +---+

이제 병아리 a3는 승진에서 한 걸음 떨어져 있으며, 또한 승진을 확인하여 Sente 사자가 가져갈 수 있습니다. 유일한 문제는 최선의 움직임은 병아리를 잃는 것과 관련이 a3있으며 또한 우리는 여전히 장군과 거리가 멀다는 것입니다. 따라서 우리는 약간의 지름길을가집니다. 그래서 우리는 더 빨리 잃을 것이지만, 불필요하게 재료를 버리는 것과 같은 다른 이유로 잃지 않습니다.

3. show lines
Ca4xa3 : #-68  (92.84%)   <---  catches chick about to promote
Gc4-c3 : #-62  ( 7.16%)
Eb3xa2 : #-32  ( 0.00%)   <---  shortcut
Eb3-c2 : #-8   ( 0.00%)   <---  give away elephant
Lb4-c3 : #-2   ( 0.00%)   <---  stupid
Lb4xa3 : #-2   ( 0.00%)   <---  stupid
3. Eb3xa2
  ABC 
 +---+
1| l | *
2|Ee |
3|c  |
4|CLG| G
 +---+
4. show lines
Lb1xa2 : #31   (100.00%)
Lb1-c2 : #-10  ( 0.00%)
Lb1-c1 : #-6   ( 0.00%)
Lb1-a1 : #-6   ( 0.00%)
Ca3xa4+: #-2   ( 0.00%)
Eb2-c3 : #-2   ( 0.00%)
Eb2-c1 : #-2   ( 0.00%)
Eb2-a1 : #-2   ( 0.00%)
4. Lb1xa2
  ABC 
 +---+
1|   | e
2|le |
3|c  |
4|CLG| *G
 +---+

우리는 희생적인 판촉 병아리의 위협을 지키는 데 성공한 것 같습니다. 계속합시다!

5. show lines
G  *b3 : #-30  (100.00%)
G  *a1 : #-24  ( 0.00%)
G  *c3 : #-20  ( 0.00%)
Gc4-c3 : #-18  ( 0.00%)
G  *c2 : #-14  ( 0.00%)
G  *c1 : #-10  ( 0.00%)
G  *b1 : #-10  ( 0.00%)
Ca4xa3 : #-8   ( 0.00%)
Lb4-c3 : #-2   ( 0.00%)
Lb4-b3 : #-2   ( 0.00%)
Lb4xa3 : #-2   ( 0.00%)
5. G  *b3
  ABC 
 +---+
1|   | *e
2|le |
3|cG |
4|CLG| 
 +---+
6. show lines
Ca3xa4+: #29   (100.00%)   <---  sacrificial promoting chick check
E  *c3 : #-30  ( 0.00%)
E  *c1 : #-28  ( 0.00%)
Eb2-c1 : #-28  ( 0.00%)
Eb2-a1 : #-28  ( 0.00%)
La2-b1 : #-28  ( 0.00%)
La2-a1 : #-28  ( 0.00%)
E  *c2 : #-26  ( 0.00%)
E  *a1 : #-24  ( 0.00%)
E  *b1 : #-12  ( 0.00%)
Eb2-c3 : #-12  ( 0.00%)
La2xb3 : #-2   ( 0.00%)

그리고 거기에는 희생을 일으키는 병아리가 최고의 움직임입니다! 어떻게되는지 보자.

6. Ca3xa4+:
  ABC 
 +---+
1|   | ce
2|le |
3| G |
4|rLG| *
 +---+
7. show lines
Lb4xa4 : #-28  (100.00%)   <---  take chick (forced if promoted)
Gc4-c3 : #-2   ( 0.00%)
Gb3-c3 : #-2   ( 0.00%)
Gb3-a3 : #-2   ( 0.00%)
Gb3xb2 : #-2   ( 0.00%)
Lb4-c3 : #-2   ( 0.00%)
Lb4-a3 : #-2   ( 0.00%)

수탉을 병아리로 바꾸면 어떻게되는지 봅시다 :

7. setup S/---/le-/-G-/cLG/ec
1. show board
  ABC 
 +---+
1|   | ce
2|le |
3| G |
4|cLG| *
 +---+
1. show lines
Gc4-c3 : #-90  (100.00%)
Gb3xb2 : #-30  ( 0.00%)
Lb4xa4 : #-28  ( 0.00%)
Gb3-c3 : #-10  ( 0.00%)
Gb3-a3 : #-8   ( 0.00%)
Lb4-c3 : #-2   ( 0.00%)
Lb4-a3 : #-2   ( 0.00%)

이 위치에서 가장 좋은 동작은 checkmate 88 (90-2)을 출발 위치보다 멀어지게합니다. 분석 할 때 병아리 파워를 높이 지 않고 갑자기 다른 위치로 이어질 가능성이 있습니다. 이전보다 메이트 (ad infinitum). 그것이 사실이라면 병아리 승진없이 승리 대신 G / --- / le- / cG- / CLG / e (아래 참조) 포지션을 추첨합니다 .

  ABC 
 +---+
1|   | *e
2|le |
3|cG |
4|CLG| 
 +---+

2. 철저한 검색의 정확성

사용 된 테이블베이스 생성기가 올바른 철저한 검색이라고 가정하면 Fabian의 패치는 파일 moves.c이 사용되는 유일한 위치 POS_FLAGS( validation.c위치 구조를 확인 하는 용도 제외) 이므로 병아리 프로모션을 비활성화하는 데 성공한 것 같습니다. 프로모션을 사용 중지합니다.

/* clear promotion bits for pieces that can't be promoted */
status &= POS_FLAGS;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.