Значения, установленные на 0, предполагают, что в шахматной игре достигается какая-то симметрия, смещение или баланс.
Один из подходов к игре в шахматы - это баланс или равновесие инь-янь.
Согласно Википедии инь и янь - это понятие дуализма. Он описывает, как кажущиеся противоположными или противоположные силы на самом деле могут быть взаимодополняющими, взаимосвязанными и взаимозависимыми, и как они могут порождать друг друга, когда они взаимосвязаны.
Однако принцип инь-ян кажется мне не слишком очевидным.
Вы когда-нибудь задумывались, что на самом деле может означать? В моем предыдущем посте Как делать нормализованные эвристические изображения я постарался объяснить идею нормализованной эвристической картины; Теперь позвольте мне сделать еще один шаг, чтобы исследовать шахматный баланс.
Напомним, вот состояние шахматной партии в самом начале, до того, как белые сделают первый ход.
/** * @test */ public function start_take_get_picture() { $board = new Board(); $pic = (new HeuristicPicture($board->getMovetext())) ->take() ->getPicture(); $expected = [ Symbol::WHITE => [ [ 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ], ], Symbol::BLACK => [ [ 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ], ], ]; $this->assertEquals($expected, $pic); }
Значение 0.5
для сил белых и черных означает, что они фактически уравновешены и, следовательно, уравновешены. Вот еще один пример сбалансированной шахматной доски.
/** * @test */ public function w_e4_b_e5_take_get_picture() { $board = new Board(); $board->play(Convert::toStdObj(Symbol::WHITE, 'e4')); $board->play(Convert::toStdObj(Symbol::BLACK, 'e5')); $pic = (new HeuristicPicture($board->getMovetext())) ->take() ->getPicture(); $expected = [ Symbol::WHITE => [ [ 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ], ], Symbol::BLACK => [ [ 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ], ], ]; $this->assertEquals($expected, $pic); }
Хм, интригующе.
Как вы, возможно, подозреваете, должны существовать миллионы и миллионы различных шахматных позиций, подобных этим двум, в полной гармонии со всем.
Дело в том, что php-chess позволяет вам также делать нормализованные эвристические картинки в виде баланса между белым и черным, как это описано ниже.
/** * @test */ public function w_e4_b_e5_take_get_balance() { $board = new Board(); $board->play(Convert::toStdObj(Symbol::WHITE, 'e4')); $board->play(Convert::toStdObj(Symbol::BLACK, 'e5')); $balance = (new HeuristicPicture($board->getMovetext())) ->take() ->getBalance(); $expected = [ [ 0, 0, 0, 0, 0, 0, 0, 0 ], ]; $this->assertEquals($expected, $balance); }
Таким образом, все значения, установленные на 0
, предполагают, что в шахматной игре достигается какая-то симметрия, смещение, баланс или что-то еще, что вы можете назвать этой конкретной ситуацией.
$balance = (new HeuristicPicture($board->getMovetext())) ->take() ->getBalance();
В предыдущем посте мы узнали, что закрытый вариант французской защиты Тарраша можно рассматривать как эвристическую картину, которая сделана так, как показано ниже.
/** * @test */ public function e4_e6_d4_d5_Nd2_Nf6_take_get_picture() { $board = new Board(); $board->play(Convert::toStdObj(Symbol::WHITE, 'e4')); $board->play(Convert::toStdObj(Symbol::BLACK, 'e6')); $board->play(Convert::toStdObj(Symbol::WHITE, 'd4')); $board->play(Convert::toStdObj(Symbol::BLACK, 'd5')); $board->play(Convert::toStdObj(Symbol::WHITE, 'Nd2')); $board->play(Convert::toStdObj(Symbol::BLACK, 'Nf6')); $pic = (new HeuristicPicture($board->getMovetext())) ->take() ->getPicture(); $expected = [ Symbol::WHITE => [ [ 0, 0.5, 0.38, 0.17, 0, 0.17, 0, 0 ], [ 0, 1, 0, 1, 0.5, 0.17, 0, 0 ], [ 1, 1, 0.5, 0.5, 0.5, 0.17, 0, 0 ], ], Symbol::BLACK => [ [ 0, 0, 0.63, 0, 0, 0.17, 0, 0 ], [ 0, 0, 0.38, 0.17, 0.5, 0.17, 0.5, 0.5 ], [ 1, 0, 1, 0.17, 1, 0.17, 1, 1 ], ], ]; $this->assertEquals($expected, $pic); }
Или, если вы предпочитаете сейчас, это можно решить с помощью эвристического изображения, которое сначала делается, а затем сбалансировано, и в этом случае массив $expected
дает вам обзор того, что происходит, используя только одно измерение, а не два.
/** * @test */ public function e4_e6_d4_d5_Nd2_Nf6_take_get_balance() { $board = new Board(); $board->play(Convert::toStdObj(Symbol::WHITE, 'e4')); $board->play(Convert::toStdObj(Symbol::BLACK, 'e6')); $board->play(Convert::toStdObj(Symbol::WHITE, 'd4')); $board->play(Convert::toStdObj(Symbol::BLACK, 'd5')); $board->play(Convert::toStdObj(Symbol::WHITE, 'Nd2')); $board->play(Convert::toStdObj(Symbol::BLACK, 'Nf6')); $balance = (new HeuristicPicture($board->getMovetext())) ->take() ->getBalance(); $expected = [ [ 0, 0.5, -0.25, 0.17, 0, 0, 0, 0 ], [ 0, 1, -0.38, 0.83, 0, 0, -0.5, -0.5 ], [ 0, 1, -0.5, 0.33, -0.5, 0, -1, -1 ], ]; $this->assertEquals($expected, $balance); }
Вспомните, как в Chess\HeuristicPicture
организованы различные оценочные функции.
namespace Chess; use Chess\Player; use Chess\Evaluation\AttackEvaluation; use Chess\Evaluation\CenterEvaluation; use Chess\Evaluation\ConnectivityEvaluation; use Chess\Evaluation\KingSafetyEvaluation; use Chess\Evaluation\MaterialEvaluation; use Chess\Evaluation\PressureEvaluation; use Chess\Evaluation\SpaceEvaluation; use Chess\Evaluation\SquareEvaluation; use Chess\Evaluation\TacticsEvaluation; use Chess\Evaluation\System; use Chess\PGN\Convert; use Chess\PGN\Symbol; class HeuristicPicture extends Player { protected $dimensions = [ MaterialEvaluation::class => 20, CenterEvaluation::class => 20, ConnectivityEvaluation::class => 10, SpaceEvaluation::class => 10, PressureEvaluation::class => 10, KingSafetyEvaluation::class => 10, TacticsEvaluation::class => 10, AttackEvaluation::class => 10, ]; protected $picture = []; ... }
И снова, согласно последнему элементу сбалансированного массива $expected
([ 0, 1, -0.5, 0.33, -0.5, 0, -1, -1 ]
), белые и черные имеют равный материал. Контроль белых по центру определенно более выгоден, тогда как фигуры черных лучше связаны. Кроме того, у белых больше места, но на этой стадии дебюта черные давят и атакуют e4
.
Вам также может быть интересно:
- Демистификация ИИ через человеческий шахматный движок
- Две вещи, которые требовались для моего проекта AI
- Какие полезные советы по снижению когнитивной нагрузки?
- Как делать нормализованные эвристические изображения
- Шахматная доска React с Redux и крючками в нескольких строках
- Подготовка набора данных для машинного обучения с помощью PHP