GIBBON Home Page
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.
- better speed, better heuristics, better leavers, better trees