we have severe, quite reproducable problems with search inconsistencies in the Chess engine, with apparently increased frequency since iterative deepening feature has been added
standard tricks, experiment with various algorithms (bitboard representation, PVS, sophisticated move ordering, search extensions, futility and null-move pruning, quiescence searches, aspiration, scout, ETC, multi-ProbCut etc.)
more compact transposition tables, and improved hash function (hash should distribute entries uniformly, or even better: seldom constellations of pieces might be allowed (then in case they happen nevertheless) to be affected (with higher probability) by collisions than frequently occuring positions, thereby overall reducing the misses and wrong hits) (btw. Zobrist keys are standard). [and to reduce the overhead introduced by having formerly killed and so unnecessary 'figs' in the used list, one could start thinking in each round with a cleaned up pieces list, but actually then the check if the transpo hit is correct would get more complicated, anyway the used hashing way would make it possible in principle because the hash is not dependent on the order in which the 'figs' are arranged]
engines for Go, Reversi, n-in-a-row etc.
engine speed up: JNI, different VMs and OSs benchmarks, program design improvement
display the complete sequence of moves what the engine is thinking about at the moment
pre-built data for the different types of pieces (faces they are travelling along) to speed up engine (perhaps s.th Fourier-like is possible)
using group - theoretical data structures (perhaps using the GAP Java binding)
let the engine think all the time (not only at its turn): pondering
general time management, that is to say the engine has got a given amount of time, and then the engine decides how deep it should think. this is in contrast to the current way to specify some strength as a (n even static) parameter. iterative deepening is the tool of choice then.
bughouse
4 players with fixed alliances: 0,1 vs 2,3 or 0,2 vs 1,3, how to tell the engine to be in alliance (not changeable during a match)? This is quite different from psychological numP > 2 without alliances.
profile, tune and tweak
communicate a draw, stalemate or resign
support for infinite-sized boards (yes, you read it correctly): the mathematical treatment can be done despite the fact that the groups involved become infinite then, as long as the Chess pieces' (or Go stones') interaction follows tame rules (that is to say somehow local basically); a position with two pieces of type A are drawn (leave Zugzwang aside on artificial boundary-boards), no matter how big you make the board - even infinite