Highlights
Mesa 3.1.3 introduces a major experimental reimplementation of Mesa's continuous space, providing an intuitive agent-centric API and significant performance improvements. The new implementation supports n-dimensional spaces and offers streamlined methods for agent movement and neighbor calculations.
New Continuous Space Features
- Agent-centric movement API similar to cell spaces
- Efficient neighbor calculations and position updates
- Support for n-dimensional spaces
- Improved memory management with dynamic array resizing
Here's a quick look at the new API:
# Create a 2D continuous space
space = ContinuousSpace(
dimensions=[[0, 1], [0, 1]],
torus=True,
random=model.random
)
# Create and position an agent
agent = ContinuousSpaceAgent(space, model)
agent.position = [0.5, 0.5]
# Move agent using vector arithmetic
agent.position += [0.1, 0.1]
# Get neighbors within radius
neighbors, distances = agent.get_neighbors_in_radius(radius=0.2)
# Find k nearest neighbors
nearest, distances = agent.get_nearest_neighbors(k=5)
The new implementation particularly benefits models requiring frequent position updates and neighbor queries, such as flocking simulations or particle systems. See PR #2584 and the API documentation for more details. We would love to get feedback on the new Continuous Space in #2611.
Other improvements in this release include consistent visualization behavior across space types with the reimplementation of draw_voronoi
#2608, and a new render interval slider for controlling visualization update frequency in SolaraViz, which helps improve performance when working with complex visualizations #2596. We've also fixed a bug affecting random number generation determinism when using Model(seed=something)
, ensuring both model.random
and model.rng
now behave consistently when seeded with the same initial value #2598.
What's Changed
🧪 Experimental features
🛠 Enhancements made
- reimplementation of draw_voroinoi by @quaquel in #2608
- Add render interval slider to control visualization update frequency by @HMNS19 in #2596
🐛 Bugs fixed
🔍 Examples updated
- Clarify ContinuousSpace.get_neighbors behavior with multiple agents at same position by @quaquel in #2599
New Contributors
Full Changelog: v3.1.2...v3.1.3