Spike
Sorry, dieser Text ist zur Zeit nur in englischer Sprache verfügbar :-(
Spike is a chess engine developed since spring 2004. It is
developed from the scratch but uses many ideas already tested on our two
other engines: Cheetah and IceSpell. Cheetah and IceSpell are the
former engines created by Ralf Schäfer and Volker Böhm, the
authors of Spike.
The Name
Both authors like a TV series called
„Buffy the vampire slayer“. One character of this
series is Spike, a very cool and interesting character. On the
other hand we like to build a chess engine that plays a rather
agressiv style „spiking“ other engines. We discussed
longer about its name than developing it :-)
The Version
The Version 0.7 is the first public
available version. There were other versions – 0.1, 0.2, ...
0.6 that played in tournaments published in the internet. As we don´t
like to publish a buggy or rubbish playing chess engine we decided to
wait a bit before publishing spike.
Installation
Spike is just a chess engine, not a
whole chess playing program. It has no own GUI but needs other
(partially public available) GUI´s to be played. To install
Spike just copy its files from the zip archive to any
directory. To configure your favorite chess GUI to play with Spike,
take a look at the configuration of the GUI.
Spike needs only the exe file itself
to play. There are more files in the zip archive that adds features
to spike:
-
An image file „Spike.gif“.
This image can be displayed for the engine in a chess GUI´s.
-
A configuration file
„SpikeConfig.xml“. This file containes the settings of
spike. We know that a XML-File is not a good solution for a config
file as it is too complicated. There will be a solution to this
problem in one of the next versions of spike.
-
A file that helps modern
browsers to display the config-file in a better way:
SpikeConfig.xslt
Features
Spike 0.7 supports WinBoard and UCI.
Most tests are done on WinBoard thus we encourage everybody to use the
WinBoard protocol. But the UCI Protocol should work fine too.
With the UCI prococol you can
configure settings inside some chess GUI´s that supports this
feature. Currently you can enable or disable the opening book and set
the size of the hash.
Spike supports two parameters:
Both settings can also be set in the
configuration file. The configuration file additionally supports the
configuration of a log file that loggs the interface traffic between
the GUI and the engine. Usually we need this feature to debug spike.
Thus there is no need to switch logging on.
The settings are used in the following
priority:
-
UCI-Settings by the chess GUI
-
Parameters
-
Settings in the
configuration-file
An example: if you set the hash file
to 32 MB in the configuration file and add a „/Hash 64“
to the parameters a hash size of 64 MB is used. If later you switch it
to 128 MB in your chess GUI, then 128 MB is used.
Playing Strength
Very hard to say. There are many
testers that are publishing lists of chess engines with elo ratings.
But this ratings are only relatively correct and depending on the
guess how strong the engines are in average. There are no results in
tournaments against human players with official ELO ratings. Thus
our „favorit“ elo rating is just a guess: 2400 ELO.
Programming Stuff
Spike is written in C++ and Java at
the same time. It is mostly possible to write a program code that can
be compiled by a C++ compiler and a Java JIT (Just in time compiler).
This is done by using a subset of C++ an Java that is supported by
both language. There are some issues we cannot code the same in C++
and Java. Those issues are solved by a little program (itself written
in C++, about 30 lines of code) called „javanizer“ that
can transform the classes from C++ to Java and the other way from
Java to C++.
Spike uses objects as Java forces us
to use objects. But Spike is not programmed object oriented. The
design is made for a maximum of speed.
Spike is a typically brute force
program with a pvs algorithm. PVS stands for „principle
variation search“ and is a refinement to negamax that is a
refinement to alpha-beta or minimax. The board structure is a kind of
0x88 but has an additional border above and below the chess-field.
The board has 14x16 fields to make move generation as easy as
possible. Spike has some common singular extensions: check-evades,
recaptures, pawn advance to 7-th row and „nullmove thread´s“.
Spike supports partially extensions in steps of ¼ ply. It
uses adaptive nullmove with R=3 and R=2 depending on the remaining
search depth. It has a foreward-pruning rules in quiescense but does
not use futility, extended futility or razoring by now.
The hash has two lines. The first is a
„deeper replace only“ the second is a allways replace. If
a hash entry is too shallow for the „deeper replace only“
hash it will be written to the allways replace line. The hash is not
cleared between moves. Older entries are allways replaced, even if
they are in the „deeper replace only“ part of the hash.
The moves are sorted by main-variant,
hash-killer, SEE-ordered captures, 2-killer moves, and a history
heuristic to order the first four „other“ moves. Moves
are generated lazily. First the hash-move is tried without move
generation, then the capture-moves and four killers (two of them are the
killers from ply-2) are generated, after that the other moves are
generated.
The eval checks pawn structure (double, isolated, backward,
passed, connected and combinations of them), king security, pawn
shield, mobility, piece attack/defence, rook on open lines, rook or
queen on 7-th or 8-th row, knight and bishop position, trapped rooks
and knigths in enemy territory supported by pawns that cannot be
attacked by pawns. Nearly every eval result is multiplied by a factor
calculated from the amount of pieces on the board. Spike has no clear
separation between opening, middle-game or end-game. It calculates
values for midgame and endgame and builds an average of these values
according to the amount of material on the board.
The calculation speed is from 450KNts
(complex middlegame) to 800KNts (endgame) on a celeron 1,3 GHz.
Many thanks to...
To write Spike we have not used any
code of other chess engines, but we haven´t invented most ideas
of our own. Many thanks to all people for writing web-pages,
new-groups or giving their source-code away.
Most ideas are from web pages and www.talkchess.com.
Most read sources (already used for IceSpell an Cheetah):
-
Gnu chess source code: When to
make nullmoves, when to extend search
-
Crafty source code: history
tables, extend search of one ply only for 3 of 4 events, two
hash-lines, test for time if x nodes searched, and the proof that it
is possible to write a world class chess engine by only using clear
and simple principles.
-
http://members.home.nl/matador/chess840.htm
(Rebell): king attack.
And many thanks to the organizer of published chess-engine
tournaments. They motivate us to build new stronger versions of
Spike. We do not list them here because we are sure we will forget
somebody.
History
0.1: First version
„shipped“ to a public tournament „Chesswar“,
organized by Olivier Deville. It played there only one game and was
then replaced by the following version.
0.2:This version was additionally send to Leo Dijksman
for WBEC Ridderkerk. Many thanks to him to accept a slightly
buggy version of Spike and to help us to track these bugs.
0.3: This version started
in one more tournament: „Le système du Suisse“
by Claude Dubois. It was too the version that managed to win the group 3
qualify match of WBEC.
0.4: A version that
didn´t live long and just replaced the 0.3 in some tournaments.
0.5: A very successful
version of Spike. It won the third division of WBEC qualifying for
the second division.
0.6: The version we built
for the AEGT tournament organized by Heinz van Kempen. The tournament
is supported by many testers giving a huge amount of games at longer
time control.
0.7: The first public
available version of Spike built for the ATL Tournament by Frank
Quisinsky. The tournament with the
strongest opponents so far. Currently Spike performes great in this
tournament.
0.8a: A version which not played in much public tournaments,
because shortly after the release we had a better version 0.9X1 or 0.9X2.
However it did a great job at the 2. Division of WBEC and finally ended there
on the second place, qualified for the promotion games to Division 1. Now we are
looking forward to these promotion games, now with our newer version 0.9
Disclaimer
Spike is free of charge. You may use and copy it for private purposes.
There is no warranty of any kind.
|