2017-07-03 16:40:00 +00:00
# [SOIL](https://github.com/gsi-upm/soil)
2017-01-19 11:45:39 +00:00
2023-04-14 17:53:31 +00:00
2017-06-20 15:45:43 +00:00
Soil is an extensible and user-friendly Agent-based Social Simulator for Social Networks.
Learn how to run your own simulations with our [documentation ](http://soilsim.readthedocs.io ).
2017-01-19 11:45:39 +00:00
2023-04-24 16:46:09 +00:00
Follow our [tutorial ](docs/tutorial/soil_tutorial.ipynb ) to develop your own agent models.
2017-01-19 11:45:39 +00:00
2023-04-14 17:56:44 +00:00
> **Warning**
2023-04-20 15:56:44 +00:00
> Soil 1.0 introduced many fundamental changes. Check the [documention on how to update your simulations to work with newer versions](docs/notes_v1.0.rst)
2022-11-13 19:31:05 +00:00
2023-04-14 17:53:31 +00:00
## Features
2022-11-13 19:31:05 +00:00
2023-04-14 17:53:31 +00:00
* Integration with (social) networks (through `networkx` )
* Convenience functions and methods to easily assign agents to your model (and optionally to its network):
* Following a given distribution (e.g., 2 agents of type `Foo` , 10% of the network should be agents of type `Bar` )
* Based on the topology of the network
2022-11-13 19:31:05 +00:00
* **Several types of abstractions for agents**:
* Finite state machine, where methods can be turned into a state
* Network agents, which have convenience methods to access the model's topology
* Generator-based agents, whose state is paused though a `yield` and resumed on the next step
* **Reporting and data collection**:
* Soil models include data collection and record some data by default (# of agents, state of each agent, etc.)
* All data collected are exported by default to a SQLite database and a description file
* Options to export to other formats, such as CSV, or defining your own exporters
* A summary of the data collected is shown in the command line, for easy inspection
* **An event-based scheduler**
* Agents can be explicit about when their next time/step should be, and not all agents run in every step. This avoids unnecessary computation.
* Time intervals between each step are flexible.
* There are primitives to specify when the next execution of an agent should be (or conditions)
* **Actor-inspired** message-passing
* A simulation runner (`soil.Simulation`) that can:
* Run models in parallel
* Save results to different formats
* Simulation configuration files
2023-04-14 17:56:44 +00:00
* A command line interface (`soil`), to quickly run simulations with different parameters
2022-11-13 19:31:05 +00:00
* An integrated debugger (`soil --debug`) with custom functions to print agent states and break at specific states
2023-04-14 17:53:31 +00:00
## Mesa compatibility
SOIL has been redesigned to integrate well with [Mesa ](https://github.com/projectmesa/mesa ).
2022-11-13 19:31:05 +00:00
For instance, it should be possible to run a `mesa.Model` models using a `soil.Simulation` and the `soil` CLI, or to integrate the `soil.TimedActivation` scheduler on a `mesa.Model` .
2023-04-14 17:53:31 +00:00
Note that some combinations of `mesa` and `soil` components, while technically possible, are much less useful or might yield surprising results.
For instance, you may add any `soil.agent` agent on a regular `mesa.Model` with a vanilla scheduler from `mesa.time` .
But in that case the agents will not get any of the advanced event-based scheduling, and most agent behaviors that depend on that may not work.
2022-11-13 19:31:05 +00:00
## Changes in version 0.3
2022-10-06 13:49:10 +00:00
Version 0.3 came packed with many changes to provide much better integration with MESA.
For a long time, we tried to keep soil backwards-compatible, but it turned out to be a big endeavour and the resulting code was less readable.
This translates to harder maintenance and a worse experience for newcomers.
In the end, we decided to make some breaking changes.
If you have an older Soil simulation, you have two options:
* Update the necessary configuration files and code. You may use the examples in the `examples` folder for reference, as well as the documentation.
* Keep using a previous `soil` version.
2021-10-15 18:15:17 +00:00
## Citation
2017-07-03 16:40:00 +00:00
If you use Soil in your research, don't forget to cite this paper:
```bibtex
@inbook {soil-gsi-conference-2017,
author = "S{\'a}nchez, Jes{\'u}s M. and Iglesias, Carlos A. and S{\'a}nchez-Rada, J. Fernando",
booktitle = "Advances in Practical Applications of Cyber-Physical Multi-Agent Systems: The PAAMS Collection",
doi = "10.1007/978-3-319-59930-4_19",
editor = "Demazeau Y., Davidsson P., Bajo J., Vale Z.",
isbn = "978-3-319-59929-8",
keywords = "soil;social networks;agent based social simulation;python",
month = "June",
organization = "PAAMS 2017",
pages = "234-245",
publisher = "Springer Verlag",
series = "LNAI",
title = "{S}oil: {A}n {A}gent-{B}ased {S}ocial {S}imulator in {P}ython for {M}odelling and {S}imulation of {S}ocial {N}etworks",
url = "https://link.springer.com/chapter/10.1007/978-3-319-59930-4_19",
volume = "10349",
year = "2017",
}
```
2017-01-19 11:45:39 +00:00
2021-10-15 18:15:17 +00:00
@Copyright GSI - Universidad Politécnica de Madrid 2017-2021
[![SOIL ](logo_gsi.png )](https://www.gsi.upm.es)