====== Chess - Programming - Checklist ====== A list of items to consider using: ===== BitBoards ===== * Board. [done] * Magic Bitboards. [done] ===== Grids ===== * Traditional grid. [done] ===== Move Generation ===== * Opening Books. * Own format. [done] * Huffman. * Polygot. [done] * Random Move Generation. [done] * Staged Move Generation. * Some programs do not generate all moves at once, but do it in several stages (i.e. hash move first, then captures, then killer moves, then all the rest in a chunk) on the premise that if one of the early moves causes a cutoff, then we may save on the effort of generating the rest of the moves. * Check extensions. When the own king is in check only generate moves that can be made to avoid the check. [done] ===== Move Prioritization ===== * Move Ordering. * Best Move (from hash table). * Captures: * by Most Valuable Victim (MVV) * by Least Valuable Attacker (LVA). * Pawn Promotions. * History Heuristic. * Killer Moves. ===== Move Storage ===== * FEN. [done] * PGN. [done] * Own format. [done] ===== Searching ===== * Alpha / Beta search. [done] * Negamax search. [done] * Aspiration Windows. * MinMax search. [done] * MultiPV (Single, non-PVS search). * Multi Threading. * Ponder. * Principal Variation Search (PVS). * Quiet Search (Quiescence Search). [done] * End-Games. * Common end-games (K vs KP, K vs KQ, K v KR, K v KBN). ===== Pruning ===== * Futility Pruning. * Null Move Pruning. * Late Move Pruning (LMP). * Late Move Reductions (LMR). ===== Evaluations ===== * Standard Evaluations: * Mate. [done] * Stalemate. [done] * Draw by 3-fold repetition. * Draw by insufficient material. [done] * 50 moves without a pawn move. [done] * 75 moves without a capture or pawn move. [done] * Material Values. [done] * Tapered Evaluation - Different values at different stages of the game (beginning, middle-game, end-game). [done] * Positional Knowledge. * Piece Locations: [done] * Good and Bad squares. [done] * Relative to own pieces. * Relative to opponent pieces. * Threatened pieces. * Piece Mobility. [done] * Piece Occupancy. [done] * Control of Center. [done] * End-Games. * Drawing end-games. * End-games without Pawns. * Bishops. * On long diagonals. * Bishop Pair. [done] * In Open games. * Knights. * In Closed games. * Pawns. * Blocked. * Passed. [done] * Passed and escorted by a piece. * Passed and escorted by king. * Passed and free. * Passed and unstoppable. * Isolated pawns. [done] * Pawn Storms. [done] * King Safety. * Castled. [done] * Near a semi-open file. * Near squares attacked by opponent. * Pawn Shield. [done] ===== Speed / Strength ===== * Nodes Per Second (Search Speed). [done] * Depth settings. [done] * Perft. [done] * Divide. [done] ===== Time-Controls ===== * Seconds per move. [done] * Moves per time-frame. * Bullet. * Blitz. * Rapid chess ===== Transposition Tables ===== * Transposition (hash) Tables. [done] * Zorbrist. [done] ===== Protocols ===== * UCI Protocol * Winboard