CS347 SP2005 Chess: Phase III - Time-Limited Iterative-Deepening Minimax
Revision 1/12/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 this third phase you'll need to fill in the play function in the provided framework to play a legal game
employing Time-Limited Iterative-Deepening Minimax (TLIDM) with the depth limit specified by the maxDepth
member of the Engine class.
The order in which moves are expanded in this phase must be randomized to a
certain degree. Rather than calling generateMoves(), you may wish to use the
following basic strategy:
- call generateCaptureMoves() and randomize the results
- call generateNonCaptureMoves() and randomize the results
- Append the second list to the first
(See page 169 in the text for the reasoning)
TLIDM requires a State Evaluation Heuristic and you are to provide one that
takes at least two 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 and
work correctly when playing either black or white.
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:
- IDM: 25
- Time-Limit Heuristic: 30
- State Evaluation Heuristics: 25
- Good programming practices (style, comments, modular design,
etc.): 10
- Code reliability (no crashes, defensive programming, compiles
correctly): 10
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:
- You must make your final submission within 48 hours of
the due date. Submissions which are more than two days late will not
be graded.
- If your code is submitted late, a 10 point per day penalty will
apply (fractions of days are rounded up), after two days you will
automatically receive a zero.
- Resubmissions are allowed but late penalties will apply based on
the last submission.