Increase engine strength
Posted: Sun Dec 03, 2017 9:22 pm
Hi all,
it's been nearly a year now since I start writing my own chess engine, just for fun. I was a very instructive experience and thanks to forum like this one, and the chessprogramming wiki it was very easy to gather requiered informations.
It is written in c++11, and currently include all the "classic stuff", at least my own interpretation of then ... :
*alpha-beta framework (not negamax)
**PVS (root and alpha-beta)
**Window
**IID
*TT (mainly for sorting, seems buggy if used for cut-off)
*QTT (idem)
*EvalTT
*LazyEval (and associated TT)
*Move sorting with
**Piece position evaluation
**MVV-LVA
**Killer
**History
**SEE (not working ...)
**Checks
*QSearch
**SEE (not working cut versus CPU time ratio is not good enough)
**Delta prunning (seems risky ...)
*Futility pruning (extended with adaptative margin)
*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
**LMR (adaptative)
**Book
**Small internal
**Big, read from file
*Evaluation
**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
***double
***isolated
***passed
***protected passed
***connected
***king too far (buggy for now)
**open file
*XBOARD (partial support, enough to play and set up tournament)
My current frustration is that my engine seems quite weak. According to classic test suites, it shall be rated around elo 2200. It is very often loosing against fairymax as a point of comparison.
I can thus work more on :
* speed => this should lead to a little more depth
* pruning => everything is here but not tuned enough, except nullmove every other pruning appear risky with my current tuning
* analysis => I can add things for hanging piece, better pawn structure, ...
* move ordering => But my pure alpha/beta already leads to a 4.5 to 6 branching factor ...
On my laptop (an old core i7), my engine runs (single thread) at around 500knps, that mean depth 7 (without pruning) in 5 secondes (seldepth around 9). For me a node means any node in the search tree that is not pruned (even qnode).
What are your advices to go on from here ? I'd really want to get to 2700 elo in the next few months.
Best regards,
it's been nearly a year now since I start writing my own chess engine, just for fun. I was a very instructive experience and thanks to forum like this one, and the chessprogramming wiki it was very easy to gather requiered informations.
It is written in c++11, and currently include all the "classic stuff", at least my own interpretation of then ... :
*alpha-beta framework (not negamax)
**PVS (root and alpha-beta)
**Window
**IID
*TT (mainly for sorting, seems buggy if used for cut-off)
*QTT (idem)
*EvalTT
*LazyEval (and associated TT)
*Move sorting with
**Piece position evaluation
**MVV-LVA
**Killer
**History
**SEE (not working ...)
**Checks
*QSearch
**SEE (not working cut versus CPU time ratio is not good enough)
**Delta prunning (seems risky ...)
*Futility pruning (extended with adaptative margin)
*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
**LMR (adaptative)
**Book
**Small internal
**Big, read from file
*Evaluation
**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
***double
***isolated
***passed
***protected passed
***connected
***king too far (buggy for now)
**open file
*XBOARD (partial support, enough to play and set up tournament)
My current frustration is that my engine seems quite weak. According to classic test suites, it shall be rated around elo 2200. It is very often loosing against fairymax as a point of comparison.
I can thus work more on :
* speed => this should lead to a little more depth
* pruning => everything is here but not tuned enough, except nullmove every other pruning appear risky with my current tuning
* analysis => I can add things for hanging piece, better pawn structure, ...
* move ordering => But my pure alpha/beta already leads to a 4.5 to 6 branching factor ...
On my laptop (an old core i7), my engine runs (single thread) at around 500knps, that mean depth 7 (without pruning) in 5 secondes (seldepth around 9). For me a node means any node in the search tree that is not pruned (even qnode).
What are your advices to go on from here ? I'd really want to get to 2700 elo in the next few months.
Best regards,