You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
soil/docs/tutorial/soil_tutorial.ipynb

2207 lines
244 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"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",
"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"
]
},
{
"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(BaseAgent):\n",
" level = logging.INFO\n",
" \n",
" def step(self):\n",
" # Do nothing until the time of the event\n",
" yield 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 NewsEnvSimple(NetworkEnvironment):\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",
" 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 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": "3839c24e051d4e82a16aaabcd10eff82",
"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": "",
"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 = NewsEnvSimple.run(iterations=1, 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(Agent):\n",
" has_tv = False\n",
" infected_by_friends = False\n",
" \n",
" @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",
" @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:"
]
},
{
"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 NewsEnvNetwork(Environment):\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": 9,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0c1604da16344da89d7d13279ba768eb",
"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": "",
"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": 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": [
"<Figure size 640x480 with 1 Axes>"
]
},
"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.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": [
"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 ][18:42:13] 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": "13da1dd6b9d04207a861915cfdeb85cc",
"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": [
"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": "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_1682352713.2328467.dumped.yml\n",
" ├── newspread_1682354145.0394537.dumped.yml\n",
" ├── newspread_1682354210.681379.dumped.yml\n",
" ├── newspread_1682354306.4574156.dumped.yml\n",
" ├── newspread_1682354380.1758456.dumped.yml\n",
" ├── newspread_1682354406.758729.dumped.yml\n",
" ├── newspread_1682354533.7559075.dumped.yml\n",
" └── newspread.sqlite\n",
"\n",
"1 directory, 22 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 = 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": 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
},
"outputs": [
{
"data": {
"image/png": "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hw4REhKCt7d3petyNTVs2BCz2exqCamo3M8//0xGRkaFrSNlvcahoaH4+vqiKMolr1OvXj3++OMPhBBu5yrrtSxLYGAgWVlZpbaX1ZKl1Wrp3bs3vXv3Zv78+cyZM4fnn3+eTZs20adPHxo2bMj+/fvp3bv3FQWlRqOR/v37079/f1RV5emnn+aDDz7gxRdfLNXyJkk1SXbTSFIl9ezZk44dO7Jw4UIsFgtQ3DJQsiVg586dbN++3e1YLy8vgDLfrC52zz33AJSaMr3oU/K9995b7rGRkZG0bduWZcuWuV3rjz/+YO3ata5zXw8eeughtm/fzs8//1xqX1ZWFg6HA4DBgwcjhHBNGldSydfd29u71Our0+kYPHgw33zzDX/88Uep48+fP+/6/p577uHcuXOsXLnStS0/P58PP/ywUvfTsGFDsrOz+f33313bkpOTS41+ysjIKHVs27ZtAVzDdh966CHOnj3LRx99VKpsQUFBpbra0tPT3Z5rtVpXK1BlhytL0rUiW0YkqQqeffZZHnzwQZYuXcqYMWO47777+Pbbb7n//vu59957OXnyJIsXL6Z58+aYzWbXcZ6enjRv3pz//Oc/NGnShKCgIFq2bEnLli1LXaNNmzYMGzaMDz/8kKysLHr06MGuXbtYtmwZAwcOpFevXhXWce7cufTr148uXbowcuRI19Bef39/19wm14Nnn32WVatWcd999zF8+HDat29PXl4eBw4cYOXKlSQmJhISEkKvXr147LHHePvttzl69Ch33303qqryv//9j169ejFu3DgA2rdvz/r165k/fz5RUVHUr1+fTp068cYbb7Bp0yY6derE6NGjad68ORkZGezdu5f169e7goPRo0fz7rvvMnToUPbs2UNkZCSff/65K5C8lIcffphp06Zx//33M2HCBPLz8/nXv/5FkyZN3JKZZ82axS+//MK9995LvXr1SEtL4/3336dOnTp0794dgMcee4zly5czZswYNm3aRLdu3VAUhUOHDrF8+XJ+/vlnVxdieUaNGkVGRgZ33nknderU4dSpU7zzzju0bdvWrcVNkq4LNTiSR5KuS0VDe3/99ddS+xRFEQ0bNhQNGzYUDodDqKoq5syZI+rVqydMJpO49dZbxX//+98yh3lu27ZNtG/fXhiNRrdhvhcP/RRCCLvdLl599VVRv359YTAYRExM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q6++4o477qBbt2784Q9/AEDXdZ5//nk6derEnj17uPXWW/nHP/7BP//5TwAmT56My+VixYoVBAcHs23bNkJCQk75fagszqdf7wHcNenvRCRE8uXypVxzzTV06dKFwYMH13ncycp/2WWXERQUxBdffEF4eDj/+te/GDlyJDt37vRPQb97927++9//8tFHH2EymejYsSM7d+6kT58+PProowDExtZcEyM7O5u8vDxGjRrlfy08PJwhQ4bw448/csUVV5zy+yBaN7e7iKLitZSW+IbIlpb9VG1ujsjIs4gPbA9AWGgaiYlXYbXEYA2IxWqNJsAai9Uag9Uag8lkO+G4wURG1v09EKItaLPByBNPPFHnvtTUVK6++mr/9tNPP427aibTX+rYsaN/RWKAefPmUVFRUSPdww8/fMplTEpK4tlnn0XTNLp3785PP/3Es88+6w9Grr/+en/azp078/zzzzNo0CDsdjshISEYVWX+x+13cNZ5I+ncLpgdhTvo0acHl/z+EiwmXxA1c+ZMFi5cyCeffMKUKVP8eZ599tlMnz4dgG7durFq1SqeffZZ/838xM6hKSkpPPbYY0yaNMkfjOTm5jJ+/HjS0tL8ZTxlhkGCLYxpk6aCbmBJCOO2vr344vMv+c9b7zCg/8A6F8Krr/wrV65k7dq1HD58mIAAX/+ZZ555hkWLFvHhhx9y8803A77g8q233qoWcFitVmw2W72PmfLy8gD8C0Qe065dO/8+0XZ5POWUlf1EYGCiv+/F0aLVbN06pVo6k8lGaGga4WHp1fprREYOITJyyBktsxAtWZsNRlqDs846q1ov9qFDhzJnzhy8Xi8mk4n169fz8MMPs3nzZoqKijAMXw+R3NxcevXq5R/Wm94nDYtJw+11o1BUllcyfdZ0Pv/8cw4dOoTH46GyspLc3Nxq5x86dGiN7RM7bS5ZsoRZs2axY8cOSktL8Xg8OBwOKioqsNls3H777dxyyy18/fXXjBo1ivHjx9O3b99Teg+U/QgudzBPzX+K/36xiAOHDuJyuXA6nVhMVirLXIRE1t7/or7yb968GbvdTnR0dLU0lZWVZGVl+bc7duxYa8uHEMcYhofy8l2+1o7SzZSUbqK8fDdg0LnzNDqlTAaomv68J2Fhff3DZIODu6JpMi+OECfTZoOR+pal/+Uwtr///e8NTnumhpKWl5eT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kednnXIZk5KSePbZZ9E0je7du/PTTz/x7LPPctNNNwFw/fXX+9N27tyZ559/nkGDBlFeXk6IzYZH9zXVT7lnCueNPI8uEV0AiIqKIj093X/szJkzWbhwIZ988glTpkzxv3722Wczffp0ALp168aqVat49tln+cMf/gBQrXNoSkoKjz32GJMmTeKf//Stqpqbm8v48eNJS0vzlxGA4lwMFQyAZjWhBfrK6fUYVNrd8IuWkcTERO6++27/9m233cZXX33FBx98wODBg+t8/+or/8qVK1m7di2HDx8mIMDXsfeZZ55h0aJFfPjhh9x8882A79HMW2+9RWzs8c61VqsVm81GfHy8/zWlDLzecjweO6DIy8sDICGhPZpWhm9+jhDi4ztQWOgiOLj7SVsvDMNg6tSpnH322fTp08f/+lVXXUXHjh1p3749W7Zs4Z577iEzM5OPPvqo3vyEEKK1arPBSGtw1llnVbthDR06lDlz5uD1ejGZTKxfv56HH36YzZs3U1RUhGH4+orsP3iInl27cOzI3v16V+u8arfbefjhh1m8eDGHDh3C4/FQWVlZo2Vk6NChNbZP7LS5ZMkSZs2axY4dOygtLcXj8eBwOKioqMBms3H77bdzyy238PXXXzNq1CjGjx9P3759USHtMQgBwBRi8dexosQFSmEJMGENPN7nwev18sQTT/DBBx9w4MABXC4XTqcTm81W7/tXX/k3b96M3W4nOjq6WprKykqyso4Hjh07dqwWiByjlMLrdeDxlOH12vF4y48HUZruH14LYLN1RNMsaJqOrlv9j3dOZvLkyWzdupWVK1dWe/1YoASQlpZGQkICI0eOJCsriy5dupw0XyGEaG3abDAy4tyf6tlbff2T4b+v73FA9SdZZw9bXke6xlVeXk5GRgYZGRm8/fbbxMbGkpubS0ZGBm63C6U0zCbfDS/IFlRtWO/dd9/NN998wzPPPEPXrl0JCgriz3/+M66qmVsbIicnh4svvphbbrmFxx9/nKioKFauXMkNN9yAy+XCZrNx4403kpGRweLFi/n666+ZNWsWc+bMYcrkKeg23yRmWqDvI+ZrFal9XpGnn36a5557jnnz5vn7qEydOvWUyvtLdrudhIQEli1bVmNfRESE///BwcG1Hu/xlFFevqvaa5puwWwKwWwOIT7e937n5+eTkJDgT5Ofn0+/fv1O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xGQy1UjfWq/bm2++SWho6EmbVlvidTMMg6lTp3L22WfTp08fwPeds1qtNQLi+r5zp/M9bWq11e2XCgoKmDlzJjfffHO9eZ3qZ7mp1VW3q666io4dO9K+fXu2bNnCPffcQ2ZmJh999FGt+bTW6/baa6/Rs2dPhg0bVm9eLeW6/fTTTwwdOhSHw0FISAgLFy6kV69ebNq0qU18134Twchvhdvt5i9/+QtKKV566aV60574jLRv374MGTKEjh078sEHHzToL4Uz5YorrvD/Py0tjb59+9KlSxeWLVvGyJEjm7Fkjevf//43V199NYGBgfWma4nXbfLkyWzdurVZ+q40tZPVrbS0lIsuuohevXrx8MMP15tXS/ss11W3E4OqtLQ0EhISGDlyJFlZWXTp0uVMF/O0nOy6VVZW8s477/DAAw+cNK+Wct26d+/Opk2bKCkp4cMPP2TixIksX778jJ2/qf0mHtPEx8cD1OhdnJ+f79/3SzExMZhMplM6pjkdC0T27t3LN998c8rLRUdERNCtWzd2797dRCVsHJ07dyYmJqbOcra26wbw/fffk5mZyY033njKxzb3dZsyZQqfffYZ3333HR06dPC/Hh8fj8vlori4uFr6+q7D6XxPm1JddTumrKyMCy+8kNDQUBYuXIjFYjml/E/2WW5KJ6vbiYYMGQJQZzlb23UD+PDDD6moqGDChAmnnH9zXTer1UrXrl0ZMGAAs2bNIj09neeee65NfNfgNxKMdOrUifj4eJYuXep/rbS0lDVr1jB06NBaj7FarQwYMKDaMYZhsHTp0jqPaS7HApFdu3axZMkSoqOjTzkPu91OVlYWCQkJTVDCxrN//34KCwvrLGdrum7HvPbaawwYMID09PRTPra5rptSiilTprBw4UK+/fZbOnXqVG3/gAEDsFgs1a5DZmYmubm5dV6H0/meNoWT1e1YuS644AKsViuffPLJSVu0anOyz3JTaEjdfmnTpk0AdZazNV23Y1577TUuueQSYmNjT/k8zXHdamMYBk6ns1V/16pplm6zTaCsrExt3LhRbdy4UQFq7ty5auPGjf4RJU8++aSKiIhQH3/8sdqyZYsaO3as6tSpk6qsrPTncf7556v58+f7t9977z0VEBCg3njjDbVt2zZ18803q4iICJWXl9di6uZyudQll1yiOnTooDZt2qQOHTrk/3E6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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": {},
"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_1682354533.7559075</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_1682354533.7559075</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_1682354533.7559075</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_1682354533.7559075</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_1682354533.7559075</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_1682354533.7559075 erdos_renyi_graph \n",
" 8f26adb newspread_1682354533.7559075 barabasi_albert_graph \n",
" 92fdcb9 newspread_1682354533.7559075 erdos_renyi_graph \n",
" cb3dbca newspread_1682354533.7559075 erdos_renyi_graph \n",
" d1fe9c1 newspread_1682354533.7559075 barabasi_albert_graph \n",
"\n",
"key n prob_neighbor_spread \n",
"iteration_id params_id simulation_id \n",
"0 39063f8 newspread_1682354533.7559075 100 1.0 \n",
" 8f26adb newspread_1682354533.7559075 100 0.5 \n",
" 92fdcb9 newspread_1682354533.7559075 100 0.25 \n",
" cb3dbca newspread_1682354533.7559075 100 0.5 \n",
" d1fe9c1 newspread_1682354533.7559075 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_1682354533.7559075</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/docs/tu...</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_1682354533.7559075 0 2 None newspread \n",
"\n",
" description group backup overwrite dry_run dump \\\n",
"simulation_id \n",
"newspread_1682354533.7559075 None False True False True \n",
"\n",
" ... num_processes \\\n",
"simulation_id ... \n",
"newspread_1682354533.7559075 ... 1 \n",
"\n",
" exporters \\\n",
"simulation_id \n",
"newspread_1682354533.7559075 [<class 'soil.exporters.default'>] \n",
"\n",
" model_reporters agent_reporters tables \\\n",
"simulation_id \n",
"newspread_1682354533.7559075 {} {} {} \n",
"\n",
" outdir \\\n",
"simulation_id \n",
"newspread_1682354533.7559075 /mnt/data/home/j/git/lab.gsi/soil/soil/docs/tu... \n",
"\n",
" exporter_params level skip_test debug \n",
"simulation_id \n",
"newspread_1682354533.7559075 {} 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_1682354533.7559075</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_1682354533.7559075 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_1682354533.7559075 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_1682354533.7559075 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_1682354533.7559075</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_1682354533.7559075 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
}