Difference between revisions of "BBC"
GerdIsenberg (talk | contribs) |
GerdIsenberg (talk | contribs) |
||
Line 24: | Line 24: | ||
==YouTube== | ==YouTube== | ||
− | # [https://youtu.be/QUNP-UjujBM Intro] » [[Bitboards]] | + | # [https://youtu.be/QUNP-UjujBM Intro] » <span style="background-color: #ffffac;">[[Bitboards]]</span> |
# [https://youtu.be/o-ySJ2EBarY Creating comfortable conditions for development] | # [https://youtu.be/o-ySJ2EBarY Creating comfortable conditions for development] | ||
− | # [https://youtu.be/OTWG4dERdSc Generating pre-calculated PAWN ATTACK tables] » [[Pawn Attacks (Bitboards)]] | + | # [https://youtu.be/OTWG4dERdSc Generating pre-calculated PAWN ATTACK tables] » <span style="background-color: #ffffac;">[[Pawn Attacks (Bitboards)]]</span> |
− | # [https://youtu.be/nZLuLn9JW0E Generating pre-calculated KNIGHT ATTACK table] » [[Knight Pattern#KnightAttacks|Knight Attacks]] | + | # [https://youtu.be/nZLuLn9JW0E Generating pre-calculated KNIGHT ATTACK table] » <span style="background-color: #ffffac;">[[Knight Pattern#KnightAttacks|Knight Attacks]]</span> |
− | # [https://youtu.be/dWfwcfWg4XY Generating pre-calculated KING ATTACK tables] » [[King Pattern#KingAttacks|King Attacks]] | + | # [https://youtu.be/dWfwcfWg4XY Generating pre-calculated KING ATTACK tables] » <span style="background-color: #ffffac;">[[King Pattern#KingAttacks|King Attacks]]</span> |
− | # [https://youtu.be/Obe1-u3S0Y4 Masking relevant bishop occupancy bits to form a key for MAGIC BITBOARDS] » [[Magic Bitboards]] | + | # [https://youtu.be/Obe1-u3S0Y4 Masking relevant bishop occupancy bits to form a key for MAGIC BITBOARDS] » <span style="background-color: #ffffac;">[[Magic Bitboards]]</span> |
# [https://youtu.be/bL7LW3jntw0 Masking relevant ROOK OCCUPANCY BITS to form a key for MAGIC BITBOARDS] | # [https://youtu.be/bL7LW3jntw0 Masking relevant ROOK OCCUPANCY BITS to form a key for MAGIC BITBOARDS] | ||
− | # [https://youtu.be/XFiZ3tjt7K4 Generating SLIDER PIECES ATTACKS on the fly for MAGIC BITBOARD purposes] » [[Sliding Piece Attacks]] | + | # [https://youtu.be/XFiZ3tjt7K4 Generating SLIDER PIECES ATTACKS on the fly for MAGIC BITBOARD purposes] » <span style="background-color: #ffffac;">[[Sliding Piece Attacks]]</span> |
− | # [https://youtu.be/0F_aeUik91A Implementing BIT COUNT routine (Brian Kernighan's way)] » [[Population Count#BrianKernighansway|Population Count - Brian Kernighan's way]] | + | # [https://youtu.be/0F_aeUik91A Implementing BIT COUNT routine (Brian Kernighan's way)] » <span style="background-color: #ffffac;">[[Population Count#BrianKernighansway|Population Count - Brian Kernighan's way]]</span> |
− | # [https://youtu.be/JhLgV2P9sBg Getting least significant 1st BIT INDEX] » [[BitScan#Index of LS1B by Popcount|Index of LS1B by Popcount]] | + | # [https://youtu.be/JhLgV2P9sBg Getting least significant 1st BIT INDEX] » <span style="background-color: #ffffac;">[[BitScan#Index of LS1B by Popcount|Index of LS1B by Popcount]]</span> |
# [https://youtu.be/nyk3usU95IY Populating OCCUPANCY sets to multiply them later by MAGIC NUMBERS] | # [https://youtu.be/nyk3usU95IY Populating OCCUPANCY sets to multiply them later by MAGIC NUMBERS] | ||
# [https://youtu.be/gaXLyW-yMvg Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces] | # [https://youtu.be/gaXLyW-yMvg Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces] | ||
− | # [https://youtu.be/JjFYmkUhLN4 Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm] » [[Pseudorandom Number Generator]] | + | # [https://youtu.be/JjFYmkUhLN4 Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm] » <span style="background-color: #ffffac;">[[Pseudorandom Number Generator]]</span> |
− | # [https://youtu.be/KqWeOVyOoyU Generating MAGIC NUMBER candidates] » [[Looking for Magics]] | + | # [https://youtu.be/KqWeOVyOoyU Generating MAGIC NUMBER candidates] » <span style="background-color: #ffffac;">[[Looking for Magics]]</span> |
# [https://youtu.be/UnEu5GOiSEs Generating MAGIC NUMBERS via brute force trial and error method] | # [https://youtu.be/UnEu5GOiSEs Generating MAGIC NUMBERS via brute force trial and error method] | ||
− | # [https://youtu.be/1lAM8ffBg0A Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS] » [[Magic Bitboards#Plain|Plain Magic Bitboards]] | + | # [https://youtu.be/1lAM8ffBg0A Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS] » <span style="background-color: #ffffac;">[[Magic Bitboards#Plain|Plain Magic Bitboards]]</span> |
− | # [https://youtu.be/ZBBju42pKvw Defining BITBOARDS, OCCUPANCIES and helper variables] » [[Bitboard Board-Definition]] | + | # [https://youtu.be/ZBBju42pKvw Defining BITBOARDS, OCCUPANCIES and helper variables] » <span style="background-color: #ffffac;">[[Bitboard Board-Definition]]</span> |
− | # [https://youtu.be/iJ0VpXq90zY Printing CHESS BOARD position and game state variables] » [[Chess Position]] | + | # [https://youtu.be/iJ0VpXq90zY Printing CHESS BOARD position and game state variables] » <span style="background-color: #ffffac;">[[Chess Position]]</span> |
− | # [https://youtu.be/IdFHFRiQtj8 Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state] » [[Forsyth-Edwards Notation]] | + | # [https://youtu.be/IdFHFRiQtj8 Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state] » <span style="background-color: #ffffac;">[[Forsyth-Edwards Notation]]</span> |
# [https://youtu.be/KSs4KRQPOKE Getting QUEEN ATTACKS by looking up bishop & rook attack tables] | # [https://youtu.be/KSs4KRQPOKE Getting QUEEN ATTACKS by looking up bishop & rook attack tables] | ||
− | # [https://youtu.be/v9CEqjliv3E Implementing routine to find out whether SQUARE IS ATTACKED] » [[Square Attacked By]] | + | # [https://youtu.be/v9CEqjliv3E Implementing routine to find out whether SQUARE IS ATTACKED] » <span style="background-color: #ffffac;">[[Square Attacked By]]</span> |
− | # [https://youtu.be/eRvCLaa-3Rk Writing GENERATE MOVES function skeleton] » [[Move Generation]] | + | # [https://youtu.be/eRvCLaa-3Rk Writing GENERATE MOVES function skeleton] »<span style="background-color: #ffffac;">[[Move Generation]]</span> |
− | # [https://youtu.be/62Hy1JEehqI Generating QUIET PAWN moves] » [[Pawn Pushes (Bitboards)]] | + | # [https://youtu.be/62Hy1JEehqI Generating QUIET PAWN moves] » <span style="background-color: #ffffac;">[[Pawn Pushes (Bitboards)]]</span> |
− | # [https://youtu.be/cezEoX8WpWs Generating PAWN CAPTURE moves] » [[Pawn Attacks (Bitboards)#PawnCaptures|Pawn Captures]] | + | # [https://youtu.be/cezEoX8WpWs Generating PAWN CAPTURE moves] » <span style="background-color: #ffffac;">[[Pawn Attacks (Bitboards)#PawnCaptures|Pawn Captures]]</span> |
− | # [https://youtu.be/TXvV2jVl7co Generating CASTLING MOVES] » [[Castling]] | + | # [https://youtu.be/TXvV2jVl7co Generating CASTLING MOVES] » <span style="background-color: #ffffac;">[[Castling]]</span> |
# [https://youtu.be/clNvT1W93o4 Generating SLIDER & LEAPER piece MOVES by attack tables lookup] | # [https://youtu.be/clNvT1W93o4 Generating SLIDER & LEAPER piece MOVES by attack tables lookup] | ||
− | # [https://youtu.be/ubX5lyIQoSs Binary formatting of MOVE ITEMS] » [[Encoding Moves]] | + | # [https://youtu.be/ubX5lyIQoSs Binary formatting of MOVE ITEMS] » <span style="background-color: #ffffac;">[[Encoding Moves]]</span> |
# [https://youtu.be/gyf3mr1LI7A Encoding & decoding MOVE ITEMS] | # [https://youtu.be/gyf3mr1LI7A Encoding & decoding MOVE ITEMS] | ||
− | # [https://youtu.be/AINYYiV-83I Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions] » [[Move List]] | + | # [https://youtu.be/AINYYiV-83I Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions] » <span style="background-color: #ffffac;">[[Move List]]</span> |
# [https://youtu.be/944aTQQnWAA Populating MOVE LIST with newly GENERATED MOVES] | # [https://youtu.be/944aTQQnWAA Populating MOVE LIST with newly GENERATED MOVES] | ||
− | # [https://youtu.be/CsUelozl0a8 Preserving & restoring BOARD STATE aka COPY/MAKE approach] » [[Copy-Make]] | + | # [https://youtu.be/CsUelozl0a8 Preserving & restoring BOARD STATE aka COPY/MAKE approach] » <span style="background-color: #ffffac;">[[Copy-Make]]</span> |
− | # [https://youtu.be/coVPpTJN9iU Implementing MAKE MOVE function (moving pieces)] » [[Make Move]] | + | # [https://youtu.be/coVPpTJN9iU Implementing MAKE MOVE function (moving pieces)] » <span style="background-color: #ffffac;">[[Make Move]]</span> |
− | # [https://youtu.be/nkRrQnhRo80 Implementing MAKE MOVE function (handling captures)] » [[Captures]] | + | # [https://youtu.be/nkRrQnhRo80 Implementing MAKE MOVE function (handling captures)] » <span style="background-color: #ffffac;">[[Captures]]</span> |
− | # [https://youtu.be/gnDyJImkfVo Implementing MAKE MOVE function (handling pawn promotions)] » [[Promotions]] | + | # [https://youtu.be/gnDyJImkfVo Implementing MAKE MOVE function (handling pawn promotions)] » <span style="background-color: #ffffac;">[[Promotions]]</span> |
− | # [https://youtu.be/5h5Z3bx0EKc Implementing MAKE MOVE function (handling enpassant moves)] » [[En passant]] | + | # [https://youtu.be/5h5Z3bx0EKc Implementing MAKE MOVE function (handling enpassant moves)] » <span style="background-color: #ffffac;">[[En passant]]</span> |
− | # [https://youtu.be/J-k2p1g6VTQ Implementing MAKE MOVE function (handling double pawn pushes)] » [[Pawn Push#DoublePush|Double Pawn Push]] | + | # [https://youtu.be/J-k2p1g6VTQ Implementing MAKE MOVE function (handling double pawn pushes)] » <span style="background-color: #ffffac;">[[Pawn Push#DoublePush|Double Pawn Push]]</span> |
− | # [https://youtu.be/pHohRpH30a0 Implementing MAKE MOVE function (handling castling moves)] » [[Castling]] | + | # [https://youtu.be/pHohRpH30a0 Implementing MAKE MOVE function (handling castling moves)] » <span style="background-color: #ffffac;">[[Castling]]</span> |
− | # [https://youtu.be/zOWPZ4fuLGg Implementing MAKE MOVE function (updating castling rights)] » [[Castling Rights]] | + | # [https://youtu.be/zOWPZ4fuLGg Implementing MAKE MOVE function (updating castling rights)] » <span style="background-color: #ffffac;">[[Castling Rights]]</span> |
− | # [https://youtu.be/ZBotXGrgbdg Implementing MAKE MOVE function (updating occupancy bitboards)] » [[Occupancy]] | + | # [https://youtu.be/ZBotXGrgbdg Implementing MAKE MOVE function (updating occupancy bitboards)] » <span style="background-color: #ffffac;">[[Occupancy]]</span> |
− | # [https://youtu.be/sg4AMsXYuk4 Implementing MAKE MOVE function (checking whether the king is in check)] » [[Check]] | + | # [https://youtu.be/sg4AMsXYuk4 Implementing MAKE MOVE function (checking whether the king is in check)] » <span style="background-color: #ffffac;">[[Check]]</span> |
# [https://youtu.be/bK_dg_gMW6s Writing a cross-platform function for GETTING TIME IN MILLISECONDS] | # [https://youtu.be/bK_dg_gMW6s Writing a cross-platform function for GETTING TIME IN MILLISECONDS] | ||
− | # [https://youtu.be/o0xCJDhbSUM Writing PERFT DRIVER function] » [[Perft]] | + | # [https://youtu.be/o0xCJDhbSUM Writing PERFT DRIVER function] » <span style="background-color: #ffffac;">[[Perft]]</span> |
# [https://youtu.be/p2VuC0xTPoc Writing PERFT TEST function] | # [https://youtu.be/p2VuC0xTPoc Writing PERFT TEST function] | ||
− | # [https://youtu.be/1gOYB9HelXk Connecting to the GUI (parse move string)] » [[GUI]], [[UCI]] | + | # [https://youtu.be/1gOYB9HelXk Connecting to the GUI (parse move string)] » <span style="background-color: #ffffac;">[[GUI]], [[UCI]]</span> |
# [https://youtu.be/giSqiH6aa_o Connecting to the GUI (parse "position" command)] | # [https://youtu.be/giSqiH6aa_o Connecting to the GUI (parse "position" command)] | ||
# [https://youtu.be/lb46nX6gSBw Connecting to the GUI (parse "go" command)] | # [https://youtu.be/lb46nX6gSBw Connecting to the GUI (parse "go" command)] | ||
− | # [https://youtu.be/rW2jzTA4kW4 Connecting to the GUI (main loop) + BONUS (TSCP vs BBC blitz game)] » [[TSCP]] | + | # [https://youtu.be/rW2jzTA4kW4 Connecting to the GUI (main loop) + BONUS (TSCP vs BBC blitz game)] » <span style="background-color: #ffffac;">[[TSCP]]</span> |
− | # [https://youtu.be/CMshozGbBdw Implementing RUDIMENTARY EVALUATION (material score)] » [[Evaluation]], [[Material]] | + | # [https://youtu.be/CMshozGbBdw Implementing RUDIMENTARY EVALUATION (material score)] » <span style="background-color: #ffffac;">[[Evaluation]], [[Material]]</span> |
# [https://youtu.be/E2JzRNI1ODI Implementing RUDIMENTARY EVALUATION (positional piece scores)] | # [https://youtu.be/E2JzRNI1ODI Implementing RUDIMENTARY EVALUATION (positional piece scores)] | ||
− | # [https://youtu.be/b8OcJM3VeaU Writing NEGAMAX ALPHA BETA skeleton] » [[Negamax]], [[Alpha-Beta]] | + | # [https://youtu.be/b8OcJM3VeaU Writing NEGAMAX ALPHA BETA skeleton] » <span style="background-color: #ffffac;">[[Negamax]], [[Alpha-Beta]]</span> |
− | # [https://youtu.be/lAAdjCkWd9s Detecting CHECKMATE and STALEMATE] » [[Checkmate]], [[Stalemate]] | + | # [https://youtu.be/lAAdjCkWd9s Detecting CHECKMATE and STALEMATE] » <span style="background-color: #ffffac;">[[Checkmate]], [[Stalemate]]</span> |
− | # [https://youtu.be/WzEhVjdNByg Implementing QUIESCENCE SEARCH] » [[Quiescence Search]] | + | # [https://youtu.be/WzEhVjdNByg Implementing QUIESCENCE SEARCH] » <span style="background-color: #ffffac;">[[Quiescence Search]]</span> |
− | # [https://youtu.be/NMNBWxinpPY Defining MVV LVA (Most Valuable Victim - Least Valuable Attacker) table] » [[MVV-LVA|MVV/LVA]] | + | # [https://youtu.be/NMNBWxinpPY Defining MVV LVA (Most Valuable Victim - Least Valuable Attacker) table] » <span style="background-color: #ffffac;">[[MVV-LVA|MVV/LVA]]</span> |
− | # [https://youtu.be/VeJnLN7jFm4 Writing SCORE MOVE function] » [[Move Ordering]] | + | # [https://youtu.be/VeJnLN7jFm4 Writing SCORE MOVE function] » <span style="background-color: #ffffac;">[[Move Ordering]]</span> |
# [https://youtu.be/3-9tzzmtQQ0 Writing SORT MOVES function] | # [https://youtu.be/3-9tzzmtQQ0 Writing SORT MOVES function] | ||
− | # [https://youtu.be/DVSp_31iTBU Applying MOVE ORDERING to sort captures] » [[Captures]] | + | # [https://youtu.be/DVSp_31iTBU Applying MOVE ORDERING to sort captures] » <span style="background-color: #ffffac;">[[Captures]]</span> |
− | # [https://youtu.be/MA6d1hZ1YBE Sorting KILLER & HISTORY moves] » [[Killer Heuristic]], [[History Heuristic]] | + | # [https://youtu.be/MA6d1hZ1YBE Sorting KILLER & HISTORY moves] » <span style="background-color: #ffffac;">[[Killer Heuristic]], [[History Heuristic]]</span> |
− | # [https://youtu.be/LOR-dkAkUyM Collecting PV (Principle Variation) from the search] » [[Principal Variation]] | + | # [https://youtu.be/LOR-dkAkUyM Collecting PV (Principle Variation) from the search] » <span style="background-color: #ffffac;">[[Principal Variation]]</span> |
− | # [https://youtu.be/yVyQSUYts0A Implementing ITERATIVE DEEPENING] » [[Iterative Deepening]] | + | # [https://youtu.be/yVyQSUYts0A Implementing ITERATIVE DEEPENING] » <span style="background-color: #ffffac;">[[Iterative Deepening]]</span> |
# [https://youtu.be/heJUljl_zNE Sorting PV moves + some BONUS TALK at the end] | # [https://youtu.be/heJUljl_zNE Sorting PV moves + some BONUS TALK at the end] | ||
− | # [https://youtu.be/Gs4Zk6aihyQ Implementing PVS (Principle Variation Search)] » [[Principal Variation Search]] | + | # [https://youtu.be/Gs4Zk6aihyQ Implementing PVS (Principle Variation Search)] » <span style="background-color: #ffffac;">[[Principal Variation Search]]</span> |
− | # [https://youtu.be/OLT0bU0SIeg Applying LMR (Late Move Reduction)] » [[Late Move Reductions]] | + | # [https://youtu.be/OLT0bU0SIeg Applying LMR (Late Move Reduction)] » <span style="background-color: #ffffac;">[[Late Move Reductions]]</span> |
− | # [https://youtu.be/n6xAzopULxU Applying NULL MOVE PRUNING] » [[Null Move Pruning]] | + | # [https://youtu.be/n6xAzopULxU Applying NULL MOVE PRUNING] » <span style="background-color: #ffffac;">[[Null Move Pruning]]</span> |
− | # [https://youtu.be/1LmdOHshYkI Adjusting ASPIRATION WINDOW during iterative deepening] » [[Aspiration Windows]] | + | # [https://youtu.be/1LmdOHshYkI Adjusting ASPIRATION WINDOW during iterative deepening] » <span style="background-color: #ffffac;">[[Aspiration Windows]]</span> |
# [https://youtu.be/azEmgbdiecc BUG ALERT!!! Fixing PVS duplication bug] | # [https://youtu.be/azEmgbdiecc BUG ALERT!!! Fixing PVS duplication bug] | ||
− | # [https://youtu.be/t48NYINOekw Handling TIME CONTROLS (forked from VICE by BluefeverSoftware)] » [[Vice]] | + | # [https://youtu.be/t48NYINOekw Handling TIME CONTROLS (forked from VICE by BluefeverSoftware)] » <span style="background-color: #ffffac;">[[Vice]]</span> |
− | # [https://youtu.be/W7dah-dat8Q Zobrist HASHING (initialize random keys)] » [[Zobrist Hashing]] | + | # [https://youtu.be/W7dah-dat8Q Zobrist HASHING (initialize random keys)] » <span style="background-color: #ffffac;">[[Zobrist Hashing]]</span> |
# [https://youtu.be/sV2C7hx-gOE Zobrist HASHING (generate hash key)] | # [https://youtu.be/sV2C7hx-gOE Zobrist HASHING (generate hash key)] | ||
− | # [https://youtu.be/5EMLgIFv5Qg Zobrist HASHING (hash keys incremental updates)] » [[Incremental Updates]] | + | # [https://youtu.be/5EMLgIFv5Qg Zobrist HASHING (hash keys incremental updates)] » <span style="background-color: #ffffac;">[[Incremental Updates]] |
− | # [https://youtu.be/fEHjpzrcRxk Implementing HASH TABLE aka transposition table (define & initialize)] » [[Transposition Table]] <ref>[http://web.archive.org/web/20070809015843/www.seanet.com/%7Ebrucemo/topics/hashing.htm The Main Transposition Table] from [[Bruce Moreland|Bruce Moreland's]] [http://web.archive.org/web/20070607231311/www.brucemo.com/compchess/programming/index.htm Programming Topics]</ref> | + | # [https://youtu.be/fEHjpzrcRxk Implementing HASH TABLE aka transposition table (define & initialize)] » <span style="background-color: #ffffac;">[[Transposition Table]]</span> <ref>[http://web.archive.org/web/20070809015843/www.seanet.com/%7Ebrucemo/topics/hashing.htm The Main Transposition Table] from [[Bruce Moreland|Bruce Moreland's]] [http://web.archive.org/web/20070607231311/www.brucemo.com/compchess/programming/index.htm Programming Topics]</ref> |
# [https://youtu.be/NcboP08y_JQ Implementing HASH TABLE aka transposition table (read/write hash entry)] | # [https://youtu.be/NcboP08y_JQ Implementing HASH TABLE aka transposition table (read/write hash entry)] | ||
# [https://youtu.be/HNtAt9RMJVs Implementing HASH TABLE aka transposition table (connecting to search)] | # [https://youtu.be/HNtAt9RMJVs Implementing HASH TABLE aka transposition table (connecting to search)] | ||
# [https://youtu.be/4SXKBTGUkjk BUG ALERT! Fixing lack of enpassant & side hashing on null move] | # [https://youtu.be/4SXKBTGUkjk BUG ALERT! Fixing lack of enpassant & side hashing on null move] | ||
# [https://youtu.be/g1b_rT9VqAw More search BUG FIXES &CLEANUPS] | # [https://youtu.be/g1b_rT9VqAw More search BUG FIXES &CLEANUPS] | ||
− | # [https://youtu.be/XfeuxubYlT0 Handling MATING SCORES in HASH TABLE aka transposition table] » [[Score#MateScores|Mate Scores]] | + | # [https://youtu.be/XfeuxubYlT0 Handling MATING SCORES in HASH TABLE aka transposition table] » <span style="background-color: #ffffac;">[[Score#MateScores|Mate Scores]]</span> |
# [https://youtu.be/WcoOTg7Aq4E Sending MATING SCORES to GUI + some cleanups & adjustments] | # [https://youtu.be/WcoOTg7Aq4E Sending MATING SCORES to GUI + some cleanups & adjustments] | ||
− | # [https://youtu.be/QhFtquEeffA Detecting THREE FOLD REPETITIONS] » [[Repetitions]] | + | # [https://youtu.be/QhFtquEeffA Detecting THREE FOLD REPETITIONS] » <span style="background-color: #ffffac;">[[Repetitions]]</span> |
# [https://youtu.be/F8ueIueVsHI Final (hopefully!) SEARCH BUG FIXES] | # [https://youtu.be/F8ueIueVsHI Final (hopefully!) SEARCH BUG FIXES] | ||
− | # [https://youtu.be/Yqpm6Ad4scI Improving EVALUATION (setting file & rank masks)] » [[Evaluation]], [[Pawn Pattern and Properties]] | + | # [https://youtu.be/Yqpm6Ad4scI Improving EVALUATION (setting file & rank masks)] » <span style="background-color: #ffffac;">[[Evaluation]], [[Pawn Pattern and Properties]]</span> |
− | # [https://youtu.be/iwBkAEC4KSs Improving EVALUATION (initializing isolated & passed pawn masks)] » [[Isolated Pawns (Bitboards)]], [[Passed Pawns (Bitboards)]] | + | # [https://youtu.be/iwBkAEC4KSs Improving EVALUATION (initializing isolated & passed pawn masks)] » <span style="background-color: #ffffac;">[[Isolated Pawns (Bitboards)]], [[Passed Pawns (Bitboards)]]</span> |
# [https://youtu.be/CgvZMsJImJg Improving EVALUATION (double & isolated penalties, passed pawns bonus)] | # [https://youtu.be/CgvZMsJImJg Improving EVALUATION (double & isolated penalties, passed pawns bonus)] | ||
− | # [https://youtu.be/Bp4F_321j4I Improving EVALUATION (open & semi open file scoring)] » [[Pawns and Files (Bitboards)]], [[Open File]] | + | # [https://youtu.be/Bp4F_321j4I Improving EVALUATION (open & semi open file scoring)] » <span style="background-color: #ffffac;">[[Pawns and Files (Bitboards)]], [[Open File]]</span> |
− | # [https://youtu.be/iq2lxyjWZvA Improving EVALUATION (mobility and king safety)] » [[Mobility]], [[King Safety]] | + | # [https://youtu.be/iq2lxyjWZvA Improving EVALUATION (mobility and king safety)] » <span style="background-color: #ffffac;">[[Mobility]], [[King Safety]]</span> |
# [https://youtu.be/1SgnTKzWuss BBC 1.0 - RELEASE] | # [https://youtu.be/1SgnTKzWuss BBC 1.0 - RELEASE] | ||
Revision as of 12:50, 26 September 2020
BBC, (Bit Board Chess)
a didactic bitboard chess engine by Maksim Korzh alias Code Monkey King, written in C. BBC is subject of a YouTube video tutorial started in summer 2020 [1], actually work in progress.
The open source engine is further published on GitHub [2], and will be compliant to the UCI protocol.
While the series offers a nice introduction in chess engine programming and bitboard techniques,
the advanced approach of Magic Bitboards to determine sliding piece attacks with all its lengthy initialization topics might be hard to understand and deterrent for the intended novice target group.
The linewise approaches of First Rank Attacks to introduce occupancy lookups, followed by Kindergarten Bitboards - as intermediate step towards magics bitboards - seem didactically more appropriate. Anyway, a valuable video series covering various aspects of computer chess programming. BBC 1.0 was finally released on September 24, 2020 [3].
See also
Forum Posts
- Comparing 4 move generators: 0x88 vs 10x12 vs 10x12 + bitboards HYBRID vs Pure MAGIC BITBOARDS by Maksim Korzh, CCC, August 28, 2020
- Bitboard CHESS ENGINE in C: YouTube series by Code Monkey King by Maksim Korzh, CCC, September 06, 2020
- Zobrist hashing tutorials on YouTube by Maksim Korzh, CCC, September 19, 2020
- BBC 1.0 release - UCI chess engine by CMK by Maksim Korzh, CCC, September 24, 2020
- How to rate my engine in CCRL? by Maksim Korzh, CCC, September 25, 2020 » CCRL
External Links
GitHub
YouTube
- Intro » Bitboards
- Creating comfortable conditions for development
- Generating pre-calculated PAWN ATTACK tables » Pawn Attacks (Bitboards)
- Generating pre-calculated KNIGHT ATTACK table » Knight Attacks
- Generating pre-calculated KING ATTACK tables » King Attacks
- Masking relevant bishop occupancy bits to form a key for MAGIC BITBOARDS » Magic Bitboards
- Masking relevant ROOK OCCUPANCY BITS to form a key for MAGIC BITBOARDS
- Generating SLIDER PIECES ATTACKS on the fly for MAGIC BITBOARD purposes » Sliding Piece Attacks
- Implementing BIT COUNT routine (Brian Kernighan's way) » Population Count - Brian Kernighan's way
- Getting least significant 1st BIT INDEX » Index of LS1B by Popcount
- Populating OCCUPANCY sets to multiply them later by MAGIC NUMBERS
- Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces
- Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm » Pseudorandom Number Generator
- Generating MAGIC NUMBER candidates » Looking for Magics
- Generating MAGIC NUMBERS via brute force trial and error method
- Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS » Plain Magic Bitboards
- Defining BITBOARDS, OCCUPANCIES and helper variables » Bitboard Board-Definition
- Printing CHESS BOARD position and game state variables » Chess Position
- Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state » Forsyth-Edwards Notation
- Getting QUEEN ATTACKS by looking up bishop & rook attack tables
- Implementing routine to find out whether SQUARE IS ATTACKED » Square Attacked By
- Writing GENERATE MOVES function skeleton »Move Generation
- Generating QUIET PAWN moves » Pawn Pushes (Bitboards)
- Generating PAWN CAPTURE moves » Pawn Captures
- Generating CASTLING MOVES » Castling
- Generating SLIDER & LEAPER piece MOVES by attack tables lookup
- Binary formatting of MOVE ITEMS » Encoding Moves
- Encoding & decoding MOVE ITEMS
- Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions » Move List
- Populating MOVE LIST with newly GENERATED MOVES
- Preserving & restoring BOARD STATE aka COPY/MAKE approach » Copy-Make
- Implementing MAKE MOVE function (moving pieces) » Make Move
- Implementing MAKE MOVE function (handling captures) » Captures
- Implementing MAKE MOVE function (handling pawn promotions) » Promotions
- Implementing MAKE MOVE function (handling enpassant moves) » En passant
- Implementing MAKE MOVE function (handling double pawn pushes) » Double Pawn Push
- Implementing MAKE MOVE function (handling castling moves) » Castling
- Implementing MAKE MOVE function (updating castling rights) » Castling Rights
- Implementing MAKE MOVE function (updating occupancy bitboards) » Occupancy
- Implementing MAKE MOVE function (checking whether the king is in check) » Check
- Writing a cross-platform function for GETTING TIME IN MILLISECONDS
- Writing PERFT DRIVER function » Perft
- Writing PERFT TEST function
- Connecting to the GUI (parse move string) » GUI, UCI
- Connecting to the GUI (parse "position" command)
- Connecting to the GUI (parse "go" command)
- Connecting to the GUI (main loop) + BONUS (TSCP vs BBC blitz game) » TSCP
- Implementing RUDIMENTARY EVALUATION (material score) » Evaluation, Material
- Implementing RUDIMENTARY EVALUATION (positional piece scores)
- Writing NEGAMAX ALPHA BETA skeleton » Negamax, Alpha-Beta
- Detecting CHECKMATE and STALEMATE » Checkmate, Stalemate
- Implementing QUIESCENCE SEARCH » Quiescence Search
- Defining MVV LVA (Most Valuable Victim - Least Valuable Attacker) table » MVV/LVA
- Writing SCORE MOVE function » Move Ordering
- Writing SORT MOVES function
- Applying MOVE ORDERING to sort captures » Captures
- Sorting KILLER & HISTORY moves » Killer Heuristic, History Heuristic
- Collecting PV (Principle Variation) from the search » Principal Variation
- Implementing ITERATIVE DEEPENING » Iterative Deepening
- Sorting PV moves + some BONUS TALK at the end
- Implementing PVS (Principle Variation Search) » Principal Variation Search
- Applying LMR (Late Move Reduction) » Late Move Reductions
- Applying NULL MOVE PRUNING » Null Move Pruning
- Adjusting ASPIRATION WINDOW during iterative deepening » Aspiration Windows
- BUG ALERT!!! Fixing PVS duplication bug
- Handling TIME CONTROLS (forked from VICE by BluefeverSoftware) » Vice
- Zobrist HASHING (initialize random keys) » Zobrist Hashing
- Zobrist HASHING (generate hash key)
- Zobrist HASHING (hash keys incremental updates) » Incremental Updates
- Implementing HASH TABLE aka transposition table (define & initialize) » Transposition Table [4]
- Implementing HASH TABLE aka transposition table (read/write hash entry)
- Implementing HASH TABLE aka transposition table (connecting to search)
- BUG ALERT! Fixing lack of enpassant & side hashing on null move
- More search BUG FIXES &CLEANUPS
- Handling MATING SCORES in HASH TABLE aka transposition table » Mate Scores
- Sending MATING SCORES to GUI + some cleanups & adjustments
- Detecting THREE FOLD REPETITIONS » Repetitions
- Final (hopefully!) SEARCH BUG FIXES
- Improving EVALUATION (setting file & rank masks) » Evaluation, Pawn Pattern and Properties
- Improving EVALUATION (initializing isolated & passed pawn masks) » Isolated Pawns (Bitboards), Passed Pawns (Bitboards)
- Improving EVALUATION (double & isolated penalties, passed pawns bonus)
- Improving EVALUATION (open & semi open file scoring) » Pawns and Files (Bitboards), Open File
- Improving EVALUATION (mobility and king safety) » Mobility, King Safety
- BBC 1.0 - RELEASE
References
- ↑ Bitboard CHESS ENGINE in C: intro
- ↑ GitHub - maksimKorzh/bbc: Bit Board Chess (BBC) - The easiest to understand bitboard chess engine by Code Monkey King
- ↑ BBC 1.0 release - UCI chess engine by CMK by Maksim Korzh, CCC, September 24, 2020
- ↑ The Main Transposition Table from Bruce Moreland's Programming Topics