CS 371 - Introduction to Artificial Intelligence
Homework #4

Due: Thursday 3/2 at the beginning of class
Note: Work is to be done in pairs, and submitted via email attachment. 

Game-Tree Search

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 nodes <uniqueID><#>MancalaNode.java.  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 <uniqueID>AlphaBetaSearcher.java 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 <uniqueID>MancalaPlayer 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. :-)

Todd Neller