Skip to content

Releases: nasa/prog_models

prog_models v1.5.2

13 Jul 22:33
7bdd6d6
Compare
Choose a tag to compare

Release v1.5.2 Hotfix

Fixes incompatibility issue between ProgPy and newly released Tensorflow v2.13

prog_models v1.5.1

13 Jul 03:38
9bf9e59
Compare
Choose a tag to compare

Release v1.5.1 Hotfix

Fixes two issues:

  1. Issue where floating point errors can cause infinite loop when simulating using automatic step sizes and step size that cannot be divided evenly by two in floating point arithmetic.
  2. Issue where None's in LSTM state cause array dtype to revert to object, which cannot be converted into a tensor.

prog_models v1.5

29 Jun 14:53
Compare
Choose a tag to compare

Release v1.5

  • 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
  • New model types that combine multiple models:
    • EnsembleModel: combinations of multiple models of the same system where results are aggregated
    • CompositeModel: combinations of models of different systems that are interdependent
  • New Model Type: Aircraft flight model interface, 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: Implemented Small Rotorcraft AircraftModel
  • New DataModel: Polynomial Chaos Expansion (PCE) Direct Surrogate model
  • Initial transition of Input/State/OutputContainer and SimResult to use Pandas DataFrame. 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 when calculating 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 can now be changed in estimate_params
  • Revamping integration:
    • New integration methods: RK4 and methods from scipy.integrate
    • Integration is now set at the model level. For continuous models the specified integration method will apply when calling next_state
  • Python 3.11 support
  • Various bug fixes and performance improvements

Note

In the next release (v1.6), prog_models and prog_algs will be combined into a single package called progpy. For release v1.6 you will install what is currently prog_modals and prog_algs by calling pip install progpy.

Acknowledgements

Thank you to our interns Aditya Tummala (@aqitya) and Miryam Strautkalns (@mstraut) for their contributions to this release.

The changes in this release were produced in part by Northrop Grumman under a contributor license agreement. Thank you NGC!

This release includes contributions from NASA's Autonomous Spacecraft Operations (ASO), Data and Reasoning Fabric (DRF), System Wide Safety (SWS), and Transformative Tools & Technologies (TTT) projects. Thank you for your support!

prog_models v1.4

28 Oct 15:57
Compare
Choose a tag to compare

Release v1.4

  • Data-Driven Models
    • Created new 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 (.from_data), or an existing model (.from_model)
    • Introduced new LSTM State Transition DataModel. See lstm_model, full_lstm_model, and custom_model for examples of use
    • DMD model updated to new data-driven model interface. Can now be created from data as well as an existing model
    • Added ability to integrate training noise to data for DMD Model
  • New Model: Single-Phase DC Motor
  • Added the ability to select integration method when simulation. Current options are Euler and RK4
  • New feature allowing serialization of model parameters as JSON. See serialization example
  • 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
  • Added ability to set bounds when estimating parameters (See PrognosticsModel.estimate_params())
  • Initialize method is now optional
  • Various bug fixes and performance improvements

Acknowledgements

Thank you to our intern Henry Lembo (@hlembo) for his contributions to this release.

This release includes contributions from NASA's Autonomous Spacecraft Operations (ASO), Data and Reasoning Fabric (DRF), System Wide Safety (SWS), and Transformative Tools & Technologies (TTT) projects. Thank you for your support!

prog_models v1.3.1: Bugfixes

24 May 18:43
f1e3205
Compare
Choose a tag to compare

Various bug fixes, including:

  • Removing unnecessary deepcopies
  • Fixed initial state updating bug in simulate_to*
  • Fix DMD handling of tuple save_freq
  • Fix copy and comparison for DictLikeMatrixWrapper

prog_models v1.3

13 May 23:56
a523e45
Compare
Choose a tag to compare

