Things I learned while programming as a Petri-net maximalist.

🧠 Declarative Differential Models (DDM) redux

This blog has previously defined DDM, in this post we restate the technique using parameter sweeps.

Natural Fit with Parameter Sweeps

  1. Declarative Parameter Grids
    You can define a range of parameter values (e.g., rate constants, capacity limits, initial markings) at the modeling level, without rewriting procedural logic.
   juliaCopyEditrates = [0.1, 0.5, 1.0]
   initial_tokens = [10, 20, 50]
   
  1. Automatic System Instantiation
    For each (rate, initial token) pair, a new DDM instance is formed—no manual recoding needed.

  2. Batch Simulation via DAE Solver
    These are solved continuously over time using tools like DifferentialEquations.jl.

  3. Constraint Enforcement Across Variants
    All parameterized runs still respect embedded constraints like conservation laws, regardless of parameter selection.

  4. Optimization and Sensitivity
    You can trace the outputs (e.g., token flow, system performance) over the parameter sweeps, enabling:

    • Sensitivity analysis
    • Finding thresholds or tipping points
    • Hyperparameter tuning for optimal behavior

✅ Why It’s Powerful


🔧 Example Use Cases


🧩 Bringing It Together

DDM + Parameter Sweeping lets you:

  1. Declaratively define a dynamic system (with constraints).

  2. Parameterize aspects you want to explore or optimize.

  3. Run batch DAE simulations under each parameter set.

  4. Analyze results for sensitivity, tuning, verification, or learning.

With the added enhancement of parameter sweeping terminology, we embrace a fully declarative and continuous modeling paradigm—no reinventing the wheel for each variant.