在dobutsu shogi中,小鸡(日本典当)晋升为鸡(金将军)。根据我的经验,这种晋升很少发生,我怀疑经过很多失误。
准将军中的小鸡晋升规则真的重要吗?也就是说,如果放弃了小鸡晋升(小鸡被卡在最后一行上),游戏真的会改变吗?
所谓真正的变化,是指位置变化的类别(获胜,失败或平局),或者是迫使获胜位置发生获胜的精确动作顺序。
在dobutsu shogi中,小鸡(日本典当)晋升为鸡(金将军)。根据我的经验,这种晋升很少发生,我怀疑经过很多失误。
准将军中的小鸡晋升规则真的重要吗?也就是说,如果放弃了小鸡晋升(小鸡被卡在最后一行上),游戏真的会改变吗?
所谓真正的变化,是指位置变化的类别(获胜,失败或平局),或者是迫使获胜位置发生获胜的精确动作顺序。
Answers:
晋升规则实际上很重要。玩得尽善尽美,如果您放弃晋升规则,游戏将以平局结束,而不是白/获胜。实际上,初始位置中所有四个动作的评估都以这种方式改变。
为了仔细检查实现中是否存在错误,我使用了两种独立的方法来获得此结果:
输入:
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协议说明。
输入:
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%)
请注意:
我现在相信Fabian Fichter的回答是正确的。以下有关Fabian答案的评论可能有助于说服其他人。
分析修改后的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%)
在这个位置上,最佳动作将使将棋伴侣88(90-2)移开,该位置比将棋子要比起始位置更远,这使得在分析时将导致另一个位置,即不提升雏鸡力量突然偏离比以前更友好(无限)。如果为真,那将使位置G / --- / le- / cG- / CLG / e(见下文)平局,而不是没有小鸡晋级的胜利。
ABC
+---+
1| | *e
2|le |
3|cG |
4|CLG|
+---+
假设使用的表库生成器是正确的穷举搜索,似乎Fabian的补丁应该可以成功禁用小鸡升级,因为文件moves.c
是唯一使用的地方POS_FLAGS
(除了用于validation.c
检查位置结构的用途之外),而且确实看起来是专门构建的禁用促销。
/* clear promotion bits for pieces that can't be promoted */
status &= POS_FLAGS;