GIBBON Home Page
Links - Gibbons - Gibbons song
- How Gibbon works - Contact
Incremental move generation
This is maybe particular to Gibbon, as it uses few bitboards. Gibbon
keeps for each piece a pointer to its actual list of moves. Before a node gets explored,
a routine uses lastmove-departure-square and lastmove-arrival-square to find
the pieces whose move lists are now obsolete. Only the moves of theses pieces
are re-generated, and the move-list pointers of theses pieces are set to point
to the new lists.
Initially a routine would start from these astmove-departure-square and
lastmove-arrival-square and explore the
board to determine the pieces in need of move recomputation.
Now, the programs loops on the pieces and makes a logical bitwise and,
between the bitboard of pieces actualisation squares, and a bitboard with the
squares of the last move. If result is not zero, the moves of the piece are
regenerated.
Not an inch as clever as magic bitboards, however original. The use of
bitboards with arrival squares also helps to get heuristics, for exemple to
find attacking squares to the opponent king.
About Gibbon's name
At a point, I thought that a program that would be able to map the
search tree into areas (programmatically) and thus distinguish, and maybe
decide, between major and minor branches, would be able to play with with the
tree, say, … as a gibbon.
Unfortunately, the promise was not fullfilled, or maybe it is, but not
in the way I expected, through the combination of nullmove and PVS. It seems to
me that this combination does map the tree between PV nodes, other nodes and
nullmove nodes in a very efficient way.
Gibbon's future
- better speed, better heuristics, better leavers, better trees
Visitors :