CS347 SP2005 Chess: Phase V - Quiescence-Search Transposition-Table Time-Limited Iterative-Deepening MTDf

Revision 3/3/2005. Note: it is the students' responsibility to check the CS347 website for possible new revisions!

Assignment

Chess is a two-person zero-sum game well-known to most of you (if not, search the web and you will find more than you ever wanted to know about chess! For all kinds of information on programming chess, see the GTA's collection of links at http://web.umr.edu/~cs347a/sp2005/chess/.

For the chess assignments we'll be using the XBoard/WinBoard for the GUI and a simplified version of Cassandre as a base for our programs. You can download the simplified version of Cassandre for either Windows (WinCassandre.zip) or Unix (UnixCassandre.tar.gz). Cassandre utilizes a Engine class to encapsulate the chess engine. The play() function in Engine.cpp is where plays are actually made. Cassandre also implements the popular "bitboard" representation for the chess board. Be sure to take a look through the bitboard references at the bottom of the chess page (http://web.umr.edu/~cs347a/sp2005/chess/).

In the fifth phase you need to fill in the play function in the provided framework to play a legal game with Quiescence-Search Transposition-Table Time-Limited Iterative-Deepening MTDf (QSTTTLIDMTDf) with the depth limit specified by the maxDepth member of the Engine class and the QS-depth-limit specified by a #define or const or command line argument. As in the last phase, state expansion should be partially randomized. QSTTTLIDMTDf requires a State Evaluation Heuristic and you are to provide one that takes at least three strategic or tactical measures into account (e.g., material advantage, position of pieces, pawn structure, etc.). Also, your evaluation function needs to handle Win/Loss/Draw situations. Furthermore, it requires a QS heuristic which indicates whether or not a state is quiescent (it is sufficient to check for pieces under attack or capable of attack and states in which one of the kings is in check; obviously feel free to do something more sophisticated, but remember that this heuristic needs to be as efficient as possible!) Your transposition table needs to be implemented with a hash table and all the functionality specified in your class handout. Finally, you also need to terminate your iterative deepening search if you no longer have sufficient search time. You can find the remaining time by using the timeControler member of the Engine class. For example, timeControler.getRemainingTime() will provide the remaining time in the game. This is the total remaining time on the clock for the entire game - not just the time allowed for the current move. It's your responsibility to divide the time among individual moves.

Note: this is an individual project; plagiarism of any type will result in a zero grade.

Grading

The maximum number of points you can get is 100, the minimal is 0. The following are the maximum number of points per component:

Multiple Submissions and Late Submissions

While it is hoped that all code will be submitted error-free and on time, this may not always be the case, so the following rules apply if code is not submitted error-free or on time: