Agent Based Modeling

Although you can find a number of various definitions of Agent Based Modeling in the literature, from the viewpoint of practical applications agent based modeling can be defined simply as essentially decentralized, individual-centric (as opposed to system level) approach to model design. When designing an agent based model the modeler identifies the agents (which can be people, companies, projects, assets, vehicles, cities, animals, ships, products, etc.), defines their behavior (main drivers, reactions, history, ...), puts them in a certain environment, maybe establishes connections, and runs the simulation. The global (system-level) behavior then emerges as a result of interactions of many individual behaviors. AnyLogic supports Agent Based modeling (as well as Discrete Event and System Dynamics Modeling) and allows you to efficiently combine it with other approaches.

Before deciding to use the agent based approach you should investigate the problem and verify whether traditional approaches can be used. For example, if the system you are modeling fits well with the process flow paradigm (i.e. can be described as a sequence of operations on agents) it may be beneficial to use AnyLogic Process Modeling Library objects instead of specifying individual behaviors of those agents. Similarly, if the agents in your system have no individuality (no individual history, timing, etc.) it may be worth applying System Dynamics approach. 

Agent based models, especially practically useful, are very diverse, and it would be impossible to develop a universal "Agent Based Library" and reduce the modeler's work to a number of drag-and-drop operations. There are however some reusable "design patterns" that simplify development of agent based models and are directly supported by AnyLogic. These patterns are in:

From architectural viewpoint, a typical AnyLogic agent based model would have at least two agent types: Main agent type as a top-level agent where population of agents will live and a type of another agent, e.g. Person. The Person type is a subtype of  Agent type that supports services useful for agent based modeling. A number of agents would be embedded into the Main agent, e.g. as a population of agents people of type Person. Environment may be defined at the level of Main to specify properties shared by the agents. You are free however to define other hierarchies in your agent based model, for example you may have companies-agents that contain employees-agents and communicate with consumers-agents.

Here are some useful facts aimed to ensure you are not misguided by academic literature and various "theories" of agent based modeling: