# Release Notes

## v0.29.0

### JuliaSimControl

#### Features

- Add Polynomial-Quadratic Regulator control design (PQR)
- Add function
`common_lyap`

that computes quadratic Lyapunov functions for uncertain systems - Add polynomial trajectory synthesizer
- Add function
`poly_approx`

for least-squares polynomial approximation of nonlinear dynamics

#### Tutorials

- Add PQR tutorials
- Add tutorial for control of PDE system
- Add input-simulation tutorial

### JuliaSimModelOptimizer

#### Features

- Add support for DataSets as input data
- Add symbolic regression interface for automated model discovery
- Add support for log transformed search space
- Add parallelization support for multiple shooting

### JuliaSimSurrogates

#### Features

- Add support for custom callbacks in training loop
- Add support for external simulators like JuliaSimBatteries
- Add support for plotting ExperimentData objects directly
- Add support to spawn data generation and training jobs on JuliaHub
- Added a Datagen app for tuning controllers
- DigitalEcho now supports deploying to MTK
- Generically handle constant values during normalization for the DigitalEcho
- Implemented Controller which has a fixed value at t=0
- Improved documentation
- Improves the performance of DigitalEcho
- Scalable storage format for data generation
- Support for training with GPUs

### PumasQSP

#### Features

- Add support for DataSets as input data
- Add model autocomplete
- You can now add a neural network to your model and train it as a calibration problem
- The symbolic regression interface can be used to interpret the results from the neural network

- Add support for log transformed search space
- Add parallelization support for multiple shooting
- Add support for dosing tables

## v0.28.0

### JuliaSim

#### Features

- Upgrade to Julia v1.8.5.

### JuliaSimControl

#### Features

- Add sliding mode controllers.
- Add support for integer and binary variables in Model Predictive Controllers (MPC).
- Introduce Linear Quadratic Regulator (LQR) design method for uncertain systems.
- Introduce robust Model Predictive Control (MPC) for systems with uncertain parameters.

### JuliaSimModelOptimizer

#### Features

- Add model autocomplete
- You can now add a neural network to your model and train it as a calibration problem
- This can be used for automatic model discovery

*Experimental*Import FMUs into inverse problems- Having an MTK model as a starting point is no longer required as we can now import both model exchange and co-simulation FMUs.

## v0.27.0

### JuliaSimModelOptimizer

#### Breaking changes

- Renamed structures to better fit the engineering domain.
`Trial`

-> `Experiment`SteadyStateTrial`

->`SteadyStateExperiment`

`ComparisonTrial`

->`ExperimentComparison`

- Renamed trial collections to experiment collections
`IndependentTrials`

->`IndependentExperiments`

`SteadyStateTrials`

->`SteadyStateExperiments`

`TrialChains`

->`ChainedExperiments`

#### Features

- Add support for parameter priors.
- Add parametrization support to the initial conditions.
- Add
`ReplicateData`

. This allows one to use multiple datasets for one experiment. - Add experiment chains. Experiments can now have arbitrarily deep dependencies on any other previously defined experiments.

### PumasQSP

#### Features

- Add support for parameter priors.
- Add parametrization support to the initial conditions.
- Add the possibility to import PEtab files.
- Add MAPEL.
- Add
`ReplicateData`

. This allows one to use multiple datasets for one trial. - Add trial chains. Trials can now have arbitrarily deep dependencies on any other previously defined trials.

## v0.26.0

### JuliaSim

#### Breaking Change

- Requires at least JuliaHub v6.0.0 as the deployment platform.

## v0.25.1

### JuliaSimModelOptimizer

- Add error handling in calibration.
- Decreased overhead for small problems.
- Fix a bug in how parameters and initial conditions were computed, when ForwardDiff was used, which could have lead to wrong results.
- Fix
`MultipleShooting`

bugs that could lead to wrong results.

### BuildingModelLibrary

- Bumps the CSV version to v0.10 (from earlier v0.9)

### ThermalThermofluid

- Adds LICENSE
- Fixes room iteration order

## v0.25.0

### JuliaSimModelOptimizer

#### Features

Hierarchical Bayesian inference is now available as a virtual population generation method.

This method assumes that the parameters of each

`Trial`

subject are sampled from the same population distribution. It then calculates the posterior distribution all parameters, subject-specific and population ones, given the available data. Finally, it uses the posterior distribution of population-level parameters to generate a virtual population.When using a Bayesian method to generate a virtual population with

`MCMCOpt`

, if the keyword argument`hierarchical = true`

, then this hierarchical method will be used.Pathfinder MCMC initialization is now available. This is an alternative to the standard warmup phase that sampling methods such as No-U-Turn-Sampler use to find regions of high probability mass and tune some internal parameters before sampling. In many cases Pathfinder is able to find regions of more probable parameter values more efficiently.

Users can choose this method by setting the keyword argument

`warmup_method = PathfinderWarmUp()`

in`MCMCOpt`

, before passing it to the`vpop`

function, otherwise the default`warmup_method = StandardWarmUp()`

will be used.

## v0.24.1

### JuliaSimSurrogates

- Fix broken surrogates dashboard styling.

## v0.24.0

### JuliaSimControl

- The
`JuliaSimControls`

package has been renamed to`JuliaSimControl`

. All references to the package should be updated accordingly. - Trimming of ModelingToolkit (MTK) models.
- More general Model-Predictive Control (MPC) problem formulation.

### JuliaSimModelOptimizer

- New calibration feature for robustly fitting data using multiple shooting and collocation methods.

### PumasQSP

- Add support for dosing. The following types of doses can be used:
`Bolus`

, increment a state by some amount.`PeriodicBolus`

, same as`Bolus`

periodically.`Infusion`

, increments the rate of change of a state by some amount for a time window of given duration.`PeriodicInfusion`

, same as`Infusion`

periodically, where the period counts from the onset time of the`Infusion`

time window.

## v0.23.0

### PumasQSP

- New population subsampling method
- Users can now set target distributions for any number of model states and our new custom-made method will subsample a virtual population, so that the same model states of virtual patients match the target distributions, as measured by discretized histograms.

- New plot recipe to plot all trials from a virtual population.
- Improvements to plotting functionality.

## v0.22.0

### PumasQSP

The initial release of PumasQSP contains the following features:

- Bayesian inference is now available when generating virtual populations
- Each
`Trial`

object now contains a likelihood function and`noise_priors`

distributions, which together describe how data was measured in a trial.

- Each
- Timespan optimization is now possible
- The timespan of a given trial can be fit to data, similarly to how model parameters and initial conditions are optimized to match the data of the trial.

- New subsampling API
- Subsampling a virtual population of patients
`vp`

for a given`trial`

can now be performed with a simple call to`subsample(alg, vp, trial)`

, where`alg`

is one of several available subsampling methods, like MAPEL or Allen-Reiger-Musante 2016 ARM.

- Subsampling a virtual population of patients
- Accessing the sampler of each subsampling method
- Users now have access to a Sampler object, which they can call repeatedly to generate new subsampled virtual populations.
- This way, users can perform subsampling multiple times quickly, without having to wait for the necessary computations of the respective method to finish every time (e.g. solving an optimization problem, like in the case of Allen-Reiger-Musante subsampling).