Knight Outpost

A knight positioned on an outpost controls opponent territory, restricting movement of the opponent’s pieces on the opponent’s side of the board. An outpost is defined as a square on the fifth or sixth rank, occupied by a minor piece (usually a knight), supported by its own pawn, and positioned such that it cannot ever be attacked by an opposing pawn. In other words, the opponent has no pawns on the neighboring files, or if the opponent has pawns on the neighboring files, they’ve advanced even with or beyond the outpost square. Red highlights in the above position indicate squares… Continue Reading

Controlling Space

Controlling board space- especially central squares- provides room to maneuver pieces. It cramps the opponent’s position, who will have difficulty bringing pieces out from behind their pawns. And it enables a quick redeployment of pieces from one zone of action (queenside, for example) to another zone of action (kingside) to initiate an attack or muster a defense around the king. Be careful not to overextend when grabbing space. In the following position, white appears to control more space than black. Black’s counterplay demonstrates, however, that white merely occupies space but does not control it. Black moves his knight to safety… Continue Reading

MadChess 3.0 Beta 4b7963b (Remove Aspiration Windows)

When analyzing a Carlsen versus Vachier-Lagrave game, I noticed MadChess 3.0 Beta struggling to find Magnus Carlsen’s crushing 23rd move, d6, in the following position. In the engine output displayed by the Hiarcs Chess GUI, I noticed MadChess kept restarting its search of ply 18. It indicated it was searching the first move (of 47 legal moves), second move, third move, etc… then would restart searching the first move again, still on ply 18. It restarted searching the first move of ply 18 numerous times. I suspected this was due to search instability caused by aspiration windows: searching a window… Continue Reading

MadChess 3.0 Beta d143bb5 (Time Management)

I improved MadChess 3.0 Beta’s time management. I added code that increases MoveTimeSoftLimit, a TimeSpan variable that controls how long the engine examines a position (in a timed game) before responding with its move. The code increases MoveTimeSoftLimit 25% each ply (depth >= 9) if the score decreases at least one third of a pawn from the prior ply. In some engines this is known as “panic time.” The engine notices the score dropping and- to anthropomorphize it- panics like a human chess player would, spending more time than usual searching for a move that prevents its position from crumbling.… Continue Reading

MadChess 3.0 Beta 2d855ec (Crash Bug)

I found and exterminated a bug that caused MadChess to crash in about one quarter of one percent of games. I noticed the engine crashes on line 6 of this code in the Board.IsMoveLegal(ref ulong Move) method. First Hypothesis : Illegal Move Causing King Capture? I suspected the crash was caused by kingSquare == Square.Illegal (meaning king not on any square) due to a missing king. Perhaps a move two ply earlier exposed its own king to check, MadChess erroneously considered the move legal, then captured the king the previous ply? If that were true, in the current ply, when… Continue Reading