Move ordering
For alpha-beta pruning, it is essential that the best moves in
a position are searched first.
Zebra uses several different heuristics to achieve this:
For each move, a "killer response" to that move is stored - if my opponent
plays the X-square g2, I definitely should look at h1 first to see if the
corner can be captured, and if this is a wise thing to do.
Another useful heuristic is to perform shallow searches;
before starting on a depth 12 search, the program searches the
position to depth 2 and finds the move which looks best after
the shallow search, which obviously takes negligible time
compared to the full search.