Repository metrics
- Stars
- (0 stars)
- PR merge metrics
- (PR metrics pending)
Description
One of the primary impediments to a simulation and scheduling system being adopted is the initial learning curve. If I'm a prospective modeler, staring at a blank project, how do I even start?
To address this, write a tutorial. Start with a "Hello, world!" model that just reports that one string to stdout using the standard utilities. Build up from there, introducing a new modeler to the idea of resources, tasks, effects, models, and activities, probably in that order. The key requirement on these tutorials is incrementalism - each step in the tutorial should introduce a small, manageable amount of new information to the modeler. That information should be explained well. And each step of the tutorial should conclude with a model that the prospective modeler can run and tweak for themselves.
Below is a working outline for the structure and order of tutorials. I've grouped tutorials into "sections" or "tracks". The idea is that, broadly, anyone reading the tutorials can fit themselves to one of a few kinds of users, and from there, select a subset of the sections that are useful to them. E.g., the model author doesn't need to read the developer track.
- intro to modeling
- hello world (running the simulator)
- intro to resources (discrete resources only; deriving resources through utility functions)
- intro to tasks (daemons only; read/write resources only)
- delay
- await and conditions
- reactions
- spawn
- plans and activities
- simulation
- output handling: reporting to disk, in parallel, and in different formats
- checkpoints
- advanced modeling
- Clocks and timers (intro to continuous resources, plus introducing simulation_clock)
- Polynomials and unstructured resources
- Writing your own resources
- Advanced resource derivation with monads
- concurrency, faults, and fault recovery
- State machines
- Factoring models
- Unit testing:
runUnitTesthelper and model test wrappers - debugging: naming, tracing, and tips and tricks
- lensing mutable resources
- monte carlo models
- unit-aware resources and unit-aware modeling (not fully developed, so low-priority to write a tutorial for it)
- Scheduling
- intro (running SchedulingSystem), how to place activities
- reading resources from output
- post-processing as simulation
- checkpoints and backtracking
- incremental simulation (definitely needs to be covered, but I'm not sure what to cover or how to cover it yet)
- Developer track? Or should this just be the readmes in the source code itself?
- testing and debugging incremental sim