# Programming Topics

This page will contain links to a series of essays on computer chess topics, as I have time to write them.  The topics are oriented toward those who want to write their own chess program, or understand how chess programs work.

I do not mean to describe ever conceivable way of writing a chess program.  It is my intent to talk about common techniques, in some cases with a personal perspective since I have implemented a lot of this stuff.

As of this moment, I am writing all of this stuff off the top of my head.  There are a lot of people that need credit for these ideas, and in many cases I don't know who to credit.  I will figure this all out eventually and provide some history when possible.  I will also provide some amount of experimental evidence in order to support some claims that I make.

If you want a fully functional chess program, including source, you are free to download my free chess program Gerbil, and you can see practical examples of some of the techniques that I describe.

* I. Basic Search Techniques
    * A. [Search Tree Introduction](tree.md)
    * B. [Min-Max Search](minmax.md)
    * C. Alpha-Beta Search
    * D. Principal Variation Search
    * E. Quiescent Search
        * 1. MVV/LVA Move Ordering
        * 2. Static Exchange Evaluation
* II. Some Other Search-Related Topics
    * A. Collecting the Principal Variation
    * B. Iterative Deepening
    * C. Aspiration Windows
    * D. Checkmate/Stalemate Scoring
    * E. Contempt Factor
    * F. Fifty-Move Draw Detection
    * G. Hash Tables
        * 1. Zobrist Keys
        * 2. Transposition Table
        * 3. Repetition Detection
        * 4. Handling mate scores
* III. Advanced Search Topics
    * A. Multiprocessor Search Techniques
    * B. Null-Move Foward Pruning
    * C. Other Pruning Techniques
    * D. Search Extensions
        * 1. Check Extension
        * 2. Single-Response Extension
        * 3. Recapture Extension
        * 4. Singular Extension
        * 5. Mate-Threat Extension
    * E. Search Instability
* IV. Move Generation and Move Ordering
    * A. Move Generation Techniques
        * 1. 0x88
        * 2. Move Table
        * 3. Bitboards
    * B. Move Ordering
        * 1. Killer Moves
        * 2. History Heuristic
* V. Search Control
    * A. Pondering
    * B. Time Allocation
* VI. Evaluation
    * A. Piece-Square Tables
    * B. Pawn Evaluation
    * C. King Safety Evaluation
    * D. Piece Evaluation
    * E. Endgame Databases
* VII. Thoughts

Send mail to brucemo@seanet.com with questions or comments about this web site.
Copyright © 2001 Bruce Moreland
Last modified: 01/24/03
