Teambots PDF Print E-mail
Written by Rizki Noor Hidayat Wijayaź   

David H. Johnson Simulated Robot Soccer Assignment


The purpose of this assignment is to create an intelligent soccer team. The teams must be executable in either the JavaSoccer or ASCIISoccer simulation environments. Information for these packages can be found at their respective sites:

The soccer players must posses some intelligence in order to play a good game of soccer, and this intelligence can be implemented in several ways. The players can be either homogeneous (ie the SchemaDemo team) or heterogenous (ie the BasicTeam). On a homogeneous team, each member is attempting to do the same thing, only from a different perspective (ie different sensor readings). Whereas with a heterogenous team each member is programmed to do a specific task and work together as a team. I chose a heterogenous approach to the team.

The individual team members can be classified by what type of intelligent agent they are: Reflexive, State-Based, or Goal-Oriented. These are the three basic intelligent agent types introduced in Russell and Norvig*s _Artificial Intelligence: A Modern Approach_. The reflexive agent is one that takes sensory input and reacts directly on that input. Each time it receives new input it responds without any reference goals or previous experience. Slightly more complex than reflex agents are state-based agents.

These have previous state knowledge such as *i was just trying to intercept a pass* and use this knowledge along with the current sensor input and a world model to choose an action to take. The final agent type is goal-oriented.

Goal-oriented agents have a specific goal to accomplish, and attempt to predict the effects of possible actions to determine which action is most useful for reaching the goal. My team members are reflexive agents.

A final classification of intelligent agents is whether or not they learn. The intelligence can be hard-coded (through heuristics) or they can learn from previous experiences. The robots for this assignment do not learn. They have hard-coded heuristics. Reflexive, heuristic, and heterogenous robots were chosen to hopefully show that relatively dumb robots working together can perform well.


Global variables as listed in the code are values determined at the beginning of each simulation step. Except for Dec2 move which is used to determine where to move after each step, and boolean kickit which is true if the robot wants to try to kick the ball. The constants, SIDE and ME are set in the Configuration() method of each robot. The team members are unique in the role they play on the team and are determined by their robot ID. They are: Goalie, Offside, Designated Driver, Backup, and Center.

- Goalie -

The goalie is responsible for keeping itself between the ball and the goal at all times. The goalie must also deflect a ball if it is dangerously close to the goal. If the goalie is too far from the goal, or outside the width of the goal, it will return to the center as quickly as possible. Otherwise it will try to keep the ball from going north or south along the y axis. It stops when the ball is sufficiently close to its x-axis to avoid moving past the ball. The goalie moves toward the wall of the goal at all times. If the ball is behind the goalie the goalie will chase it down and kick it out as quickly as possible. All the code for this is contained in a single function, play_goalie(), which needs no helpers.

- Offside -

This player targets the opponent who is closest to the opponents goal. Once the opponent is targeted *Offside* calculates and goes directly toward the point directly behind the opponent toward his goal. On the way to this point *Offside* avoids collision with any players other than the target. Offside serves two purposes. One is to serve as a blocker to keep the target from rushing an incoming teammate driving to score. Another is to effectively combat the traditional goalie. Two important functions are introduced in this player*s logic.

[download: 104,86 MB]