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