Changes

Jump to: navigation, search

BBC

6,429 bytes added, 09:21, 18 June 2021
no edit summary
While the series offers a nice introduction in chess engine programming and [[Bitboards|bitboard]] techniques,
the advanced approach of [[Magic Bitboards]] to determine [[Sliding Piece Attacks|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 <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75199 BBC 1.0 release - UCI chess engine by CMK] by [[Maksim Korzh]], [[CCC]], September 24, 2020</ref>, '''BBC 1.3''' on October 21, 2020, utilizing [[Stockfish NNUE|Stockfish's NNUE]] evaluation via [[Daniel Shawul|Daniel Shawul's]] [[Scorpio#ScorpioNNUE|Scorpio NNUE]] [[Scorpio#Bitbases|egbbdll]] probing library <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75482 BBC 1.3 + Stockfish NNUE released!] by [[Maksim Korzh]], [[CCC]], October 21, 2020</ref>.
=See also=
* [[BMCP]]
* [[PeSTO]]
* [[Vice]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75199 BBC 1.0 release - UCI chess engine by CMK] by [[Maksim Korzh]], [[CCC]], September 24, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75204 How to rate my engine in CCRL?] by [[Maksim Korzh]], [[CCC]], September 25, 2020 » [[CCRL]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75380 BBC GUI release - PLAY IT ONLINE!] by [[Maksim Korzh]], [[CCC]], October 12, 2020 » [[#GUI|Web GUI Tutorial]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75415 How to scale stockfish NNUE score?] by [[Maksim Korzh]], [[CCC]], October 17, 2020 » [[Stockfish NNUE]], [[Scorpio#NNUE|Scorpio NNUE]]
: [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75415&start=3 Re: How to scale stockfish NNUE score?] by [[Daniel Shawul]], [[CCC]], October 17, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75418 Embedding Stockfish NNUE to ANY CHESS ENGINE: YouTube series] by [[Maksim Korzh]], [[CCC]], October 17, 2020 » [[NNUE]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75482 BBC 1.3 + Stockfish NNUE released!] by [[Maksim Korzh]], [[CCC]], October 21, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75541 BBC 1.4 + Stockfish NNUE + Online GUI + Opening book - FINAL RELEASE!] by [[Maksim Korzh]], [[CCC]], October 25, 2020
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=77503&start=55 Re: will Tcec allow Stockfish with a Leela net to play?] by [[Connor McMonigle]], [[CCC]], June 17, 2021 » [[NNUE]]
=External Links=
== GitHub==
* [https://github.com/maksimKorzh/bbc GitHub - maksimKorzh/bbc: Bit Board Chess (BBC) - The easiest to understand bitboard chess engine by Code Monkey King]
* [https://github.com/maksimKorzh/uci-gui GitHub - maksimKorzh/uci-gui: Web based GUI for UCI chess engine]
==YouTube==
===BBC==='''Bitboard CHESS ENGINE in C'''# [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/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] » <span style="background-color: #ffffac;">[[Knight Pattern#KnightAttacks|Knight Attacks]]</span># [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] » <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/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)] » <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] » <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/gaXLyW-yMvg Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces]
# [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] » <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/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] » <span style="background-color: #ffffac;">[[Bitboard Board-Definition]]</span># [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] » <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/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] » <span style="background-color: #ffffac;">[[Move Generation]]</span># [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] » <span style="background-color: #ffffac;">[[Pawn Attacks (Bitboards)#PawnCaptures|Pawn Captures]]</span># [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/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/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/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)] » <span style="background-color: #ffffac;">[[Make Move]]</span># [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)] » <span style="background-color: #ffffac;">[[Promotions]]</span># [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)] » <span style="background-color: #ffffac;">[[Pawn Push#DoublePush|Double Pawn Push]]</span># [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)] » <span style="background-color: #ffffac;">[[Castling Rights]]</span># [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)] » <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/o0xCJDhbSUM Writing PERFT DRIVER function] » <span style="background-color: #ffffac;">[[Perft]]</span>
# [https://youtu.be/p2VuC0xTPoc Writing PERFT TEST function]
# [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/lb46nX6gSBw Connecting to the GUI (parse "go" command)]
# [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)] » <span style="background-color: #ffffac;">[[Evaluation]], [[Material]]</span>
# [https://youtu.be/E2JzRNI1ODI Implementing RUDIMENTARY EVALUATION (positional piece scores)]
# [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] » <span style="background-color: #ffffac;">[[Checkmate]], [[Stalemate]]</span># [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] » <span style="background-color: #ffffac;">[[MVV-LVA|MVV/LVA]]</span># [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/DVSp_31iTBU Applying MOVE ORDERING to sort captures] » <span style="background-color: #ffffac;">[[Captures]]</span># [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] » <span style="background-color: #ffffac;">[[Principal Variation]]</span># [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/Gs4Zk6aihyQ Implementing PVS (Principle Variation Search)] » <span style="background-color: #ffffac;">[[Principal Variation Search]]</span># [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] » <span style="background-color: #ffffac;">[[Null Move Pruning]]</span># [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/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)] » <span style="background-color: #ffffac;">[[Zobrist Hashing]]</span>
# [https://youtu.be/sV2C7hx-gOE Zobrist HASHING (generate hash key)]
# [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)] » <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/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/g1b_rT9VqAw More search BUG FIXES &CLEANUPS]
# [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/QhFtquEeffA Detecting THREE FOLD REPETITIONS] » <span style="background-color: #ffffac;">[[Repetitions]]</span>
# [https://youtu.be/F8ueIueVsHI Final (hopefully!) SEARCH BUG FIXES]
# [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)] » <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/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)] » <span style="background-color: #ffffac;">[[Mobility]], [[King Safety]]</span>
# [https://youtu.be/1SgnTKzWuss BBC 1.0 - RELEASE]
# [https://youtu.be/JYF6A0xvvtY Improving BBC chess engine: TAPERED EVALUATION (getting game phase scores)] » <span style="background-color: #ffffac;">[[Tapered Eval]], [[PeSTO]]</span>
# [https://youtu.be/bOmXClI6Xpw Improving BBC chess engine: TAPERED EVALUATION (interpolating scores) + BONUS: BBC vs VICE match!] » <span style="background-color: #ffffac;">[[Vice]]</span>
===[[GUI]]===
'''Web based GUI for UCI CHESS ENGINE'''
# [https://youtu.be/_0uKZbHWVKM INTRO & DEMO]
# [https://youtu.be/OjZy52Tt6mY Install dependencies, CREATE WEB APP & render the CHESS BOARD]
# [https://youtu.be/9Hn1gnTYNS4 Connecting engine back-end & MAKING IT PLAY!]
# [https://youtu.be/ZIyDWQN2buk Printing game status, FEN & PGN]
# [https://youtu.be/ihHHW_CA72M Adding GAME CONTROL buttons]
# [https://youtu.be/TlxgZRd8VWk Adding MOVE STATS]
# [https://youtu.be/PWnypt2k56I Fixing layout & setting position from FEN string on button click]
# [https://youtu.be/DCWtkpEF8KY Adding MOVE TIME & FIXED DEPTH controls]
# [https://youtu.be/tqR4tRyfTIg Implementing DOWNLOAD PGN feature]
# [https://youtu.be/w67CEEjqIjw Encapsulating CHESS ENGINE for SIMULTANEOUS PLAY]
# [https://youtu.be/_u-VAFwY95U final adjustments and DEPLOY at pythonanywhere.com]
===[[NNUE]]===
'''Embedding Stockfish NNUE to ANY CHESS ENGINE'''
# [https://youtu.be/zieTAE2zN9w Intro & demo] » <span style="background-color: #ffffac;">[[Stockfish NNUE]], [[Scorpio#NNUE|Scorpio NNUE]]</span>
# [https://youtu.be/59Fp4JVNob0 Compiling existing ENGINE with NNUE library]
# [https://youtu.be/puLvzQnUoH8 Extracting PIECES & SQUARES for direct NNUE probing]
# [https://youtu.be/cOdPe1JvVU8 Incorporating NNUE SCORES into EVALUATION function]
# [https://youtu.be/30L9hx6hsmg bug fixes & experiments]
# [https://youtu.be/xFeJ9PBWpco WINDOWS compatibility added]
# [https://youtu.be/Olnk9aa1zMI Switching to pure NNUE evaluation + important BUG FIX]
=References=
[[Category:Acronym]]
[[Category:Didactic]]
[[Category:NNUE]]

Navigation menu