first commit
This commit is contained in:
commit
a2ff70d4c1
17 changed files with 2004 additions and 0 deletions
131
README.md
Normal file
131
README.md
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
# BitChess Engine
|
||||
## A Pure Algorithmic Chess Engine
|
||||
|
||||
### Chess Engine Overview
|
||||
|
||||
BitChess is a high-performance chess engine developed as a hobby project to explore low-level optimization techniques and algorithmic game theory. The engine uses traditional, non-AI approaches to chess programming, focusing on efficient data structures, multithreaded search, and careful optimization of critical paths.
|
||||
|
||||
This project demonstrates how far a pure algorithmic approach to chess can go without relying on neural networks or machine learning techniques that dominate modern engines like Stockfish, Leela Chess Zero, or AlphaZero.
|
||||
|
||||
### Motivation
|
||||
|
||||
The primary goals of this project are:
|
||||
- Deepen understanding of bitboard representations and bit manipulation
|
||||
- Master low-level optimization techniques in C
|
||||
- Explore multithreaded search algorithms
|
||||
- Build an efficient, pure algorithmic chess engine from scratch
|
||||
- Benchmark algorithmic approaches against more modern techniques
|
||||
|
||||
### Key Features
|
||||
- Bitboard-based representation for maximum performance
|
||||
- Alpha-beta pruning with move ordering for efficient search
|
||||
- Multithreaded search to utilize multi-core processors
|
||||
- Position evaluation using piece-square tables and material value
|
||||
- Clean terminal interface that updates in real-time
|
||||
- Standard Algebraic Notation (SAN) support for move representation
|
||||
|
||||
### Technical Approach
|
||||
|
||||
#### Board Representation
|
||||
|
||||
The engine uses bitboards (64-bit unsigned integers) to represent the chess position, where each bit corresponds to a square on the board. This approach allows for extremely fast position updates and move generation using bitwise operations.
|
||||
|
||||
Bitboard for White Pawns (P): `0x000000000000FF00`
|
||||
|
||||
----------------
|
||||
8 | . . . . . . . . |
|
||||
7 | . . . . . . . . |
|
||||
6 | . . . . . . . . |
|
||||
5 | . . . . . . . . |
|
||||
4 | . . . . . . . . |
|
||||
3 | . . . . . . . . |
|
||||
2 | P P P P P P P P |
|
||||
1 | . . . . . . . . |
|
||||
----------------
|
||||
a b c d e f g h
|
||||
|
||||
#### Search Algorithm
|
||||
|
||||
BitChess employs a classic Minimax algorithm with Alpha-Beta pruning to search the game tree efficiently. The engine implements:
|
||||
- Move ordering to maximize alpha-beta cutoffs
|
||||
- Multithreaded search at the root node to parallelize evaluation
|
||||
- Iterative deepening to find good moves quickly
|
||||
- MVV-LVA (Most Valuable Victim - Least Valuable Aggressor) for capture ordering
|
||||
|
||||
#### Evaluation Function
|
||||
|
||||
The evaluation combines several components:
|
||||
- **Material balance** - basic piece values (pawn=100, knight=320, etc.)
|
||||
- **Piece-square tables** - bonuses/penalties for piece positioning
|
||||
- **Mobility** - counting legal moves as a proxy for piece activity
|
||||
- **King safety** - evaluating the king's defensive structure
|
||||
|
||||
#### Move Generation
|
||||
|
||||
The engine generates moves using precomputed attack tables:
|
||||
- **Sliding pieces** (bishops, rooks, queens) - using ray attacks
|
||||
- **Knights and kings** - using precomputed attack patterns
|
||||
- **Pawns** - handling special moves like promotions, en passant, and double pushes
|
||||
|
||||
### Implementation Details
|
||||
|
||||
BitChess is written in C and designed with modularity in mind:
|
||||
- **Bitboard module** - manages attack tables and bit manipulation
|
||||
- **Board module** - handles game state and move application
|
||||
- **Movegen module** - generates legal moves
|
||||
- **Evaluation module** - assesses positions
|
||||
- **Search module** - finds the best move
|
||||
- **Notation module** - converts between internal move representation and SAN
|
||||
|
||||
### Performance Considerations
|
||||
|
||||
Several optimizations are implemented:
|
||||
- **Precomputed attack tables** - eliminate expensive calculations during search
|
||||
- **Move ordering** - dramatically improves alpha-beta pruning efficiency
|
||||
- **Multithreading** - utilizes all available CPU cores
|
||||
- **Bit manipulation** - uses built-in popcount and bit-scan operations
|
||||
- **Structure organization** - designed to maximize cache efficiency
|
||||
|
||||
### Current Capabilities
|
||||
|
||||
The engine currently:
|
||||
- Implements all chess rules correctly, including castling, en passant, and promotions
|
||||
- Searches at configurable depths with reasonable performance
|
||||
- Uses multiple threads to speed up search
|
||||
- Displays evaluation in centipawns
|
||||
- Provides a clean terminal interface
|
||||
|
||||
### Future Improvements
|
||||
|
||||
Planned enhancements include:
|
||||
- Transposition tables to avoid re-searching identical positions
|
||||
- Quiescence search to resolve tactical sequences
|
||||
- Opening book for stronger play in the early game
|
||||
- Endgame tablebases for perfect play in simplified positions
|
||||
- UCI protocol support for compatibility with chess GUIs
|
||||
- Performance profiling and further optimization
|
||||
|
||||
### Building and Running
|
||||
|
||||
|
||||
#### Clone the repository
|
||||
```bash
|
||||
git clone https://git.srtk.in/sarthak/bitchess.git
|
||||
cd bitchess
|
||||
```
|
||||
|
||||
#### Build the project
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
#### Run the engine
|
||||
```bash
|
||||
./build/bin/chess_engine
|
||||
```
|
||||
|
||||
### Requirements
|
||||
|
||||
- GCC or Clang compiler with C99 support
|
||||
- POSIX-compliant operating system (Linux, macOS, or Windows with WSL)
|
||||
- pthread library
|
||||
Loading…
Add table
Add a link
Reference in a new issue