-USE_COMPACT_ROOK_ATTACKS. \r
-\r
-\r
-\r
-5. History\r
-----------\r
-\r
-2007-05-06: Glaurung 2 - epsilon\r
---------------------------------\r
-\r
-The first public release, and the first version of my new program\r
-which is able to match the old Glaurung 1.2.1 on a single CPU. Lots\r
-of features and chess knowledge is still missing.\r
-\r
-2007-05-10: Glaurung 2 - epsilon/2\r
-----------------------------------\r
-\r
-This version is very close to 2 - epsilon. The major changes are:\r
-\r
- * A number of compatibility problems which appeared when trying to\r
- compile Glaurung 2 - epsilon on various operating systems and CPUs\r
- have been solved.\r
-\r
- * Fixed a major bug in the detection of rooks trapped inside a\r
- friendly king.\r
-\r
- * Added knowledge about several types of drawn endgames.\r
-\r
- * Fixed a few FRC related bugs. FRC now works, but because of\r
- serious holes in the evaluation function the program plays very\r
- badly.\r
-\r
- * A slightly more sophisticated king safety evaluation.\r
-\r
-2007-06-07: Glaurung 2 - epsilon/3\r
-----------------------------------\r
-\r
-The first public version with support for multiple CPUs. Unless you\r
-have a dual-core (or better) computer, use Glaurung with a PolyGlot\r
-book, or runs games with ponder on, you may want to skip this version,\r
-which is almost certainly no stronger than 2 - epsilon/2 when running\r
-on a single CPU. The main changes compared to the previous version\r
-are:\r
-\r
- * Parallel search, with support for 1-4 CPUs. The program currently\r
- always allocates a separate pawn hash table and material hash\r
- table for four threads, which is a pure waste of RAM if your\r
- computer has just a single CPU. This will be fixed in a future\r
- version.\r
-\r
- * Fixed a bug in book randomization. When using Polyglot books, the\r
- previous version would always select exactly the same move in the\r
- same position after a restart of the program. Thanks to Pavel\r
- Háse for pointing this out.\r
-\r
- * Fixed a UCI pondering bug: Glaurung no longer instantly prints its\r
- best move when the maximum depth is reached during a ponder\r
- search, as the previous version did. According to the UCI\r
- protocol, it is not allowed to print the best move before the\r
- engine has received the "stop" or "quit" command.\r
-\r
- * Additional search information: The new version displays hash\r
- saturation and the current line(s) of search.\r
-\r
- * Several minor bug fixes and optimizations in the search and\r
- evaluation. \r
-\r
-2007-06-08: Glaurung 2 - epsilon/4\r
-----------------------------------\r
-\r
-A bugfix release, with only a single important change:\r
-\r
- * Fixed a very serious pondering bug. As pointed out by Marc\r
- Lacrosse, the previous version would lose on time in almost every\r
- single game with pondering enabled. The new version handles\r
- pondering correctly (or so I hope). When playing with ponder\r
- off, the new version is identical to version 2 - epsilon/3.\r
-\r
-2007-06-25: Glaurung 2 - epsilon/5\r
-----------------------------------\r
-\r
-Another minor update, including the following improvements and bug\r
-fixes:\r
-\r
- * As Werner Schüle discovered, the previous version would sometimes\r
- stop thinking and lose on time right before delivering checkmate\r
- (which is of course a very unfortunate moment to lose on time).\r
- I haven't been able to reproduce Werner's problem on my computer\r
- (probably because I run a different OS), but I have fixed the bug\r
- which I suspect caused the time losses. I hope the time losses\r
- will no longer occur with 2 - epsilon/5.\r
-\r
- * The program is now slightly less resource-hungry on computers\r
- with less than 4 CPU cores: The previous version would always\r
- allocated separate pawn and material hash tables for four\r
- threads, even when running on a single-core CPU. The new version\r
- only allocates pawn and material hash tables for the threads\r
- which are actually used.\r
-\r
- * A minor reorganization of the memory layout has made the parallel\r
- search about 10% more efficient (at least on my computer, but the\r
- results are likely to vary considerably on different systems).\r
-\r
- * The Intel Mac OS X binary is much faster than before, thanks to\r
- the Intel C++ compiler (previous versions were compiled with\r
- GCC).\r
-\r
- * A few other very minor bug fixes and enhancements.\r
-\r
-2007-11-21: Glaurung 2.0\r
-------------------------\r
-\r
-The first stable (or so I hope) and feature-complete version of\r
-Glaurung 2. The following are the main changes compared to the\r
-previous version:\r
-\r
- * The license has been changed from GPL version 2 to GPL version 3.\r
-\r
- * MultiPV mode.\r
-\r
- * Support for the "searchmoves" option in the UCI "go" command.\r
- This means that it is possible to ask Glaurung to exclude some\r
- moves from its analysis, or to restrict its analysis to just a\r
- handful of moves selected by the user. This feature must also be\r
- supported by the GUI under which Glaurung is run. Glaurung's own\r
- GUI does currently not support this feature.\r
-\r
- * Chess960 support now works. The program still plays this game \r
- very badly, because of lack of opening knowledge.\r
-\r
- * Much more aggressive pruning in the last few plies of the main\r
- search.\r
-\r
- * Somewhat better scaling on multi-CPU systems, and support for up\r
- to 8 CPUs.\r
-\r
- * Lots of new UCI parameters.\r
-\r
- * Improved time managment, especially in games with pondering on \r
- (i.e. when the engine is allowed to think when it's the\r
- opponent's turn to move).\r
-\r
- * Some evaluation improvements, and some new basic endgame\r
- patterns.\r
-\r
- * The program should no longer crash if the game lasts longer than\r
- 1000 plies.\r
- \r
- * Many minor bug fixes and other tiny improvements throughout the\r
- code. \r
- \r
- * More generously commented code, and numerous cosmetic changes in\r
- coding style.\r
-\r
-2007-11-22: Glaurung 2.0.1\r
---------------------------\r
-\r
- * Fixed (or so I hope) a bug which would occasionally cause one of\r
- the search threads to get stuck forever in its idle loop.\r
-\r
-2008-05-14: Glaurung 2.1\r
-------------------------\r
-\r
-This version contains far too many changes to list them all, but most\r
-of them are minor and cosmetic. The most important and noticable\r
-changes are a lot of new UCI parameters, and many improvements in the\r
-evaluation function. The highlights are:\r
-\r
- * Extensive changes in the evaluation function. The addition of\r
- king safety is the most important improvement, but there are also\r
- numerous little improvements elsewhere in the evaluation. There\r
- is still much work left to do in the evaluation function, though.\r
- Space and development are still missing, and the tuning is likely\r
- to be very poor. Currently, the program is optimized for an\r
- entertaining style rather than maximum strength.\r
-\r
- * More accurate forward pruning. The previous version used the\r
- null move refutation move to improve the pruning accuracy by\r
- means of a very simple trick: It did not allow pruning of any\r
- moves with the piece captured by the null move refutation move.\r
- In Glaurung 2.1, this has been enhanced: It does not allow\r
- pruning of moves which defend the destination square of the null\r
- move refutation move, nor of moves which block the ray of the\r
- piece in the case that the moving piece in the null move\r
- refutation move is a slider.\r
-\r
- * More conservative use of LMR at PV nodes. The previous version\r
- searched the first 6 moves with full depth, 2.1 by default\r
- searches the first 14 moves with full depth (but there is a new\r
- UCI parameter for configuring this). I am not at all sure\r
- whether this is an improvement. More thorough testing is\r
- required. \r
-\r
- * Feedback from the evaluation to the search. The search passes an\r
- object of type 'EvalInfo' to the eval, and the eval fills this\r
- struct with various potentially useful information (like the sets\r
- of squares attacked by each piece type, the middle game and\r
- endgame components of the eval, etc.). At the moment, almost\r
- none of this information is actually used by the search. The\r
- only exception is that the evaluation function is now used to\r
- adjust the futility pruning margin in the quiescence search.\r
-\r
- * Less extensions. This hurts the programs performance a lot in most\r
- test suites, but I hope it improves the branching factor in deep\r
- searches.\r
-\r
- * A very long list of new UCI parameters, especially for tuning the\r
- evaluation. \r