In my very first post on this blog I talked about the difference between simulations and models. Simulations most people get, they correspond pretty closely to how most people think about theorycrafting and testing. Run a test of some behavior and look at the results. Models are a bit trickier because models rely on simplifying assumptions which can often be somewhat obtuse. The goal of this series of posts is to to explain those simplifying assumptions and show examples of them within the ShadowCraft codebase.
Another goal of this series is to get more people looking at and contributing to the ShadowCraft codebase. I know from experience the ShadowCraft codebase can be very intimidating to start working through partially because there isn’t an obvious starting point. By showing and explaining pieces of the ShadowCraft model I hope to make the prospect of digging into ShadowCraft a bit easier.
ShadowCraft is written entirely in Python, for the purposes of this series I am going to assume the reader has a decent understanding of Python. There are some pieces of code which are a bit obtuse and I there I will explain the syntax to an extent. For people who don’t know Python I will still explain the underlying concepts in plain English (and possibly a little math). If you do want to learn Python I recommend the free book A Byte of Python. Python is one of the easier programming languages to learn and is about as close to plain English as a programming language can get. For those with experience with C style languages (Java, C, C++, C#, etc.) a lot of Python syntax should look very familiar.
A final caveat, ShadowCraft is an actively developed project so the code samples I use may not be what ShadowCraft actually uses at the time you are reading this however the focus of this series are the underlying modeling techniques which should still remain broadly applicable even if the code changes.