Yes MadKit has been widely used for agent based simulations. {{to be detailed}}. See the synchronous engine to get information about the basic tools and techniques of agent based simulation (scheduling and observation essentially), and see the Turtle kits manuals (TurtleKit and Turtle packs), a more "high level" development context for building simple reactive agents acting in a two dimension environment. Warbot is also a simulation context for testing coordination schemes, which is based on the synchronous engine.
Do you have a Java virtual machine installed. MadKit uses a Java 1.3. It uses only the JRE (run time support) for its own purpose, but if you want to develop your agents in Java, you should have a JDK 1.3 (or higher, we use JDK 1.4 for our own purposes) installed...
We have been aware of a very strange bug which may appear on some Linux distribution. We use the InstallAnywhere program for installing MadKit. But this Java based program does not use the command Java, and tries to guess what Java to run. Unfortunately some Linux distribution comes with a very old Java virtual machine (called Kaffe) and InstallAnywhere may use it by mistake. Thus, if the install does not work, check your Java installation. Be sure that you have at least a jdk 1.3 (type java -version to know the version of your JVM) installed and remove all obsolete JVM (and remove Kaffe!).
MadKit may hangs the first time you use it when you click on a Python agent. The first time Python is used, it creates a cachedir directory in the install directory of MadKit. This may takes between 10 s to 30 s dependings on your computer. But this will happen only once. Afterwards, you will be able to use Python agents quite smoothly and quickly.
This is quite simple. You just have to modify the desktop.ini file. See the User Guide, configuring the Desktop.
For the moment you have to quit MadKit and start it back. The construction of the whole tree is done at launch time. This is a bug which will be solved very soon. We are really sorry about it...
You may only use the agent stuff (all the primitives concerning groups and roles) of an agent AFTER its launch time. Thus, the best way to put all these things is in its activate() method not in its constructor. When executing its constructor, and agent is still an object and not an agent yet.