Table of Contents

Programming Assignment 2 - Adversarial Search

Use the forum or email me, if you have any questions or problems with the assignment. Start early, so you still have time to ask in case of problems!

Problem Description

Implement an agent that is able to play Connect-4.

The game is played on a seven-column, six-row vertically-suspended grid. The two players “white” and “red” take turns in choosing one of the seven columns to drop a disc of their color. White moves first. The goal of the game is to reach a state where four of one's own discs form a line (vertically, horizontally, or diagonally). The game ends, if one of the players has reached his goal or both players depleted their supply of 21 discs. The game ends in a draw if none of the players wins. The scores are 100 points for winning, 50 points for a draw and 0 points for losing.

The legal moves for the agent are “(DROP x)” where x is a number from 1 to 7. It is illegal to drop a disc into a column that already contains 6 discs.

Tasks

  1. Develop a model of the environment. What constitutes a state of the environment? What is a successor state resulting of executing an action in a certain state? Which action is legal under which conditions?
  2. Implement a state evaluation function for the game. You can start with the following simple evaluation function for white (and use the negation if you are red): <number of white discs that are adjacent to another white disc> - <number of red discs that are adjacent to another red disc>
  3. Implement iterative deepening alpha-beta search using this state evaluation function to evaluate the leaf nodes of the tree.
  4. Keep track of and output the number of state expansions.
  5. Improve the state evaluation function or implement a better one.
  6. Test if it is really better by pitching two agents (one with each evaluation function) against each other or by pitching each evaluation function against a random agent. Make sure to run the experiments with the random agent several times to get significant results. Don't forget to switch sides because white has a slight advantage in the game.
  7. Do all experiments with time constraints (play clock) of 1s, 5s and 10s.
  8. Make your code fast! The more state expansions you get per second, the better the player.

Material

The files in the first archive are similar to those in the first programming assignment. The archive contains code for implementing an agent in the src directory. The agent is actually a server process which listens on some port and waits for the real robot or a simulator to send a message. It will then reply with the next action the agent wants to execute.

The zip file also contains the description of the environment (connect4.gdl) and a simulator (gamecontroller-gui.jar). To test your agent:

Hints

For implementing your agent:

build.xml
      ...
      <target name="run" depends="dist">
              <java jar="${dist}/${projectname}.jar" fork="true">
                      <arg value="${arg0}"/> <!-- add this line here! -->
                      <jvmarg value="-Xmx500m" />
              </java>        
              <antcall target="clean" />
      </target>
      ...

Handing In

Please hand in:

To create the zip file you just edit the “student” property in the build.xml and call the “zip” target using ant (execute “ant zip” in the directory containing the build.xml). Make sure to have all files that are to be in the zip file in the directory containing the build.xml or below.

The deadline is Friday, 01.03.2013 for source code and executable player and Monday, 04.03.2013 for the report. We will have a tournament between your agents in the lab on Thursday, 07.03.2013. Extra points for the top players!

You can watch the tournament here.

As with the first programming assignment, you can still hand in after the deadline (by email), but your grade will be lowered by 0.5 for each day your submission is late. Also, you can't get the extra points for being good in the tournament.