apep
There are a lot of free chess engines out there. This is another one.
Downloads
Coming soon.
Log
April 22, 2008: apep has finally won and drew a game! it drew
a game against roce, which sure likes to draw in winning positions,
and won a game vs a very old version of mediocre chess. of course,
these engines still eat apep alive in general. eval is really really
stupid. stills needs a lot of improvement.
April 18, 2008: fixed a bunch of bugs from processing hash
table moves without checking their legality. never do this! null
move works and gave a _massive_ performance increase. tactics
benchmarks are a little weird: it fails a lot of them because of
communication issues with Arena. Need to figure that out. Not a lot
more to do in terms of tactics other than going through the list and
seeing which ones that the engine fails on.
Next on the list of things to do: opening books and a real
positional evaluation (development, space, mobility, king safety).
April 13, 2008: reimplemented SEE. move sorting now done with
insertion sort. Code compiles under Windows and UNIX. Implemented
'analyze' mode in (x|win)board, though the behavior of the engine
under Arena is a little wacky -- still trying to find the right
balance of cin polling time. Up next: null move reduction, more
engine search tweaks (looking to improve tactics benchmarks).
April 4, 2008: redid move encoding to store less information
(and so require less operations to process/unprocess a move). move
generation is done directly into an integer array. move sorting
currently uses the old heapsort approach. need to reimplement SEE.
need to add checks back to quiescent search and reimplement XBoard
functionality.
March 26, 2008: reimplemented transposition tables. works better;
found a bug in the old transposition table implementation. ported
some more JUnit tests into CPPUnit tests.
March 25, 2008: search engine back in C++. need to reimplement
transposition tables. things seem faster, but it's hard to quantify
as I haven't implemented all of the features from Java yet. Ported
some CppUnit classes.
March 23, 2008: ported perft portion of engine to C++. marginally
better performance on perft; about 10 seconds faster on perft 6. fast
enough to justify porting the search and seeing how that performs.
March 22, 2008: implemented SEE. marginally better performance.
March 21, 2008: broke down and implemented MVV/LVA sorting, removed my previous hack. much better performance. next: SEE.
March 16, 2008:
fixed pawn-hopping-to-check-enemy-king bug.
passes around 70% of tactics benchmarks when given 15 seconds per move (need to improve this)
implemented time-based search; can take a certain amount of time per move (will go as deep as possible)
March 14, 2008: added transposition table
March 12, 2008: new move representation (ints). depth 6 searching is much faster.
March 11, 2008: passes perft test suite.
March 9, 2008: implemented iterative deepening + quiescent search. currently not very fast to depth 6.
March 8, 2008: implemented castling/en passant (finally)
Stuff I Need To Add
Transposition tables
Null moves
Strategic evaluation of the board (pawn structure, passed pawns, control of center, bad bishops, good knights, king safety, king centralization in endgame)
Endgame 'planning' (?)
Opening books
NegaScout / MTD(f)
Finish xboard/winboard compliance
Games
apep 0.0.1 vs apep 0.0.1 -- March 8, 2008. (alpha-beta search, no iterative/quiescence)
apep 0.0.2 vs apep 0.0.2 -- March 20, 2008. (alpha-beta search, transposition table, quiescence). The computer fails to go for the win with the classic bishop sacrifice and instead randomly moves its pawns forward until success. (run while profiling, so it is stupider than usual)
Roce 37 vs apep 0.1.0 -- April 20, 2008. The first game against a computer opponent that apep didn't lose (*tear*). though it probably should have
Mediocre v22b vs apep 0.1.0 -- April 22, 2008. The first game against a computer opponent that apep won. a really ugly nimzo-indian. toga tells me that mediocre made the big blunder by, yes, not moving its knight on move 14. meaning that 13 ... e4 was not a brilliant tactical combination or the result of a deeper search, but a tactically sound attempt to take more center control.
Resources I Found Helpful
Bob Hyatt's Technical Papers
Bruce Moreland's Chess Programming Topics
Patzer, a Chess Playing Program
Ward Farnsworth's Predator at the Chessboard (good example problems to feed your engine)
Beowulf Computer Chess Engine (esp theory page and the source code)
Acknowledgements
I got the above hieroglyphics for "apep" from wikipedia.
David King
Last modified: Tue Apr 22 22:02:22 EDT 2008