Being a computer freak, I decided to start working seriously
on an Othello playing program in June 1997.
I decided to give the program the name "Zebra".
I already had created such a program two years earlier,
but its weak play made it necessary to discard almost all the old code.
The program has since then improved a lot, and the only hopes
I have of winning against it now is that I will discover some obscure
search bug in the code... so when I do win against it, I know that
there is some debugging to be done.
Except for terribly buggy versions, I have never beaten Zebra.
The closest I have come is a drawn position with 21 empty...
which I (of course) failed to convert and lost 29-35 instead... bummer.
Zebra is now strong enough that it is extremely unlikely that I get
this close again; not that this is an overly strong statement - I get
crushed by all strong human players as well...
A Windows version of Zebra can be downloaded from the
This is a joint project with Lars Ivansson who has created the GUI.
an Android version of Zebra written by Alex Kompel.
The Zebra source code is released under the GPL:
Download (last updated on October 2, 2006)
Opening book based on games between top players and
self-play games, currently more than 500'000 positions.
Learns from each game it plays.
Uses the search algorithms NegaScout and
A hash table of 2'000'000 entries (or more) is used during
Hash table information, move statistics and shallow searches are used
for move ordering.
Evaluates positions using a pattern-based evaluation scheme.
Each configuration of every
has a value associated with it for each of 12 game stages.
Linear interpolation is used between game stages.
The pattern values are added together with a parity measure and
estimates the final disk difference.
To tune the values for the patterns (about 1'000'000 different when
taking symmetries into account),
a large over-determined linear system of equations was solved
approximately using Fletcher-Reeves' conjugate gradient method.
diagonal of length 4-8
edge + adjacent X-squares
Searches 18-27 moves in the midgame and 24-31 moves in the endgame
in a normal game (2x15 minutes).
Usually runs on a Thunderbird / 1.33GHz / 1024MB under Windows 2000.
On this hardware, Zebra typically searches 1'300'000-1'500'000 positions/second
in the midgame and 4'000'000-7'000'000 positions/second in the endgame.
Consists of about 50'000 lines of C code and 1'000 lines of x86 assembly code
(which can be replaced by equivalent C code on other platforms).
Usually compiled with
June 3rd 1997: Created
IOS rating of 1500 after three weeks.
August 1997: Crude evaluation function and search algorithm working.
IOS rating: 1700
September 1997: All major program components working
(opening book, hash table, endgame solver).
IOS rating: 1900
January 1998: New pattern-based evaluation function.
IOS rating: 2300
February 1998: Multi Prob-Cut and an improved opening book working.
IOS rating: 2400
March 1998: Selective endgame solver working; general speedup.
May 1998: Beat Hannibal, the strongest active program in
the world, for the first time.
IOS rating: 2600
June 1998: Available as freeware for Windows 95.
IOS rating: 2650
October 1998: Finished 3rd in the "Princeton II" tournament.
Spring 1999: Search speed up, especially in the endgame.
Summer 1999: More knowledge added.
Fall 1999: Endgame speedup.
Spring 2001: Midgame speedup.
Zebra has played in some tournaments for computer programs.
Here is how it has performed.
|GGS open (April 2003)||3rd/12|
|GGS rand open (March 2003)||5th/16|
|GGS open (January 2003)||3rd/16|
|GGS rand open (December 2002)||3rd/19|
|GGS open (May 2002)||5th/10|
|GGS Tamenori theme (March 2002)||3rd-6th/13|
|GGS rand open (January 2002)||4th/15|
|IOS rand open (August 1999)||2nd-3rd/5|
|IOS open (May 1999)||3rd/8|
|Princeton II (October 1998)||3rd/13|
|IOS open (April 1998)||3rd/15|
|IOS open (February 1998)||2nd/15|
|Princeton I (October 1997)||13th/15|
Things to work on
Not to forget the numerous people who have played Zebra and its kid
brothers and/or given comments and suggestions
(OO1, zardoz, reveil, kenta and several others).
Last modified July 18, 2011 by