- Add support for DataSets as input data
- Add symbolic regression interface
- Add support for log transformed search space
- Support for parameter scaling in PEtab import
- Add plot functions for analyzing convergence and multiple shooting segments
- Support MTK ODESystem in import_petab
- Add parallelization support for multiple shooting
- Add helper function for creating PEtab templates
- Fix multiple shooting methods
- Fix
remake
with save_names
- Fix
remake
with aliased parameters - Fix aliasing to an optimized value
- Use latin hypercube sampling for initial state in parametric_uq
- Fix
remake
with ChainedExperiments - Fix search space transformations
- Plot recipe fixes
- 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
- Improve autotuning discretization with user options.
- Add tutorials:
- Uncertainty modeling for nonlinear systems,
- MPC on neural surrogates,
- Input-simulation tutorial,
- Self-driving car MPC,
- Disturbance modeling,
- MPC for redundant control allocation,
- MPC on model identified from data.
- Improve input integration for MPC controller and added integral action documentation.
- Enhance Collocation for MPC with choice of degree and roots.
- Add Radau option for collocation.
- Add documentation for GUI apps.
- Improve discretization in MPC.
- Improve trimming functionality.
- Simplify interface to constraints and costs for MPC controllers.
- Deprecate
OpenLoopObserver
in favor of StateFeedback
.
- Add support for experiment local parameters
- Add model autocomplete
- Experimental Import FMUs into inverse problems
- Add confidence level based plots
- Add support for chaining calibrations
- Add support for parameters depending on other parameters
- Fix saving behaviour for PEtab imported models
- Bug fixes for multi-replicate experiments
- Bug fixes for plots with a single saved state
- Handle errors that can happen during experiment solving
- Improve internal trial data representation. The data is now pre-transposed before the error function.
- Move code and rename
ForwardSolve
to SingleShooting
. - Saving behavior improvements. The keyword argument
save_names
now defaults to using all the model variables present in the trial data instead of using all the states of the system. - Move pharma specific code to PumasQSP.
Trial
-> `Experiment- Moved dosing to PumasQSP (both via callbacks and via
CustomDosingTrial
) - Moved
PeriodicSteadyStateTrial
to PumasQSP SteadyStateTrial
-> SteadyStateExperiment
ComparisonTrial
-> ExperimentComparison
- Renamed trial collections
IndependentTrials
-> IndependentExperiments
SteadyStateTrials
-> SteadyStateExperiments
TrialChains
-> ChainedExperiments
- 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.
MultipleShooting
bug fixes.KernelCollocate
improvements.- MCMC clean-up.
- Trial collection polishing.
- Better missing data support.
- Require at least JuliaHub v6.0.0 as the deployment platform.
- Improve formatting of the
JuliaSim.info
output.
- 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.
- Bumps the CSV version to v0.10 (from earlier v0.9).
- Fixes room iteration order
- Hierarchical Bayesian inference is now available as a virtual population generation method. This method is enabled by setting the keyword argument
hierarchical = true
in MCMCOpt
, before passing it to the vpop
function. - Pathfinder MCMC initialization is now available. This is an alternative to the standard warmup phase and can be activated by setting the keyword argument
warmup_method = PathfinderWarmUp()
in MCMCOpt
, before passing it to the vpop
function.
- Fix broken dashboard styling.
- The
JuliaSimControls
package has been renamed to JuliaSimControl
. All references to the package should be updated accordingly.
- Add extremum seeking controllers.
- Add extremum seeking adaptive controllers.
- Add an offset option to
frequency_response_analysis
. - Add support for MadNLP.jl as a Model-Predictive Control (MPC) solver.
- Rely on the more robust linearization capabilities of ModelingToolkit (MTK) in favor of a JuliaSimControl-specific implementation.
- Increase performance of autotuning using static systems.
- Refactor MPC API and internals and upgrade capabilities using Optimization.jl
- Improve defaults for Ipopt tolerances.
- Improve autotuning performance.
- Add trapezoidal integration discretization.
- Add collocation for MPC.
- Add gradient options for the solver optimization for MPC.
- Add scaling of signals for MPC.
- Improve initial estimate for optimization in autoscaling.
- Fix some instances of
linearize
. - Fix PID autotuning and model reduction apps.
- Fix difference consts for MPC.
- Update the MTK tutorial to use ModelingToolkitStandardLibrary.
- Add a tutorial for feed-forward control using an inverse-model.
- Add a tutorial for extremum seeking for rodel-reference adaptive control.
- Improve the documentation introduction.
- Add a tutorial on adaptive MPC.
- Improve MPC documentation.
- Add a tutorial on Optimal Control.
- Add a 'space shuttle reentry' example.
trial_cost(trial, x, prob)
is now trial(alg, x, prob)
, where alg
is an optimization algorithm.- To obtain the cost function corresponding to an inverse problem and a specific optimization algorithm you now have to use
observed(prob, alg)
.
- There is a new
calibrate
function that performs a single fit against the data in a robust way. - Add support for multiple shooting methods for optimization (
DataShooting
and MultipleShooting
). - Add support for collocation methods (
KernelCollocate
, SplineCollocate
, NoiseRobustCollocate
). vpop
now supports multithreaded parallelism via EnsembleThreads
.
- You can construct
IndependentTrials
from Vector{Any}
containers. - Performance improvements: the overhead of the setup was reduced to under 10%.
- 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.
- Simplified interface for creating building models based on ThermalThermofluid.
- The user can set the number of floors for the building
- Easily visualize building model simulations with Makie
- Create animations based on the simulation
- Create large building models using MTK
DDS
(Discretized Density Sampling) subsampling method: Custom-made subsampling method that matches the histogram of a virtual population to some input reference histogram for each one of the considered model states.- New plot recipe:
plot(::AbstractQSPResult, ::InverseProblem; trial_names=get_name.(prob.trials))), kwargs...)
to plot each trial whose name is in trial_names
, for every virtual patient in AbstractQSPResult
.
- Fix indexing a
vp::MCMCResult
with an ::AbstractVector
. This fixes using vp::MCMCResult
in subsample
. - Fix plotting bounds data: fix plot recipes breaking when keyword argument
show_data=true
and data is (lower, upper)
bounds. Now show_data
will plot two dashed lines for lower and upper bounds respectively. - Fix a bug in the
plot(vp, trial)
plot recipe where saveat_reduction
would not be forwarded to the underlying solve_ensemble
call. - Fix color and legend bugs in
plot(vp, trial)
and plot(trial, prob, x)
. - Fix
plot(vp, trial, summary = true)
not respecting the states
argument. - Remove OptimizationBBO specific kwargs from the
vpop
solve call. This will make it possible to use other optimization methods. - Fix GSA errors due to the missing
samples
keyword argument.
- Plot Functions page: API page with docstrings for each plot recipe.
- MCMC Refactor: Trials now contain a
likelihood
function and noise_priors
for the scale parameters of typical likelihoods (e.g. standard deviation terms in a Normal). Likelihoods are the closest to a Bayesian equivalent for the err
function of standard optimization, so makes sense to keep them on the trial level. This way users can adapt the likelihood
s and noise_priors
according to what is measured in a trial. The assumption is that each Trial
has its own noise_priors
, either a common one for all save_idxs
or one per save_idxs
. - Add timespan optimization: The timespan can now be specified symbolically. If the parameters used are in the search space, the timespan will be computed using the parameters from the optimization. The
saveat
can also be specified similarly.
- Remove trial caching
- Remove MCMCModelCache
- Simplify API
- Refactor Subsample API
- Rename QSPCost and QSPSensitivity
- Trials can no longer be cached. This feature was not documented and not used by anyone. Removing this makes the
QSPCost
/ InverseProblem
thread safe. - The
solve_trial
and the trial plot recipe no longer have the ss_trial
keyword argument for specifying the steady state trial for a trial with forward_u0=true
. This is now automatically retrieved by the solve_trial
function if a trial needs it. subsample(alg, vp, trial; kwargs...)
is now the subsampling API. Note that the alg
argument has been moved to the first position. Each subsampling algorithm alg (e.g. MAPEL, ARM, etc) has now a Sampler
callable struct that is returned by get_sampler(alg, vp, trial)
. Users can then call the Sampler
with the original vp
to get a subsampled vp
.
alg = MAPEL(binning_function, reference_weights, N_patients_to_subsample)
vp_subsampled = subsample(alg, vp, trial)
# ___OR___
sampler = get_sampler(alg, vp, trial)
idxs = sampler()
vp_subsampled = vp[idxs]
QSPCost(model, trials; search_space)
and QSPSensitivity(model, trials; parameter_space)
have been replaced by InverseProblem(trials, model, search_space)
and SensitivityProblem(trials, model, parameter_space)
. Note that the order of the arguments has changed and that the search_space
is no longer a keyword argument. Instead of building cost functions we now build the corresponding problems to be solved and the functions corresponding to the problems are conceptually separate. The InverseProblem
is still a callable struct, but this will be deprecated in a future version and it is not part of the public API. We will have a dedicated function for evaluating the cost corresponding to a problem.
- Fix compat: A Symbolics.jl issue (
JuliaSymbolics/Symbolics.jl#670
) prompted us to add a compat bound on Symbolics to ~4.9. It was fixed with Symbolics v4.10.2 and the constraint was removed (JuliaSymbolics/Symbolics.jl#671
). - Fix bugs: Fix
vpop_prob
and cost errors from importing vpops. The cost function now works on named tuples that would arise form the Tables.jl interface.
- MCMC documentation
- Update docs links
- Refactor Docs
- README updates
- CompatHelper: add new compat entry for MCMCChains at version 5, (keep existing compat)
- PumasQSP now uses JuliaSimModleOptimizer v3 and that has an important breaking change:
QSPCost(model, trials; search_space)
and QSPSensitivity(model, trials; parameter_space)
have been replaced by InverseProblem(trials, model, search_space)
and SensitivityProblem(trials, model, parameter_space)
. Note that the order of the arguments has changed and that the search_space
is no longer a keyword argument. See the changelog for JuliaSimModelOptimizer for more details.
- This release only changes the version number so that we can avoid a julia issue preventing package loading due to conflicting version numbers between the package and the sub-package.