# JuliaSimModelOptimizer: Automated Solution of Complex Inverse Problems

JuliaSim is a proprietary software developed by JuliaHub Inc. It is free to use for non-commercial academic teaching and research purposes. For commercial users, license fees apply. Please refer to the End User License Agreement for details. Please contact sales@juliahub.com for purchasing information.

JuliaSimModelOptimizer is a package and a methodology designed to solve difficult model calibration problems and analyses in a high-performance and user friendly manner. This allows for scaling to large models and datasets without requiring advanced programming. This also allows the user to stay focused on modeling and interpretation, leaving the details of robustly performing parameter estimation to an automated system. At the same time, automatic, under-the-hood parallelizations, enable a scalable framework to ensure that the hardest inverse problems are easily accessible.

## Overview of JuliaSimModelOptimizer

JuliaSimModelOptimizer is centered around solving `InverseProblem`

s, i.e. finding the parameters which make models fit the behavor observed in data. In JuliaSimModelOptimizer, an `Experiment`

consists of a model and a dataset. For example, an experiment might be a differential-equation model describing an HVAC system attached to a building with multiple datasets of the system's performance to which the model is supposed to be callibrated against. The multi-experiment setup of JuliaSimModelOptimizer allows the user to quickly describe the multiple scenarios in which the identification data was collected, monitoring the response of the system to fluctuating outside temperatures under different operating scenarios. The user can then easily solve the multi-objective optimization problem via an `InverseProblem`

, which in this case is a collection of experiments.

JuliaSimModelOptimizer offers many different analysis functions to enable such model calibration and exploration. At a high level, these are:

`calibrate`

: the fitting of an`InverseProblem`

, i.e. finding the best parameters to simultaneously fit all experiments. This function is made to be fast and robust, making it easy to perform difficult calibrations.`parametric_uq`

: parametric uncertainty quantification finds a set of parameters which are all sufficiently good fits to all datasets. This is an extension of`calibrate`

which is used to convey uncertainty with respect to global parameter identifiability in the model fitting process and allow for analysis with respect to model uncertainty and data noise.`subsample`

: the subsampling of parameter ensembles from parametric uncertainty quantification. While the`parametric_uq`

result gives a set of parameters which all fit the dataset well, there are no high-level guarantees about the statistics of the fit.`subsample`

allows for subsampling the generated parameter set to allow it to match known characteristics to improve predictions from the uncertainty set.`gsa`

: the analysis of the sensitivity of solutions with respect to parameters. This gives an alternative view of an`InverseProblem`

by demonstrating what parameters have large effects on the solution, improving the calibration process and the understanding of its uncertainties.

## JuliaSimModelOptimizer's Integration with Julia and SciML

JuliaSimModelOptimizer is written in Julia and therefore brings all the advantages of the Julia language with it: this includes, for example, an easy-to-read and write syntax and a high baseline performance. Additionally, JuliaSimModelOptimizer is nicely integrated with the existing package ecosystem of Julia. Specifically relevant are the connections to the following packages:

- DataFrames.jl allows us to manipulate tabular data and hence is useful to handle trail data stored in e.g. csv files.
- ModelingToolkit.jl provides a modeling framework for high-performance symbolic-numeric computation hence allows for smooth model definitions and model handeling.
- DifferentialEquations.jl can be used to numerically solving differential equations with high efficiency.
- GlobalSensitivity.jl provides several methods to quantify the uncertainty in the model output with respect to the input parameters of the model.
- Plots.jl is a plotting API and toolset that can be used to intuitively analyse and visualise model behaviour and output.
- Turing.jl is a julia based PPL which provides implementations of numerous MCMC methods and a user-friendly interface to define probabilistic models and run bayesian inference.