Background

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:

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:

  1. UCI-Settings by the chess GUI

  2. Parameters

  3. 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):

  1. Gnu chess source code: When to make nullmoves, when to extend search

  2. 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.

  3. 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.