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

MadChess 3.0 Beta 6794c89 (King Safety)

I added evaluation of king safety to MadChess 3.0 Beta. Because determining the safety of a king’s position involves examining moves that attack squares near the king, I combined it with piece mobility evaluation, which also examines moves. When examining piece mobility, keep a weighted count of attacks on squares ringing the king (16 squares in outer ring and 8 squares in inner ring) with separate weights for attacks by minor pieces, rooks, and queens. In the following code, white moves to squares ringing the black king contribute negatively to black’s king safety. Black moves to squares ringing the white… Continue Reading

MadChess 3.0 Beta 6f3d17a (Late Move Pruning)

I added late move pruning to MadChess 3.0 Beta. Quiet moves (not captures, pawn promotions, castling, or check) near the search horizon that are sorted near the bottom of the move list- in order words, “late” moves- are skipped. These moves are “late” because history heuristics have recorded few instances of them causing a beta cutoff. Most likely they are futile (they will not raise the score to alpha), so the engine doesn’t waste time searching them. The search only examines two quiet moves immediately next to the search horizon, five quiet moves two ply from the horizon, up to… Continue Reading

MadChess 3.0 Beta 5c5d4fc (Piece Mobility)

I have not worked on my chess engine in over a year. I had other, more important, priorities. In the last year, my wife and I bought a new home closer to the city, sold our old home, moved (*), started new jobs in the summer, and ran the Chicago Marathon in the autumn. The little free time I had for hobby programming I spent on general interest projects, not on MadChess. I’m especially proud of Leaderless Replication, an essay I published on my general programming blog, ErikTheCoder. Lately I’ve had time to do some chess programming. I added piece… Continue Reading

MadChess 3.0 Beta Build 103 (Passed Pawns)

I added passed pawn evaluation to MadChess 3.0 Beta. The passed pawn evaluation code scores the following features: Passed Pawns Free Passed Pawns (no pieces blocking promotion path) King Escorted Passed Pawns Unstoppable Passed Pawns (Rule of the Square) Middlegame Passed Pawns: 000 000 003 008 015 024 034 000 Endgame Passed Pawns: 000 004 018 042 075 118 170 000 Endgame Free Passed Pawns: 000 008 034 077 138 216 311 000 Endgame King Escorted Passed Pawn: 11 Unstoppable Passed Pawn: 775   This code improved the engine’s understanding of threats created by pushing passed pawns. It increased the… Continue Reading