Действительно ли правило продвижения цыплят в добуту сёги действительно имеет значение?

9

В добуцу сёги цыпленок (японская пешка) превращается в цыпленка (золотой генерал). По моему опыту, это продвижение происходит очень редко, и я подозреваю, после многих промахов.

Действительно ли правило продвижения цыплят в добуту сёги действительно имеет значение? То есть действительно ли игра изменится, если промоушен будет снят (а вместо этого цыплята застрянут в последнем ряду)?

Под реальным изменением я подразумеваю классификацию изменения позиции (выигрыш, проигрыш или ничья) или точную последовательность ходов, чтобы заставить выигрыш от выигрышной позиции существенно измениться.

hkBst
источник

Ответы:

6

Правило продвижения на самом деле имеет большое значение. При идеальной игре игра заканчивается ничьей, а не выигрышем белых / готей, если вы отказываетесь от правила продвижения. Фактически, оценка всех четырех ходов в исходной позиции изменяется таким образом.

Я использовал два независимых метода для получения этого результата, чтобы перепроверить, что в моих реализациях нет ошибок:

  1. Используя движок с альфа-бета-поиском, а именно мой форк Stockfish для вариантов сказочных шахмат (включая варианты сёги), я провел глубокий поиск (~ 1 ч) до и после отключения правила продвижения , смотрите результаты ниже.
  2. Так как dobutsu shogi - решенная игра , для нее есть генераторы таблиц. Я использовал генератор табличной базы с открытым исходным кодом и изменил его, чтобы отключить продвижение по службе (я не очень знаком с этой базой кода, но, поскольку результаты двух методов совпадают, мое изменение, похоже, работает нормально). Я запустил генерацию таблиц с обоими наборами правил и проверил результаты, которые вы можете найти ниже.

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

Теперь я убежден, что ответ Фабиана Фихтера верен. Следующий комментарий к ответу Фабиана может помочь убедить других в том же.

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%)

Сенте тогда играет 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находится в одном шаге от продвижения по службе и, более того, будет проверять продвижение, что заставит льва Сенте принять его. Единственная проблема заключается в том, что лучший ход - это потеря птенца, 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| 
 +---+

2. Правильность исчерпывающего поиска

Предполагая, что использованный генератор базовых таблиц является правильным исчерпывающим поиском, кажется, что патч Фабиана должен преуспеть в отключении продвижения цыплят, поскольку файл moves.c- это единственное место, POS_FLAGSкоторое используется (за исключением использования в validation.cдля проверки структур позиции) и действительно кажется специально построенным отключить рекламные акции.

/* clear promotion bits for pieces that can't be promoted */
status &= POS_FLAGS;
hkBst
источник