Monday, November 19, 2012

My Wish list for Agent based simulation engine

After looking at a bunch of sim engines and finding a real mix of features, the stuff I am looking for is:

In World Features

  • Define the world and its properties (As an agent or as a special "super agent"... I don't care)
  • Define the agent(s) and their properties (Deterministic, GA, Evolvable code, Neural Nets whatever)
  • Define framework/helper agents
    • Broadcast and narrowcast communication to groups, channels, layers etc
    • Transport systems and constraints  (Simulate natural or man-made systems to externally affect agents movment) 
    • Grouping Agents for efficient manipulation of agents (group, list, collection, ripple group, proximity group, ray strip, chain, sequence etc)
    • Network structures with relationship sub-elements
  •  Listener, observer, subscribe kind of models for composition of arbitrary relationships between agents

Out of World Features

  •  Graphical Interface (Realtime or not... but must have) display, record video, snapshots, timelapse camera.  World camers, tracking camera for agents. Layers that can be turned on and off.  Stats windows for watching variables.
  • Run Control (Play, Pause, Various speed steps, Stop/End/Terminate)
  • Multi-Dish - I want to be able to run multiple sims with a synchronised time clock side by side with a master run controls to run,pause,stop them all.
  • Rewind (would be nice but I understand why it would be difficult/impossible in many cases for efficiency) This would be nice even if it was just the ability to take a state snapshot every X time-steps and the roll back to an arbitrary time step.
  • Explainer, debugger system for analysis of a running sim down to the finest grain agent level.
  • Data output pipeline to one or more files and to the network in some fashion
  • Networkability (nice to have for bigger sims but not needed for small stuff) some listener interface and talker interface with some simple distributed topology and a master agregator unit.
  • Trace and Probe model for analysis of any and all agents in the system. This should allow arbitrary attach and detach during a running simulation.  This should also allow setting of agent variables and snapshoting agents state. It would be good to be able to snapshot an agent and "inject" that snapshot back into the agent or another agent.

Platform Features

 I don't really care... but it has to be able to be scripted and extended.  It would be nice if it runs on windows but I can adapt to anything except OSX.  Simply because the Uni is anti-mac this year.

I would prefer a clean codebase that can be compiled using industry standard tools (C++, C# VB, Java, Python) rather than one of the less popular languages or niche languages.  The absence of years of cruft would be really appreciated.

For a scripting language, it would be preferable to have something popular and accessible rather than yet another domain specific langauge just because someone wanted to write their own procedural language.  I understand creating a language for something like evolutionary computing or something like GA's but not for straight OO procedural scripting.  Use python, Lua or one of the dynamic Java dialects.  Something with a very well developed set of language tools.  A .NET

No comments:

Post a Comment