From Chessprogramming wiki
Jump to: navigation, search

Home * Engines * Zzzzzz

Zzzzzz 5 GUI written in Delphi [1]

Zzzzzz, (ZZZZZZ)
an open source chess program under the GNU GPL by Gijsbert Wiesenekker written in C, and Version 5 (1998) in Pascal with a Delphi GUI for Windows platforms [2]. A Chess Engine Communication Protocol compliant Zzzzzz 3.5.1 for Windows/Linux 32 is available from Jim Ablett's site. Zzzzzz had its debut at the DOCCC 1991, and further played many Dutch Open Computer Chess Championships and International CSVN Tournaments, as well as the IPCCC 1994 and Aegon 1997. Already at the DOCCC 1993, Zzzzzz 3.0 was able to play on five machines in parallel [3]. The parallel alpha-beta routine was built around a public domain massively parallel computing environment, PVM. Meanwhile version 3.4 has moved to version 6, which still is command-line driven, but has evolved using bitboards, static exchange evaluation, null move, and extensions. It can search in parallel on two or three nodes with a shared hash table.

Quiescence Search

In Zzzzzz 3 the quiescence search looked like this, as explained by Gijsbert Wiesenekker in 1994 [4] :

When a piece captures, a capture flag is set on that piece. In the quiescence I allow QUIES_MAX free captures (so any piece may capture any other piece), but after these QUIES_MAX free captures only captures to pieces with the capture flag set are allowed. In this way the quiescence search always terminates and many exchanges like 'I capture your queen, you capture my queen etc.' are evaluated correctly. Higher QUIES_MAX values give better results, but also makes the program slower, so there is a trade off here. In ZZZZZZ the quiescence search hardly takes time: the quiescence search usually already terminates after the first eval() call (depth = 0) (an evaluation you would have to do any way) and only about 10% of the eval() calls come from deeper inner nodes. I also experimented with null moves in the quiescence search, but that did not help much. 
#define QUIES_MAX 2

int quies(int depth, int alpha, int beta)
   int best, temp;

   best = eval();
   if (best >= beta) return best ;
   for (all your pieces) {
      if ( (depth >= QUIES_MAX) and (no capture flag set on your piece) )
      for (all my ways to capture your piece) {
         temp = -quies(depth + 1, -beta, -max(alpha, best));
         best = max(temp, best);
         if (best >= beta) return best;
   return best ;


Gijsbert Wiesenekker on evaluation patterns and his testing approach [5]:

I play test games against a very strong chess program (Rybka). Now most of the time Rybka would have played a different move than ZZZZZZ actually plays, but the difference between the scores is only small. Of course, as the game progresses the differences gradually build up to a real disadvantage. Analyzing the small differences was not very helpful, one of the reasons also being that in chess openings many moves are playable. However I noticed that in certain positions the (usually already positive) score of Rybka's position suddenly went up by more than half a pawn after the move ZZZZZZ played, and that in certain positions the score of the move Rybka suggested for ZZZZZZ was positive (so the score of Rybka's position after that move from ZZZZZZ would even have been negative), but the score of Rybka's position was positive by more than half a pawn after the move ZZZZZZ actually played. Analyzing these few positions greatly improved the evaluation of ZZZZZZ. However, this is not easy. Especially patterns that should be evaluated positive but are evaluated negative are hard to find, as positions containing these patterns are removed from the alpha-beta search and do not show up in the PV. Conversely, patterns that should be evaluated negative but are evaluated positive are easier to find, as positions containing these patterns show up in the PV.


Clash of the Consonants

IPCCC 1994, round 7, Zzzzzz - Xxxx

[Event "IPCCC 1994"]
[Site "Paderborn"]
[Date "1994.10.01"]
[Round "7"]
[White "Zzzzzz"]
[Black "Xxxx"]
[Result "0-1"]

1.e4 c5 2.Nf3 Nc6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 e6 6.Ndb5 d6 7.Bf4 e5 8.Bg5 a6
9.Bxf6 gxf6 10.Na3 b5 11.Qd5 Bb7 12.Ne2 Bh6 13.Qd3 f5 14.Qh3 Qf6 15.Qxf5 Qxf5
16.exf5 d5 17.Rd1 O-O-O 18.c3 d4 19.cxd4 exd4 20.Rd3 Ne5 21.Rg3 d3 22.Ng1 Bf4
23.Rg7 Rde8 24.Kd1 b4 25.b3 bxa3 26.Nh3 Bh6 27.Rg3 Bd5 28.Bxd3 Rd8 29.Bxa6+ 0-1

DOCCC 2007

DOCCC 2007, round 7, Zzzzzz - Deep Junior [6]

[Event "DOCCC 2007"]
[Site "Leiden, NED"]
[Date "2007.10.28"]
[Round "7"]
[White "Zzzzzz"]
[Black "Deep Junior"]
[Result "1-0"]

1.d4 Nf6 2.c4 g6 3.Nc3 d5 4.Nf3 Bg7 5.Qb3 dxc4 6.Qxc4 O-O 7.e4 a6 8.Be2 b5 
9.Qb3 c5 10.dxc5 Bb7 11.e5 Nfd7 12.Be3 Qc7 13.Nd5 Qa5+ 14.Kf1 Nxe5 15.Nxe5 Bxe5 
16.Nb6 Nc6 17.Nxa8 Rxa8 18.Rd1 Qc7 19.Qa3 Na5 20.Bd4 Bxd4 21.Rxd4 Nc6 22.Rd2 e5 
23.h4 Nd4 24.h5 a5 25.hxg6 fxg6 26.Qc3 Bd5 27.Kg1 Rf8 28.a3 Qe7 29.Rh3 a4 30.Re3 
Qg5 31.Rg3 Qf6 32.Bd1 Rc8 33.Bg4 Rc7 34.Rd1 Bc4 35.Qa5 Rxc5 36.Rc3 Qf8 37.Re1 h5 
38.Bf3 Qd6 39.Be4 Kg7 40.Bd3 Kh6 41.Bxc4 bxc4 42.Qa8 Qf6 43.Qxa4 Rb5 44.Qd1 g5 
45.Qd2 Qd8 46.Rd1 Qd5 47.a4 Rb6 48.Kh1 Rf6 49.Re1 Rf4 50.Rh3 Kg6 51.a5 Rf6 52.Ra3 
Rf4 53.Ree3 Kh6 54.Rh3 g4 55.Rhe3 h4 56.a6 h3 57.Rg3 hxg2+ 58.Rxg2 Qa8 59.Qe3 Kg6 
60.Qh3 Nf5 61.a7 Kg5 62.Ra6 Nh4 63.f3 1-0

Forum Posts



1995 ...

2000 ...

psychological warfare by Georg von Zimmermann, CCC, March 17, 2001

2010 ...

External Links

Chess Engine



Up one Level