Vacuum World


The goal of this project was to create a general use simulated environment (written in prolog) for the use of experimenting with autonomous logic based agents. The original idea came from Dr. Donald Nute. The head of the Artificial Intelligence Center at UGA and the professor for my first AI class there. He had the idea of creating an environment used as an example in the book we used (Artificial Intelligence: A Modern Approach, by Russell & Norvig). This environment was a very simple one refered to as "Vacuum World". Nute took this idea and created the environment and had us create the vacuum cleaners to run in it. It was a great fun and worked really well. Thus Dr. Nute and myself set about making a long term project of it. We decided it needed to be more general and easily extendible.

I made it as modular as possible while trying to keep it extensible for use beyond just vacuum world. To this end I created a set of properties that objects could have and implemented the effects of actions on objects in terms of these. This is done with the hope of letting environments and objects be described easily in terms of these properties, without having to worry (much) about the code. The currently used properties are: height, weight, energy (eg. food, electricity), score (value for scoring), permanence (how it reacts to being taken), attack (bonus to attack action), defensive (subtract from attackers attack), heal (damage regained), and add (randomly add this object to the running world).

I also made the agents somewhat more flexible by giving them more actions to perform (assuming that they make sense for that environment) and giving them some basic characteristics. The current actions implemented are: push, attack, climb, look, take, eat, sit, move, and drop. The current characteristics are: strength, height, stamina(modifies max energy level), speed, charge (current energy level), and damage.

There are two versions. The SWI version has no GUI, but the simulator and documentation are pretty much done (the code is fairly well documented as well). The LPA version has a graphical interface, but it was reworked by Dr. Nute and thus has been simplified quite a bit and I don't have the source (use this as a test version on windows, if you like it and want to mess with it more, get the SWI version).

If you are interested in this type of thing, please download it and let me know what you think.

The SWI version: vworld-swi-v0.2.tar.gz
The LPA version: lpa-vworld.tgz

[This software is public domain]

These changes deal primarily with the SWI version
Changes from 0.1 to 0.1a:

  • Added a few comments.
  • Fixed one minor bug (if agent failed to decide what to do, the simulator had it do nothing at all. Now it sits by default).
  • Moved the agent definitions to the startup ( file.
  • Added a README file.

Changes from 0.1a to 0.2

  • Added the documentation.
  • Two versions. One for LPA-prolog and one for SWI-prolog.
  • Fixed bug in object property 'attack' so that it is actually figured into the damage done in an attack action