Introduction to cadCAD

cadCAD is shorthand for complex adaptive dynamics computer aided design, but that is quite a mouthful.

if you click through to the cadCAD github repo you will find the following description

cadCAD (complex adaptive systems computer-aided design) is a python based, unified modeling framework for stochastic dynamical systems and differential games for research, validation, and Computer Aided Design of economic systems created by BlockScience. It is capable of modeling systems at all levels of abstraction from Agent Based Modeling (ABM) to System Dynamics (SD), and enabling smooth integration of computational social science simulations with empirical data science workflows.

This may be an accurate description of what cadCAD is but it doesn’t give one much clarity about how to use it or even what to use it for. One reason why it can be difficult to get started with cadCAD in python is because coding is not a good starting point for a systems design journey. Computer aided design is about design, and one needs to have clarity about what they are designing. In particular, cadCAD is for designing complex systems, which are characterized by adaptive dynamics which may include changes to system properties based on system state or changes in the way agents behave. The first step is system modeling. See https://community.cadcad.org/t/working-glossary-of-systems-concepts/17

Modeling system level properties using differential equations is called System Dynamics (SD) whereas modeling the way agents behaviors interact is called Agent Based Modeling (ABM). There are tools available for modeling in each of these paradigms but the paradigms themselves can be limiting. It is challenging to represent the adaption of system level properties in an agent based modeling framework, and it is difficult to represent agent level behavioral evolution within the systems dynamics paradigm. When systems have both of these characteristics concurrently, the model can be called Multi-Scale Models.

Multi-scale modeling is hard in part because it is more general; in practice multi-scale modeling is done for specific classes of systems using tools customized to the those systems properties. For example, one can find applications in fluid dynamics using partial differential equations to create multi-scale models using Matlab. With cadCAD one doesn’t need an expensive closed source software like MATLAB, instead models are built within the open source python data science stack. Data Science tooling is particularly relevant because the systems in focus are social and economic networks rather than physical systems.

For more introductory material check out our Medium articles:
https://medium.com/block-science/introducing-complex-adaptive-dynamics-computer-aided-design-cadcad-38b63b541eb8
https://medium.com/block-science/cadcad-filling-a-critical-gap-in-open-source-data-science-fcd0d3faa8ed

4 Likes

This sounds great, but what does that look like?

  • Is there a how-to guide / intro tutorial?
  • Have you guys modeled any DAOs?
  • Is there an archive of past systems that you guys have modeled so that I can see all the things you’re talking about in action?

And more importantly… what will learning about these design systems and using these tools (CadCAD) help me do?

  • Will I be able to fuzz a token model and/or create unit testing for it?
  • Will I be able to specify core properties that I want to hold and then have auto-ml find a model that meets those criteria? What’s the end game here?
  • Will I be able to run a lot of variations on a model to see what happens?
1 Like

Hi @burrrata, welcome! You may find the cadCAD tutorials and some of our reference models useful. Also the Uniswap model.

cadCAD helps us design better systems in so far as it provides us with a framework to model and simulate those systems under different hypothetical circumstances before actually deploying them in the wild.

Will I be able to fuzz a token model and/or create unit testing for it?

Yes, that’s perfectly possible. Model the system (its state variables and the mechanisms through which external agents can interact with it) and implement unit tests as deterministic policy functions, or fuzz tests as policy functions that return random results.

Will I be able to run a lot of variations on a model to see what happens?

Yes! See parts 4 and 6 of the Robot and Marbles tutorials for some definitions and examples

Will I be able to specify core properties that I want to hold and then have auto-ml find a model that meets those criteria? What’s the end game here?

In my opinion, in our context machine learning is better suited as a tool to help us come up with more accurate models of agent behavior. So you specify the core properties that you want to hold; model the system you’re designing (not much use for ML here, IMO: it’s your system, you have full control over its state variables, parameters and mechanisms); model the agents that interact with it (ML and/or literature review); then simulate those interactions and see if the properties hold or not.

3 Likes

Here’s a meta cadCAD system diagram that I drafted and @markusbkoch polished! We tried to visually represent the cadCAD modeling environment and its inner-working.

6 Likes