Many industrial users unlock faster runtime when writing models in Julia, but there are cases where even this improved runtime is not enough for bottlenecks in a product's development life-cycle. When simulations are too computationally expensive or time consuming to evaluate, engineers have limited time for experimentation and exploration. In many cases, these long-running models can be replaced by much faster surrogate models. Surrogates enable engineers to run more simulations in less time. This extra computational power becomes crucial for many processes like design optimization, sensitivity analysis, control tuning, etc.

JuliaSimSurrogates.jl is a package which offers a flexible framework for generating surrogate models in an approachable manner.


Surrogates are extremely fast approximate models that yield acceptable margins of error when compared to its original model. The speed of surrogates makes them computationally cheaper than their classical counterparts. Therefore, surrogate models can stand-in for classical models to drastically reduce runtime while still producing high-fidelity results.

Generating surrogate models requires a unique blend of knowledge in Physics, Mathematics, Scientific Machine Learning (SciML), and High Performance Computing (HPC). Traditionally, the effort to generate one surrogate model for one physical system would require the skills of several modeling engineers, machine learning engineers, HPC systems engineers, and likely a couple of PhDs. After assembling this team and gaining access to the necessary compute resources, a reasonable timeline for completion is between 6 and 18 months. That's for one surrogate.

JuliaHub is powering JuliaSim to give individuals and teams the tools to generate surrogates in minutes. JuliaSimSurrogates provides a framework for users to start with either code or FMUs and train surrogate models using the latest techniques in scientific machine learning and model order reduction. The following high-level approach outlines the various steps to generating surrogates which has proven successful for real industrial problems:

  • Data Generation: creating sample results of the original, classical model. This data is generated quickly in parallel and will serve as input for Training.
  • Pre-processing: various clean-up and standardization in preparation for Training.
  • Training: use generated data to train a machine learning model which is actually a system of Differentiable-Algebraic Equations (DAE). This can also be thought of as a Semi-Neural ODE.
  • Deployment: package the generated surrogate as a Functional Mock-up Unit (FMU) and easily run the surrogate in virtually any modeling tool.
  • Logging: ensure that experiments are tracked and training pipelines are reproducible.

To learn more about the exciting new surrogate training algorithm developed in-house at JuliaHub, please see Accelerating Simulation of Stiff Nonlinear Systems using Continuous-Time Echo State Networks.

JuliaSimSurrogates Integration with Julia

JuliaSimSurrogates is a pure Julia package which means that the interface has a user-friendly syntax and the execution is also very performant. Another huge benefit is the tight integration with Julia's extensive and ever-growing SciML ecosystem. This means that users can compose various SciML packages with JuliaSimSurrogates to generate fast and complex systems. To unlock this power, users should either write their models with ModelingToolkit.jl or create an FMU with their existing modeling tool.


To learn more about the ecosystem, please checkout the official Julia Lang documentation and the SciML Open Source Software Ecosystem documentation.