Release v1.3

  • Surrogate Models Added initial draft of new feature to generate surrogate models automatically from PrognosticsModel (See examples.generate_surrogate.py). Initial implementation uses Dynamic Mode Decomposition. Additional Surrogate Model Generation approaches will be explored for future releases.
  • New Example Models Added new DCMotor, ESC, and Powertrain models to prog_models.models (See examples.powertrain.py`).
  • Datasets Added new feature that allows users to access prognostic datasets programmatically (See examples.dataset.py).
  • Added new 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. See linear_model.py example for detail.
  • Added new StateContainer/InputContainer/OutputContainer objects for classes which allow for data access in matrix form and enforce expected keys.
  • Added new metric for SimResult: Monotonicity.
  • SimResult.plot() now automatically shows legends.
  • Added drag to 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 SimResult and LazySimResult for robustness.
  • Various performance improvements and bug fixes.

Note

Now input, states, and output should be represented by model.InputContainer, StateContainer, and OutputContainer, respectively.

Note

Python 3.6 is no longer supported.

Acknowledgments

Thank you to our intern Lawrence Hwang (@lawrence-hwang) for his help with this release.

This release includes contributions from NASA's Autonomous Spacecraft Operations (ASO), Data and Reasoning Fabric (DRF), and System Wide Safety (SWS) projects. Thank you for your support!

v1.2.2: Minor fixes

22 Dec 16:51
c6d001a
Compare
Choose a tag to compare

A few minor fixes:

  • ThrownObject used a property to store max_x. This meant it couldn't be used in sample-based algorithms like a Particle Filter or Monte Carlo. max_x is now a state.
  • Fixed comparison of models using equality
  • Support added for single threshold_key (instead of list). E.g., m.simulate_to_threshold(threshold_keys='key1')

v1.2.1: Python3.10 Support

30 Nov 21:33
8f9636e
Compare
Choose a tag to compare

Added support for Python 3.10

prog_models v1.2

12 Nov 19:45
e2c3051
Compare
Choose a tag to compare

Release v1.2 (Mini-release)

This release primarily includes changes needed to support prog_algs v1.1. Specific improvements include:

  • Model Vectorization - significantly improves runtime when used in way that requires multiple samples to be simulated simultaneously [#143]
  • Added support for dynamic step sizes in simulation (using user defined next_time function) [#131]
  • Created model.apply_limits(state) -> state function to apply model state limits. This enables other methods that externally agitate state (e.g., particle filters) to ensure they remain within bounds).
  • Arguments in initialize are now optional for existing models [#157]
  • Updates to simulate_to*
    • First output is now optional for classes where arguments of initialize are optional [#157]
    • Ability to specify the starting time [#145]
  • New ThrownObject model used in examples and tests [#139]
  • Extend SimResult to include features of a list (e.g., index, pop, extend) [#150]
  • Removed intra-package dependency in examples which prevented some IDEs from executing a few of the examples [#139]
  • Added additional examples demonstrating prog_models features
  • Various Bugfixes

The changes in this release were produced in part by Northrop Grumman under a contributor license agreement. Thank you NGC!

prog_models v1.1

20 Aug 23:43
a49a73b
Compare
Choose a tag to compare

Release v1.1

General Updates

  • Added Derived Parameter Feature- allows users to specify callbacks to automatically update parameters.
  • Added Parameter Estimation Feature- supports the estimation of model parameters using data from one or more runs
  • Added Automatic Noise Generation Feature- noise generation is done automatically in private functions __next_state() and __output()
  • Added Configurable State Bounds Feature- optional bound checking for states. If next_state is outside of range it is set equal to the closest boundary
    • Added example to demonstrate new Configurable State Bounds Feature
  • Predictions now return a Simulation Result object.
    • This new class makes Output and Event State a "Lazily Evaluated" property. It is now calculated on need. 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())
  • Added Intermediate Printing Feature- option to print states during simulation
  • Added support for observables- i.e., performance parameters that are a function of system state/health but are not directly measured (e.g., maximum torque of a motor)
  • Added support for Python3.9
  • Various bugfixes

ElectroChemistry Model Updates

  • Added thermal degradation
  • Added Capacity Degradation (i.e., EOL) and combined EOL/EOD Electrochemistry models with new event (degraded_capacity)
  • Updated SOC (EOD event state) calculation to include voltage when near VEOD. This prevents situation where voltage is below lower bound but SOC > 0
  • Added ranges and descriptions for model states
  • Various Bug Fixes

CentrifugalPump Model Updates

  • Added CentrifugalPumpBase class where wear rates are parameters instead of part of the state vector
  • Fixed bug where some event states were returned as negative
  • Added example on use of CentrifugalPump Model
  • Added ranges and descriptions for model states
  • Performance Improvements

PneumaticValve Model Updates

  • Added PneumaticValveBase class where wear rates are parameters instead of part of the state vector
  • Added ranges and descriptions for model states
  • Added example on use of PneumaticValve model

BatteryCircuit Model

  • Added ranges and descriptions for model states

Note: noise addition has been moved into the PrognosticsModel class. If you've created a new class which adds noise manually - please remove that to avoid noise being added twice.

Thank you to our intern Wade Lamberson (@wlamberson1) for his help this summer. His contributions are included in this release.
This release was completed thanks to input from engineers at Northrop Grumman Corporation. The team appreciates NGC's input.