ICS 180A, Spring 1997:
Strategy and board game programming

Final project requirements

Each project team must submit a printed final project report, and demonstrate their application to me. Project reports are due in my mailbox in CS 448, by 5:00PM on Thursday, March 11. Project demonstrations will be held in the ICS labs on the third floor of the CS building, at a date and time to be announced (likely during the scheduled final exam time).

Each project report should include the following information.

  1. Title, authors, student ids, course information, and date.

  2. Introduction. What game does your project play? Briefly describe the rules and history of the game. Are there different variations on the rules, and if so how did you chose which variation to implement? Do you know of other programs for this game, written elsewhere? What machine or machines does your program run on?

  3. User interface. How would a user go about playing a game against your program? Include screen shots.

  4. Search. If you use anything other than vanilla alpha-beta search, describe it and explain why you needed it. What is the branching factor of your game (average or typical number of different moves available in any given position)? How does this differ from the effective branching factor of your program (average or typical number of moves that it searches from a position before pruning stops the search)? (Note, you can compute the effective branching factor by the formula b=x1/d where x is the total number of nodes searched and d is the search depth.) Does your program always search to the same fixed depth, or does it use a timer to control the depth it searches? How many levels deep does it typically search? What is the total number of game positions a typical search evaluates, and how many evaluations per second does it perform (on whatever machine you're running it on; state how fast a machine this is).

  5. Search improvements. Are you using hashing, or any search extensions or "extra" pruning (pruning above and beyond the normal pruning performed by the alpha-beta algorithm)? If so, describe them and if possible say something about how much they helped improve your program's performance.

  6. Evaluation function. Explain in English the terms that go in to your evaluation function. Were you able to update these terms incrementally as moves were generated, or did you have to recompute them from scratch each time you evaluated a new position? Did you try any other terms that turned out not to be useful? What evaluation terms would you add to further improve your program's performance if you had the time to add more terms?

  7. Experiences. What was your most interesting bug? Which parts of the program did you find took you the most time to write? Which parts did you find the most confusing? What would you do differently if you were to start the same project from scratch?

  8. Performance. How well does your program play the game? Does it beat you sometimes/always/never? Include the complete moves to two games you or others have played against the machine, one in which you move first and one in which the machine moves first. Explain any of the machine's moves that you think deserves explanation (either because you think it's a mistake, or because it's a very good and non-obvious move).

  9. Source code. Include a complete listing of all sources for your program.

David Eppstein, Dept. Information & Computer Science, UC Irvine, .