|CS 371 - Introduction to Artificial Intelligence
Due: Thursday 3/2 at the beginning of class
Note: Work is to be done in pairs, and submitted via email attachment.
All of your classes should be named uniquely so as to not clash in the same namespace with those of other groups. This is usually accomplished using packages, but for this project, you may simply begin each class name with a unique identifier such as a combination of user names. In these instructions, your unique identifier will be denoted <uniqueID>.
1. Mancala Utility Function: Your first task will be to
develop an efficiently computable utility function for Mancala. The
one supplied in class TnellerMancalaNode simple subtracts the MIN player
score from the MAX player score. In class, we noticed other possible
simple measures of utility that provide additional means of estimating
the relative utility of the node. Develop at least two utility functions
and experiment to see which works better. Don't forget to test it
against the one provided as a baseline for comparison. Name your
Your implementation should outperform that of the supplied utility function.
2. Alpha-Beta Search: Your second task can be developed
in parallel with the first. Create a new class
that implements the interface GameTreeSearcher and performs depth-limited
minimax with alpha-beta pruning. You're encouraged to copy
the provided MinimaxSearcher code to your AlphaBeta code as a starting point.
Then augment the code by passing alpha
and beta as parameters for pruning.
3. Mancala Player: Your final task will be to bring your
Mancala node utility function together with alpha-beta search and create
a real-time Mancala-playing agent. Name your class
and be sure that it implements the MancalaPlayer interface. Each
player will be allotted 2.5 minutes each for decision making. Supplied
in TnellerMancalaPlayer is a very sloppy hack which seeks to adjust search
depth according to game progress, which is roughly assessed by (1) the
number of pieces still in play, and (2) the number of milliseconds left
in the game. You may use this approach, but be forewarned that there
will be better approaches given that (1) with alpha-beta pruning, you can
search deeper faster, and (2) my implementation generally has too much
spare time at the end of the game. Your
implementation should outperform the supplied example implementations.
Your MancalaPlayer will compete against all other MancalaPlayer's to determine the champion of champions. The champions will receive a mancala game and the respect and awe of their peers and professor. :-)