I'd like to hear my fellow programmer's thoughts on the issue of parametrizing agent based simulations:Consider:Simulation core, including geometry, collision tests, some rulesDifferent agents (modelled in OOP-fashion: has-a, is-a, abstract interfaces)Agents have different sensors, different actors, different controllers, ... All connected together by references/pointers and accessed using abstract interfaces.So essentially, each agent is composed of an ownership tree (agent owns sensors, controller, actors), superimposed by a dataflow-graph (sensor connected to controller, connected to actor). The tree, the graph plus the parametrization of the things together form a simulation setup. Running a simulation amounts to:Read in simulation setupInstantiate a bunch of objects, parametrize and connect them together to form the tree and the graphRun simulationOutput some data (statistics, signals, whatever)The question is how best to save the simulation setup, and how to instantiate & parametrize stuff. Requirements (some of them conflicting):The parametrization should probably be structured along the ownership tree, as it feels most natural.A lot of times I'd like to instantiate a bunch of similar agents with just the 1 or 2 parameters changed between instances. That needs to be easy.I'd like to keep parametrization and code close together. When experimenting with algorithms that are affected by parametrization, I wouldn't want the changes to be spread out over too many places.Conversely, I'd like to keep parametrization out of the code, so that it's easy to automate simulation runs in order to systematically sweep through parameter spaces.Parameters have meta-data: type, value range, physical unit, textual description, logical dependencies (e.g. if you specify X you must not specify Y)Parameters not only affect data (member variables) but also code (usage of a particular specialization of the abstract base)Now my colleges and me are tasked with building a new agent-based simulation:Do you know any frameworks / libraries / techniques?Are any patterns applicable? Best practises?Meta-programming? Abandon OOP altogether?Looking forward to your thoughts.
Parameterize Agent Based Simulation (OOP-Question)
object oriented;frameworks;simulation