Eden 0.0.10c


Hello there!
Have fun with my chess engine "Eden"!

Why is it called Eden? Well, that's a puzzle for you to work out. Whoever tells me the correct answer first will get his name mentioned in all future versions of this readme.txt! Perhaps I'll also list wrong answers if they are creative...

How to use it:
Use a program like "Arena" (www.playwitharena.com) to play against it, or let other engines play against it, even have tournaments, or let it solve problem test suites (usually contained in ".epd" files. I'd even say analyze your games, but Eden is far too weak for that for the moment.

Logos:
Three jpeg-Images are included if you want to give Eden a face to the name. The first one was done by David Dahlem, author of Pooky, the second one by Jim Ablett, chess engine compile-master extraordinaire (and art history connoisseur?), and the last one by myself. It's what you get when a programmer does the job of a graphic designer; but hopefully it's better than it would be the other way round. So consider my own black-and-white version to be the official logo, to be used if you want to display a logo on the Web etc. It is based on work by Albrecht Duerer, a German Renaissance painter. The Font used is called PRETEXT.


You can freely use it, but in the unlikely event that you make money off it you have to ask me first; I might even say yes.


Start it using "eden_0.0.10.bat" or configuring Arena to use that batch script.
Note that the script merely calls java to start the .jar file, so you need a Java Virtual Machine (JVM) installed (tested with versions 1.4 and 1.5) and in your path, for more info see http://java.sun.com.
If you know what you're doing, you can get a significant speedup by using a "server" JVM (add the option -server to the java call in the .bat). I haven't enabled it by default myself because it won't work for everyone. For the Server hotspot JVM I think you need the JDK version, but I haven't checked otherwise, as I always have a JDK on my machine. It would be nice if you would mention this setting if you use it in a published tournament, as the results will probably differ from using a regular version.



This is version 0.0.10c, released 2006-08-14.

It has the following features:
- supports the very basics of the UCI protocol (for chess engines)
- supports the even more basic basics of the WB protocol (for chess engines)

- knows all rules of chess, including castling and en passant
- can sub-promote if necessary, i. e. take a knight instead of a queen on promotion
- knows about stalemate
- in hopefully all cases, it will recognize the three-fold repetition rule, and seek it when behind, and avoid it when ahead.
- has an opening repertoire of almost 750 positions


Some implementation notes:
- Iterative Deepening
- Simple time control: When the time limit is reached, it returns the best-so-far move.
- Quiescence Search, with "good or equal captures" examined "all the way"
- Basic Shannon-type (one-dimensional array) 10 x 8 board (if you are tracking this readme: No, I'm not changing the board representation around every release, just changing my mind about what it actually is)
- Started out as "naive" OO implementation, slowly degenerating for performance reasons :-)
- Three Zobrist-based Hashtables: Transpositions, Pawn Strucure, Opening Book

The playing strength:
Version 0.0.10 is a significant improvement over version 0.0.9. Beware!
- 0.08: It plays similarly to an advanced beginner in the opening. It knows about very basic positional factors. Once it has secured a material advantage it does not know what to do with it.
- 0.0.8: It managed a draw against its creator (former Elo/DWZ ~1700-1800, "average club player", better than >99% of _all_ chess players) in a 5-minute game where I underestimated it :-); in the next two games it got thorougly smashed :-)
Version 0.0.9 is slightly better.
Version 0.0.10 knows much more about endings, king safety, passed pawns.
I think I still have a chance, but it is not my goal to find out.

Test suites I ran:
- Pentium 4 M 1.86 Ghz, version 0.0.10dev, without -server option:
-- "Win At Chess" (WAC.epd):                  188/300 positions solved within 10 seconds each
-- "1001 Basic Ways to Checkmate" (BWTC.epd): 662/1001 positions solved within 10 seconds each
- Pentium 4 M 1.86 Ghz, version 0.0.10c, with -server option:
-- WAC.epd:                                   200/300 @ 10 s
-- BWTC.epd:                                  696/1001 @ 10 s


- How many can YOU solve?

UCI protocol features:
- go depth
- go wtime x winc y ...
- go movestogo
- go infinite
- stop
- OwnBook option
- Hash option. Please note that by default, a Java Virtual Machine (and therefore Eden) is limited to a total of 64 MB. It is possible to increase the maximum size by the -Xmx option, e. g. java -server -Xmx256M -jar de.czempin.... if you know what you're doing. If you try to give it more hash size than is available, it will only use what is available, minus a safety margin. ****Note**** I didn't have the time to code the resizing part, so the previous comment is invalid. I'm leaving it there in preparation for version 0.1.0, where the comment will be valid.
-- no "debug" command
-- no "ponder" or "ponderhit" command
-- only "id", "uciok", "readyok" and "bestmove" (without "ponder") is sent back
-- no "go mate n"
-- no "go nodes n"


