The first to introduce the concept was Nano, in the RobocodeRepository:
A friend of mine was assigned some homework recently by his AI professor. The assignment was to create a Robocode bot that used no stored information whatsoever. Such a bot is called a "perceptual agent" in the AI world. They are allowed only to react to stimuli ("percepts") and are specifically not allowed to have any kind of state. Well, I was intrigued, and challenged, and so I created PerceptBot. He is my first submission to the repository.
He performs very well against the sample bots, as should be expected, and even beats the bot that my friend turned in for his class 10 out of 10 rounds.
The reason for this post is to ask this question: are there any other bots like this out there? If not, I challenge you all to create something that can compete with PerceptBot. I want something to fight him against. :) I think that a new subgroup of bots that don't use stored information at all could be very interesting and fun to code.
To conform to the very strict rules of a perceptual agent, PerceptBot uses no non-final member variables at all, and also does not attempt to store information in any other way (e.g. data files).
"To be as succinct as possible: any action that you take must be based on information from a *single* event. The idea is that in the design of a perceptual agent you can create a one-to-one function mapping perceptions to actions. Thus, for every action, there is exactly one perception.
The translation of this into Robocode isn't precise, but the easiest way to show that your robot doesn't use more than one perception in deciding its actions is to not use any non-local variables. Also, explicitly collecting information from other events using the get___Events methods is, of course, not allowed.
To answer your question: since robots perceive ScannedRobotEvents? separately, no two may be used in deciding any single action.
Right, a fun category. I created Pandora , but I think I am cheating a little because Pandora uses random numbers, which, to be generated in a computer, require keeping state in the random number generator or getting input from another perception such as scanning a Lava Lamp. On the other hand, probably one can create a number that is random enough by feeding allowable observations from a ScannedRobotEvent to a chaotic function.
Anyway, perceptual bots are a cool idea.
I don't think rnd numbers really count, it's a limitation of computers, rather than your bot really remembering anything. -- Tango
I agree - the idea is "don't save anything between events". But you can't calculate previous rnd number basing on the one you have recently generated. -- Ph