# Defining Inverse Problems

An inverse problem is a collection of trials which define a multi-simulation optimization problem. The solution to an inverse problem are the "good parameters" which make the simulations simultaniously fit their respective data sufficiently well.

## Constructing InverseProblems

`JuliaSimModelOptimizer.InverseProblem`

— Type`InverseProblem(trials, model, search_space)`

The `InverseProblem`

stores the information needed to perform the optimization and find the `model`

parameters and/or initial conditions that best fit the data. The `model`

is an MTK `ODESystem`

describing the dynamics of the investigated system. The `trials`

constitute a collection that groups the individual trials according to their interpretation, such as `IndependentTrials`

(there is no link between trials) or `SteadyStateTrials`

(the first trial computes a steady state that other trials may continue to solve from).

The `search_space`

is a `Vector`

of pairs. Each pair consists of a parameter or initial condition to be optimized and its lower and upper bounds. When using an `MCMCOpt`

method, `search_space`

can hold distributions for each parameter instead of bounds, e.g. see `TransformedBeta`

or see the Distributions.jl documentation) for more options.