Release Notes#
Updates in V1.6#
progpy#
Combined previous prog_models and prog_algs packages into a single package, progpy.
Added new
progpy.MixtureOfExpertsModel
, which combines multiple models of the same system into a single model, where only the best of the comprised models will be used at each timestep.Added ability to set random seed in
progpy.loading.GaussianNoiseWrapper
, allowing for repeatable experimentsVarious bug fixes and performance improvements
Upgrading from v1.5#
v1.6 combined prog_models and prog_algs into a single package progpy. To upgrade to 1.6, you will need to download the new progpy package (pip install progpy) and update all imports to use progpy. For example from prog_models import PrognosticsModel becomes from progpy import PrognosticsModel, and from prog_algs import predictors becomes from progpy import predictors.
prog_server#
Updated to work with progpy v1.6
Updates in V1.5#
prog_models#
Direct Models: Added support for new model type: Direct Models. Direct Models directly map current state and future load to time of event, rather than state-transition models which simulate forward to calculate time of event. They’re created by implementing the
prog_models.PrognosticsModel.time_of_event()
. See direct model example for example of use.New model types that combine multiple models.
Ensemble Model: Combinations of multiple models of the same system where results are aggregated. See ensemble example for example of use.
Composite Model: Combinations of models of different systems that are interdependent. See composite example for example of use.
New Model Type: Aircraft flight model interface,
prog_models.models.aircraft_model.AircraftModel
. Anticipated prognostics applications with the aircraft flight model include estimating and predicting loading of other aircraft systems (e.g., powertrain) and safety metrics.New Model: Small Rotorcraft AircraftModel. See example.
New DataModel: Polynomial Chaos Expansion (PCE) Direct Surrogate Model (
prog_models.data_models.PolynomialChaosExpansion
). See chaos example for example of use.Started transition of InputContainers, StateContainers, OutputContainer and SimResult to use Pandas DataFrames. This release will bring the interface more in compliance with DataFrames. v1.6 will fully transition the classes to DataFrames.
Implemented new metrics that can be used in
prog_models.PrognosticsModel.calc_error()
: Root Mean Square Error (RMSE), Maximum Error (MAX_E), Mean Absolute Error (MAE), Mean Absolute Percentage Error (MAPE), and Dynamic Time Warping (DTW)Error calculation metric (above) can now be set when calling
prog_models.PrognosticsModel.estimate_params()
Reworked integration methods in simulation
New integration methods: RK4 and methods from scipy.integrate
Integration can now be set at the model level. For continuous models the specified integration method will apply when calling next_state
Python3.11 support
Various bug fixes and performance improvements
prog_algs#
Integration method can now be set for state estimation and prediction by setting model.parameters[‘integration_method’].
Minimum time step can now be set in state estimation, using the argument ‘dt’. This is useful for models that become unstable with large time steps.
Python3.11 support
prog_server#
Python3.11 support
Updates in V1.4#
prog_models#
Data-Driven Models
Created new
prog_models.data_models.DataModel
class as interface/superclass for all data-driven models. Data-driven models are interchangeable in use (e.g., simulation, use with prog_algs) with physics-based models. DataModels can be trained using data (prog_models.data_models.DataModel.from_data()
), or an existing model (prog_models.data_models.DataModel.from_model()
)Introduced new LSTM State Transition DataModel (
prog_models.data_models.LSTMStateTransitionModel
). Seeexamples.lstm_model
,examples.full_lstm_model
, andexamples.custom_model
for examples of useDMD model (
prog_models.data_models.DMDModel
) updated to new data-driven model interface. Can now be created from data as well as an existing modelAdded ability to integrate training noise to data for DMD Model (
prog_models.data_models.DMDModel
)
New Model: Single-Phase DC Motor (
prog_models.models.DCMotorSP
)Added the ability to select integration method when simulating (see
integration_method
keywork argument forprog_models.PrognosticsModel.simulate_to_threshold()
). Current options are Euler and RK4New feature allowing serialization of model parameters as JSON. See
prog_models.PrognosticsModel.to_json()
,prog_models.PrognosticsModel.from_json()
, and serialization example (examples.serialization
)Added automatic step size feature in simulation. When enabled, step size will adapt to meet the exact save_pts and save_freq. Step size range can also be bounded
New Example Model: Simple Paris’ Law (
prog_models.models.ParisLawCrackGrowth
)Added ability to set bounds when estimating parameters (See
prog_models.PrognosticsModel.estimate_params()
)Initialize method is now optional
Various bug fixes and performance improvements
prog_algs#
Added new
prog_algs.predictors.ToEPredictionProfile
Metric: Monotonicity. Seeprog_algs.predictors.ToEPredictionProfile.monotonicity()
Updated to support prog_models v1.4
Various bug fixes and performance improvements
prog_server and prog_client#
Added new endpoint (GET /api/v1/session/{id}/model) and client function (
prog_client.Session.get_model()
) to get the model from the server.Updated to support prog_models and prog_algs v1.4
Various bug fixes and performance improvements
Updates in V1.3#
prog_models#
Surrogate Models Added initial draft of new feature to generate surrogate models automatically from
prog_models.PrognosticsModel
. (Seeexamples.generate_surrogate
example). Initial implementation uses Dynamic Mode Decomposition. Additional Surrogate Model Generation approaches will be explored for future releases. [Developed by NASA’s DRF Project]New Example Models Added new
prog_models.models.DCMotor
,prog_models.models.ESC
, andprog_models.models.Powertrain
models (Seeexamples.sim_powertrain
example) [Developed by NASA’s SWS Project]Datasets Added new feature that allows users to access prognostic datasets programmatically (See
examples.dataset
)Added new
prog_models.LinearModel
class - Linear Prognostics Models can be represented by a Linear Model. Similar to PrognosticsModels, LinearModels are created by subclassing the LinearModel class. Some algorithms will only work with Linear Models. Seeexamples.linear_model
example for detailAdded new StateContainer/InputContainer/OutputContainer objects for classes which allow for data access in matrix form and enforce expected keys.
Added new metric for SimResult:
prog_models.sim_result.SimResult.monotonicity()
.prog_models.sim_result.SimResult.plot()
now automatically shows legendsAdded drag to
prog_models.models.ThrownObject
model, making the model non-linear. Degree of nonlinearity can be effected using the model parameters (e.g., coefficient of drag cd).observables from previous releases are now called performance_metrics
model.simulate_to* now returns named tuple, allowing for access by property name (e.g., result.states)
Updates to
prog_models.sim_result.SimResult
andprog_models.sim_result.LazySimResult
for robustnessVarious performance improvements and bug fixes
prog_algs#
New State Estimator Added
prog_algs.state_estimators.KalmanFilter
. Works with models derived fromprog_models.LinearModel
. Seeexamples.kalman_filter
New Predictor Added
prog_algs.predictors.UnscentedTransformPredictor
.Initial state estimate (x0) can now be passed as UncertainData to represent initial state uncertainty. See
examples.playback
Added new metrics for
prog_algs.predictors.ToEPredictionProfile
: Prognostics horizon, Cumulative Relative Accuracy (CRA). Seeexamples.playback
Added ability to plot
prog_algs.predictors.ToEPredictionProfile
: profile.plot(). Seeexamples.playback
Added new metric for
prog_algs.predictors.Prediction
: Monotonicity, Relative Accuracy (RA)Added new metric for
prog_algs.uncertain_data.UncertainData
(and subclasses): Root Mean Square Error (RMSE)Added new describe method for
prog_algs.uncertain_data.UncertainData
(and subclasses)Add support for python 3.10
Various performance improvements and bugfixes
prog_server#
Added ability to set state using pickled prog_algs.uncertain_data.UncertainData type
prog_client#
Added new set_state method
Updates in V1.2#
prog_models#
- New Feature: Vectorized Models
Distributed models were vectorized to support vectorized sample-based prognostics approaches
- New Feature: Dynamic Step Sizes
Now step size can be a function of time or state
See examples.dynamic_step_size for more information
- New Feature: New method model.apply_bounds
This method allows for other classes to use applied bound limits
Simulate_to* methods can now specify initial time. Also, outputs are now optional
Various bug fixes
prog_algs#
New Feature: Histogram and Scatter Plot of UncertainData.
- New Feature: Vectorized particle filter.
Particle Filter State Estimator is now vectorized for vectorized models - this significantly improves performance.
- New Feature: Unscented Transform Predictor.
New predictor that propogates sigma points forward to estimate time of event and future states.
New Feature: Prediction class to represent predicted future values.
New Feature: ToEPredictionProfile class to represent and operate on the result of multiple predictions generated at different prediction times.
Added metrics percentage_in_bounds and metrics and plots to UncertainData .
Add support for Python3.9.
General Bugfixes.
Updates in V1.1#
prog_models#
- New Feature: Derived Parameters
Users can specify callbacks for parameters that are defined from others. These callbacks will be called when the dependency parameter is updated.
See examples.derived_params for more information.
- New Feature: Parameter Estimation
Users can use the estimate_parameters method to estimate all or select parameters.
see examples.param_est
- New Feature: Automatic Noise Generation
Now noise is automatically generated when next_state/dx (process_noise) and output (measurement_noise). This removed the need to explicitly call apply_*_noise functions in these methods.
See examples.noise for more details in setting noise
For any classes users created using V1.0.*, you should remove any call to apply_*_noise functions to prevent double noise application.
- New Feature: Configurable State Bounds
Users can specify the range of valid values for each state (e.g., a temperature in celcius would have to be greater than -273.15 - absolute zero)
- New Feature: Simulation Result Class
Simulations now return a simulation result object for each value (e.g., output, input, state, etc)
These simulation result objects can be used just like the previous lists.
Output and Event State are now “Lazily Evaluated”. This speeds up simulation when intermediate states are not printed and these properties are not used
A plot method has been added directly to the class (e.g., event_states.plot())
- New Feature: Intermediate Result Printing
Use the print parameter to enable printing intermediate results during a simulation
e.g., model.simulate_to_threshold(…, print=True)
Note: This slows down simulation performance
Added support for python 3.9
Various bug fixes
ElectroChemistry Model Updates#
New Feature: Added thermal effects. Now the model include how the temperature is effected by use. Previous implementation only included effects of temperature on performance.
New Feature: Added degraded_capacity (i.e., EOL) event to model. There are now three different models: BatteryElectroChemEOL (degraded_capacity only), BatteryElectroChemEOD (discharge only), and BatteryElectroChemEODEOL (combined). BatteryElectroChem is an alias for BatteryElectroChemEODEOL.
New Feature: Updated SOC (EOD Event State) calculation to include voltage when near V_EOD. This prevents a situation where the voltage is below lower bound but SOC > 0.
CentrifugalPump Model Updates#
- New Feature: Added CentrifugalPumpBase class where wear rates are parameters instead of part of the state vector.
Some users may use this class for prognostics, then use the parameter estimation tool occasionally to update the wear rates, which change very slowly.
Bugfix: Fixed bug where some event states were returned as negative
Bugfix: Fixed bug where some states were saved as parameters instead of part of the state.
Added example on use of CentrifugalPump Model (see examples.sim_pump)
Performance improvements
PneumaticValve Model Updates#
- New Feature: Added PneumaticValveBase class where wear rates are parameters instead of part of the state vector.
Some users may use this class for prognostics, then use the parameter estimation tool occasionally to update the wear rates, which change very slowly.
Added example on use of PneumaticValve Model (see examples.sim_valve)