-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Open
Description
What's the problem this feature will solve?
The current way of defining custom portrayals for agents is through a function, for example:
mesa/examples/sugarscape_cg/sugarscape_cg/server.py
Lines 9 to 31 in 478a66b
def SsAgent_portrayal(agent): | |
if agent is None: | |
return | |
portrayal = {} | |
if type(agent) is SsAgent: | |
portrayal["Shape"] = "sugarscape_cg/resources/ant.png" | |
portrayal["scale"] = 0.9 | |
portrayal["Layer"] = 1 | |
elif type(agent) is Sugar: | |
if agent.amount != 0: | |
portrayal["Color"] = color_dic[agent.amount] | |
else: | |
portrayal["Color"] = "#D6F5D6" | |
portrayal["Shape"] = "rect" | |
portrayal["Filled"] = "true" | |
portrayal["Layer"] = 0 | |
portrayal["w"] = 1 | |
portrayal["h"] = 1 | |
return portrayal |
There are nested if-else statements checking for types and so on. To make things worse, in Mesa-Geo there're various types of layers (e.g., raster layer, vector layer), other than agents, that would also need custom portrayals.
Describe the solution you'd like
Perhaps something like what was done in MASON (a JAVA ABM framework)? In this paper the authors talked about their MVC architecture where there are corresponding portrayals for agents, fields, etc.
Additional context
- In a MVC setting it might be easier to implement additional GUI. For example we can have a set of
WebView
classes for the current Tornado server, and another set ofJupyterView
for Jupyter interface for the GUI #1263, or anything else (Streamlit perhaps?), so long as a well-defined interface is implemented. This also helps ensure that the ABM simulation part is separated from its visualizations. - The current design is kind of MVC already, with
CanvasGridVisualization
as a View forGrid
,NetworkVisualization
forNetworkGrid
, and so on. What's missing (but available in MASON) are the View classes for agents/objects. In Mesa, these are essentially replaced by those portrayal functions.
Metadata
Metadata
Assignees
Labels
No labels