1
0
mirror of https://github.com/gsi-upm/soil synced 2024-11-14 23:42:29 +00:00
soil/examples/tutorial/soil_tutorial.ipynb
2023-04-24 18:05:07 +02:00

2194 lines
246 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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",
"In particular, we will focus on a specific use case: studying the propagation of news in a social network.\n",
"\n",
"The steps we will follow are:\n",
"\n",
"* Modelling the behavior of agents\n",
"* Running the simulation using different configurations\n",
"* Analysing the results of each simulation"
]
},
{
"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": [
"import soil\n",
"import networkx as nx\n",
" \n",
"%load_ext autoreload\n",
"%autoreload 2\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 three 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",
"* The network topology. A simulation may use an existing NetworkX topology, or generate one on the fly.\n",
"* 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"
]
},
{
"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",
"However, 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",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"#### Generator-based agents\n",
"\n",
"Another design pattern that can be very useful in some cases is to model each step (or a specific state) using generators (the `yield` keyword).\n",
"\n",
"\n",
"\n",
"```python\n",
"class GenExample(BaseAgent):\n",
" def step(self):\n",
" for i in range(self.model.max_steps_neutral):\n",
" ... # Do something\n",
" yield # Signal the scheduler that this step is done for now\n",
" ... # Do something\n",
" return self.die(\"No need to do anything else\") \n",
"```"
]
},
{
"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 when they expect to be called again.\n",
"This is especially useful when an agent is going to be dormant for a long time.\n",
"To do so, an agent can return (or `yield`) from a `step` or a `state` a value of type `soil.When` (absolute time), `soil.Delta` (relative time) or `soil.Cond`, telling the scheduler when the agent will be ready to run again.\n",
"If it returns nothing (i.e., `None`), the agent will be ready to run at the next simulation step."
]
},
{
"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"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"Environment agents allow us to control the state of the environment.\n",
"In this case, we will use an environment agent to simulate a very viral event.\n",
"\n",
"When the event happens, the agent will modify the probability of spreading the rumor."
]
},
{
"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(soil.BaseAgent):\n",
" level = logging.INFO\n",
" \n",
" def step(self):\n",
" # Do nothing until the time of the event\n",
" yield soil.When(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",
" yield\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",
" yield"
]
},
{
"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 NewsEnv(soil.NetworkEnvironment):\n",
" \n",
" prob_tv_spread = 0.1\n",
" prob_neighbor_spread = 0.1\n",
" event_time = 10\n",
" tv_factor = 0.5\n",
" neighbor_factor = 0.9\n",
"\n",
" \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 run a simulation "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9fdc8c75869c4af092737891dab50a30",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NewsEnv: 0%| | 0/1 [00:00<?, ?configuration/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>step</th>\n",
" <th>agent_count</th>\n",
" <th>prob_tv_spread</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" step agent_count prob_tv_spread\n",
"time \n",
"0 0 1 0.1\n",
"10 1 1 0.1\n",
"11 2 1 0.5\n",
"12 3 1 0.0\n",
"13 4 1 0.0\n",
"14 5 1 0.0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"it = NewsEnv.run(iterations=1, dump=False, max_time=14)\n",
"\n",
"it[0].model_df()"
]
},
{
"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 `1.0`.\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 NewsSpread(soil.Agent):\n",
" has_tv = False\n",
" infected_by_friends = False\n",
" \n",
" @soil.state(default=True)\n",
" def neutral(self):\n",
" if self.infected_by_friends:\n",
" return self.infected\n",
" if self.has_tv:\n",
" if self.prob(self.model.prob_tv_spread):\n",
" return self.infected\n",
" \n",
" @soil.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"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"We can check that our states are well defined, here:"
]
},
{
"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": [
"NewsSpread.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": [
"<Figure size 640x480 with 1 Axes>"
]
},
"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 NewsEnv(soil.NetworkEnvironment):\n",
" \n",
" prob_tv_spread = 0\n",
" prob_neighbor_spread = 0.1\n",
" event_time = 10\n",
" tv_factor = 0.5\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(NewsSpread)\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": 22,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6b8425e6b67143ac83c5613346abef3c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NewsEnv: 0%| | 0/1 [00:00<?, ?configuration/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>step</th>\n",
" <th>agent_count</th>\n",
" <th>prob_tv_spread</th>\n",
" <th>prob_neighbor_spread</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.100000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>11</td>\n",
" <td>6</td>\n",
" <td>0.5</td>\n",
" <td>0.200000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>12</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.180000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>13</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.162000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>14</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.145800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>15</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.131220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>16</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.118098</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>17</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.106288</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>18</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.095659</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>19</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.086093</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>20</td>\n",
" <td>6</td>\n",
" <td>0.0</td>\n",
" <td>0.077484</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" step agent_count prob_tv_spread prob_neighbor_spread\n",
"time \n",
"0 0 6 0.0 0.100000\n",
"1 1 6 0.0 0.100000\n",
"2 2 6 0.0 0.100000\n",
"3 3 6 0.0 0.100000\n",
"4 4 6 0.0 0.100000\n",
"5 5 6 0.0 0.100000\n",
"6 6 6 0.0 0.100000\n",
"7 7 6 0.0 0.100000\n",
"8 8 6 0.0 0.100000\n",
"9 9 6 0.0 0.100000\n",
"10 10 6 0.0 0.100000\n",
"11 11 6 0.5 0.200000\n",
"12 12 6 0.0 0.180000\n",
"13 13 6 0.0 0.162000\n",
"14 14 6 0.0 0.145800\n",
"15 15 6 0.0 0.131220\n",
"16 16 6 0.0 0.118098\n",
"17 17 6 0.0 0.106288\n",
"18 18 6 0.0 0.095659\n",
"19 19 6 0.0 0.086093\n",
"20 20 6 0.0 0.077484"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"it = NewsEnv.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": 23,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No agent dataframe provided. 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": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"soil.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(soil.Environment):\n",
" prob_tv = 0.05\n",
" prob_tv_spread = 0\n",
" prob_neighbor_spread = 0\n",
" event_time = 10\n",
" tv_factor = 0\n",
" neighbor_factor = 0.5\n",
" generator = \"erdos_renyi_graph\"\n",
" n = 100\n",
"\n",
" def init(self):\n",
" self.add_agent(EventGenerator)\n",
" if not self.G:\n",
" opts = {\"n\": self.n}\n",
" if self.generator == \"erdos_renyi_graph\":\n",
" opts[\"p\"] = 0.5\n",
" elif self.generator == \"barabasi_albert_graph\":\n",
" opts[\"m\"] = 4\n",
" self.create_network(generator=self.generator, **opts)\n",
"\n",
" self.populate_network([NewsSpread,\n",
" NewsSpread.w(has_tv=True)],\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('state_id')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since we do not care about previous results, we will set`overwrite=True`."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO ][18:00:39] Output directory: /mnt/data/home/j/git/lab.gsi/soil/soil/examples/tutorial/soil_output\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "178024d02ecc425395b3f67c19ba9fee",
"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": "",
"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": "",
"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": "",
"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": "",
"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": "",
"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": "",
"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": "",
"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": "",
"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": "",
"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": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/5 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"s = soil.Simulation(model=NewsEnvComplete, iterations=5, max_time=30, dump=True, overwrite=True)\n",
"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 = s.run(name=f\"newspread\", matrix=dict(n=[N], generator=generators, prob_neighbor_spread=probabilities))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"assert len(it) == len(probabilities) * len(generators) * s.iterations"
]
},
{
"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": 14,
"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_1681989837.124865.dumped.yml\n",
" ├── newspread_1681990513.1584163.dumped.yml\n",
" ├── newspread_1681990524.5204282.dumped.yml\n",
" ├── newspread_1681990796.858183.dumped.yml\n",
" ├── newspread_1682002299.544348.dumped.yml\n",
" ├── newspread_1682003721.597205.dumped.yml\n",
" ├── newspread_1682003784.1948986.dumped.yml\n",
" ├── newspread_1682003812.4626257.dumped.yml\n",
" ├── newspread_1682004020.182087.dumped.yml\n",
" ├── newspread_1682004044.6837814.dumped.yml\n",
" ├── newspread_1682004398.267355.dumped.yml\n",
" ├── newspread_1682004564.1052232.dumped.yml\n",
" ├── newspread_1682351953.9104202.dumped.yml\n",
" ├── newspread_1682352039.0612123.dumped.yml\n",
" └── newspread.sqlite\n",
"\n",
"1 directory, 15 files\n",
"21M\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(<sqlite_file>)` to load all the results from a sqlite database . e.g. `read_sql('my_simulation/file.db.sqlite')`\n",
"* `analysis.read_sql(name=<simulation name>)` will look for the default path for a simulation named `<simulation name>`"
]
},
{
"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": 15,
"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 = soil.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": 16,
"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": [
"<Figure size 640x480 with 1 Axes>"
]
},
"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": 17,
"metadata": {
"hideCode": false,
"hidePrompt": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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sW7dOlfwUVhYyI4dO3j00UerfS2TyURycjL3339/jepY28T/W01U5jnnf2WeVeQYySjJwGQzNZmZNJYSGysW7iX3fDFGXx2jnuyKT2DlJGB1KvMoZB2reN5zEtw2/6KBiOJQkEtsrucebf1BBZ6dggiZ0oXghzvh2T5ABCJCnUpNTWXatGkcO3aML774grfffpsnnngCgOjoaHQ6HW+//TYnT55kxYoVzJ49u1rnbdOmjWtA5r59+7j33ntdXTwX2rJlC//85z85fvw47777Lt98843r+q1bt8Zms7muv2zZMhYtWuRWfurUqfzyyy+cOnWKPXv2sH79elcwUBNt2rRhzZo1bN26lSNHjvDII4+QkZFx2XKXqv/gwYPp1asXo0aNYvXq1aSkpLB161aef/75ywZ1sbGx7Nixg5SUFLKzs6t87SRJYurUqbz66qusWLGCAwcOMHbsWFq0aMGoUaNcxw0aNIh33nnH9Xz69On89ttvrvrcfvvtqNVqxowZU81Xq26IYKSJMp09DYCHXUYTEuK2r6nNpDm1P5vsMyY8vbWMfLIrvsGX7uetdYdXwEeDnF0z5rJBhBcJImSLg6LN50h/83fy/3fStV0baiR8Zk8C741HF1l/g8iE5mXs2LGUlpbSo0cPJk+ezBNPPOEaWBkcHMySJUv45ptv6NChA6+//jpvvfVWtc47b948/P396d27NyNGjGDo0KF069at0nFPPfUUu3btomvXrrz66qvMmzePoUOHAtC5c2fmzZvHG2+8QceOHfn888+ZM2eOW3mHw8HkyZOJj49n2LBhtG3b1jW4tSZeeOEFunXrxtChQxkwYABhYWFuH+gXc6n6S5LEqlWr6NevHw8++CBt27blnnvu4fTp05UGnf7Z9OnTUavVdOjQwdU9VpVnnnmGxx57jIcfftg1sPjnn392yzGSnJxMdna26/nZs2cZM2YM7dq14+677yYwMJDt27df03ErVZGUCyeVN1CFhYX4+vpSUFCAj49PfVenUZg7/iEwZdIu38Ztv/zitm/poaW8testhsQMYd6AefVUw9p1YMNZWrTxIzCi5tP6rpjsgF9fhc1lr2FsX7hrKRgDKx3qKLJi2noe0/Y0lLJpxyofHeFPdxfZUBsxs9nMqVOnXDkiBKE5utTfQXU/v8WYkSZKKS1EAvR+lT8YTxY4/yNvzINX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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"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",
" 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": 18,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>key</th>\n",
" <th>generator</th>\n",
" <th>n</th>\n",
" <th>prob_neighbor_spread</th>\n",
" </tr>\n",
" <tr>\n",
" <th>iteration_id</th>\n",
" <th>params_id</th>\n",
" <th>simulation_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>39063f8</th>\n",
" <th>newspread_1682352039.0612123</th>\n",
" <td>erdos_renyi_graph</td>\n",
" <td>100</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8f26adb</th>\n",
" <th>newspread_1682352039.0612123</th>\n",
" <td>barabasi_albert_graph</td>\n",
" <td>100</td>\n",
" <td>0.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>92fdcb9</th>\n",
" <th>newspread_1682352039.0612123</th>\n",
" <td>erdos_renyi_graph</td>\n",
" <td>100</td>\n",
" <td>0.25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cb3dbca</th>\n",
" <th>newspread_1682352039.0612123</th>\n",
" <td>erdos_renyi_graph</td>\n",
" <td>100</td>\n",
" <td>0.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d1fe9c1</th>\n",
" <th>newspread_1682352039.0612123</th>\n",
" <td>barabasi_albert_graph</td>\n",
" <td>100</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"key generator \\\n",
"iteration_id params_id simulation_id \n",
"0 39063f8 newspread_1682352039.0612123 erdos_renyi_graph \n",
" 8f26adb newspread_1682352039.0612123 barabasi_albert_graph \n",
" 92fdcb9 newspread_1682352039.0612123 erdos_renyi_graph \n",
" cb3dbca newspread_1682352039.0612123 erdos_renyi_graph \n",
" d1fe9c1 newspread_1682352039.0612123 barabasi_albert_graph \n",
"\n",
"key n prob_neighbor_spread \n",
"iteration_id params_id simulation_id \n",
"0 39063f8 newspread_1682352039.0612123 100 1.0 \n",
" 8f26adb newspread_1682352039.0612123 100 0.5 \n",
" 92fdcb9 newspread_1682352039.0612123 100 0.25 \n",
" cb3dbca newspread_1682352039.0612123 100 0.5 \n",
" d1fe9c1 newspread_1682352039.0612123 100 1.0 "
]
},
"execution_count": 18,
"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": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>index</th>\n",
" <th>version</th>\n",
" <th>source_file</th>\n",
" <th>name</th>\n",
" <th>description</th>\n",
" <th>group</th>\n",
" <th>backup</th>\n",
" <th>overwrite</th>\n",
" <th>dry_run</th>\n",
" <th>dump</th>\n",
" <th>...</th>\n",
" <th>num_processes</th>\n",
" <th>exporters</th>\n",
" <th>model_reporters</th>\n",
" <th>agent_reporters</th>\n",
" <th>tables</th>\n",
" <th>outdir</th>\n",
" <th>exporter_params</th>\n",
" <th>level</th>\n",
" <th>skip_test</th>\n",
" <th>debug</th>\n",
" </tr>\n",
" <tr>\n",
" <th>simulation_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>newspread_1682352039.0612123</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>None</td>\n",
" <td>newspread</td>\n",
" <td></td>\n",
" <td>None</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>...</td>\n",
" <td>1</td>\n",
" <td>[&lt;class 'soil.exporters.default'&gt;]</td>\n",
" <td>{}</td>\n",
" <td>{}</td>\n",
" <td>{}</td>\n",
" <td>/mnt/data/home/j/git/lab.gsi/soil/soil/example...</td>\n",
" <td>{}</td>\n",
" <td>20</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1 rows × 29 columns</p>\n",
"</div>"
],
"text/plain": [
" index version source_file name \\\n",
"simulation_id \n",
"newspread_1682352039.0612123 0 2 None newspread \n",
"\n",
" description group backup overwrite dry_run dump \\\n",
"simulation_id \n",
"newspread_1682352039.0612123 None False True False True \n",
"\n",
" ... num_processes \\\n",
"simulation_id ... \n",
"newspread_1682352039.0612123 ... 1 \n",
"\n",
" exporters \\\n",
"simulation_id \n",
"newspread_1682352039.0612123 [<class 'soil.exporters.default'>] \n",
"\n",
" model_reporters agent_reporters tables \\\n",
"simulation_id \n",
"newspread_1682352039.0612123 {} {} {} \n",
"\n",
" outdir \\\n",
"simulation_id \n",
"newspread_1682352039.0612123 /mnt/data/home/j/git/lab.gsi/soil/soil/example... \n",
"\n",
" exporter_params level skip_test debug \n",
"simulation_id \n",
"newspread_1682352039.0612123 {} 20 False False \n",
"\n",
"[1 rows x 29 columns]"
]
},
"execution_count": 19,
"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": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>agent_count</th>\n",
" <th>time</th>\n",
" <th>prob_tv_spread</th>\n",
" <th>prob_neighbor_spread</th>\n",
" </tr>\n",
" <tr>\n",
" <th>simulation_id</th>\n",
" <th>params_id</th>\n",
" <th>iteration_id</th>\n",
" <th>step</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">newspread_1682352039.0612123</th>\n",
" <th rowspan=\"5\" valign=\"top\">ff1d24a</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>101</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>101</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>101</td>\n",
" <td>2</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>101</td>\n",
" <td>3</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>101</td>\n",
" <td>4</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" agent_count time \\\n",
"simulation_id params_id iteration_id step \n",
"newspread_1682352039.0612123 ff1d24a 0 0 101 0 \n",
" 1 101 1 \n",
" 2 101 2 \n",
" 3 101 3 \n",
" 4 101 4 \n",
"\n",
" prob_tv_spread \\\n",
"simulation_id params_id iteration_id step \n",
"newspread_1682352039.0612123 ff1d24a 0 0 0.0 \n",
" 1 0.0 \n",
" 2 0.0 \n",
" 3 0.0 \n",
" 4 0.0 \n",
"\n",
" prob_neighbor_spread \n",
"simulation_id params_id iteration_id step \n",
"newspread_1682352039.0612123 ff1d24a 0 0 0.0 \n",
" 1 0.0 \n",
" 2 0.0 \n",
" 3 0.0 \n",
" 4 0.0 "
]
},
"execution_count": 20,
"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": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>state_id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>simulation_id</th>\n",
" <th>params_id</th>\n",
" <th>iteration_id</th>\n",
" <th>step</th>\n",
" <th>agent_id</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">newspread_1682352039.0612123</th>\n",
" <th rowspan=\"5\" valign=\"top\">ff1d24a</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
" <th>0</th>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>neutral</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" state_id\n",
"simulation_id params_id iteration_id step agent_id \n",
"newspread_1682352039.0612123 ff1d24a 0 0 0 None\n",
" 1 neutral\n",
" 2 neutral\n",
" 3 neutral\n",
" 4 neutral"
]
},
"execution_count": 21,
"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
}