From Chessprogramming wiki
Revision as of 19:56, 20 July 2019 by GerdIsenberg (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Home * Engines * Daydreamer

A daydreaming gentleman [1]

Daydreamer, (DayDreamer)
an UCI compliant open source chess engine by Aaron Becker, written in C, and the 2.0 pre-release in Rust [2], also able to play Chess960. Developed since early 2009, the program was named Daydreamer after a bug in an early version caused it to occasionally follow up very strong play with bizarre blunders, as though it had lost its focus on the game and its mind was wandering aimlessly. First released in August 2009 [3], it initially used Tomasz Michniewski's simplified evaluation function, while subsequent versions were rapidly improving since mid 2010. DayDreamer played the CCT12 and ACCA 2010 online tournaments.


Board Representation

Daydreamer prior to 2.0 pre-release used piece-lists and a 16x16 vector attacks board around a 0x88 board inside its middle 16x8 slots [4]. Move generation of pieces is unrolled over directions, capture generation of sliding pieces for quiescence uses the leading efficient blocker loop, i.e. for one vertical direction [5]:

  for (to=from+16; pos->board[to]==EMPTY; to+=16) {}
  if (can_capture(piece, pos->board[to])) {
    moves = add_move(pos, create_move(from, to, piece,
                     pos->board[to]), moves);

Daydreamer 2.0 is a not finished rewrite in Rust [6], with the significant change to bitboards and the introduction of [[Move Generation#Staged|staged move generation].


The search is PVS alpha-beta with transposition table, IID, null move pruning combined with mate threat extensions, razoring, futility pruning and late move reductions inside an iterative deepening framework with aspiration windows and floating point fractional ply depth, the latter credited to Ivan Bonkin and his Bison program [7].

Opening Book

Daydreamer supports PolyGlot and ctg opening books [8], the huffman codes and ctg move decoding based on Stephan Vermeire's ctg code for Brutus [9].

Endgame Tablebases

Daydreamer is able to probe Gaviota Tablebases as well as Scorpio Bitbases [10].


Daydreamer's evaluation might be lazy with respect to bounds and margins based on cached material, considering imbalances, and piece-square table scores only. Otherwise, supported by a pawn hash table, it takes pawn structure, mobility, king safety and various other terms into account, speculatively aggregating middle- and endgame scores, which were finally tapered by a range of 24 game phases.

Selected Games

ACCA 2010, round 6, DayDreamer - Gaviota [11]

[Event "ACCA 2010"]
[Site "FICS, San Jose, California USA"]
[Date "2010.11.07"]
[Round "6"]
[White "DayDreamer"]
[Black "Gaviota"]
[Result "1-0"]

1.e4 e6 2.d4 d5 3.Nc3 Bb4 4.e5 c5 5.a3 Bxc3+ 6.bxc3 Ne7 7.Qg4 O-O 8.Bd3 Nbc6 
9.Nf3 f5 10.exf6 Rxf6 11.Qh5 h6 12.O-O c4 13.Be2 Qa5 14.Bd2 Bd7 15.Ne5 Be8 
16.Qh4 Nxe5 17.dxe5 Nf5 18.Qh3 Rf8 19.a4 Bxa4 20.g4 Nd4 21.Bd1 b5 22.Kh1 Rf7 
23.g5 Nf5 24.gxh6 Qc7 25.Bh5 Re7 26.Bg6 Bxc2 27.Rg1 Qxe5 28.Bh7+ Kf8 29.Rae1 
Be4+ 30.f3 Ke8 31.fxe4 dxe4 32.hxg7 Kd7 33.g8=Q Rxg8 34.Rxg8 Kc7 35.Ra1 Kb7 
36.Bxf5 Qxf5 37.Qh8 a5 38.Rg5 Qf3+ 39.Kg1 e5 40.Qd8 Qf6 41.Qxa5 Qb6+ 42.Qxb6+ 
Kxb6 43.Be3+ Kc6 44.Ra6+ Kd7 45.Bc5 e3 46.Bxe7 1-0

See also

Forum Posts


2010 ...

2015 ...

Re: Daydreamer 2.0? by Graham Banks, CCC, October 14, 2018

External Links

Chess Engine

Downloads · AaronBecker/daydreamer · GitHub
Index of /chess/engines/Jim Ablett/+++ LINUX ENGINES ++/32 BIT/daydreamer compiled by Jim Ablett, hosted by Kirill Kryukov



Up one level