A strategy we adopt to simplify the implementation is to classify agents according to types. Associated with each type should be a function that takes as input the agent's physical situation and generates the full mental situation for that agent. This technique uses little memory and is an intuitive way of programming the agents. It assumes, however, that the mental situation can be derived solely from the physical. This was true in our experiments but need not always be so, such as when the mental situation might depend on individual agent biases or past experiences. The function Expected_Strategy, which calculates the expected value of f(x), can then be implemented by a hash table for the agent type. The keys to the table would be similar physical situations and the values would be the last N strategies played in those situations. Grouping similar situations is needed because the number of raw physical situations can be very big. The definition of what situations are similar is heuristic and determined by the programmer. In our case we chose to represent situations from the agent's point of view, without any references to the cardinal points or any other fixed landmark. This meant that situations were automatically equivalent under rotations of 90 degrees. Also, if an agent was more than a Manhattan distance of two from the prey, we only considered the quadrant in which it was located (with respect to the agent observing it), not the actual distance. The intuition was that agents that are far from the prey do not influence the other agents' move decision.