I think very few of us really like null move, its inherent blindness makes the program look very stupid in certain positions. On the other hand it is very good at telling us what kind of threat the opponent has, although exploiting this in a clever way is difficult. If he threatens to take my queen I should do something about it, like moving it, but where to? Probably moving the queen would be a stronger move than capturing a pawn. However this calls for a very advanced move ordering scheme which is still on my todo-list.Don wrote: On the other hand I am prejudiced against null move, an algorithm that I feel is far uglier than history. History can do no damage, it's just advisory but null move is based on inserting an illegal move into the game tree, embracing zugzwang problems and other such ugliness. Nevertheless, I still have to use it because it works.
In order of ugliness, killer moves and history is not even on the list, these are powerful statistical concepts. GHI and null move is at the top of the ugly list.
Also on my ugly list is hashing. Practially it would be a lot easier to evaluate certain things dynamically through search. For instance how about giving a reward for number of checks? On the board I would always play the move which gave me the best attacking chances, even if there was nothing concrete in view.