Changelog

v0.29.0

JuliaSimControl v0.8.2

Features

Tutorials

JuliaSimModelOptimizer v6.0.1

Features

  • 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

Bug fixes

  • 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

JuliaSimSurrogates v3.1.0

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

v0.28.0

JuliaSim

Features

  • Upgrade to Julia v1.8.5.

JuliaSimControl v0.8.0

Features

  • 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.

Deprecations

  • Deprecate OpenLoopObserver in favor of StateFeedback.

JuliaSimModelOptimizer v5.5.4

Features

  • 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

Bug fixes

  • 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

v0.27.0

JuliaSimModelOptimizer v5.0.0

Breaking changes

  • 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

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.

Bug fixes

  • MultipleShooting bug fixes.
  • KernelCollocate improvements.
  • MCMC clean-up.
  • Trial collection polishing.
  • Better missing data support.

Documentation

  • Hierarchical MCMC docs.

v0.26.0

JuliaSim

Breaking Change

  • Require at least JuliaHub v6.0.0 as the deployment platform.

Features

  • Improve formatting of the JuliaSim.info output.

v0.25.1

JuliaSimModelOptimizer v4.1.2

Bug Fixes

  • 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 v0.2.3

Bug Fixes

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

BuildingModelLibraryMakie v0.1.6

Bug Fixes

  • Fix room iteration order

ThermalThermofluid v0.1.3

License

  • Adds LICENSE

Bug Fixes

  • Fixes room iteration order

v0.25.0

JuliaSimModelOptimizer v4.1.0

Features

  • 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.

v0.24.1

JuliaSimSurrogates v1.0.2

Bug Fixes

  • Fix broken dashboard styling.

v0.24.0

JuliaSimControl v0.6.0

Breaking Changes

  • The JuliaSimControls package has been renamed to JuliaSimControl. All references to the package should be updated accordingly.

Features

  • 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.

Bug Fixes

  • Fix some instances of linearize.
  • Fix PID autotuning and model reduction apps.
  • Fix difference consts for MPC.

Documentation

  • 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.

JuliaSimModelOptimizer v4.0.2

Breaking Changes

  • 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).

Features

  • 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.

Bug fixes

  • You can construct IndependentTrials from Vector{Any} containers.
  • Performance improvements: the overhead of the setup was reduced to under 10%.

PumasQSP v2.1.2

Features

  • 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.

BuildingModelLibrary v0.2.1

Features

  • Simplified interface for creating building models based on ThermalThermofluid.
  • The user can set the number of floors for the building

BuildingModelLibraryMakie v0.1.5

Features

  • Easily visualize building model simulations with Makie
  • Create animations based on the simulation

ThermalThermofluid v0.1.3

Features

  • Create large building models using MTK

v0.23.0

JuliaSimModelOptimizer v3.1.1

Features

  • 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.

Bug fixes

  • 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.

Other

  • Plot Functions page: API page with docstrings for each plot recipe.

v0.22.0

JuliaSimModelOptimizer v3.0.1

Features

  • 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 likelihoods 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.

Breaking changes

  • Remove trial caching
  • Remove MCMCModelCache
  • Simplify API
  • Refactor Subsample API
  • Rename QSPCost and QSPSensitivity

Upgrade steps

  • 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.

Bug fixes

  • 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.

Docs

  • MCMC documentation
  • Update docs links
  • Refactor Docs

Other

  • README updates
  • CompatHelper: add new compat entry for MCMCChains at version 5, (keep existing compat)

PumasQSP v2.0.1

Breaking changes

  • 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.

Bug fixes

  • 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.