From cc238d84ec481b4e5544efdbd69253977541aa57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Fernando=20S=C3=A1nchez?= Date: Thu, 20 Apr 2023 17:56:44 +0200 Subject: [PATCH] Pre-release version of v1.0 --- CHANGELOG.md | 26 +- README.md | 2 +- docs/index.rst | 17 +- docs/installation.rst | 41 +- docs/{notes_v0.30.rst => notes_v1.0.rst} | 6 +- docs/output_21_0.png | Bin 7152 -> 0 bytes docs/output_30_0.png | Bin 0 -> 4858 bytes docs/output_34_0.png | Bin 0 -> 11636 bytes docs/output_49_0.png | Bin 0 -> 26744 bytes docs/output_50_0.png | Bin 0 -> 31608 bytes docs/output_54_0.png | Bin 14777 -> 0 bytes docs/output_54_1.png | Bin 14777 -> 0 bytes docs/output_55_0.png | Bin 14777 -> 0 bytes docs/output_55_1.png | Bin 14777 -> 0 bytes docs/output_55_2.png | Bin 16484 -> 0 bytes docs/output_55_3.png | Bin 16484 -> 0 bytes docs/output_55_4.png | Bin 15450 -> 0 bytes docs/output_55_5.png | Bin 15450 -> 0 bytes docs/output_55_6.png | Bin 16013 -> 0 bytes docs/output_55_7.png | Bin 16013 -> 0 bytes docs/output_55_8.png | Bin 15923 -> 0 bytes docs/output_55_9.png | Bin 15923 -> 0 bytes docs/output_56_0.png | Bin 13082 -> 0 bytes docs/output_56_1.png | Bin 13082 -> 0 bytes docs/output_56_2.png | Bin 13082 -> 0 bytes docs/output_56_3.png | Bin 13082 -> 0 bytes docs/output_56_4.png | Bin 13066 -> 0 bytes docs/output_56_5.png | Bin 13066 -> 0 bytes docs/output_56_6.png | Bin 13072 -> 0 bytes docs/output_56_7.png | Bin 13072 -> 0 bytes docs/output_56_8.png | Bin 13033 -> 0 bytes docs/output_56_9.png | Bin 13033 -> 0 bytes docs/output_61_0.png | Bin 15782 -> 0 bytes docs/output_63_1.png | Bin 14552 -> 0 bytes docs/output_66_1.png | Bin 14552 -> 0 bytes docs/output_67_1.png | Bin 5428 -> 0 bytes docs/output_72_0.png | Bin 17539 -> 0 bytes docs/output_72_1.png | Bin 17539 -> 0 bytes docs/output_74_1.png | Bin 16314 -> 0 bytes docs/output_75_1.png | Bin 11202 -> 0 bytes docs/output_76_1.png | Bin 19402 -> 0 bytes docs/quickstart.rst | 93 - docs/quickstart.yml | 33 - docs/soil_tutorial.rst | 3258 +++------ examples/events_and_messages/cars_sim.py | 21 +- examples/mesa/mesa_sim.py | 2 +- examples/mesa/server.py | 6 +- examples/newsspread/newsspread_sim.py | 4 +- examples/programmatic/programmatic_sim.py | 2 +- examples/pubcrawl/pubcrawl_sim.py | 4 +- examples/rabbits/rabbit_improved_sim.py | 2 +- examples/rabbits/rabbits_basic_sim.py | 2 +- examples/random_delays/random_delays_sim.py | 2 +- .../terrorism/TerroristNetworkModel_sim.py | 23 +- examples/tutorial/soil_tutorial.ipynb | 6141 +++++------------ requirements.txt | 3 +- soil/VERSION | 2 +- soil/__init__.py | 31 +- soil/agents/Geo.py | 4 +- soil/agents/__init__.py | 4 +- soil/agents/fsm.py | 8 +- soil/agents/network_agents.py | 13 +- soil/analysis.py | 49 + soil/datacollection.py | 6 +- soil/environment.py | 55 +- soil/exporters.py | 132 +- soil/serialization.py | 4 +- soil/simulation.py | 344 +- soil/time.py | 29 +- soil/utils.py | 12 +- tests/test_agents.py | 8 +- tests/test_config.py | 13 +- tests/test_examples.py | 13 +- tests/test_exporters.py | 90 +- tests/test_main.py | 43 +- 75 files changed, 3229 insertions(+), 7319 deletions(-) rename docs/{notes_v0.30.rst => notes_v1.0.rst} (92%) delete mode 100644 docs/output_21_0.png create mode 100644 docs/output_30_0.png create mode 100644 docs/output_34_0.png create mode 100644 docs/output_49_0.png create mode 100644 docs/output_50_0.png delete mode 100644 docs/output_54_0.png delete mode 100644 docs/output_54_1.png delete mode 100644 docs/output_55_0.png delete mode 100644 docs/output_55_1.png delete mode 100644 docs/output_55_2.png delete mode 100644 docs/output_55_3.png delete mode 100644 docs/output_55_4.png delete mode 100644 docs/output_55_5.png delete mode 100644 docs/output_55_6.png delete mode 100644 docs/output_55_7.png delete mode 100644 docs/output_55_8.png delete mode 100644 docs/output_55_9.png delete mode 100644 docs/output_56_0.png delete mode 100644 docs/output_56_1.png delete mode 100644 docs/output_56_2.png delete mode 100644 docs/output_56_3.png delete mode 100644 docs/output_56_4.png delete mode 100644 docs/output_56_5.png delete mode 100644 docs/output_56_6.png delete mode 100644 docs/output_56_7.png delete mode 100644 docs/output_56_8.png delete mode 100644 docs/output_56_9.png delete mode 100644 docs/output_61_0.png delete mode 100644 docs/output_63_1.png delete mode 100644 docs/output_66_1.png delete mode 100644 docs/output_67_1.png delete mode 100644 docs/output_72_0.png delete mode 100644 docs/output_72_1.png delete mode 100644 docs/output_74_1.png delete mode 100644 docs/output_75_1.png delete mode 100644 docs/output_76_1.png delete mode 100644 docs/quickstart.rst delete mode 100644 docs/quickstart.yml create mode 100644 soil/analysis.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bff290..b966489 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,19 +3,31 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.30 UNRELEASED] +## [1.0 UNRELEASED] + +Version 1.0 introduced multiple changes, especially on the `Simulation` class and anything related to how configuration is handled. +For an explanation of the general changes in version 1.0, please refer to the file `docs/notes_v1.0.rst`. + ### Added -* Simple debugging capabilities in `soil.debugging`, with a custom `pdb.Debugger` subclass that exposes commands to list agents and their status and set breakpoints on states (for FSM agents). Try it with `soil --debug ` -* Ability to run mesa simulations -* The `soil.exporters` module to export the results of datacollectors (model.datacollector) into files at the end of trials/simulations * A modular set of classes for environments/models. Now the ability to configure the agents through an agent definition and a topology through a network configuration is split into two classes (`soil.agents.BaseEnvironment` for agents, `soil.agents.NetworkEnvironment` to add topology). -* FSM agents can now have generators as states. They work similar to normal states, with one caveat. Only `time` values can be yielded, not a state. This is because the state will not change, it will be resumed after the yield, at the appropriate time. The return value *can* be a state, or a `(state, time)` tuple, just like in normal states. +* Environments now have a class method to make them easier to use without a simulation`.run`. Notice that this is different from `run_model`, which is an instance method. +* Ability to run simulations using mesa models +* The `soil.exporters` module to export the results of datacollectors (`model.datacollector`) into files at the end of trials/simulations +* Agents can now have generators as a step function or a state. They work similar to normal functions, with one caveat in the case of `FSM`: only `time` values (or None) can be yielded, not a state. This is because the state will not change, it will be resumed after the yield, at the appropriate time. The return value *can* be a state, or a `(state, time)` tuple, just like in normal states. +* Simulations can now specify a `matrix` with possible values for every simulation parameter. The final parameters will be calculated based on the `parameters` used and a cartesian product (i.e., all possible combinations) of each parameter. +* Simple debugging capabilities in `soil.debugging`, with a custom `pdb.Debugger` subclass that exposes commands to list agents and their status and set breakpoints on states (for FSM agents). Try it with `soil --debug ` ### Changed -* Configuration schema is very simplified +* Configuration schema (`Simulation`) is very simplified. All simulations should be checked +* Model / environment variables are expected (but not enforced) to be a single value. This is done to more closely align with mesa +* `Exporter.iteration_end` now takes two parameters: `env` (same as before) and `params` (specific parameters for this environment). We considered including a `parameters` attribute in the environment, but this would not be compatible with mesa. +* `num_trials` renamed to `iterations` +* General renaming of `trial` to `iteration`, to work better with `mesa` +* `model_parameters` renamed to `parameters` in simulation +* Simulation results for every iteration of a simulation with the same name are stored in a single `sqlite` database + ### Removed * Any `tsih` and `History` integration in the main classes. To record the state of environments/agents, just use a datacollector. In some cases this may be slower or consume more memory than the previous system. However, few cases actually used the full potential of the history, and it came at the cost of unnecessary complexity and worse performance for the majority of cases. - ## [0.20.7] ### Changed * Creating a `time.When` from another `time.When` does not nest them anymore (it returns the argument) diff --git a/README.md b/README.md index 65555b4..e3459a0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Learn how to run your own simulations with our [documentation](http://soilsim.re Follow our [tutorial](examples/tutorial/soil_tutorial.ipynb) to develop your own agent models. > **Warning** -> Mesa 0.30 introduced many fundamental changes. Check the [documention on how to update your simulations to work with newer versions](docs/notes_v0.30.rst) +> 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) ## Features diff --git a/docs/index.rst b/docs/index.rst index cd10280..b589c06 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,7 +1,20 @@ Welcome to Soil's documentation! ================================ -Soil is an Agent-based Social Simulator in Python focused on Social Networks. +Soil is an opinionated Agent-based Social Simulator in Python focused on Social Networks. + +.. image:: soil.png + :width: 80% + :align: center + +Soil can be installed through pip (see more details in the :doc:`installation` page): + +.. code:: bash + + pip install soil + + +To get started developing your own simulations and agent behaviors, check out our :doc:`Tutorial ` and the `examples on GitHub . If you use Soil in your research, do not forget to cite this paper: @@ -33,8 +46,6 @@ If you use Soil in your research, do not forget to cite this paper: :caption: Learn more about soil: installation - quickstart - configuration Tutorial .. diff --git a/docs/installation.rst b/docs/installation.rst index 5da4297..831e060 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -1,7 +1,10 @@ Installation ------------ -The easiest way to install Soil is through pip, with Python >= 3.4: +Through pip +=========== + +The easiest way to install Soil is through pip, with Python >= 3.8: .. code:: bash @@ -25,4 +28,38 @@ Or, if you're using using soil programmatically: import soil print(soil.__version__) -The latest version can be installed through `GitHub `_ or `GitLab `_. + + +Web UI +====== + +Soil also includes a web server that allows you to upload your simulations, change parameters, and visualize the results, including a timeline of the network. +To make it work, you have to install soil like this: + +.. code:: + + pip install soil[web] + +Once installed, the soil web UI can be run in two ways: + +.. code:: + + soil-web + + # OR + + python -m soil.web + + +Development +=========== + +The latest version can be downloaded from `GitHub `_ and installed manually: + +.. code:: bash + + git clone https://github.com/gsi-upm/soil + cd soil + python -m venv .venv + source .venv/bin/activate + pip install --editable . \ No newline at end of file diff --git a/docs/notes_v0.30.rst b/docs/notes_v1.0.rst similarity index 92% rename from docs/notes_v0.30.rst rename to docs/notes_v1.0.rst index 7367f66..9f83a9c 100644 --- a/docs/notes_v0.30.rst +++ b/docs/notes_v1.0.rst @@ -1,7 +1,7 @@ -What are the main changes between version 0.3 and 0.2? -###################################################### +What are the main changes in version 1.0? +######################################### -Version 0.3 is a major rewrite of the Soil system, focused on simplifying the API, aligning it with Mesa, and making it easier to use. +Version 1.0 is a major rewrite of the Soil system, focused on simplifying the API, aligning it with Mesa, and making it easier to use. Unfortunately, this comes at the cost of backwards compatibility. We drew several lessons from the previous version of Soil, and tried to address them in this version. diff --git a/docs/output_21_0.png b/docs/output_21_0.png deleted file mode 100644 index cce7e07f2953d92f43f07d875ea5c01fa68e7d81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7152 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 J3U1nj{4c!>7v}%~ literal 0 HcmV?d00001 diff --git a/docs/output_49_0.png b/docs/output_49_0.png new file mode 100644 index 0000000000000000000000000000000000000000..33928105fa50378f2874af7e63e0c71a1b4493d0 GIT binary patch literal 26744 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