This example is a WIP -- we're actively looking for contributors + ideas. See this issue to track.
At a high level, simulations generally run over a set of time steps and maintain state. The user then manages the state, which becomes the input to the next time step, as well as output data to analyze.
For instance:
A time-series forecast will execute a computation (say, feature-engineering + a model) at each step for which the user is predicting. The user will then store a history of data (predictions, raw data, etc...), and use that to pass into the next step in the simulation.
The merge into state + query from state capabilities can be complicated -- windowed operations, rolling averages, etc.. may all be useful, and they may want to visualize simulations live (E.G. by tracking some metrics as it goes along). Burr is a natural way to persist this -- even if it is just a few actions (query_data, feature_engineer, forecast), the persistence capabilities + hooks can allow for logging to whatever live framework one wants to visualize, and centralizing the logic of reading from/writing to state.
For a sketch of the latter see application.py & .
This is a special case of time-series forecasting, in which one wants to simulate a financial portfolio. Actions might be:
query_data - get data from state/load externallyprepare_data - format to something you can make predictions onforecast - runs a model to do stock-price fore astingconstruct_portfolio - uses the forecast to construct a portfolioevaluate_portfolio - evaluates the portfolioEach one of these could be a DAG using Hamilton, or running any custom code.
See Stanford Smallville for an example. For multiple independent “agents”, Burr could help model the way they interact. This could be multiplke Burr applications, applications called within actions, or an action that loops over all “users”. We are still figuring out the best way to model this, so reach out if you have ideas!
Please comment at this issue if you have any opinions on the above! We would love user-contributed examples.