Skip to main content

Visualize mesa models using python arcade.

Project description

Mesarcade

Mesa + Arcade

Mesarcade is a Python package that provides fast, interactive visualizations of Mesa agent-based models using Python Arcade.

⚠️ Mesarcade is under active development. APIs may change.

Gallery

Schelling

Virus on network

Sugarscape

Components

Mesarcade follows a compositional design: you define how agents are drawn (Artists), where they are drawn (SpacePlots), what is tracked over time (HistoryPlots), and how parameters can be changed (Controllers), all embedded in a Canvas.

Artists

Artists are the visual representations of the entities in a mesa model.

  • CellArtists: A visual representation for entities of type Cell.
  • CellAgentArtists: A visual representation for a set of entities of type CellAgent.
  • ContinuousSpaceAgentArtists: A visual representation for a set of entities of type mesa.ContinuousSpaceAgents.
  • NetworkCellArtists: A visual representation for cells in a Network.
  • NetworkAgentArtists: A visual representation for agents on a Network.

Example:

Let's create a visual representation for our CellAgents. We map the agent attribute type to the colors blue and red.

agents = mesar.CellAgentArtists(
    color_attribute="type",
    color_map={0: "blue", 1: "red"},
)

SpacePlots

SpacePlots are visual representations of certain space types in Mesa and plot the corresponding Artists at their position. You can add/layer as many artists as you want to.

  • GridSpacePlot: Visualizes a grid.
  • ContinuousSpacePlot: Visualizes a continuous space.
  • NetworkPlot: A space in which networks are visualized.

Example:

Let's create a visual representation of a grid and add our agent artists. We could add other artists, too.

grid_space = mesar.GridSpacePlot(artists=[agents])

HistoryPlots

Line plots that plot (multiple) values as a function of the simulated time steps.

  • ModelHistoryPlot: Plots model attributes or data that is collected using the model's datacollector as a function of the simulated time steps.

  • AgentHistoryPlot: On the ToDo-List.

Example

Let's add a ModelHistoryPlot that visualizes the model attribute happy over time:

happy_plot = mesar.ModelHistoryPlot(model_attributes=["happy"], labels=["Happy agents"])

ValueDisplay

Text-based display for showing a single value of a model attribute.

Example

Let's add a ValueDisplay that shows the current value of the model attribute happy:

happy_value = mesar.ValueDisplay(model_attribute="happy", label="Happy agents")

Controllers

Interactive controllers of model attributes and parameters.

  • NumController: A controller for numeric parameters.
  • CatController: A controller for categorical parameters.

Example

Let's add a controller that determines the value of the model parameter homophily:

homophily = mesar.NumController(
    parameter_name="homophily", 
    parameter_value=0.4, 
    min_value=0,
    max_value=1,
    step=0.125,
    )

Canvas

The Canvas is the main window in which all components are placed.

Example

canvas = mesar.Canvas(
    model_class=Schelling, # the mesa model
    plots=[space, happy_plot], # all plots
    controllers=[density, minority_pc, homophily, width, height], # all controllers
)

# start the visualization
canvas.show()

Full example

More examples can be found in "/mesarcade/examples".

import mesarcade as mesar
from mesa.examples.basic.schelling.model import Schelling

# artists
agents = mesar.CellAgentArtists(
    color_attribute="type",
    color_map={0: "blue", 1: "red"},
    shape="circle",
)

# space plot
space = mesar.GridSpacePlot(artists=agents)

# line plot
happy_plot = mesar.ModelHistoryPlot(model_attributes=["happy"], labels=["Happy agents"])

# value display
happy_value = mesar.ValueDisplay(model_attribute="happy", label="Happy agents")

# controllers
density = mesar.NumController("density", 0.8, 0.1, 0.9, 0.1)
minority_pc = mesar.NumController("minority_pc", 0.2, 0.0, 1.0, 0.05)
homophily = mesar.NumController("homophily", 0.4, 0.0, 1.0, 0.125)
width = mesar.NumController("width", 100, 10, 200, 10)
height = mesar.NumController("height", 100, 10, 200, 10)

# gui window
canvas = mesar.Canvas(
    model_class=Schelling,
    plots=[space, happy_plot],
    value_displays=[happy_value],
    controllers=[density, minority_pc, homophily, width, height],
)

# show gui window
canvas.show()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mesarcade-0.1.3.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mesarcade-0.1.3-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file mesarcade-0.1.3.tar.gz.

File metadata

  • Download URL: mesarcade-0.1.3.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mesarcade-0.1.3.tar.gz
Algorithm Hash digest
SHA256 4e80f2d92774476e6d50bed9c41e93b4c2573129f0de982f232b4d2d39b2e39d
MD5 9d1a4c7e0809bedf162f35a04fdce04e
BLAKE2b-256 017f3fdd8daedc397f24c91e885e60d0a86806e6a9e61fddaf63a879b4add120

See more details on using hashes here.

Provenance

The following attestation bundles were made for mesarcade-0.1.3.tar.gz:

Publisher: release.yml on mariuzka/mesarcade

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mesarcade-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: mesarcade-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mesarcade-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3746a77558298f182f3779fa377cc9f60d4d5892a718c9292a203eef2b176fc6
MD5 454195cb1e9a59baafd6d812e06e9231
BLAKE2b-256 a5f5f148ea12b0acb419e2fe6f2ccbc1b2acd09f14fb73871acae673e3a99c30

See more details on using hashes here.

Provenance

The following attestation bundles were made for mesarcade-0.1.3-py3-none-any.whl:

Publisher: release.yml on mariuzka/mesarcade

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page