I've started writing my own chess engine nearly a year ago, just for fun. I really want to thank CPW contributors, forums members, ... for making this science freely accessible today. So, thank you all !
Today my engine has all the classic stuff (at least my own interpretations of them):
- alpha-beta framework (not negamax)
- PVS (root and alpha-beta)
Window
IID
QTT (idem)
EvalTT
LazyEval
Sort with- Piece position evaluation
MVV-LVA
Killer
History
SEE (not working ...)
Checks
- SEE (not working)
Delta prunning (not working)
Razoring (reduction)
Static null move (reversed futility pruning) : drop to QSearch
Null move prunning (adaptative)
Extension- Single reply
Check
Promotion (and near promotion)
End game
Very end game
PV
Book- Small internal
Big, read from file (too slow !)
- material
position
bishop pair
mobility (global and by piece) (too expensive)
pawn push
pawn shield
castling
rook connected
rook on 7th rank
center control (too expensive)
king troppism (very expensive)
pawn structure
open file- double
isolated
passed
protected passed
connected
king too far (buggy)
- double
- PVS (root and alpha-beta)
I cleary see that my LMR + other pruning technics parameters are not optimal, as the engine often make mistakes when all of them are activated.
I also remark that my evaluation is quite unstable in the sense that is black see -45 then white see +80, then black -120, then white +20. I often see more than a pawn difference in the evaluation of move n and n+1.
At the end, the engine has a elo rating around 2200 in classic tests suite. And when playing agaist fairy-max, it lose more often than it win.
I thus can work on at least three things :
1°) make the engine faster (I mean sequentially using more bitboard and also using multiple threads)
2°) make my evaluation smarter : I cleary lack some more pawn structure knowledge for exemple
3°) try to find better parameters for my pruning
I really need some advices here. I really hope the engine can 2500 by the end of the year
Best regards