{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T12:41:48.007238Z",
"start_time": "2017-10-19T14:41:47.980725+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"# Soil Tutorial"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T16:44:14.120953Z",
"start_time": "2017-07-02T18:44:14.117152+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"## Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {
"cell_style": "center",
"collapsed": true,
"hideCode": false,
"hidePrompt": false
},
"source": [
"This notebook is an introduction to the soil agent-based social network simulation framework.\n",
"It will focus on a specific use case: studying the propagation of disinformation through TV and social networks.\n",
"\n",
"\n",
"The steps we will follow are:\n",
"\n",
"* Cover some basics about simulations in Soil (environments, agents, etc.)\n",
"* Simulate a basic scenario with a single agent\n",
"* Add more complexity to our scenario\n",
"* Running the simulation using different configurations\n",
"* Analysing the results of each simulation\n",
"\n",
"The simulations in this tutorial will be kept simple, for the sake of clarity.\n",
"However, they provide all the building blocks necessary to model, run and analyse more complex scenarios."
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T13:38:48.052876Z",
"start_time": "2017-07-03T15:38:48.044762+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"But before that, let's import the soil module and networkx."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-03T10:58:13.451481Z",
"start_time": "2017-11-03T11:58:12.643469+01:00"
},
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"from soil import *\n",
"from soil import analysis\n",
"import networkx as nx\n",
"\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T13:41:19.788717Z",
"start_time": "2017-07-03T15:41:19.785448+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"## Basic concepts"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"There are two main elements in a soil simulation:\n",
" \n",
"* The **environment** or model. It assigns agents to nodes in the network, and stores the environment parameters (shared state for all agents).\n",
" - `soil.NetworkEnvironment` models also contain a network topology (accessible through through `self.G`). A simulation may use an existing NetworkX topology, or generate one on the fly. The `NetworkEnvironment` class is parameterized, which makes it easy to initialize environments with a variety of network topologies. **In this tutorial, we will manually add a network to each environment**.\n",
"* One or more **agents**. Agents are programmed with their individual behaviors, and they can communicate with the environment and with other agents. There are several types of agents, depending on their behavior and their capabilities. Some examples of built-in types of agents are:\n",
" - Network agents, which are linked to a node in the topology. They have additional methods to access their neighbors.\n",
" - FSM (Finite state machine) agents. Their behavior is defined in terms of states, and an agent will move from one state to another.\n",
" - Evented agents, an actor-based model of agents, which can communicate with one another through message passing.\n",
" - For convenience, a general `soil.Agent` class is provided, which inherits from Network, FSM and Evented at the same time.\n",
"\n",
"Soil provides several abstractions over events to make developing agents easier.\n",
"This means you can use events (timeouts, delays) in soil, but for the most part we will assume your models will be step-based o.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T15:55:12.933978Z",
"start_time": "2017-07-02T17:55:12.930860+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"## Modeling behaviour"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T13:49:31.269687Z",
"start_time": "2017-07-03T15:49:31.257850+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"Our first step will be to model how every person in the social network reacts to hearing a piece of disinformation (news).\n",
"We will follow a very simple model based on a finite state machine.\n",
"\n",
"A person may be in one of two states: **neutral** (the default state) and **infected**.\n",
"A neutral person may hear about a piece of disinformation either on the TV (with probability **prob_tv_spread**) or through their friends.\n",
"Once a person has heard the news, they will spread it to their friends (with a probability **prob_neighbor_spread**).\n",
"Some users do not have a TV, so they will only be infected by their friends.\n",
"\n",
"The spreading probabilities will change over time due to different factors.\n",
"We will represent this variance using an additional agent which will not be a part of the social network."
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Modelling Agents\n",
"\n",
"The following sections will cover the basics of developing agents in SOIL.\n",
"\n",
"For more advanced patterns, please check the **examples** folder in the repository."
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"#### Basic agents"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T14:03:07.171127Z",
"start_time": "2017-07-03T16:03:07.165779+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"The most basic agent in Soil is ``soil.BaseAgent``.\n",
"These agents implement their behavior by overriding the `step` method, which will be run in every simulation step.\n",
"Only one agent will be running at any given time, and it will be doing so until the `step` function returns.\n",
"\n",
"Agents can access their environment through their ``self.model`` attribute.\n",
"This is most commonly used to get access to the environment parameters and methods.\n",
"Here is a simple example of an agent:\n",
"\n",
"\n",
"```python\n",
"class ExampleAgent(BaseAgent):\n",
" def init(self):\n",
" self.is_infected = False\n",
" self.steps_neutral = 0\n",
" \n",
" def step(self):\n",
" # Implement agent logic\n",
" if self.is_infected:\n",
" ... # Do something, like infecting other agents\n",
" return self.die(\"No need to do anything else\") # Stop forever\n",
" else:\n",
" ... # Do something\n",
" self.steps_neutral += 1\n",
" if self.steps_neutral > self.model.max_steps_neutral:\n",
" self.is_infected = True\n",
"```\n",
"\n",
"\n",
"\n",
"Any kind of agent behavior can be implemented with this `step` function.\n",
"dead, it has two main drawbacks: 1) complex behaviors can get difficult both write and understand; 2) these behaviors are not composable."
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T14:03:07.171127Z",
"start_time": "2017-07-03T16:03:07.165779+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"#### FSM agents\n",
"\n",
"One way to solve both issues is to model agents as **[Finite-state Machines](https://en.wikipedia.org/wiki/Finite-state_machine)** (FSM, for short).\n",
"FSM define a series of possible states for the agent, and changes between these states.\n",
"These states can be modelled and extended independently.\n",
"\n",
"This is modelled in Soil through the `soil.FSM` class.\n",
"Agents that inherit from ``soil.FSM`` do not need to specify a ``step`` method.\n",
"Instead, we describe each finite state with a function.\n",
"To change to another state, a function may return the new state, or the ``id`` of a state.\n",
"If no state is returned, the state remains unchanged.\n",
"\n",
"The current state of the agent can be checked with ``agent.state_id``.\n",
"That state id can be used to look for other agents in that specific state.\n",
"\n",
"Our previous example could be expressed like this:\n",
"\n",
"```python\n",
"class FSMExample(FSM):\n",
"\n",
" def init(self):\n",
" self.steps_neutral = 0\n",
" \n",
" @state(default=True)\n",
" def neutral(self):\n",
" ... # Do something\n",
" self.steps_neutral += 1\n",
" if self.steps_neutral > self.model.max_steps_neutral:\n",
" return self.infected # Change state\n",
"\n",
" @state\n",
" def infected(self):\n",
" ... # Do something\n",
" return self.die(\"No need to do anything else\")\n",
"```"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"#### Async agents\n",
"\n",
"Another design pattern that can be very useful in some cases is to model each step (or a specific state) using asynchronous functions (and the `await` keyword).\n",
"Asynchronous functions will be paused on `await`, and resumed at a later step from the same point.\n",
"\n",
"The following agent will do something for `self.model.max_steps` and then stop forever.\n",
"\n",
"\n",
"\n",
"```python\n",
"class AsyncExample(BaseAgent):\n",
" async def step(self):\n",
" for i in range(self.model.max_steps):\n",
" self.do_something()\n",
" await self.delay() # Signal the scheduler that this agent is done for now\n",
" return self.die(\"No need to do anything else\") \n",
"```\n",
"\n",
"Notice that this trivial example could be implemented with a regular `step` and an attribute with the counts of times the agent has run so far.\n",
"By using an `async` we avoid complicating the logic of our function or adding spurious attributes."
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"#### Telling the scheduler when to wake up an agent\n",
"\n",
"By default, every agent will be called in every simulation step, and the time elapsed between two steps is controlled by the `interval` attribute in the environment.\n",
"\n",
"But agents may signal the scheduler how long to wait before calling them again by returning a value other than `None` or using `await` in asynchronous functions.\n",
"This is especially useful when an agent is going to be dormant for a long time.\n",
"There are two convenience methods to calculate the value to return: `Agent.delay`, which takes a time delay; and `Agent.at`, which takes an absolute time at which the agent should be awaken.\n",
"A return value of `None` will default to a wait of 1 unit of time.\n",
"Both `Agent.at` and `Agent.delay` can be awaited in async functions.\n",
"\n",
"When an `FSM` agent returns, it may signal two things: how long to wait, and a state to transition to.\n",
"This can be done by using the `delay` and `at` methods of each state."
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T12:22:53.931963Z",
"start_time": "2017-07-02T14:22:53.928340+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Environment agents"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"In our simulation, we need a way to model how TV broadcasts news, and those that have a TV are susceptible to it.\n",
"We will only model one very viral TV broadcast, which we will call an `event`, which has a high chance of infecting users with a TV.\n",
"\n",
"\n",
"There are several ways to model this behavior.\n",
"We will do it with an Environment Agent.\n",
"Environment agents are regular agents that interact with the environment but are invisible to other agents."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-03T10:58:17.653736Z",
"start_time": "2017-11-03T11:58:17.612944+01:00"
},
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"import logging\n",
"\n",
"class EventGenerator(BaseAgent):\n",
" level = logging.INFO\n",
" \n",
" async def step(self):\n",
" # Do nothing until the time of the event\n",
" await self.at(self.model.event_time)\n",
" self.info(\"TV event happened\")\n",
" self.model.prob_tv_spread = 0.5\n",
" self.model.prob_neighbor_spread *= 2\n",
" self.model.prob_neighbor_spread = min(self.model.prob_neighbor_spread, 1)\n",
" await self.delay()\n",
" self.model.prob_tv_spread = 0\n",
"\n",
" while self.alive:\n",
" self.model.prob_neighbor_spread = self.model.prob_neighbor_spread * self.model.neighbor_factor\n",
" if self.model.prob_neighbor_spread < 0.01:\n",
" return self.die(\"neighbors can no longer spread the rumour\")\n",
" await self.delay()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Environment (Model)\n",
"\n",
"Let's define a environment model to test our event generator agent.\n",
"This environment will have a single agent (the event generator).\n",
"We will also tell the environment to save the value of `prob_tv_spread` after every step:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"class NewsEnvSimple(Environment):\n",
" \n",
" # Here we set the default parameters for our model\n",
" # We will be able to override them on a per-simulation basis\n",
" prob_tv_spread = 0.1\n",
" prob_neighbor_spread = 0.1\n",
" event_time = 10\n",
" neighbor_factor = 0.9\n",
"\n",
" \n",
" # This function initializes the model. It is run right at the end of the `__init__` function.\n",
" def init(self):\n",
" self.add_model_reporter(\"prob_tv_spread\")\n",
" self.add_agent(EventGenerator)"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"Once the environment has been defined, we can quickly run our simulation through the `run` method on NewsEnv:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "14d3f5ae767b4e4f88363ac8a60e5fb6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NewsEnvSimple: 0%| | 0/1 [00:00, ?configuration/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "25cf679897634ee69b9dbfe5fb2a14b4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" step \n",
" agent_count \n",
" prob_tv_spread \n",
" \n",
" \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0.0 \n",
" 0 \n",
" 1 \n",
" 0.1 \n",
" \n",
" \n",
" 10.0 \n",
" 1 \n",
" 1 \n",
" 0.1 \n",
" \n",
" \n",
" 11.0 \n",
" 2 \n",
" 1 \n",
" 0.5 \n",
" \n",
" \n",
" 12.0 \n",
" 3 \n",
" 1 \n",
" 0.0 \n",
" \n",
" \n",
" 13.0 \n",
" 4 \n",
" 1 \n",
" 0.0 \n",
" \n",
" \n",
" 14.0 \n",
" 5 \n",
" 1 \n",
" 0.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" step agent_count prob_tv_spread\n",
"time \n",
"0.0 0 1 0.1\n",
"10.0 1 1 0.1\n",
"11.0 2 1 0.5\n",
"12.0 3 1 0.0\n",
"13.0 4 1 0.0\n",
"14.0 5 1 0.0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"it = NewsEnvSimple.run(iterations=1, max_time=14)\n",
"\n",
"it[0].model_df()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"As we can see, the event occurred right after `t=10`, so by `t=11` the value of `prob_tv_spread` was already set to `0.5`.\n",
"\n",
"You may notice nothing happened between `t=0` and `t=1`.\n",
"That is because there aren't any other agents in the simulation, and our event generator explicitly waited until `t=10`."
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Network agents"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T14:03:07.171127Z",
"start_time": "2017-07-03T16:03:07.165779+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"In our disinformation scenario, we will model our agents as a FSM with two states: ``neutral`` (default) and ``infected``.\n",
"\n",
"Here's the code:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-03T10:58:16.051690Z",
"start_time": "2017-11-03T11:58:16.006044+01:00"
},
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"class Viewer(Agent):\n",
" has_tv = False\n",
" infected_by_friends = False\n",
" \n",
" # The state decorator is used to define the states of the agent\n",
" @state(default=True)\n",
" def neutral(self):\n",
" # The agent might have been infected by their infected friends since the last time they were checked\n",
" if self.infected_by_friends:\n",
" # Automatically transition to the infected state\n",
" return self.infected\n",
" # If the agent has a TV, they might be infected by the evenn\n",
" if self.has_tv:\n",
" if self.prob(self.model.prob_tv_spread):\n",
" return self.infected\n",
" \n",
" @state\n",
" def infected(self):\n",
" for neighbor in self.iter_neighbors(state_id=self.neutral.id):\n",
" if self.prob(self.model.prob_neighbor_spread):\n",
" neighbor.infected_by_friends = True\n",
" return self.delay(7) # Wait for 7 days before trying to infect their friends again"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"We can check that our states are well defined:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"text/plain": [
"['dead', 'neutral', 'infected']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Viewer.states()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Environment (Model)"
]
},
{
"cell_type": "markdown",
"metadata": {
"cell_style": "split",
"hideCode": false,
"hidePrompt": false
},
"source": [
"Let's modify our simple simulation.\n",
"We will add a network of agents of type NewsSpread.\n",
"\n",
"Only one agent (0) will have a TV (in blue)."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"cell_style": "split",
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def generate_simple():\n",
" G = nx.Graph()\n",
" G.add_edge(0, 1)\n",
" G.add_edge(0, 2)\n",
" G.add_edge(2, 3)\n",
" G.add_node(4)\n",
" return G\n",
"\n",
"G = generate_simple()\n",
"pos = nx.spring_layout(G)\n",
"nx.draw_networkx(G, pos, node_color='red')\n",
"nx.draw_networkx(G, pos, nodelist=[0], node_color='blue')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"class NewsEnvNetwork(Environment):\n",
" \n",
" prob_tv_spread = 0\n",
" prob_neighbor_spread = 0.1\n",
" event_time = 10\n",
" neighbor_factor = 0.9\n",
"\n",
" \n",
" def init(self):\n",
" self.add_agent(EventGenerator)\n",
" self.G = generate_simple()\n",
" self.populate_network(Viewer)\n",
" self.agent(node_id=0).has_tv = True\n",
" self.add_model_reporter('prob_tv_spread')\n",
" self.add_model_reporter('prob_neighbor_spread')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "27211fdd070a4f768905e5d2187e79a3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NewsEnvNetwork: 0%| | 0/1 [00:00, ?configuration/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5c601a54aed4437c9a0f394e1f7cbc70",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" step \n",
" agent_count \n",
" prob_tv_spread \n",
" prob_neighbor_spread \n",
" \n",
" \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0.0 \n",
" 0 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 1.0 \n",
" 1 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 2.0 \n",
" 2 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 3.0 \n",
" 3 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 4.0 \n",
" 4 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 5.0 \n",
" 5 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 6.0 \n",
" 6 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 7.0 \n",
" 7 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 8.0 \n",
" 8 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 9.0 \n",
" 9 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 10.0 \n",
" 10 \n",
" 6 \n",
" 0.0 \n",
" 0.100000 \n",
" \n",
" \n",
" 11.0 \n",
" 11 \n",
" 6 \n",
" 0.5 \n",
" 0.200000 \n",
" \n",
" \n",
" 12.0 \n",
" 12 \n",
" 6 \n",
" 0.0 \n",
" 0.180000 \n",
" \n",
" \n",
" 13.0 \n",
" 13 \n",
" 6 \n",
" 0.0 \n",
" 0.162000 \n",
" \n",
" \n",
" 14.0 \n",
" 14 \n",
" 6 \n",
" 0.0 \n",
" 0.145800 \n",
" \n",
" \n",
" 15.0 \n",
" 15 \n",
" 6 \n",
" 0.0 \n",
" 0.131220 \n",
" \n",
" \n",
" 16.0 \n",
" 16 \n",
" 6 \n",
" 0.0 \n",
" 0.118098 \n",
" \n",
" \n",
" 17.0 \n",
" 17 \n",
" 6 \n",
" 0.0 \n",
" 0.106288 \n",
" \n",
" \n",
" 18.0 \n",
" 18 \n",
" 6 \n",
" 0.0 \n",
" 0.095659 \n",
" \n",
" \n",
" 19.0 \n",
" 19 \n",
" 6 \n",
" 0.0 \n",
" 0.086093 \n",
" \n",
" \n",
" 20.0 \n",
" 20 \n",
" 6 \n",
" 0.0 \n",
" 0.077484 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" step agent_count prob_tv_spread prob_neighbor_spread\n",
"time \n",
"0.0 0 6 0.0 0.100000\n",
"1.0 1 6 0.0 0.100000\n",
"2.0 2 6 0.0 0.100000\n",
"3.0 3 6 0.0 0.100000\n",
"4.0 4 6 0.0 0.100000\n",
"5.0 5 6 0.0 0.100000\n",
"6.0 6 6 0.0 0.100000\n",
"7.0 7 6 0.0 0.100000\n",
"8.0 8 6 0.0 0.100000\n",
"9.0 9 6 0.0 0.100000\n",
"10.0 10 6 0.0 0.100000\n",
"11.0 11 6 0.5 0.200000\n",
"12.0 12 6 0.0 0.180000\n",
"13.0 13 6 0.0 0.162000\n",
"14.0 14 6 0.0 0.145800\n",
"15.0 15 6 0.0 0.131220\n",
"16.0 16 6 0.0 0.118098\n",
"17.0 17 6 0.0 0.106288\n",
"18.0 18 6 0.0 0.095659\n",
"19.0 19 6 0.0 0.086093\n",
"20.0 20 6 0.0 0.077484"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"it = NewsEnvNetwork.run(max_time=20)\n",
"it[0].model_df()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"In this case, notice that the inclusion of other agents (which run every step) means that the simulation did not skip to `t=10`.\n",
"\n",
"Now, let's look at the state of our agents in every step:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No agent dataframe provided and no agent reporters found. Skipping agent plot.\n"
]
},
{
"data": {
"image/png": "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JCuGESIiIpIVwwgRERHJimGEiIiIZMUwQkRERLJiGCEiIiJZMYwQERGRrByeDl4Olkli8/PzZS4JERER2cvyvV3bZO+qCCMFBQUAgLCwMJlLQkRERI4qKChAQEBAtZ+rYm0as9mMixcvws/PDxqNxmnnzc/PR1hYGM6fP++2a964+z3y/tTP3e+R96d+7n6Prrw/IQQKCgoQGhpqs4juzVRRM6LVatGmTRuXnd/f398t/4JV5u73yPtTP3e/R96f+rn7Pbrq/mqqEbFgB1YiIiKSFcMIERERyapRhxG9Xo+5c+dCr9fLXRSXcfd75P2pn7vfI+9P/dz9HpVwf6rowEpERETuq1HXjBAREZH8GEaIiIhIVgwjREREJCuGESIiIpKV24eRFStWIDw8HAaDAbGxsTh48GCN+2/evBldu3aFwWBAz5498eWXXzZQSR2XnJyMfv36wc/PDy1btsSoUaNw6tSpGo9Zt24dNBqNzWYwGBqoxI555ZVXbilr165dazxGTc8PAMLDw2+5R41Gg2nTplW5v9Kf37fffov7778foaGh0Gg02Lp1q83nQgjMmTMHrVq1gre3N+Lj4/Hrr7/Wel5Hf49dpab7KysrwwsvvICePXuiSZMmCA0Nxbhx43Dx4sUaz1mXv+euVNsznDBhwi3lHT58eK3nVcMzBFDl76NGo8GiRYuqPaeSnqE93wslJSWYNm0amjdvDl9fXzz00EPIycmp8bx1/d21l1uHkU2bNiEpKQlz585FRkYGevfujWHDhuHy5ctV7r9//36MGTMGkyZNwuHDhzFq1CiMGjUKP//8cwOX3D579+7FtGnTcODAAezatQtlZWUYOnQorl+/XuNx/v7+uHTpknU7d+5cA5XYcd27d7cp6/fff1/tvmp7fgDw448/2tzfrl27AAD/93//V+0xSn5+169fR+/evbFixYoqP3/99dfx5ptvYtWqVfjhhx/QpEkTDBs2DCUlJdWe09HfY1eq6f6KioqQkZGB2bNnIyMjA5999hlOnTqFkSNH1npeR/6eu1ptzxAAhg8fblPef/3rXzWeUy3PEIDNfV26dAlr1qyBRqPBQw89VON5lfIM7fleeO655/Cf//wHmzdvxt69e3Hx4kU8+OCDNZ63Lr+7DhFurH///mLatGnW1yaTSYSGhork5OQq93/kkUfEfffdZ/NebGys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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"analysis.plot(it[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"hideCode": false,
"hidePrompt": false,
"run_control": {
"frozen": true
}
},
"source": [
"## Running in more scenarios\n",
"\n",
"In real life, you probably want to run several simulations, varying some of the parameters so that you can compare and answer your research questions.\n",
"\n",
"For instance:\n",
" \n",
"* Does the outcome depend on the structure of our network? We will use different generation algorithms to compare them (Barabasi-Albert and Erdos-Renyi)\n",
"* How does neighbor spreading probability affect my simulation? We will try probability values in the range of [0, 0.4], in intervals of 0.1."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"class NewsEnvComplete(Environment):\n",
" prob_tv = 0.1\n",
" prob_tv_spread = 0\n",
" prob_neighbor_spread = 0.1\n",
" event_time = 10\n",
" neighbor_factor = 0.5\n",
" generator = \"erdos_renyi_graph\"\n",
" n = 100\n",
"\n",
" def init(self):\n",
" self.add_agent(EventGenerator)\n",
" opts = {\"n\": self.n}\n",
" if self.generator == \"erdos_renyi_graph\":\n",
" opts[\"p\"] = 0.05\n",
" elif self.generator == \"barabasi_albert_graph\":\n",
" opts[\"m\"] = 2\n",
" self.create_network(generator=self.generator, **opts)\n",
"\n",
" self.populate_network([Viewer,\n",
" Viewer.w(has_tv=True)], # Part of the population has a TV\n",
" [1-self.prob_tv, self.prob_tv])\n",
" self.add_model_reporter('prob_tv_spread')\n",
" self.add_model_reporter('prob_neighbor_spread')\n",
" self.add_agent_reporter(\"has_tv\")\n",
" self.add_agent_reporter('state_id', lambda a: getattr(a, \"state_id\", None))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This time, we set `dump=True` because we want to store our results to a database, so that we can later analyze them.\n",
"\n",
"But since we do not care about existing results in the database, we will also set`overwrite=True`."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO ][12:53:35] Output directory: /mnt/data/home/j/git/lab.gsi/soil/soil/docs/tutorial/soil_output\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7b3f78c10bbf4e6cb3e22c7f8dd57915",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"newspread: 0%| | 0/10 [00:00, ?configuration/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = erdos_renyi_graph\n",
"prob_neighbor_spread = 0\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e7564141ee0544e380424251250fbcd4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = erdos_renyi_graph\n",
"prob_neighbor_spread = 0.25\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "45750d718d9040799fa4e661a87da5da",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = erdos_renyi_graph\n",
"prob_neighbor_spread = 0.5\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "faaebcb11afe4788a1120ba2732fd0ee",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = erdos_renyi_graph\n",
"prob_neighbor_spread = 0.75\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ee88cccc76fd44729b52abb4aee20f07",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = erdos_renyi_graph\n",
"prob_neighbor_spread = 1.0\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "32dfb0a600f04bae9cc1fcbd99793cd1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = barabasi_albert_graph\n",
"prob_neighbor_spread = 0\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d20c600aba3143ee91408f54af0d82dd",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = barabasi_albert_graph\n",
"prob_neighbor_spread = 0.25\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "06bb40219baf496f996ce51f0d9cf2e5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = barabasi_albert_graph\n",
"prob_neighbor_spread = 0.5\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3e8c135a383f41beba10992aaa384fab",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = barabasi_albert_graph\n",
"prob_neighbor_spread = 0.75\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "53078ae627a54c729ccffd2ecc189b17",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"n = 100\n",
"generator = barabasi_albert_graph\n",
"prob_neighbor_spread = 1.0\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a8abd731892148e0b88c25717727f9df",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"N = 100\n",
"probabilities = [0, 0.25, 0.5, 0.75, 1.0]\n",
"generators = [\"erdos_renyi_graph\", \"barabasi_albert_graph\"]\n",
"\n",
"\n",
"it = NewsEnvComplete.run(name=f\"newspread\",\n",
" iterations=5, max_time=30, dump=True, overwrite=True,\n",
" matrix=dict(n=[N], generator=generators, prob_neighbor_spread=probabilities))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"DEFAULT_ITERATIONS = 5\n",
"assert len(it) == len(probabilities) * len(generators) * DEFAULT_ITERATIONS"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False 2821\n",
"True 279\n",
"Name: has_tv, dtype: int64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"it[0].agent_df().has_tv.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"neutral 3000\n",
"infected 100\n",
"Name: state_id, dtype: int64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"it[0].agent_df().state_id.value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T11:05:18.043194Z",
"start_time": "2017-07-03T13:05:18.034699+02:00"
},
"cell_style": "center",
"hideCode": false,
"hidePrompt": false
},
"source": [
"The results are conveniently stored in sqlite (history of agent and environment state) and the configuration is saved in a YAML file.\n",
"\n",
"You can also export the results to GEXF format (dynamic network) and CSV using .`run(dump=['gexf', 'csv'])` or the command line flags `--graph --csv`."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-01T14:05:56.404540Z",
"start_time": "2017-11-01T15:05:56.122876+01:00"
},
"cell_style": "split",
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[01;34msoil_output\u001b[00m\n",
"└── \u001b[01;34mnewspread\u001b[00m\n",
" └── newspread.sqlite\n",
"\n",
"1 directory, 1 file\n",
"4.6M\tsoil_output/newspread\n"
]
}
],
"source": [
"!tree soil_output\n",
"!du -xh soil_output/*"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-02T10:40:14.384177Z",
"start_time": "2017-07-02T12:40:14.381885+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Analysing the results"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"#### Loading data"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"Once the simulations are over, we can use soil to analyse the results.\n",
"\n",
"There are two main ways: directly using the iterations returned by the `run` method, or loading up data from the results database.\n",
"This is particularly useful to store data between sessions, and to accumulate results over multiple runs.\n",
"\n",
"The mainThe main method to load data from the database is `read_sql`, which can be used in two ways:\n",
"\n",
"* `analysis.read_sql()` to load all the results from a sqlite database . e.g. `read_sql('my_simulation/file.db.sqlite')`\n",
"* `analysis.read_sql(name=)` will look for the default path for a simulation named ``"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result in both cases is a named tuple with four dataframes:\n",
"\n",
"* `configuration`, which contains configuration parameters per simulation\n",
"* `parameters`, which shows the parameters used **in every iteration** of every simulation\n",
"* `env`, with the data collected from the model in each iteration (as specified in `model_reporters`)\n",
"* `agents`, like `env`, but for `agent_reporters`"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2017-07-03T14:44:30.978223Z",
"start_time": "2017-07-03T16:44:30.971952+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"source": [
"Let's see it in action by loading the stored results into a pandas dataframe:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2017-10-19T15:57:44.101253Z",
"start_time": "2017-10-19T17:57:44.039710+02:00"
},
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"res = analysis.read_sql(name=\"newspread\", include_agents=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotting data\n",
"\n",
"Once we have loaded the results from the file, we can use them just like any other dataframe.\n",
"\n",
"Here is an example of plotting the ratio of infected users in each of our simulations:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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6aefxmQyAfDss8+SkJBAYWEh06dPB8But/PMM88QHR3N6NGjufvuu7n55pu55557MJt1clfkeKCfZBHpEePHj2fq1KmMHTuWH//4xzz11FPU1tZ2G//555+zY8cO4uLiiI2NJTY2lqSkJNra2ti5c2en5UZHR3d8X1BQQFNTEyUlJWHdHhHpPTozIiI9wmKx8P777/PJJ5+wdOlSHnvsMW6//XbWrFnTZXxTUxP5+fk8//zzB32Wmpoa7nJFpA9RMyIiPcZkMjFlyhSmTJnCnXfeSU5ODkuWLMFut+P3+zvFnnTSSbz88sukpaXhcrm6Xebnn39Oa2srUVFRAHz66afExsaSnZ0d1m0Rkd6jyzQi0iPWrFnDvffey7p16yguLub111+nsrKSE044gcGDB7Np0ya2bt1KVVUVXq+Xyy67jJSUFGbNmsWqVasoKiqisLCQ//zP/2Tv3r0dy/V4PMydO5ctW7bwzjvvsGjRIubPn6/7RUSOIzozIiI9wuVysXLlSh555BEaGhrIycnh4Ycf5txzz2XixIkUFhYyceJEmpqaWL58OWeddRYrV67klltu4eKLL6axsZEBAwYwderUTmdKpk6dSl5eHmeccQZut5tLL72U3/72t5HbUBHpcSbDMIxIFyEi0pWrrrqKuro63njjjUiXIiJhpPOcIiIiElFqRkRERCSidJlGREREIkpnRkRERCSi1IyIiIhIRKkZERERkYhSMyIiIiIRpWZEREREIkrNiIiIiESUmhERERGJKDUjIiIiElFqRkRERCSi/n9SFRFjxgqckQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (g, group) in res.env.dropna().groupby(\"params_id\"):\n",
" params = res.parameters.query(f'params_id == \"{g}\"').iloc[0]\n",
" title = f\"{params.generator.rstrip('_graph')} {params.prob_neighbor_spread}\"\n",
" prob = group.groupby(by=[\"step\"]).prob_neighbor_spread.mean()\n",
" line = \"-\"\n",
" if \"barabasi\" in params.generator:\n",
" line = \"--\"\n",
" prob.rename(title).fillna(0).plot(linestyle=line)\n",
"plt.title(\"Mean probability for each configuration\")\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"neutral 136410\n",
"infected 18590\n",
"Name: state_id, dtype: int64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.agents.state_id.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAHHCAYAAACcHAM1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAADQ0klEQVR4nOzdd3gU1frA8e/2JJtNbyQEQm9SJBRBpEgwICDNAvcqIKDiBaSI0iw0DYg0RcV2AVF/Kl4L94KIIIgUQTpSQpEQgSTUJGzK1vn9EVlY0iEV3s/z7GN25p0z7yzCvjlz5hyVoigKQgghhBAVmLq8ExBCCCGEKIwULEIIIYSo8KRgEUIIIUSFJwWLEEIIISo8KViEEEIIUeFJwSKEEEKICk8KFiGEEEJUeFKwCCGEEKLCk4JFCCGEEBWeFCxCVAJTp05FpVKVy7l///132rZti9FoRKVSsXfv3jzjNm7ciEqlYuPGjTd1npSUFB5++GECAwNRqVQsWLDgpnMua7d67UKIwknBIsRNWLp0KSqVyvXSarVEREQwePBgzpw5c1NtZmZmMnXq1Ar1pWez2XjkkUe4dOkS8+fPZ/ny5VSvXr1UzjV27Fh+/PFHJk2axPLly+natWuJn+P111/nu+++K/F2hRClT1veCQhRmU2fPp0aNWqQnZ3Nb7/9xtKlS9m8eTN//PEHHh4exWorMzOTadOmAdCxY0e3fS+99BITJ04sqbSL7MSJE5w6dYoPP/yQYcOGFRjbvn17srKy0Ov1N3Wun3/+mV69ejF+/PibOr4oXn/9dR5++GF69+5daucQQpQOKViEuAXdunWjRYsWAAwbNoygoCBmz57NypUrefTRR0vsPFqtFq227P+6njt3DgA/P79CY9VqdbGLtBvPVZTziFvndDqxWq239OclRFmTW0JClKD77rsPyOmZuMpqtfLKK68QHR2Nr68vRqOR++67jw0bNrhiEhISCA4OBmDatGmuW01Tp04F8h7DYrfbmTFjBrVq1cJgMBAVFcXkyZOxWCxFyvXnn3/mvvvuw2g04ufnR69evTh8+LBr/+DBg+nQoQMAjzzyCCqVKlfPz/XyGsfRsWNH7rrrLg4dOkSnTp3w8vIiIiKCN954wxVz9faaoii88847rmu/KjU1lTFjxhAZGYnBYKB27drMnj0bp9Ppdn6n08nChQtp3LgxHh4eBAcH07VrV3bu3AmASqUiIyODZcuWuc4xePBg1/FnzpxhyJAhhIaGYjAYaNSoEf/+979zXefp06fp3bs3RqORkJAQxo4dW+TPfPDgwURFReXantef708//US7du3w8/PD29ubevXqMXnyZLcYi8XCq6++Su3atTEYDERGRvLiiy/mykelUjFy5Eg+++wzGjVqhMFgYM2aNQB88cUXREdHYzKZ8PHxoXHjxixcuLBI1yNEWZIeFiFKUEJCAgD+/v6ubenp6Xz00UcMGDCAp556iitXrvDxxx8TGxvLjh07aNasGcHBwbz33ns8++yz9OnTh759+wLQpEmTfM81bNgwli1bxsMPP8zzzz/P9u3biYuL4/Dhw3z77bcF5rlu3Tq6detGzZo1mTp1KllZWbz99tvce++97N69m6ioKJ555hkiIiJ4/fXXee6552jZsiWhoaHF/kwuX75M165d6du3L48++ihff/01EyZMoHHjxnTr1o327duzfPlynnjiCbp06cLAgQNdx2ZmZtKhQwfOnDnDM888Q7Vq1di6dSuTJk0iKSnJbWDu0KFDWbp0Kd26dWPYsGHY7XZ+/fVXfvvtN1q0aMHy5csZNmwYrVq14umnnwagVq1aQM6A33vuucf1xR4cHMwPP/zA0KFDSU9PZ8yYMQBkZWXRuXNnEhMTee655wgPD2f58uX8/PPPxf5cCnLw4EF69OhBkyZNmD59OgaDgePHj7NlyxZXjNPp5KGHHmLz5s08/fTTNGjQgAMHDjB//nyOHj2aa6zOzz//zFdffcXIkSMJCgoiKiqKn376iQEDBtC5c2dmz54NwOHDh9myZQujR48u0WsS4pYpQohiW7JkiQIo69atU86fP6/89ddfytdff60EBwcrBoNB+euvv1yxdrtdsVgsbsdfvnxZCQ0NVYYMGeLadv78eQVQXn311Vzne/XVV5Xr/7ru3btXAZRhw4a5xY0fP14BlJ9//rnA/Js1a6aEhIQoFy9edG3bt2+folarlYEDB7q2bdiwQQGUFStWFPyBXBe7YcMG17YOHToogPLJJ5+4tlksFiUsLEzp16+f2/GAMmLECLdtM2bMUIxGo3L06FG37RMnTlQ0Go2SmJioKIqi/PzzzwqgPPfcc7nycjqdrp+NRqMyaNCgXDFDhw5VqlSpoly4cMFte//+/RVfX18lMzNTURRFWbBggQIoX331lSsmIyNDqV27dq5rz8ugQYOU6tWr59p+45/v/PnzFUA5f/58vm0tX75cUavVyq+//uq2ffHixQqgbNmyxbUNUNRqtXLw4EG32NGjRys+Pj6K3W4vMG8hKgK5JSTELYiJiSE4OJjIyEgefvhhjEYjK1eupGrVqq4YjUbjGojqdDq5dOkSdrudFi1asHv37ps67+rVqwEYN26c2/bnn38egFWrVuV7bFJSEnv37mXw4MEEBAS4tjdp0oQuXbq42i4p3t7ePP744673er2eVq1a8eeffxZ67IoVK7jvvvvw9/fnwoULrldMTAwOh4NNmzYB8J///AeVSsWrr76aq43CHgdXFIX//Oc/9OzZE0VR3M4TGxtLWlqa689p9erVVKlShYcffth1vJeXl6vHpqRcHcvz/fff57r1ddWKFSto0KAB9evXd8v5/vvvB3C75QjQoUMHGjZsmOs8GRkZ/PTTTyWavxClQQoWIW7BO++8w08//cTXX3/Ngw8+yIULFzAYDLnili1bRpMmTfDw8CAwMJDg4GBWrVpFWlraTZ331KlTqNVqateu7bY9LCwMPz8/Tp06VeCxAPXq1cu1r0GDBly4cIGMjIybyisvVatWzVU0+Pv7c/ny5UKPPXbsGGvWrCE4ONjtFRMTA1wbFHzixAnCw8PdCrCiOn/+PKmpqXzwwQe5zvPkk0+6nefUqVPUrl071/Xk9Vneiscee4x7772XYcOGERoaSv/+/fnqq6/cipdjx45x8ODBXDnXrVvXLeeratSokes8//rXv6hbty7dunWjatWqDBkyxDW2RYiKRsawCHELWrVq5XpKqHfv3rRr145//OMfxMfH4+3tDcCnn37K4MGD6d27Ny+88AIhISFoNBri4uLcBufejPKaTK44NBpNntsVRSn0WKfTSZcuXXjxxRfz3H/1y/lWXC0CHn/8cQYNGpRnTEFjiYojvz8vh8Ph9t7T05NNmzaxYcMGVq1axZo1a/jyyy+5//77Wbt2LRqNBqfTSePGjZk3b16ebUZGRuZq80YhISHs3buXH3/8kR9++IEffviBJUuWMHDgQJYtW3aTVylE6ZCCRYgScrUI6dSpE4sWLXLNm/L1119Ts2ZNvvnmG7cvrBtvXxSn+KhevTpOp5Njx47RoEED1/aUlBRSU1MLnNzt6r74+Phc+44cOUJQUBBGo7HIuZSmWrVqYTabXT0qBcX9+OOPXLp0qcBelrw+4+DgYEwmEw6Ho9DzVK9enT/++ANFUdzayuuzzIu/vz+pqam5tufVI6ZWq+ncuTOdO3dm3rx5vP7660yZMoUNGzYQExNDrVq12LdvH507d76lwlWv19OzZ0969uyJ0+nkX//6F++//z4vv/xyrh48IcqT3BISogR17NiRVq1asWDBArKzs4FrPQzX9yhs376dbdu2uR3r5eUFkOcX2o0efPBBgFzT11/9bbt79+75HlulShWaNWvGsmXL3M71xx9/sHbtWlfbFcGjjz7Ktm3b+PHHH3PtS01NxW63A9CvXz8URXFNvHe96z93o9GY6/PVaDT069eP//znP/zxxx+5jj9//rzr5wcffJCzZ8/y9ddfu7ZlZmbywQcfFOl6atWqRVpaGvv373dtS0pKyvVU16VLl3Id26xZMwDXI8uPPvooZ86c4cMPP8wVm5WVVaTbehcvXnR7r1arXb1JRX1UW4iyIj0sQpSwF154gUceeYSlS5cyfPhwevTowTfffEOfPn3o3r07J0+eZPHixTRs2BCz2ew6ztPTk4YNG/Lll19St25dAgICuOuuu7jrrrtynaNp06YMGjSIDz74gNTUVDp06MCOHTtYtmwZvXv3plOnTgXmOGfOHLp160abNm0YOnSo67FmX19f19wvFcELL7zAypUr6dGjB4MHDyY6OpqMjAwOHDjA119/TUJCAkFBQXTq1IknnniCt956i2PHjtG1a1ecTie//vornTp1YuTIkQBER0ezbt065s2bR3h4ODVq1KB169bMmjWLDRs20Lp1a5566ikaNmzIpUuX2L17N+vWrXMVEE899RSLFi1i4MCB7Nq1iypVqrB8+XJXsVmY/v37M2HCBPr06cNzzz1HZmYm7733HnXr1nUbgD19+nQ2bdpE9+7dqV69OufOnePdd9+latWqtGvXDoAnnniCr776iuHDh7NhwwbuvfdeHA4HR44c4auvvuLHH3903a7Mz7Bhw7h06RL3338/VatW5dSpU7z99ts0a9bMredOiAqhHJ9QEqLSuvpY8++//55rn8PhUGrVqqXUqlVLsdvtitPpVF5//XWlevXqisFgUO6++27lf//7X56PuG7dulWJjo5W9Hq92yPONz72qiiKYrPZlGnTpik1atRQdDqd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vzCbza79p06domfPnvj7+2M0GmnUqBGrV692y60ot4QuXrzIgAEDiIiIwMvLi8aNG/N///d/hR5XWP6pqakMGzaM4OBgfHx8uP/++9m3b59r/9SpU2nWrBkfffSRa4bYwYMH88svv7Bw4UJXD0hCQkKucyuKwoIFC3jppZfo1asXTZo04ZNPPuHs2bN89913Beat1WoJCwtzvYKCggq91rIgBYso0IUvz3F6xk6SfthWpHirxUL6hQQAghq2KMXMhLgNWDPyf9myixGbVXjsTVi2bBlarZYdO3awcOFC5s2bx0cffeTab7PZmDFjBvv27eO7774jISGBwYMH52pn4sSJzJo1i8OHD9OkSRPMZjMPPvgg69evZ8+ePXTt2pWePXuSmJjodtycOXNo2rQpe/bsYeLEiYwePZqffvrJtV+tVvPWW29x8OBBli1bxs8//8yLL77o2j9ixAgsFgubNm3iwIEDzJ49G29v72J/DtnZ2URHR7Nq1Sr++OMPnn76aZ544gl27NhR4HGF5f/II49w7tw5fvjhB3bt2kXz5s3p3Lkzly5dcsUcP36c//znP3zzzTfs3buXhQsX0qZNG5566ilXD0hkZGSuc588eZLk5GRiYmJc23x9fWndujXbthX87/mxY8cIDw+nZs2a/POf/8z151JeZGp+ka/U/fF4qrU4FQX/6LpFOmbtovex6jRo7U66jhtdyhkKUcm9XsCs0XUegH+uuPZ+Tm2w5dPbWb0dPLnq2vsFjSHzonvM1LRipxcZGcn8+fNRqVTUq1ePAwcOMH/+fJ566ikAt0UAa9asyVtvvUXLli0xm81uhcH06dPp0qWL631AQABNm157enDGjBl8++23rFy5kpEjR7q233vvvUycOBGAunXrsmXLFubPn+9q68ZBrjNnzmT48OG8++67ACQmJtKvXz8aN27syvFmREREMH78eNf7UaNG8eOPP/LVV1/RqlWrfI8rKP/NmzezY8cOzp07h8FgAODNN9/ku+++4+uvv+bpp58Gcm4DffLJJwQHB7va1ev1eHl5ERYWlu+5k5OTAQgNDXXbHhoa6tqXl9atW7N06VLq1atHUlIS06ZN47777uOPP/7AZDLle1xZkB4Wka/zvx4HIEOx4BESWKRjTm9dD4C3VxA+gf6llpsQovTdc889bmM82rRpw7Fjx3A4HADs2rWL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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (g, group) in res.agents.dropna().groupby(\"params_id\"):\n",
" params = res.parameters.query(f'params_id == \"{g}\"').iloc[0]\n",
" title = f\"{params.generator.rstrip('_graph')} {params.prob_neighbor_spread}\"\n",
" # counts = group.groupby(by=[\"step\", \"state_id\"]).value_counts().unstack()\n",
" counts = group.state_id.groupby(by=[\"step\"]).value_counts().unstack()\n",
" line = \"-\"\n",
" if \"barabasi\" in params.generator:\n",
" line = \"--\"\n",
" (counts.infected/counts.sum(axis=1)).rename(title).fillna(0).plot(linestyle=line)\n",
"plt.legend()\n",
"plt.xlim([9, None]);\n",
"plt.title(\"Ratio of infected users\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data format"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Parameters\n",
"\n",
"The `parameters` dataframe has three keys:\n",
"\n",
"* The identifier of the simulation. This will be shared by all iterations launched in the same run\n",
"* The identifier of the parameters used in the simulation. This will be shared by all iterations that have the exact same set of parameters.\n",
"* The identifier of the iteration. Each row should have a different iteration identifier\n",
"\n",
"There will be a column per each parameter passed to the environment. In this case, that's three: **generator**, **n** and **prob_neighbor_spread**."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" index \n",
" n \n",
" generator \n",
" prob_neighbor_spread \n",
" \n",
" \n",
" simulation_id \n",
" params_id \n",
" iteration_id \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" newspread_1684407215.653166 \n",
" ff1d24a \n",
" 0 \n",
" 0 \n",
" 100 \n",
" erdos_renyi_graph \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 0 \n",
" 100 \n",
" erdos_renyi_graph \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 0 \n",
" 100 \n",
" erdos_renyi_graph \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" 0 \n",
" 100 \n",
" erdos_renyi_graph \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 0 \n",
" 100 \n",
" erdos_renyi_graph \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" index n \\\n",
"simulation_id params_id iteration_id \n",
"newspread_1684407215.653166 ff1d24a 0 0 100 \n",
" 1 0 100 \n",
" 2 0 100 \n",
" 3 0 100 \n",
" 4 0 100 \n",
"\n",
" generator \\\n",
"simulation_id params_id iteration_id \n",
"newspread_1684407215.653166 ff1d24a 0 erdos_renyi_graph \n",
" 1 erdos_renyi_graph \n",
" 2 erdos_renyi_graph \n",
" 3 erdos_renyi_graph \n",
" 4 erdos_renyi_graph \n",
"\n",
" prob_neighbor_spread \n",
"simulation_id params_id iteration_id \n",
"newspread_1684407215.653166 ff1d24a 0 0 \n",
" 1 0 \n",
" 2 0 \n",
" 3 0 \n",
" 4 0 "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.parameters.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Configuration\n",
"\n",
"This dataset is indexed by the identifier of the simulation, and there will be a column per each attribute of the simulation.\n",
"For instance, there is one for the number of processes used, another one for the path where the results were stored, etc."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" version \n",
" source_file \n",
" name \n",
" description \n",
" group \n",
" backup \n",
" overwrite \n",
" dry_run \n",
" dump \n",
" ... \n",
" num_processes \n",
" exporters \n",
" model_reporters \n",
" agent_reporters \n",
" tables \n",
" outdir \n",
" exporter_params \n",
" level \n",
" skip_test \n",
" debug \n",
" \n",
" \n",
" simulation_id \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" newspread_1684407215.653166 \n",
" 0 \n",
" 2 \n",
" None \n",
" newspread \n",
" \n",
" None \n",
" False \n",
" True \n",
" False \n",
" True \n",
" ... \n",
" 1 \n",
" [\"<class 'soil.exporters.SQLite'>\"] \n",
" {} \n",
" {} \n",
" {} \n",
" /mnt/data/home/j/git/lab.gsi/soil/soil/docs/tu... \n",
" {} \n",
" 20 \n",
" False \n",
" False \n",
" \n",
" \n",
"
\n",
"
1 rows × 28 columns
\n",
"
"
],
"text/plain": [
" index version source_file name description \\\n",
"simulation_id \n",
"newspread_1684407215.653166 0 2 None newspread \n",
"\n",
" group backup overwrite dry_run dump ... \\\n",
"simulation_id ... \n",
"newspread_1684407215.653166 None False True False True ... \n",
"\n",
" num_processes \\\n",
"simulation_id \n",
"newspread_1684407215.653166 1 \n",
"\n",
" exporters \\\n",
"simulation_id \n",
"newspread_1684407215.653166 [\"\"] \n",
"\n",
" model_reporters agent_reporters tables \\\n",
"simulation_id \n",
"newspread_1684407215.653166 {} {} {} \n",
"\n",
" outdir \\\n",
"simulation_id \n",
"newspread_1684407215.653166 /mnt/data/home/j/git/lab.gsi/soil/soil/docs/tu... \n",
"\n",
" exporter_params level skip_test debug \n",
"simulation_id \n",
"newspread_1684407215.653166 {} 20 False False \n",
"\n",
"[1 rows x 28 columns]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.config.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model reporters\n",
"\n",
"The `env` dataframe includes the data collected from the model.\n",
"The keys in this case are the same as `parameters`, and an additional one: **step**."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" agent_count \n",
" time \n",
" prob_tv_spread \n",
" prob_neighbor_spread \n",
" \n",
" \n",
" params_id \n",
" iteration_id \n",
" step \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" ff1d24a \n",
" 0 \n",
" 0 \n",
" 101 \n",
" 0.0 \n",
" 0.0 \n",
" 0.0 \n",
" \n",
" \n",
" 1 \n",
" 101 \n",
" 1.0 \n",
" 0.0 \n",
" 0.0 \n",
" \n",
" \n",
" 2 \n",
" 101 \n",
" 2.0 \n",
" 0.0 \n",
" 0.0 \n",
" \n",
" \n",
" 3 \n",
" 101 \n",
" 3.0 \n",
" 0.0 \n",
" 0.0 \n",
" \n",
" \n",
" 4 \n",
" 101 \n",
" 4.0 \n",
" 0.0 \n",
" 0.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" agent_count time prob_tv_spread \\\n",
"params_id iteration_id step \n",
"ff1d24a 0 0 101 0.0 0.0 \n",
" 1 101 1.0 0.0 \n",
" 2 101 2.0 0.0 \n",
" 3 101 3.0 0.0 \n",
" 4 101 4.0 0.0 \n",
"\n",
" prob_neighbor_spread \n",
"params_id iteration_id step \n",
"ff1d24a 0 0 0.0 \n",
" 1 0.0 \n",
" 2 0.0 \n",
" 3 0.0 \n",
" 4 0.0 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.env.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Agent reporters\n",
"\n",
"This dataframe reflects the data collected for all the agents in the simulation, in every step where data collection was invoked.\n",
"\n",
"The key in this dataframe is similar to the one in the `parameters` dataframe, but there will be two more keys: the `step` and the `agent_id`.\n",
"There will be a column per each agent reporter added to the model. In our case, there is only one: `state_id`."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" has_tv \n",
" state_id \n",
" \n",
" \n",
" params_id \n",
" iteration_id \n",
" step \n",
" agent_id \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" ff1d24a \n",
" 0 \n",
" 0 \n",
" 0 \n",
" None \n",
" None \n",
" \n",
" \n",
" 1 \n",
" False \n",
" neutral \n",
" \n",
" \n",
" 2 \n",
" False \n",
" neutral \n",
" \n",
" \n",
" 3 \n",
" False \n",
" neutral \n",
" \n",
" \n",
" 4 \n",
" False \n",
" neutral \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" has_tv state_id\n",
"params_id iteration_id step agent_id \n",
"ff1d24a 0 0 0 None None\n",
" 1 False neutral\n",
" 2 False neutral\n",
" 3 False neutral\n",
" 4 False neutral"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.agents.head()"
]
}
],
"metadata": {
"hide_code_all_hidden": false,
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"navigate_num": "#000000",
"navigate_text": "#333333",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700",
"sidebar_border": "#EEEEEE",
"wrapper_background": "#FFFFFF"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "31px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": false,
"toc_position": {
"height": "867px",
"left": "0px",
"right": "1670px",
"top": "106px",
"width": "250px"
},
"toc_section_display": "block",
"toc_window_display": false,
"widenNotebook": false
},
"vscode": {
"interpreter": {
"hash": "3581132406f7320837865a422f37590c78ed7dabfbcb5bc7771b9d116b13a5cf"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}