Thanks Michael! This is helpful.
I’ve been through all the tutorials, but the Commons Stack conviction voting code gives me a better picture of how Networkx can be used to generate and manipulate agents (for anyone else looking, possibly the most relevant code is here: https://raw.githubusercontent.com/BlockScience/conviction/master/conviction_helpers.py and: https://raw.githubusercontent.com/BlockScience/conviction/master/conviction_system_logic3.py).
I wasn’t planning to model the system as a network. For now, it’s a relatively simple model – no governance or social activity, just economic transactions.
Any thoughts on when a system should be modeled as a network, and when not?
In cases when not using Networkx for managing agents, it seems to me it would be relatively simple to mimic the Mesa structure: define an agent class, with an instance for each agent. The list of agents would be a state variable, and each instance’s update method would be called from within the state variable update function (either directly, or via a separate generic agent updating function that could include various sequencing options).
In general, is there a guideline about what to include in policy functions vs. state update functions? Is there a reason to split agent property updates into policy (for update logic) and state update (for actually updating the objects)?
For my current needs, adding some agent managing pieces to cadCAD seems less cumbersome than integrating Mesa. On the other hand, looking again at the Mesa docs, integration should be pretty straightforward. Maybe I’ll experiment and report the results.
The multi-level Mesa paper looks excellent. More than what we need for the project I’m currently working on, but it would be exciting to have that kind of sophistication connected to cadCAD!
Thanks for your help,