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 mesa.Cell and mesa.Property_Layer.
  • CellAgentArtists: A visual representation for a set of mesa.CellAgents.
  • ContinuousSpaceAgentArtists: A visual representation for a set of mesa.ContinuousSpaceAgents.
  • NetworkCellArtists: A visual representation for cells in a mesa.Network.
  • NetworkAgentArtists: A visual representation for agents on a mesa.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(
    gcolor_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 and data that is collected using mesa.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.1.tar.gz (21.6 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.1-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mesarcade-0.1.1.tar.gz
  • Upload date:
  • Size: 21.6 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.1.tar.gz
Algorithm Hash digest
SHA256 654d488e4570de534a5fee2cfefcb826ee8fca561292a0a816c083172a8ff8e5
MD5 04d691a7e1c6c20376e7afce89efaaac
BLAKE2b-256 2966f960816070c6963722750d6f184446952ca5303c0ecba74966dc0ee8eca5

See more details on using hashes here.

Provenance

The following attestation bundles were made for mesarcade-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: mesarcade-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.8 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1e7eb92c8eac2d8d88b472d920682c4854d6bac7cfb68051812b9fb8c3d7461a
MD5 8b4fbdb607faa8e852eda333ff9adf8e
BLAKE2b-256 d0c2f7b22528761278120512aa0f4cb4d68da67a5c15303c50222bb996ecba8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mesarcade-0.1.1-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