Changelog

v0.31.0

JuliaSim

Features

  • Add a JULIASIM_SYSTEM_IMAGE environment variable which acts as a flag to indicate if JuliaSim is loaded from a system image.

FMUGeneration v2.0.11

Features

  • Hosts code from Deployment.jl to generate FMUs for ODEProblems
  • Improvements in terms of speed and size of the FMUs.
  • Add support for generating base sysimage for deploying FMUs on JuliaHub.

Documentation

  • Adds basic examples for deploying FMUs.

JuliaSimBatteries v0.5.8

Features

  • Improved the robustness of DAE initialization.
  • Added tests for fast charging at extreme rates.

Bug fixes

  • Fixed errors with the KLU linear solver during initialization.

JuliaSimModelOptimizer v8.0.1

Bug fixes

  • Remove hard coding of nonlinear solver in Collocation methods with partial observability.
  • Add a missing export of TricubeKernel.

Documentation changes

  • Add tutorials for Prediction Error Method and Collocation methods.
  • Clean up all examples and tutorials to make formatting and language consistent.

JuliaSimSurrogates v3.3.1

Features

  • Add regularization for training DigitalEcho.
  • Optimise inference timings for DigitalEcho.
  • Use JLSO as default serialization for JuliaHub batch jobs.
  • Port generic FMU generation code to FMUGeneration.jl.
  • Add support for multiple initial conditions in DigitalEcho.
  • Add recipe for deploying DigitalEcho FMUs.
  • Add dist_ortho_initializer to Layer.
  • Add DenseWalk and Parallel to Layer.
  • Add LayerMonitor callback to monitor the behaviour of DigitalEcho during training.
  • Add diagnostic visualisations for monitoring training performance.
  • Add @generate_fmu macro to launch JuliaHub jobs for generating DigitalEcho FMUs.
  • Add JSHVACDataGenExt to DataGeneration that facilitates data-generation for HVAC models.

Bug Fixes

  • Rename f64 to fl64 in Layer.
  • Port LabTrackerTrainingExt to LabTracker.jl.
  • Fix serialization paths for batch jobs in JuliaHub.
  • Revise the code for Visualisations to minimize the duration required to generate data for the dashboard.
  • Bump QMC and JuliaSimBatteries

v0.30.0

JuliaSim

Features

  • Accept environment path via env for info.

  • Remove PDESurrogates.

  • Remove PumasQSP.

  • Upgrade to Julia v1.9.3.

  • When creating new Pluto notebooks on JuliaHub with JuliaSim, the cells necessary to make a notebook work with JuliaSim are automatically added to the notebook.

    Previously, and for existing notebooks, it was/is necessary to add a cell containing the following code to the notebook:

    begin
      # Deactivate Pluto's package manager to enable the use of JuliaSim
      using Pkg
      Pkg.activate()
    end

JuliaSimBatteries v0.5.7

Breaking changes

  • Parameter inputs to DFN, SPMe, and SPM are now Dicts rather than Functions. Inputs of Functions throw a deprecation warning.
  • Reduce the default number of discretizations in the current collector x-direction from 3 to 1.

Features

  • Add controller inputs for time- and state-varying experimental inputs to charge, discharge, current, power, and voltage.
  • Add PrecompileTools for faster package loading and simulation.
  • Add detailed error messages for initialization failures.
  • Export the unit C for battery C-rate for use in charge, discharge, and current experiments.

Bug fixes

  • Convert initial_guess! function to a RuntimeGeneratedFunction to avoid world age issues.
  • Fix cycle_indices returning incorrect indices for experiment charge/discharge cycles.

Documentation changes

JuliaSimControl v0.9.0

The poly_approx function is producing incorrect results at the time of the JuliaSim release due to changes in the underlying libraries. Instead of silently calculating incorrect results, the function has been (temporarily) disabled until a fix can be implemented.

Breaking changes

  • Make Linear MPC controllers use the same interface as GenericMPCProblm. This means that the return value of MPC.optimize! is now of type co::ControllerOutput rather than a tuple like before. The optimized input-signal trajectory is available as co.u. Similarily, MPC.step! takes an ObserverInput structure.
  • Change compat with ModelingToolkit standard library to v2, drop compat for v1.

Features

  • Replace fixed-step integrator MPC.rk4 by SeeToDee.Rk4 which offers additional features. The change is non-breaking.
  • Increase default solver timeout duration for autotuning and MPC problems.
  • Make QN an optional argument for linear MPC problems.
  • Allow linear MPC to use BoundsConstraint structure.
  • Make building the OptimizationProblem in the constructor of generic MPC controllers optional.
  • Add optimization solution object to the ControllerOutput structure for MPC controllers.
  • Add special formulation of Sliding-Mode-Control for robust control of linear systems.
  • Allow ObserverInput to handle reference trajectories rather than just reference points.

Documentation changes

  • Reorganize documentation into separate Tutorials and Examples sections.
  • Add MPC for PDE system example to PDE control tutorial.
  • Add video tutorials for control design and system identification to documentation.

JuliaSimModelOptimizer v8.0.0

Breaking changes

  • Add model_transformations keyword in the InverseProblem constructor.
  • All collocation methods have been renamed, e.g. SplineCollocate to SplineCollocation.
  • err keyword which takes in loss functions in the Experiment constructor is removed and loss_func keyword is added.

Features

  • Add Prediction Error Method using a callback during simulation.
  • Add support for multiple models in the same InverseProblem.
  • Add support for using JuliaSimSurrogates' DigitalEcho using DigitalEcho frontend (but it is not exported).
  • Use collocation methods with limited observability.
  • Performance improvements for collocation methods using caching.
  • Support for 3 argument loss function loss_func - current point in the search space, solution and data.

Bug fixes

  • Collocation methods in estimating states and derivatives.
  • PEtab integration.
  • Make simulate work without a search space.
  • Plot recipes.
  • Multiple shooting methods.
  • Progress bar information.
  • Allow either maxiters or maxtime in calibration algorithms.
  • Change the linesearch in the default optimizer to BackTracking.
  • Model autocomplete.

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.