About Horizon
Horizon is a Winboard chess engine. If Winboard is new to you, read the new Winboard and Chess Engines FAQ or the old Winboard FAQ for help installing and configuring it.
Horizon is a joint venture by Ron Murawski (programming) and Jim Monaghan (chess advice). Jim is also the creator of Horizon's opening book. Although Horizon plays reasonably well at all time controls, it seems to excel at Blitz. Setting a main hash table size of 32 to 64MB and a pawn hash size of 2 to 4 MB works well. Gameplay is aggressive and focused on center control, king attack and, occasionally, creating passed pawns. The king attack tendency is strong and makes for interesting games, especially against other aggressive engines.
Horizon users are invited to send email: HorizonChess@yahoo.com
Current Version
Current version is: Horizon 4.4 (release date: February 1, 2008)
Horizon 4.4 is available from the Download page.
The most important changes from version 4.3 are bug fixes to the main search. Another important improvement was the removal of the old, buggy candidate passed pawn code. Horizon's occasional blindness to opposing tactical shots and to draws by repetition has also been corrected.
I spent many (1,000's!)of hours improving the opening book. My time ratio of improving the opening book to coding was at least 20 to 1, probably as high as 50 to 1 and, perhaps, as high as 100 to 1. Responses from users would be appreciated on the following two experimental options: Elo-weakening with search disabling for weaker play against human players, and an opening book play style of: wide, best, deep, and tourney. I am particularly interested in finding the strongest book play option.
Change log:
Chess:
- Several minor chess knowledge changes/additions
- Improved many weak/bad opening book lines
New Features:
- Elo weakening (adjustable from Elo 1000 -> full strength)
- Search options can be disabled (for weaker play vs. humans)
- ICS support for on-line play
- Egtb cache made user-sizable
- Opening book styles: wide, best, deep, and tourney
Internal:
- Move-ordering somewhat follows Ed Schroeder website advice
- Matekiller/killer/history logic improved
- Null-move made more aggressive
- Fewer adaptive razoring reductions, but ply reductions made deeper
- Reduced size of hash entries, fitting more of them into hash
- Asymmetric search window based on side-to-move
- Replaced all assembly language with C code
- Using 5 different compilers at maximum warning levels to tease out possible coding errors
Optimizations:
- Egtbs not probed until late endgame
- Hash table code optimized
- Improved code/data alignment, and some dead code/data removal
Bugfixes:
- Candidate passed pawn scoring was wrong (removed)
- Egtb probe scoring for ep capture situations was wrong
- Egtb probe scoring for mates was sometimes wrong
- Null-move mate threat extension was wrong occasionally
- Null-move verification search was wrong in many ways
- IID search was blind to 50-move-rule draws
- In match mode was claiming a draw from previous game
- Sign of king shelter scoring occasionally wrapped-around
- Internal Epd test suite was misidentifying some correct solutions
- Resign threshold was set too low
Known Issues:
- The search needs further improvement
- The opening book needs further improvement
- Endgame play is weak
- Ponder is still disabled internally. It will be re-enabled eventually.
Opening Book Description
Opening book date: February 1, 2008
I am constantly improving the book by eliminating openings that lead to quick losses, by steering towards advantageous lines, and by extending lines that end in dangerous situations (in the middle of a trap). This work is an ongoing project. It is never wrong to use the latest book. This book is updated frequently and becomes the "official one" whenever a new version of Horizon is released.
Some opening book tools have been written but more are needed. When the opening book has been improved sufficiently, automated learning will be implemented.
How the opening book was built:
Only games by highly rated human players were included. For White games the minimum allowed Elo was 2500, for Black, 2450. The openings were carefully chosen to compliment Horizon’s playing personality. Jim Monaghan created this book. Thanks, Jim!
The opening book was based on about 5 years of TWIC downloads and as many grandmaster games as I could find. Duplicate games were removed. Initially a shallow general book was created using only white wins and black wins. Then thousands of games were played. Openings were removed when results were poor -- it was assumed that these openings were unsuitable to the engine. A new book was re-built by Jim using only the advantageous openings. With an approximately equal opening position Horizon battles quite well ...but only for the openings that were chosen!
Looking back: It turns out that I gave Jim flawed games for building the book. Some blunders were large and some were small. Another mistake made was including black wins only -- black draws should have been included as well. Even some white draws should have been included -- for instance I had to greatly expand the drawish Caro-Kahn for the White side of the book. I check Horizon games by hand. I identify bad opening book moves and remove them. If the book moves were good but the engine quickly played a bad move on its own, the book is prolonged to the error position and some new 'best moves' are added. So far I have checked about 1,000 games. Each little patch doesn't amount to much but the eventual cumulative effect should be profound.
I check game moves against NCO (Nunn's Chess Openings), against electronic opening books, and I also do long analysis of positions where choosing a best move is difficult. Approximately 7,000 opening positions have had their stored moves verified. That's about 5% of the book. The average depth of the "verified book" is about 6 full moves. This is a very deceptive number. Oddball openings can cause the engine to drop out of the verified book by move 4, but popular opening lines are often verified to move 20 or beyond. For now I'm leaving in "dead lines" that can no longer be chosen; if I've made a mistake it will be easy to resurrect the book's dead lines. I estimate that at least 2% of the book is now "dead".
The original book was based on 160,764 white wins and 88,237 black wins.
Future Plans
There are many remaining areas of future change. Here are some of them:
Chess
- Pawn storm knowledge for opposite-side castling
- Now that the search seems corrected a total re-write of the evaluation code may be attempted
- Put more emphasis on piece mobility
- Encourage speculative attacks that lose material but win the game
- More endgame knowledge
Internal
- Implement a multi-probe hash table
- Use magic sliders in move generation
- Implement an incremental attack table
Opening Book and Tools
- Improve book format for better support of opening book styles
- Automatically detect book holes from pgn files
- Automatically detect bad openings from pgn files
- Automatically remove positions that can no longer be reached (dead positions from removed opening lines)
General
- Squashing bugs!
- Continue improving the opening book (an ongoing project)
- Continue polishing the code...
History
Horizon was born on July 1, 2001. I am counting Horizon's birthday from the day I started writing my first line of code, not from the first release, which was on October 25, 2001 (The same day that Microsoft released Windows XP). Horizon's first release marked it as a promising engine and, with some fits and starts, it has continued to improve. Thanks to all the Winboarders out there for their interest and thanks especially to all the tournament directors who take the time to play engine tournaments.
Acknowledgements
Horizon runs atop a much-modified version of Colin Frayn's open-source Beowulf infrastructure. I would not have built upon this code base without Colin's kind permission to do so. I thank him for making the Beowulf code free and open and for allowing me the privilege to extend and modify it. If Horizon plays well, then certainly Colin's efforts deserve much credit. Horizon is standing on his shoulders. I repay my debt by sending him improvements (a couple) and bug fixes (many!) to the Beowulf code base. Please blame all remaining bugs on me, for they are my responsibility. Except for some utility code (FEN processing, test suites, etc.), some of the move generator, some of the initialization code and other non-critical chess-playing code, there's very little of Beowulf that remains within Horizon and less with each release.
Special thanks to:
- Colin Frayn, for creating Beowulf and helping me to understand Beowulf's inner workings
- Jim Monaghan, for his tireless chess advice, his help with the eval, his creating the opening book and, most of all, for becoming my best chess friend. You have stuck with me through thick and thin. Jim, you kept me going at times when I was ready to quit! Thanks!!!
- Roger Brown, for testing and for keeping me amused with his sharp-witted humor
- Gerhard Schwager, for testing and for the FACE tournaments
- Ron Winter, one of the finest C programmers I've ever known, for his programming help and advice
- Claude Dubois, for discovering some bugs and for supplying me with older Horizon versions
- Leo Dijksman, for his testing at long time control, especially with ponder 'on'
- Günther Simon, for his testing at Rapid time control
- Vine Smith, for helping with the eval back in the beginning days
- Tamim, for his chess advice sharpening Horizon’s king attacking abilities and for his game testing
- Bruce Moreland for his informative chess programming web pages
- Ed Schroeder for his informative chess programming web pages
- Bob Hyatt, the dean of chess-programmers, for his wonderful Crafty and all his helpful CCC posts
- Bob Jenkins, for writing the Isaac 64-bit pseudo-random number generator and making it public domain
- Volker Pitlik, for hosting the Winboard Forum
- ICD Chess, for hosting the CCC board
To all WinBoard, CCC, & WBEC forum posters: I may not respond, but I read everything!
Team Horizon, Past and Present
- Ron Murawski -- 07/2001 to present
- Jim Monaghan -- 11/2001 to present
- Gerhard Schwager -- 12/2006 to present
- Ron Winter -- 12/2003 to present
- Roger Brown -- 11/2002 to present
- Tony Thomas -- 9/2007 to present
- Tamim -- 07/2002 to present
- Vine Smith -- 07/2001 to 11/2001