WB protocol features:
- the basics of WB-2. Should be sufficient to play games.
-- Please be careful with this, it was implemented very quickly (about 8 hours elapsed time from scratch, including refactoring the UCI dependencies) without extensive testing (and only under Arena). UCI should be the default. However, it should be good enough to no longer require converters like Polyglot, or worse, classifying my engine as "Non-WB". I need feedback if you find any problems!
-- "level" command only recognizes integers, e.g. "level 0 2 6" or "level 0 120 0", but not "level 40 0:30 0". In fact, the second example will probably crash (or perhaps set the time to 0?)
-- no extended "level" command
-- "random" command is a no-op
-- undo and remove commands not supported
-- nopost command not supported; thinking output will always be displayed (hey, it's scarce enough as it is!)
-- hard + easy commands ignored (no pondering)
-- bk command ignored
-- hint command ignored
-- st command not supported
-- sn command not supported
-- sd command not supported
-- rejected command not supported (whatever it's supposed to be for anyway)
-- force command not fully implemented
-- which of the commands that can be deactivated are supported or not (analyze etc.) Eden will tell you when receiving "protover" in xboard mode


Limitations/Known Bugs/Future Features:

- Last Minute: there is at least one transposition in the opening that should be recognized, but isn't. So perhaps they all don't work
- the hashtable size can't be changed. Total memory usage is < 4MB, so consider that to be the hashtable size.
- doesn't know about 50-moves draw
- doesn't know about insufficient material
- can't force checkmate against the lonely king (although it sometimes happens by chance)
-- With a queen or two rooks it will quickly checkmate you simply through search
-- with a single rook it is more chance-related
-- Eden has no clue about the other elementary endgames
- backward pawns, as well as many other important positional factors, not implemented
- no null-move, pvs search
- TT only used for move ordering
- very limited (and insufficient) evaluation function (I'll always be saying this, no matter how advanced it will have become :-)
- quite a bit of potential regarding general (non-chess-specific) performance improvement (for now, it was "naively" implemented in straightforward OO way, without regarding performance). But as I've learned, the chess(-engine)-specific potential for better is even greater.

Plans for the next version (0.1.0):
- WB & UCI protocol compliance: undo/remove (WB) st (WB) movetime (UCI) sd (WB)
- general cleanup
- raw speed
- complete TT implementation (resize; use the stored value)
- enhance Opening book
- backward pawns
- insufficient material
- elementary endgames
- whatever else it takes to beat this version!

There are compiled versions (for whose creation I give/gave permission) of my previous engines on the Internet, and one will probably appear for this one. I'm not sure if it will play any differently.
If you test this, please let me know your results. It does help if you prefer an .exe to a .bat, but it is much bigger than the pure Java bytecode. An alternative if you are just concered with having an .exe would be to use jlaunch.exe, which you can find using your favourite search engine.
*Please note this when/if setting up the compiled version in tournaments, by appending "(compiled)" (or whatever you prefer that will make the distinction clear) to the name in results. The noncompiled version is intended to be the official version. *


I love feedback (criticism, questions, tournament reports, games played by Eden, ...)!
Email eden@*mylastname*.de (reluctantly I give here my "standard" email address: n.*mylastname*@gmx.de, replace *mylastname* by, well, ...)
I do lurk around the Arena forums from time to time (at the time of writing, http://f22.parsimony.net/forum41668/, don't you love those meaningful URLs?), as well as the "CCC" forums: www.talkchess.com.
 
Changes for 0.0.10a:
- UCI mode fixed.
Changes for 0.0.10b:
- DEBUG mode deactivated, which was inadvertedly left on in 10a
Changes for 0.0.10c:
- UCI "stop" command fixed (It failed to give the best move so far). This affects only those e. g. running EPD test suites

Changes from 0.0.9->0.0.10
- Asynchronous behaviour (accepts commands while "thinking"), so the stop command now works properly! Hurray for Java Threads!!
- WB now suported
- opening book
- transposition hashtable
- pawn structure hashtable
- basic endgame detection
- improved king safety
- passed pawns
- killer heuristic (2 killers)
- forced move extension
- check extension
- improved move ordering
- pv display fixed
- mate in n correctly displayed
- many major and minor bugfixes and other changes (I'll always be saying this, so I may as well not say it. So pretend I didn't say it.)


Changes in older versions:
See separate file "history.txt"

Other notes:
I'm not releasing the source code yet despite me normally being a fan of open-source. I'm under the delusion that I have a professional reputation to lose :-)


Nicolai Czempin

P. S. This chess engine is dedicated to "mah boys" Pavel and Janik. May you one day be as strong* as the engine, or stronger. Or even play better.



There's nothing to see below this line:
-----------



























































*"Awwh, yoo are so strrong, Mr. Fawl-tee!"---Ah! Good name for my next engine: "Basil" or "Fawlty" (even rhymes with Crafty)
Why are you still reading this?