Latest release: June 20th 2005.
Amundsen
Amundsen is a chess playing program, created by John Bergbom as a project in the course Bigger Advanced, Individual Course in Computer Science (2D1464). The program implements all chess rules except for 3-fold repetition. Amundsen is an xboard compatible engine, and can therefore use xboard to connect to ics-servers on the internet to play chess. At FICS (www.freechess.org) the program has a rating of 2073 in lightning (< 5 minutes), 1743 in blitz (< 15 min), and 1960 in standard (>= 15 min). (These rating numbers were in effect on June 20th 2005.)
I started writing this program in the spring of year 2002. Then no work was done for a long time, and then in the summer of year 2003 I started it up again. Then I rewrote almost every single line of the code. First writing this program, I used Swedish for output and code comments. I'm moving to English, but there is still a little bit of Swedish left in the code. A name change took place between version 0.25 and 0.3. The reason was that when the program started playing at FICS, the name jonte was taken already.
Do you want to read the project report?
ps
/
pdf
(in Swedish)
Version history:
-
Version pre-0.1: (released in July 2003)
It plays chess using alfabeta search, and the only evaluation that is done
is looking at the material balance. It doesn't know passant moves,
50-move rule, and the 3-move rule, also it allows castling while in check.
Supports xboard interface. No timing supported. Old code for move
generation.
-
Version 0.1: (released in August 2003)
Passant moves are added, and castling in check is not allowed. In this version
the board representation has switched from a simple array of ints to a bitboard
representation. This version is a little buggy. After playing for a while it
starts to make illegal moves, such as leaving the king in check.
-
Version 0.15: (released in August 2003)
Move ordering added. Improved evaluation => check for doubled pawns is done.
Faster code for finding a bit position in a bitboard.
-
Version 0.2: (released in August 2003)
Faster move generation. More of the job is done in the alphabeta search
routine, to avoid duplication of work. The code gets messier this way though.
Killer moves added. In this version the engine will always promote a pawn to
a queen.
-
Version 0.25: (released in September 2003)
Iterative deepening with aspiration windows added. Time control.
Improved quiescence. Now the engine has the option of continuing a capture
line, or to accept the static score of the position.
Added checking to see if the user's move is legal.
50-move rule added.
Fixed a bug with the bitboards.
-
Version 0.3: (released in September 2003)
Better time control. Support for increment. Ability to play at FICS.
Null-move pruning added. Bug with the castling rights fixed.
Handles KRK and KQK endgames. Check extensions added. Opening book added.
Improved evaluation. FICS rating: 1560 blitz, 1650 lightning
-
Version 0.35: (released in August 2004)
Fixed a bug with the opening book. Fixed a bug with the 50-move rule.
Transposition tables added. Improved move ordering, hash move, and static
exchange evaluation (SEE). Improved quiescence search. A bug fixed in the
alphabeta search. Another bug in the nullmove pruning fixed, plus a
suboptimal implementation of nullmove pruning fixed. Rating: About
the same as the previous version at FICS. In self-play however,
version 0.35 beats version 0.3 around 3 times out of four.
-
Version 0.4: (released in February 2005)
Dynamic move ordering at the root node (bug: this should have been done a
long time ago...) Fixed a transposition table bug (code for storing nodes
where no cutoff occurred was faulty). Improved re-searching of failed
aspiration searches. Improved pawn evaluation and piece placement evaluation.
Pawn hashtable added. Trades pieces if ahead, and trades pawns if materially
behind. Addition made so that moves which are likely to be bad are skipped at
deeper levels of the search. Somewhat better endgame handling.
This version beats version 0.35 about 60% of the time.
FICS rating: 1760 blitz, 1850 lightning, 1900 standard
I believe this rating boost comes mainly from better hardware.
-
Version 0.45: (released in June 2005)
Hashtables are now divided into a smaller refutation table and a
transposition table. 3-fold repetition finally added, which means
that Amundsen now actually implements all chess rules. Somewhat better
evaluation function after input from Dann Corbit. Support for the
xboard "ping" command added. Better time handling. This version beats
version 0.4 about 60% of the time.
The code is a mess, and there is testing code all over the place. In the next version a major cleanup is planned. But if there is still somebody who is interested in what the program looks like, you are free to download it, and do whatever you want with the code. If you use the program and you like it, or if you just downloaded it and tried it out, feel free to send me an email and tell me what you thought.
The source can be downloaded here:
jonte_v_pre0.1.tar
jonte_v0.1.tar
jonte_v0.15.tar
jonte_v0.2.tar
jonte_v0.25.tar
amundsen_v0.3.tar
amundsen_v0.35.tar
amundsen_v0.4.tar
amundsen_v0.45.tar
John Bergbom
d99-jbe@nada.kth.se
20 June 2005.