Skip to content

Releases: projectmesa/mesa

v2.2.0

09 Jan 10:32
Compare
Choose a tag to compare

Highlights

The 2.2.0 release of the Mesa library introduces several updates and new features for managing and scheduling agents and modelling the environment, along with an experimental release policy aimed at enhancing development speed and community feedback. Below are key highlights of the new (experimental) features in this release. Mesa 2.2.0 supports Python 3.9+.

Despite the minor version number, this is one of our biggest releases yet.

Experimental feature policy (discussion #1909)

This release introduces an experimental feature policy aimed at accelerating development and gathering community feedback. Features like #1890, #1898, and #1916 are marked as experimental under this policy.

Policy overview:

  • Experimental features can be added or changed in any release, even patch releases.
  • They don’t need a diligent review for every change, allowing for quicker development cycles.
  • Community feedback is encouraged through discussion threads.

Native support for multiple Agent types (PR #1894)

This update introduces a agents variable to the Mesa Model class, offering a first step in supporting multiple agent types as first class citizens. Each Model is now initialized with an self.agents variable (an AgentSet) in which all the agents are tracked. You can now always ask which agents are in the model with model.agents. It's the foundation which will allow us to solve problems with scheduling, data collection and visualisation of multiple agent types in the future.

🧪 AgentSet class (PR #1916)

The new AgentSet class encapsulates and manages collections of agents, streamlining the process of selecting, sorting, and applying actions to groups of agents.

Key features:

  • Flexible and efficient agent management and manipulation.
  • Methods like select, shuffle, sort, and do for intuitive operations.

Example:

# Applying a method to each agent
model.agents.do('step')

# Filtering and shuffling agents
shuffled_agents = model.agents.select(lambda agent: agent.attribute > threshold).shuffle()

The AgentSet is an experimental feature. We would love feedback on it in #1919.

🧪 PropertyLayer and _PropertyGrid (PR #1898)

The introduction of PropertyLayer and the extension of SingleGrid and MultiGrid classes to support cell properties mark a significant enhancement in Mesa's environmental modeling capabilities. It allows to add different layers of variables to grids, that can be used to represent spatial environmental properties, such as elevation, pollution, flood levels or foliage.

Key features:

  • Efficient management of environmental properties like terrain types and resources.
  • Dynamic interaction between agents and their environment.
  • Fast modification and selection of cells based on one or multiple properties

Example:

from mesa.space import SingleGrid, PropertyLayer

grid = SingleGrid(10, 10, False)
property_layer = PropertyLayer("elevation", 10, 10, default_value=0)
grid.add_property_layer(property_layer)

# Modify multiple cells values
grid.properties["elevation"].modify_cells(np.multiply, 2)

# Select cells that have an elevation of at least 50
high_elevation_cells = grid.properties["elevation"].select_cells(condition=lambda x: x > 50)

The PropertyLayer is an experimental feature. We would love feedback on it in #1932.

🧪 DiscreteEventScheduler (PR #1890)

The DiscreteEventScheduler is an innovative addition to the Mesa time module, tailored for discrete event simulations. This scheduler advances simulations based on specific event timings rather than regular intervals, providing more flexibility in modeling complex systems.

Key Features:

  • Efficient handling of events scheduled for specific simulation times.
  • Randomized execution order for events scheduled at the same time.

The DiscreteEventScheduler is an experimental feature. We would love feedback on it in #1923.

What's Changed

🧪 Experimental features

🎉 New features added

🛠 Enhancements made

  • Reimplement schedulers to use AgentSet by @quaquel in #1926
  • space: Let move_agent choose from multiple positions by @EwoutH in #1920

🐛 Bugs fixed

  • Work around for initializing model._agent by @quaquel in #1928
  • Honor disabled space drawer option when rendering in the browser by @rlskoeser in #1907

📜 Documentation improvements

  • Document empties property by @EwoutH in #1888
  • docs: Fix README.md inline code formatting by @rht in #1887

🔧 Maintenance

  • ci: Speed up pip install by caching deps install output by @rht in #1885
  • Create release.yml file for automatic release notes generation by @EwoutH in #1925
  • Drop support for Python 3.8 by @rht in #1756

New Contributors

Full Changelog: v2.1.5...v2.2.0

v2.1.5

07 Nov 12:31
Compare
Choose a tag to compare

2.1.5 (2023-11-26)

This release has some critical fixes to JupyterViz/Solara frontend to prevent
flickering and improve the display of the jupyter plots. It also has
improvements to datacollection and the documentation.

Improvements

  • datacollection: check if model reporters is a partial function (#1872)

Docs and Tutorial

  • docs: convert README from .rst to .md (#1881)
  • docs: convert HISTORY from .rst to .md (#1873)
  • docs: enhance docstrings for scheduler classes in mesa.time (#1866)

CI and WorkFlows

  • ci: Remove redundant Ruff workflow from GitHub Actions (#1880)
  • Replace Black with ruff format (#1880)
  • Migrate setup from setup.py to pyproject.toml (#1870)

Solara/JupyterViz

  • fix: Do render_in_jupyter on Colab env (#1884)
  • Convert make_space into Solara component (#1877)
  • remove controls for dragging and resizing (#1878)
  • Improve ColorCard layout (#1876)
  • refactor: Define current_step as reactive (#1875)
  • fix: optimize controller and plots to fill screen in jupyter (#1868)
  • fix: ensure space and plot subcomponent are not rendered on step (#1867)

2.1.4 (2023-11-7)


This release updates mesa-viz-tornado dependency v0.1.3. This removes the
external JavaScript templates and prevents 404 errors

  • bugfix: ensure mesa_viz_tornado>=0.1.3 #1862

2.1.3 (2023-11-5)


This release contains several improvements, fixes, and new features to
the JupyterViz/Solara frontend. It's a patch release instead of a minor release
because the JupyterViz frontend is still considered experimental.

Improvements

  • model: ensure model is initialized with random seed based #1814
  • space: check if position values are tuples #1831
  • datacollection: add agent collection by type, documentation, and tests #1838

Docs and Tutorial

  • tutorial: explain how to set up reporter for multiple agents #1717
  • docs: rename useful snippets to how to guide #1839

CI and WorkFlows

  • Release CI: update to run workflows on releases #1479
  • CI: Update GHA workflows with Python 3.12 #1840
  • update ruff version #1824, #1841
  • Ensure mesa_viz_tornado>=0.1.2 #1860

Solara/JupyterViz

  • perf: increase speed of Solara render #1819
  • implement drawer for continuous space and refactor code #1830
  • fix: configure change handler for checkbox input #1844
  • fix: ensure playing starts after model param change #1851

v2.1.2

24 Sep 00:11
@rht rht
Compare
Choose a tag to compare

This release contains fixes, and several improvements and new features to
the JupyterViz/Solara frontend. It's a patch release instead of a minor release
because the JupyterViz frontend is still considered experimental.

Improvements

  • perf: Access grid only once #1751
  • docs: compile notebooks at build time #1753
  • docs: Remove nbsphinx and explicit .ipynb suffix #1754
  • rtd: Use gruvbox-dark as style #1719
  • build(deps): bump actions/checkout from 3 to 4 #1790

Solara/JupyterViz

  • solara: Implement visualization for network grid #1767
  • Add support for select input type #1779
  • Add step count display to JupyterViz #1775
  • Simplify solara code #1786
  • Add docstring for jupyterviz make_user_input that documents supported inputs #1784
  • Revise, test, & document JupyterViz options for drawing agent space #1783
  • Add UserInputs component #1788
  • Fix: Remove dict merge operator, python 3.8 compat #1793
  • feat: Add reset button to JupyterViz #1795
  • Add support for solara.Checkbox user input #1798
  • viz tutorial: Update custom plot to reflect new code #1799
  • fix: Don't continue playing when a model is reset #1796
  • Docker: Update to use Solara viz #1757

Refactors

  • Move viz stuff to mesa-viz-tornado Git repo #1746
  • simplify get neighborhood #1760
  • remove attrgetter performance optimization #1809

Fixes

  • fix: Add Matplotlib as dependency #1747
  • fix install for visualization tutorial in colab #1752
  • fix: Allow multiple connections in Solara #1759
  • Revert "Ensure sphinx>=7" #1762
  • fix README pic to remove line on left side #1763
  • space: Ensure get_neighborhood output & cache are immutable #1780
  • fix: Use .pytemplate for name for cookiecutter #1785
  • HISTORY.rst: Correct neighbor_iter() replacement in 2.0.0 #1807
  • docs: Always link to stable version #1810
  • Remove exclude_none_values #1813

v2.1.1

30 Jul 16:07
@rht rht
Compare
Choose a tag to compare

This release improves the introductory and visualization tutorial. Ensures both are Google Colab compatible with working badges.

Changes:

  • Update intro_tutorial to warn users to ensure up to date version, and make colab compatible #1739, #1744
  • Improve new/experimental Solara based visualization to ensure pause button works #1745
  • Fix bug in space.py -> get_heading() #1739

v2.1.0 Youngtown

23 Jul 14:28
@rht rht
Compare
Choose a tag to compare

This release creates mesa.experimental namespace, this solves the issue that PyPI release will not allow git-based install.

Users should read the Mesa 2.0.0 release note, as this contains the details about the breaking
changes and other major changes that were part of Mesa 2.0 release.

The mesa.experimental currently consists of JupyterViz, a new visualization framework that can run on a Jupyter notebook as well as standalone.

Changes:

  • Creates mesa.experimental namespace #1736
  • Fix Ruff lint error #1737
  • Update permissions for PyPI #1732

v2.0.0 Wellton

15 Jul 12:07
@rht rht
Compare
Choose a tag to compare

Special notes

Mesa 2.0 includes:
* an experimental pure python user interface/ visualization that is also jupyter compatible please see the visualization tutorial_
* several breaking changes that provide significant improvements to Mesa.

.. _visualization tutorial: https://mesa.readthedocs.io/en/latest/tutorials/visualization_tutorial.html
Breaking Changes:

  • space: change coord_iter to return (content,(x,y)) instead of (content, x,y); this reduces known errors of scheduler to grid mismatch #1566, #1723
  • space: change NetworkGrid get_neighbors to get_neighborhood; improves performance #1542
  • space: raise exception when pos is out of bounds in Grid.get_neighborhood #1524
  • space: remove deprecations (#1520, #1687, #1688):
    • find_empty(): convert this to move_to_empty()
    • num_agents: removed parameter from move_to_empty()
    • position_agent(): convert this to place_agent
    • neighbor_iter(): convert this to iter_neighborhood()
  • batchrunner: remove deprecations #1627
    • class BatchRunner and class BatchRunnerMP: convert these to batch_run()
    • Please see this batch_run() example_ if you would like to see an an implementation.
  • visualization: easier visualization creation #1693
    • UserSettableParameter(['number', 'slider','checkbox', 'choice', 'StaticText']): convert to NumberInput , Slider, CheckBox, Choice, StaticText
    • Please see this visualization example_ if you would like to see an implementation.

.. _batch_run() example: https://github.com/projectmesa/mesa-examples/blob/db2ec0383eb3b1868e91c828101e84cce97bbb63/examples/bank_reserves/batch_run.py#L188-L221
.. _visualization example: https://github.com/projectmesa/mesa-examples/blob/db2ec0383eb3b1868e91c828101e84cce97bbb63/examples/boltzmann_wealth_model/boltzmann_wealth_model/server.py#L25-L32.)

New Features:

  • datacollector: can now handle data collection by agent type #1419, #1702
  • time: allows for model level StageActivation #1709
  • visualization: ChartModule can have dynamically named properties #1685
  • visualization: improved stop server to end visualizations #1646
  • experimental python front end option: integrated the initial prototype of the pure python front end option #1698, #1726

Improvements

v1.2.0 Taylor

09 Mar 07:04
@rht rht
Compare
Choose a tag to compare

Taylor release v1.2.0.

v1.1.1

21 Oct 00:04
@rht rht
d7a762a
Compare
Choose a tag to compare

This release fixes #1461 where custom user-specified portrayal images don't load in the visualization server.

Full Changelog: v1.1.0...v1.1.1