mirror of
https://github.com/gsi-upm/soil
synced 2024-11-14 23:42:29 +00:00
2203 lines
236 KiB
Plaintext
2203 lines
236 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-10-19T12:41:48.007238Z",
|
||
"start_time": "2017-10-19T14:41:47.980725+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"# Soil Tutorial"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-02T16:44:14.120953Z",
|
||
"start_time": "2017-07-02T18:44:14.117152+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"## Introduction"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"cell_style": "center",
|
||
"collapsed": true,
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"This notebook is an introduction to the soil agent-based social network simulation framework.\n",
|
||
"It will focus on a specific use case: studying the propagation of disinformation through TV and social networks.\n",
|
||
"\n",
|
||
"\n",
|
||
"The steps we will follow are:\n",
|
||
"\n",
|
||
"* Cover some basics about simulations in Soil (environments, agents, etc.)\n",
|
||
"* Simulate a basic scenario with a single agent\n",
|
||
"* Add more complexity to our scenario\n",
|
||
"* Running the simulation using different configurations\n",
|
||
"* Analysing the results of each simulation\n",
|
||
"\n",
|
||
"The simulations in this tutorial will be kept simple, for the sake of clarity.\n",
|
||
"However, they provide all the building blocks necessary to model, run and analyse more complex scenarios."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-03T13:38:48.052876Z",
|
||
"start_time": "2017-07-03T15:38:48.044762+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"But before that, let's import the soil module and networkx."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-11-03T10:58:13.451481Z",
|
||
"start_time": "2017-11-03T11:58:12.643469+01:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from soil import *\n",
|
||
"from soil import analysis\n",
|
||
"import networkx as nx\n",
|
||
"\n",
|
||
"import matplotlib.pyplot as plt"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-03T13:41:19.788717Z",
|
||
"start_time": "2017-07-03T15:41:19.785448+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"## Basic concepts"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"There are two main elements in a soil simulation:\n",
|
||
" \n",
|
||
"* The **environment** or model. It assigns agents to nodes in the network, and stores the environment parameters (shared state for all agents).\n",
|
||
" - `soil.NetworkEnvironment` models also contain a network topology (accessible through through `self.G`). A simulation may use an existing NetworkX topology, or generate one on the fly. The `NetworkEnvironment` class is parameterized, which makes it easy to initialize environments with a variety of network topologies. **In this tutorial, we will manually add a network to each environment**.\n",
|
||
"* One or more **agents**. Agents are programmed with their individual behaviors, and they can communicate with the environment and with other agents. There are several types of agents, depending on their behavior and their capabilities. Some examples of built-in types of agents are:\n",
|
||
" - Network agents, which are linked to a node in the topology. They have additional methods to access their neighbors.\n",
|
||
" - FSM (Finite state machine) agents. Their behavior is defined in terms of states, and an agent will move from one state to another.\n",
|
||
" - Evented agents, an actor-based model of agents, which can communicate with one another through message passing.\n",
|
||
" - For convenience, a general `soil.Agent` class is provided, which inherits from Network, FSM and Evented at the same time.\n",
|
||
"\n",
|
||
"Soil provides several abstractions over events to make developing agents easier.\n",
|
||
"This means you can use events (timeouts, delays) in soil, but for the most part we will assume your models will be step-based o.\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-02T15:55:12.933978Z",
|
||
"start_time": "2017-07-02T17:55:12.930860+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"## Modeling behaviour"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-03T13:49:31.269687Z",
|
||
"start_time": "2017-07-03T15:49:31.257850+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"Our first step will be to model how every person in the social network reacts to hearing a piece of disinformation (news).\n",
|
||
"We will follow a very simple model based on a finite state machine.\n",
|
||
"\n",
|
||
"A person may be in one of two states: **neutral** (the default state) and **infected**.\n",
|
||
"A neutral person may hear about a piece of disinformation either on the TV (with probability **prob_tv_spread**) or through their friends.\n",
|
||
"Once a person has heard the news, they will spread it to their friends (with a probability **prob_neighbor_spread**).\n",
|
||
"Some users do not have a TV, so they will only be infected by their friends.\n",
|
||
"\n",
|
||
"The spreading probabilities will change over time due to different factors.\n",
|
||
"We will represent this variance using an additional agent which will not be a part of the social network."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"### Modelling Agents\n",
|
||
"\n",
|
||
"The following sections will cover the basics of developing agents in SOIL.\n",
|
||
"\n",
|
||
"For more advanced patterns, please check the **examples** folder in the repository."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"#### Basic agents"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-03T14:03:07.171127Z",
|
||
"start_time": "2017-07-03T16:03:07.165779+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"The most basic agent in Soil is ``soil.BaseAgent``.\n",
|
||
"These agents implement their behavior by overriding the `step` method, which will be run in every simulation step.\n",
|
||
"Only one agent will be running at any given time, and it will be doing so until the `step` function returns.\n",
|
||
"\n",
|
||
"Agents can access their environment through their ``self.model`` attribute.\n",
|
||
"This is most commonly used to get access to the environment parameters and methods.\n",
|
||
"Here is a simple example of an agent:\n",
|
||
"\n",
|
||
"\n",
|
||
"```python\n",
|
||
"class ExampleAgent(BaseAgent):\n",
|
||
" def init(self):\n",
|
||
" self.is_infected = False\n",
|
||
" self.steps_neutral = 0\n",
|
||
" \n",
|
||
" def step(self):\n",
|
||
" # Implement agent logic\n",
|
||
" if self.is_infected:\n",
|
||
" ... # Do something, like infecting other agents\n",
|
||
" return self.die(\"No need to do anything else\") # Stop forever\n",
|
||
" else:\n",
|
||
" ... # Do something\n",
|
||
" self.steps_neutral += 1\n",
|
||
" if self.steps_neutral > self.model.max_steps_neutral:\n",
|
||
" self.is_infected = True\n",
|
||
"```\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"Any kind of agent behavior can be implemented with this `step` function.\n",
|
||
"dead, it has two main drawbacks: 1) complex behaviors can get difficult both write and understand; 2) these behaviors are not composable."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-03T14:03:07.171127Z",
|
||
"start_time": "2017-07-03T16:03:07.165779+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"#### FSM agents\n",
|
||
"\n",
|
||
"One way to solve both issues is to model agents as **[Finite-state Machines](https://en.wikipedia.org/wiki/Finite-state_machine)** (FSM, for short).\n",
|
||
"FSM define a series of possible states for the agent, and changes between these states.\n",
|
||
"These states can be modelled and extended independently.\n",
|
||
"\n",
|
||
"This is modelled in Soil through the `soil.FSM` class.\n",
|
||
"Agents that inherit from ``soil.FSM`` do not need to specify a ``step`` method.\n",
|
||
"Instead, we describe each finite state with a function.\n",
|
||
"To change to another state, a function may return the new state, or the ``id`` of a state.\n",
|
||
"If no state is returned, the state remains unchanged.\n",
|
||
"\n",
|
||
"The current state of the agent can be checked with ``agent.state_id``.\n",
|
||
"That state id can be used to look for other agents in that specific state.\n",
|
||
"\n",
|
||
"Our previous example could be expressed like this:\n",
|
||
"\n",
|
||
"```python\n",
|
||
"class FSMExample(FSM):\n",
|
||
"\n",
|
||
" def init(self):\n",
|
||
" self.steps_neutral = 0\n",
|
||
" \n",
|
||
" @state(default=True)\n",
|
||
" def neutral(self):\n",
|
||
" ... # Do something\n",
|
||
" self.steps_neutral += 1\n",
|
||
" if self.steps_neutral > self.model.max_steps_neutral:\n",
|
||
" return self.infected # Change state\n",
|
||
"\n",
|
||
" @state\n",
|
||
" def infected(self):\n",
|
||
" ... # Do something\n",
|
||
" return self.die(\"No need to do anything else\")\n",
|
||
"```"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"#### Async agents\n",
|
||
"\n",
|
||
"Another design pattern that can be very useful in some cases is to model each step (or a specific state) using asynchronous functions (and the `await` keyword).\n",
|
||
"Asynchronous functions will be paused on `await`, and resumed at a later step from the same point.\n",
|
||
"\n",
|
||
"The following agent will do something for `self.model.max_steps` and then stop forever.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"```python\n",
|
||
"class AsyncExample(BaseAgent):\n",
|
||
" async def step(self):\n",
|
||
" for i in range(self.model.max_steps):\n",
|
||
" self.do_something()\n",
|
||
" await self.delay() # Signal the scheduler that this agent is done for now\n",
|
||
" return self.die(\"No need to do anything else\") \n",
|
||
"```\n",
|
||
"\n",
|
||
"Notice that this trivial example could be implemented with a regular `step` and an attribute with the counts of times the agent has run so far.\n",
|
||
"By using an `async` we avoid complicating the logic of our function or adding spurious attributes."
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"#### Telling the scheduler when to wake up an agent\n",
|
||
"\n",
|
||
"By default, every agent will be called in every simulation step, and the time elapsed between two steps is controlled by the `interval` attribute in the environment.\n",
|
||
"\n",
|
||
"But agents may signal the scheduler how long to wait before calling them again by returning a value other than `None` or using `await` in asynchronous functions.\n",
|
||
"This is especially useful when an agent is going to be dormant for a long time.\n",
|
||
"There are two convenience methods to calculate the value to return: `Agent.delay`, which takes a time delay; and `Agent.at`, which takes an absolute time at which the agent should be awaken.\n",
|
||
"A return value of `None` will default to a wait of 1 unit of time.\n",
|
||
"Both `Agent.at` and `Agent.delay` can be awaited in async functions.\n",
|
||
"\n",
|
||
"When an `FSM` agent returns, it may signal two things: how long to wait, and a state to transition to.\n",
|
||
"This can be done by using the `delay` and `at` methods of each state."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-02T12:22:53.931963Z",
|
||
"start_time": "2017-07-02T14:22:53.928340+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"### Environment agents"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"In our simulation, we need a way to model how TV broadcasts news, and those that have a TV are susceptible to it.\n",
|
||
"We will only model one very viral TV broadcast, which we will call an `event`, which has a high chance of infecting users with a TV.\n",
|
||
"\n",
|
||
"\n",
|
||
"There are several ways to model this behavior.\n",
|
||
"We will do it with an Environment Agent.\n",
|
||
"Environment agents are regular agents that interact with the environment but are invisible to other agents."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-11-03T10:58:17.653736Z",
|
||
"start_time": "2017-11-03T11:58:17.612944+01:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import logging\n",
|
||
"\n",
|
||
"class EventGenerator(BaseAgent):\n",
|
||
" level = logging.INFO\n",
|
||
" \n",
|
||
" async def step(self):\n",
|
||
" # Do nothing until the time of the event\n",
|
||
" await self.at(self.model.event_time)\n",
|
||
" self.info(\"TV event happened\")\n",
|
||
" self.model.prob_tv_spread = 0.5\n",
|
||
" self.model.prob_neighbor_spread *= 2\n",
|
||
" self.model.prob_neighbor_spread = min(self.model.prob_neighbor_spread, 1)\n",
|
||
" await self.delay()\n",
|
||
" self.model.prob_tv_spread = 0\n",
|
||
"\n",
|
||
" while self.alive:\n",
|
||
" self.model.prob_neighbor_spread = self.model.prob_neighbor_spread * self.model.neighbor_factor\n",
|
||
" if self.model.prob_neighbor_spread < 0.01:\n",
|
||
" return self.die(\"neighbors can no longer spread the rumour\")\n",
|
||
" await self.delay()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"### Environment (Model)\n",
|
||
"\n",
|
||
"Let's define a environment model to test our event generator agent.\n",
|
||
"This environment will have a single agent (the event generator).\n",
|
||
"We will also tell the environment to save the value of `prob_tv_spread` after every step:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"class NewsEnvSimple(Environment):\n",
|
||
" \n",
|
||
" # Here we set the default parameters for our model\n",
|
||
" # We will be able to override them on a per-simulation basis\n",
|
||
" prob_tv_spread = 0.1\n",
|
||
" prob_neighbor_spread = 0.1\n",
|
||
" event_time = 10\n",
|
||
" neighbor_factor = 0.9\n",
|
||
"\n",
|
||
" \n",
|
||
" # This function initializes the model. It is run right at the end of the `__init__` function.\n",
|
||
" def init(self):\n",
|
||
" self.add_model_reporter(\"prob_tv_spread\")\n",
|
||
" self.add_agent(EventGenerator)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"Once the environment has been defined, we can quickly run our simulation through the `run` method on NewsEnv:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "6f87549b81a84699900e5398ba5df413",
|
||
"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": "27ce4ef734f6465f8a8cddd09a82aa1d",
|
||
"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.0</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>10.0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>11.0</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>12.0</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13.0</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>14.0</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 0 1 0.1\n",
|
||
"10.0 1 1 0.1\n",
|
||
"11.0 2 1 0.5\n",
|
||
"12.0 3 1 0.0\n",
|
||
"13.0 4 1 0.0\n",
|
||
"14.0 5 1 0.0"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"it = NewsEnvSimple.run(iterations=1, max_time=14)\n",
|
||
"\n",
|
||
"it[0].model_df()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"As we can see, the event occurred right after `t=10`, so by `t=11` the value of `prob_tv_spread` was already set to `0.5`.\n",
|
||
"\n",
|
||
"You may notice nothing happened between `t=0` and `t=1`.\n",
|
||
"That is because there aren't any other agents in the simulation, and our event generator explicitly waited until `t=10`."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"### Network agents"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-07-03T14:03:07.171127Z",
|
||
"start_time": "2017-07-03T16:03:07.165779+02:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"In our disinformation scenario, we will model our agents as a FSM with two states: ``neutral`` (default) and ``infected``.\n",
|
||
"\n",
|
||
"Here's the code:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2017-11-03T10:58:16.051690Z",
|
||
"start_time": "2017-11-03T11:58:16.006044+01:00"
|
||
},
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"class NewsSpread(Agent):\n",
|
||
" has_tv = False\n",
|
||
" infected_by_friends = False\n",
|
||
" \n",
|
||
" # The state decorator is used to define the states of the agent\n",
|
||
" @state(default=True)\n",
|
||
" def neutral(self):\n",
|
||
" # The agent might have been infected by their infected friends since the last time they were checked\n",
|
||
" if self.infected_by_friends:\n",
|
||
" # Automatically transition to the infected state\n",
|
||
" return self.infected\n",
|
||
" # If the agent has a TV, they might be infected by the evenn\n",
|
||
" if self.has_tv:\n",
|
||
" if self.prob(self.model.prob_tv_spread):\n",
|
||
" return self.infected\n",
|
||
" \n",
|
||
" @state\n",
|
||
" def infected(self):\n",
|
||
" for neighbor in self.iter_neighbors(state_id=self.neutral.id):\n",
|
||
" if self.prob(self.model.prob_neighbor_spread):\n",
|
||
" neighbor.infected_by_friends = True\n",
|
||
" return self.delay(7) # Wait for 7 days before trying to infect their friends again"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"We can check that our states are well defined:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"['dead', 'neutral', 'infected']"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"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",
|
||
" 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": "a0ec3c65dc1f43cbac69d651ba4a1d52",
|
||
"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": "c8c077d73a5c4c868cb30c43fdc5120c",
|
||
"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.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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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.0</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 0 6 0.0 0.100000\n",
|
||
"1.0 1 6 0.0 0.100000\n",
|
||
"2.0 2 6 0.0 0.100000\n",
|
||
"3.0 3 6 0.0 0.100000\n",
|
||
"4.0 4 6 0.0 0.100000\n",
|
||
"5.0 5 6 0.0 0.100000\n",
|
||
"6.0 6 6 0.0 0.100000\n",
|
||
"7.0 7 6 0.0 0.100000\n",
|
||
"8.0 8 6 0.0 0.100000\n",
|
||
"9.0 9 6 0.0 0.100000\n",
|
||
"10.0 10 6 0.0 0.100000\n",
|
||
"11.0 11 6 0.5 0.200000\n",
|
||
"12.0 12 6 0.0 0.180000\n",
|
||
"13.0 13 6 0.0 0.162000\n",
|
||
"14.0 14 6 0.0 0.145800\n",
|
||
"15.0 15 6 0.0 0.131220\n",
|
||
"16.0 16 6 0.0 0.118098\n",
|
||
"17.0 17 6 0.0 0.106288\n",
|
||
"18.0 18 6 0.0 0.095659\n",
|
||
"19.0 19 6 0.0 0.086093\n",
|
||
"20.0 20 6 0.0 0.077484"
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"it = NewsEnvNetwork.run(max_time=20)\n",
|
||
"it[0].model_df()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"source": [
|
||
"In this case, notice that the inclusion of other agents (which run every step) means that the simulation did not skip to `t=10`.\n",
|
||
"\n",
|
||
"Now, let's look at the state of our agents in every step:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"No agent dataframe provided and no agent reporters found. Skipping agent plot.\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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JCuGESIiIpIVwwgRERHJimGEiIiIZMUwQkRERLJiGCEiIiJZMYwQERGRrByeDl4Olkli8/PzZS4JERER2cvyvV3bZO+qCCMFBQUAgLCwMJlLQkRERI4qKChAQEBAtZ+rYm0as9mMixcvws/PDxqNxmnnzc/PR1hYGM6fP++2a964+z3y/tTP3e+R96d+7n6Prrw/IQQKCgoQGhpqs4juzVRRM6LVatGmTRuXnd/f398t/4JV5u73yPtTP3e/R96f+rn7Pbrq/mqqEbFgB1YiIiKSFcMIERERyapRhxG9Xo+5c+dCr9fLXRSXcfd75P2pn7vfI+9P/dz9HpVwf6rowEpERETuq1HXjBAREZH8GEaIiIhIVgwjREREJCuGESIiIpKV24eRFStWIDw8HAaDAbGxsTh48GCN+2/evBldu3aFwWBAz5498eWXXzZQSR2XnJyMfv36wc/PDy1btsSoUaNw6tSpGo9Zt24dNBqNzWYwGBqoxI555ZVXbilr165dazxGTc8PAMLDw2+5R41Gg2nTplW5v9Kf37fffov7778foaGh0Gg02Lp1q83nQgjMmTMHrVq1gre3N+Lj4/Hrr7/Wel5Hf49dpab7KysrwwsvvICePXuiSZMmCA0Nxbhx43Dx4sUaz1mXv+euVNsznDBhwi3lHT58eK3nVcMzBFDl76NGo8GiRYuqPaeSnqE93wslJSWYNm0amjdvDl9fXzz00EPIycmp8bx1/d21l1uHkU2bNiEpKQlz585FRkYGevfujWHDhuHy5ctV7r9//36MGTMGkyZNwuHDhzFq1CiMGjUKP//8cwOX3D579+7FtGnTcODAAezatQtlZWUYOnQorl+/XuNx/v7+uHTpknU7d+5cA5XYcd27d7cp6/fff1/tvmp7fgDw448/2tzfrl27AAD/93//V+0xSn5+169fR+/evbFixYoqP3/99dfx5ptvYtWqVfjhhx/QpEkTDBs2DCUlJdWe09HfY1eq6f6KioqQkZGB2bNnIyMjA5999hlOnTqFkSNH1npeR/6eu1ptzxAAhg8fblPef/3rXzWeUy3PEIDNfV26dAlr1qyBRqPBQw89VON5lfIM7fleeO655/Cf//wHmzdvxt69e3Hx4kU8+OCDNZ63Lr+7DhFurH///mLatGnW1yaTSYSGhork5OQq93/kkUfEfffdZ/NebGys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",
|
||
"text/plain": [
|
||
"<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.1\n",
|
||
" prob_tv_spread = 0\n",
|
||
" prob_neighbor_spread = 0.1\n",
|
||
" event_time = 10\n",
|
||
" neighbor_factor = 0.5\n",
|
||
" generator = \"erdos_renyi_graph\"\n",
|
||
" n = 100\n",
|
||
"\n",
|
||
" def init(self):\n",
|
||
" self.add_agent(EventGenerator)\n",
|
||
" opts = {\"n\": self.n}\n",
|
||
" if self.generator == \"erdos_renyi_graph\":\n",
|
||
" opts[\"p\"] = 0.05\n",
|
||
" elif self.generator == \"barabasi_albert_graph\":\n",
|
||
" opts[\"m\"] = 2\n",
|
||
" self.create_network(generator=self.generator, **opts)\n",
|
||
"\n",
|
||
" self.populate_network([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', lambda a: getattr(a, \"state_id\", None))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"This time, we set `dump=True` because we want to store our results to a database, so that we can later analyze them.\n",
|
||
"\n",
|
||
"But since we do not care about existing results in the database, we will also set`overwrite=True`."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {
|
||
"hideCode": false,
|
||
"hidePrompt": false
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[INFO ][17:13:25] 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": "a464d1f51eb44e02bf1a686cd7fa6c6e",
|
||
"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": "6fd9e62306a843a9a9d7e62299d0ed5d",
|
||
"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": "5b78dc37d1b04ea59b8047f92be52d08",
|
||
"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": "34aa57dae29f4e39a424fdb4a81eb082",
|
||
"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": "861293f830944ef2816dab34753eb7ce",
|
||
"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": "fdeb39e180ee443e8d3ee4cf38622691",
|
||
"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": "f18cfb2d7148469b8274f0ba4678ac21",
|
||
"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": "8d026960ec51460095d9453c6aaf42e4",
|
||
"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": "aad1914202cd4dec99658d703a20e040",
|
||
"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": "dc32f62b2d65413d9582f8a0da23c1fe",
|
||
"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": "78d7c50814394e47bc0b06c065e785ac",
|
||
"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.sqlite\n",
|
||
"\n",
|
||
"1 directory, 1 file\n",
|
||
"4.5M\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": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAADI4ElEQVR4nOzdd3gUVdvA4d+W7Kb3BiEQOoRO6BZaMKAiKKLiq0hVFFBAVHhVUEADKk1FsQKCFUTk/QBpUqQLCFJClRBKCi092TrfH5ENSzokbMpzX9deZmfOzHlmMZlnzzlzjkpRFAUhhBBCCAdROzoAIYQQQlRtkowIIYQQwqEkGRFCCCGEQ0kyIoQQQgiHkmRECCGEEA4lyYgQQgghHEqSESGEEEI4lCQjQgghhHAoSUaEEEII4VCSjAjhYG+99RYqlcohdf/555906tQJNzc3VCoVBw4cyLfc5s2bUalUbN68+ZbqSUxM5NFHH8XPzw+VSsWcOXNuOeY77XavXQhRNElGhLjJwoULUalUtpdWqyUkJIRBgwZx4cKFWzpnZmYmb731Vrm6oZlMJvr378/Vq1eZPXs2ixcvplatWmVS19ixY1m7di0TJ05k8eLF9OzZs9TrePfdd1mxYkWpn1cIUfa0jg5AiPJqypQp1K5dm+zsbHbt2sXChQvZtm0bhw8fxtnZuUTnyszM5O233wagS5cudvveeOMNJkyYUFphF9vp06c5e/YsX3zxBcOGDSu07L333ktWVhY6ne6W6vr999/p06cP48ePv6Xji+Pdd9/l0UcfpW/fvmVWhxCibEgyIkQBevXqRZs2bQAYNmwY/v7+zJgxg5UrV/LYY4+VWj1arRat9s7/KiYlJQHg7e1dZFm1Wl3iBOzmuopTj7h9VqsVo9F4W/9eQtxp0k0jRDHdc889QE6LwnVGo5FJkyYRERGBl5cXbm5u3HPPPWzatMlWJjY2loCAAADefvttW/fPW2+9BeQ/ZsRsNjN16lTq1q2LXq8nLCyM//73vxgMhmLF+vvvv3PPPffg5uaGt7c3ffr0ISYmxrZ/0KBBdO7cGYD+/fujUqnytNjcKL9xE126dKFp06YcPXqUrl274urqSkhICO+9956tzPUuL0VRmDdvnu3ar0tOTmbMmDGEhoai1+upV68eM2bMwGq12tVvtVqZO3cuzZo1w9nZmYCAAHr27MnevXsBUKlUZGRksGjRIlsdgwYNsh1/4cIFhgwZQlBQEHq9niZNmvD111/nuc7z58/Tt29f3NzcCAwMZOzYscX+zAcNGkRYWFie7fn9+65fv567774bb29v3N3dadiwIf/973/tyhgMBiZPnky9evXQ6/WEhoby6quv5olHpVIxatQovv32W5o0aYJer+e3334D4IcffiAiIgIPDw88PT1p1qwZc+fOLdb1CHEnScuIEMUUGxsLgI+Pj21bamoqX375JQMGDGD48OGkpaXx1VdfERUVxZ49e2jZsiUBAQF8+umnPP/88zz88MM88sgjADRv3rzAuoYNG8aiRYt49NFHefnll9m9ezfR0dHExMTwyy+/FBrnhg0b6NWrF3Xq1OGtt94iKyuLjz76iLvuuov9+/cTFhbGc889R0hICO+++y4vvvgibdu2JSgoqMSfybVr1+jZsyePPPIIjz32GMuWLeO1116jWbNm9OrVi3vvvZfFixfz9NNP06NHDwYOHGg7NjMzk86dO3PhwgWee+45atasyY4dO5g4cSLx8fF2g1yHDh3KwoUL6dWrF8OGDcNsNvPHH3+wa9cu2rRpw+LFixk2bBjt2rXj2WefBaBu3bpAzuDZDh062G7aAQEBrFmzhqFDh5KamsqYMWMAyMrKonv37sTFxfHiiy9SvXp1Fi9ezO+//17iz6UwR44c4cEHH6R58+ZMmTIFvV7PqVOn2L59u62M1WrloYceYtu2bTz77LM0btyYQ4cOMXv2bE6cOJFnbMzvv//OTz/9xKhRo/D39ycsLIz169czYMAAunfvzowZMwCIiYlh+/btvPTSS6V6TULcNkUIYWfBggUKoGzYsEG5dOmScu7cOWXZsmVKQECAotfrlXPnztnKms1mxWAw2B1/7do1JSgoSBkyZIht26VLlxRAmTx5cp76Jk+erNz4q3jgwAEFUIYNG2ZXbvz48Qqg/P7774XG37JlSyUwMFC5cuWKbdvBgwcVtVqtDBw40LZt06ZNCqAsXbq08A/khrKbNm2ybevcubMCKN98841tm8FgUIKDg5V+/frZHQ8oI0eOtNs2depUxc3NTTlx4oTd9gkTJigajUaJi4tTFEVRfv/9dwVQXnzxxTxxWa1W289ubm7KM888k6fM0KFDlWrVqimXL1+22/7EE08oXl5eSmZmpqIoijJnzhwF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QY/etfA1aXZc3EF8RjyeOk961OqRZ3/8mpMApJGFV5P6efaXlhMnpnHy5DRijr1WZnUIIW5fhw4d7FopO3bsyMmTJ7H82527b98+evfuTc2aNfHw8KBz584AeVo42rRpY/c+PT2d8ePH07hxY7y9vXF3dycmJibPcR07dszzPiYmxvZ+w4YNdO/enZCQEDw8PHj66ae5cuUKmZmZALz44otMmzaNu+66i8mTJ/P333/f0udgsViYOnUqzZo1w9fXF3d3d9auXZsn3psVFv/BgwdJT0/Hz88Pd3d32+vMmTOcPn3adkytWrXsEpGqSlpGyrmsy+dBB55hjYosW9jAVavFgibZA9Sgq1V240YuX95EQuIKQE2NGgPLrB4hyrtn53YucJ/qpq+BQ96/p+CyN/VoDnyn0+2EVWwZGRlERUURFRXFt99+S0BAAHFxcURFReUZaOnm5mb3fvz48axfv54PPviAevXq4eLiwqOPPlqiAZqxsbE8+OCDPP/887zzzjv4+vqybds2hg4ditFoxNXVlWHDhhEVFcWqVatYt24d0dHRzJw5k9GjR5foWt9//33mzp3LnDlzbGNUxowZU+IBpTdKT0+nWrVqbN68Oc8+b29v2883f3ZlLTg4mMTERLttiYmJZdIKUxKSjJRjSXHnyXJSABUtHu5baFm7gav5zS2yZheuai1mRaHGYx3KINqcBe2OHX8DgJqhg/HybFHEEUJUXk764k8oWFZli7J7926797t27aJ+/fpoNBqOHTvGlStXmD59um3Mwt69e4t13u3btzNo0CAefvhhIOfGnN8gzF27duV537hxzlIP+/btw2q1MnPmTNTqnOztp59+ynOO0NBQRowYwYgRI5g4cSJffPFFiZOR7du306dPH5566ikArFYrJ06cIDw8vNDjCou/devWJCQkoNVqCQsLK1E8Op3O1jpV2jp27MjGjRvtusDWr1+fp5XnTpNumnJsx+LvUVQq9CYr4XcVPuZixakVWBQLrQNbU9e7bp7913ZfAyBDm4azv2+ZxHvy1HQMhgRcXGpRp87YMqlDCFF64uLiGDduHMePH+f777/no48+4qWXXgKgZs2a6HQ6PvroI/755x9WrlzJ1KlTi3Xe+vXr2wZkHjx4kCeffBKrNe+YmO3bt/Pee+9x4sQJ5s2bx9KlS23116tXD5PJZKt/8eLF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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></th>\n",
|
||
" <th>index</th>\n",
|
||
" <th>n</th>\n",
|
||
" <th>generator</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></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_1683213205.589173</th>\n",
|
||
" <th rowspan=\"5\" valign=\"top\">ff1d24a</th>\n",
|
||
" <th>0</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>100</td>\n",
|
||
" <td>erdos_renyi_graph</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>100</td>\n",
|
||
" <td>erdos_renyi_graph</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>100</td>\n",
|
||
" <td>erdos_renyi_graph</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>100</td>\n",
|
||
" <td>erdos_renyi_graph</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>100</td>\n",
|
||
" <td>erdos_renyi_graph</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" index n \\\n",
|
||
"simulation_id params_id iteration_id \n",
|
||
"newspread_1683213205.589173 ff1d24a 0 0 100 \n",
|
||
" 1 0 100 \n",
|
||
" 2 0 100 \n",
|
||
" 3 0 100 \n",
|
||
" 4 0 100 \n",
|
||
"\n",
|
||
" generator \\\n",
|
||
"simulation_id params_id iteration_id \n",
|
||
"newspread_1683213205.589173 ff1d24a 0 erdos_renyi_graph \n",
|
||
" 1 erdos_renyi_graph \n",
|
||
" 2 erdos_renyi_graph \n",
|
||
" 3 erdos_renyi_graph \n",
|
||
" 4 erdos_renyi_graph \n",
|
||
"\n",
|
||
" prob_neighbor_spread \n",
|
||
"simulation_id params_id iteration_id \n",
|
||
"newspread_1683213205.589173 ff1d24a 0 0 \n",
|
||
" 1 0 \n",
|
||
" 2 0 \n",
|
||
" 3 0 \n",
|
||
" 4 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_1683213205.589173</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>[\"<class 'soil.exporters.SQLite'>\"]</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 × 28 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" index version source_file name description \\\n",
|
||
"simulation_id \n",
|
||
"newspread_1683213205.589173 0 2 None newspread \n",
|
||
"\n",
|
||
" group backup overwrite dry_run dump ... \\\n",
|
||
"simulation_id ... \n",
|
||
"newspread_1683213205.589173 None False True False True ... \n",
|
||
"\n",
|
||
" num_processes \\\n",
|
||
"simulation_id \n",
|
||
"newspread_1683213205.589173 1 \n",
|
||
"\n",
|
||
" exporters \\\n",
|
||
"simulation_id \n",
|
||
"newspread_1683213205.589173 [\"<class 'soil.exporters.SQLite'>\"] \n",
|
||
"\n",
|
||
" model_reporters agent_reporters tables \\\n",
|
||
"simulation_id \n",
|
||
"newspread_1683213205.589173 {} {} {} \n",
|
||
"\n",
|
||
" outdir \\\n",
|
||
"simulation_id \n",
|
||
"newspread_1683213205.589173 /mnt/data/home/j/git/lab.gsi/soil/soil/docs/tu... \n",
|
||
"\n",
|
||
" exporter_params level skip_test debug \n",
|
||
"simulation_id \n",
|
||
"newspread_1683213205.589173 {} 20 False False \n",
|
||
"\n",
|
||
"[1 rows x 28 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>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>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\">ff1d24a</th>\n",
|
||
" <th rowspan=\"5\" valign=\"top\">0</th>\n",
|
||
" <th>0</th>\n",
|
||
" <td>101</td>\n",
|
||
" <td>0.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.0</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.0</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.0</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" agent_count time prob_tv_spread \\\n",
|
||
"params_id iteration_id step \n",
|
||
"ff1d24a 0 0 101 0.0 0.0 \n",
|
||
" 1 101 1.0 0.0 \n",
|
||
" 2 101 2.0 0.0 \n",
|
||
" 3 101 3.0 0.0 \n",
|
||
" 4 101 4.0 0.0 \n",
|
||
"\n",
|
||
" prob_neighbor_spread \n",
|
||
"params_id iteration_id step \n",
|
||
"ff1d24a 0 0 0.0 \n",
|
||
" 1 0.0 \n",
|
||
" 2 0.0 \n",
|
||
" 3 0.0 \n",
|
||
" 4 0.0 "
|
||
]
|
||
},
|
||
"execution_count": 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>state_id</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\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\">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",
|
||
"params_id iteration_id step agent_id \n",
|
||
"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
|
||
}
|