History
16/06/10:
Search: history pruning was implemented.
Search: all search extension/reduction algorithms were rewritten.
Search: LMR and Futility algorithms were rewritten.
QS Search: delta pruning was implemented.
Time management: refactor to avoid time losts in bullet matchs.
Evaluation: Some changes for version 1.9.8 were retracted.
Hash: Some changes for version 1.9.8 were retracted.
09/06/10:
Search: main refactor in search functions.
Search: check moves are detected before make the move, some minimial performance gain.
Move gen: main functions refactored to gain speed.
Bitboards: several improvements for the x64 builds.
Hash: material and pawn hash tables access optimized.
Evaluation: minimal refactor in material and pawn evaluation.
Pruning: some test with delta pruning in QS (for the first time in Chronos!) and some tests with adaptive null move.
Pruning: Lazy eval is not used during futility-pruning margin test in main search.
21/01/10:
Search: sort scheme for root moves improved.
14/08/09:
Evaluation: code improved, material eval / endgame detection refactored.
Bitboards: code improved, many global vars (some large arrays) was removed.
Move gen: code improved, quiet check moves generation is now faster.
Attacks: code improved for pins and discover checks detection.
02/08/09:
Evaluation: code execution time improved.
Attacks: code improved.
Move gen: Check evasions code improved.
08/07/09:
SEE: code improved, some knps gained.
Threefold repetition detection: code improved, some knps gained.
Threefold repetition detection: solved minor bug that causes Chronos draw very often.
Evaluation: pawn structure improved.
Transposition tables: trans hash tables are cleared when the "new" command is received.
Move sorting: code improved, some knps gained.
Score extensions: code refactored, Chronos extends allocated time correctly in certain score changes.
Search: soved minor bug in first best move detection for root search.
12/06/09:
Extensive code cleanup and refactor in evaluation and movegen.
Evaluation: Some minor but time-consuming eval terms was completely removed.
29/05/09:
Evaluation: Material evaluation cleanup.
Evaluation: Piece-evaluation cleanup and optimized (nps slightly increased).
Evaluation: Endgame evaluation improved, supporting several common endgames:
Insufficient material draws: kk, knk, kkn, kbk, kkb, knnk, kknn (improved from version 1.9.5)
Pawn endgames: kpk, kkp (also supported for non rook-pawns).
Majors-drawish endgames: krkr, kqkq
Bad-bishop endgames (A bishop for each side, opposing, and pawns semi balanced)
Evaluation: Fixed a minor bug in unstoppble passed pawns.
Evaluation: Pawn shelter slightly improved (infimus ELO gain!).
Whole code refactoring (some .cpp and .h files were completely excluded).
Command line parameters: Transposition, material and pawn hash tables sizes can be adjusted.
26/04/09:
Move gen: Main methods optimized (nps slightly increased).
Search: Prunning conditions refactored.
Search: Aspiration windows margin narrowed.
Evaluation: Minor evaluation terms was added in development and material eval.
24/01/09:
Opening Book: again choose a book with classic lines, as used in version 1.9.4, but with much more content.
21/01/09:
Evaluation: Simplistic insufficient material eval was added.
Search: Null-move verification search refactored.
Search: Razoring refactored.
Opening Book: New opening book generated from won games of Kasparov and Karpov.
31/12/08:
Evaluation: Lazy eval was added.
Evaluation: Static pawn evaluation revised.
Evaluation: Passed pawns evaluation revised, basic unstoppable pawns evaluation added.
Evaluation, chess knowledge: Knights outposts added, improved blocked bishop, trapped rooks added, queen-minor exchange added.
Move gen optimized (nps slightly increased).
Core data structures oprimized (nps slightly increased).
Solved minor bugs in: Exchange evaluation, Passed pawns eval, Pawns attacks to king,
10/12/08:
Time management: Score drop extensions was added.
Time management: Fail-high, Fail-low re-searches now can consume more search time than normal searches.
Fixed bugs in candidates evaluation and blocked-passed pawns evaluation.
Passed pawns dangerousness evaluation refactored.
Fixed-size material hash tables was added.
Basic material imbalances eval was added for rooks, knights and bishops, acording Larry Kaufman's paper.
Whole code refactored, core data structures optimized, the engine is slightly faster now
Some profiling tests was runed (Using "Very Sleepy" and "AMD Codeanalyst") to detect the speed/bad-nps bug.
(Thanks to Pradu Kannan for recommendations on this topic).
22/11/08:
Whole program code and compiler optimizations for a gain of 50 knps aprox (see here).
Add the enpassant check evasion.
16/11/08:
Added quiet checks in QS.
Extensions code refactored, recapture extension finally was included.
Fixed a serious bug in SEE(), this increased the strength of the engine by 100 ELO points or more!!.
13/11/08:
Transposition tables code rewrited using a TwoDepth scheme, explained in "Replacement Schemes for Transposition Tables" (D.M. Breuker, J.W.H.M. Uiterwijk, and H.J. van den Herik). (Link)
Pawn hash implemented to store static evaluation and some king shelter features.
08/11/08:
Added Futility pruning and Razoring.
NullMove code rewrited using Evaluate() function and verification re-search.
01/11/08:
Refactor/Rewrite of the complete search/evaluation code ... a really strenuous work for a month, a ton of improvements were added throughout the code.
Move struct replaced by "int".
Late move reductions implemented.
Progresive move generation implemented (after several failed attempts).
Start the develop of the debug framework (based on 100,000 "asserts" into the immaculate code).
Finally, i modify the condition of re-search of PVS search from this: "score > alpha && score < beta" to this: "score > alpha" ... wow!!!... this single change increase aprox. 100 ELO points the strength of the engine!.
30/09/08:
A month of continuous work, several experiments were attempted in the evaluation function. Decided to implement a simple and fast scheme.
King safety was implemented through a mix of tropism and weighted attacks count.
Added Tapered evaluation, PST and evaluation code adapted.
31/08/08:
Several experiments with the mobility evaluation method. Minimal mobility is used for all pieces. Squares attacked by enemy pawns do not count for the knight mobility counter anymore.
23/08/08:
Several experiments with the PST code. Four PST are generated for each piece (opening, middle, endgame and pawn endgame).
21/08/08:
Fixed a serious bug in material exchange evaluation, 50 ELO points or more gained.
10/08/08:
"Board", "Move" and "InOut" classes removed and replaced by standard functions.
Sliding move generation in bitboards replaced by rotated bitboards (following the Robert Hyatt's tutorials).
Previously was implemented a simple and interesting idea used in the NagaSkaki engine, see this sample pseudo-code)
28/07/08:
Basic (and Buggy) SEE() implemented.
Sort method replaced from C "qsort()" to a basic bubble sort.
23/07/08:
A cleaning and refactor began for the whole program. This process continues today, and was the key for fix a ton of bugs. Currently the debug framework is an extension of this process.
If your engine does not play well no matter what you try with the code you have to do the following: Do not add any new features, backup, then remove any suspicious or too extravagant code, modify the code to make it as simple as possible and finally try to "catch" all bugs as you can (use "asserts" in C).
05/07/08:
Added Basic code for time management and draw detection. The engine started to play very slow and not beat anyone anymore... the project was nearly aborted.
22/06/08:
Enpassant moves implemented. (i delay the development of this feature because I did not consider it important and assumed that it's going to decrease the speed of my precious engine)
06/06/08
"InCheck" detection in QS.
01/06/08:
Core bitboard functions (Count, Get, Clear and Set) was refactored.
Added fractional extensions.
Aspiration windows code improved.
PVS code improved (Depth>2 removed in re-search detection, because there was a lot of instability in the whole search)
21/05/08:
The standard NullMove code was added.
GenerateCheckEvasions() implemented.
Single-reply extension implemented.
14/05/08:
The initial phase was concluded with the development of the core engine, with the following characteristics: Bitboard move generation, Alpha-Beta w/PVS search, Aspiration windows, History Heuristics, Material and PST evaluation.
01/05/08:
Project starts from a previous non-bitboard and weak engine named GFC ("Guillermo Filia Chess"). Source code can be found in Downloads section.