Changelog

0.5.10

Date:

April 09, 2024

Features

  • Added a save and load method to class DOELib.Design

  • Added a random_seed optional argument to DOELib.Design

  • Added a get_design method to load an instance DOELib.Design intialized to the provided data

0.5.9

Date:

April 22, 2023

Fixes

  • Fix compatibility with python versions 3.8, 3.9, 3.10, and 3.11

0.5.8

Date:

April 18, 2023

Fixes

  • Fix the compute_volume method to avoid float object TypeError on call to math.factorial

0.5.7

Date:

March 04, 2023

Features

  • compute_absorption() method of MarginNetwork now has an optional method argument for specifying different root finding algorithms

  • Margins can now be allocated using different margin allocation strategies for each margin node using the allocate_margins method

  • Added technical documentation explaining the theory of the Margin Value Method

Fixes

  • Removed the update of Distribution histograms self.value_dist = self.values on every __call__ of scalar parameters to improve performance

Incompatible changes

  • forward() method of MarginNetwork now requires the argument strategy to be a list of strategies one for each Decision instance

0.5.6

Date:

June 29, 2022

Features

  • The method allocate_margins() allows the user to specify a margin allocation strategy such as min_excess or manual

  • The Decision class now stores selection_values in order to allow the use to probe the frequency of each decision made

Fixes

  • Fixed case when errors occur in MarginNode objects due to value_dist property, when attempting to generate histogram from samples

  • random() method of Specification now calls the random() method of Distribution implicitly

  • MarginNetwork instances now store Specification instances when using the save and load methods

  • MarginNetwork instances now store deterioration_vector``and ``utilization_matrix

  • Fixed the train_surrogate, train_inverse, and train_performance_surrogate methods to cap data at 100 * dim for KRG models

Incompatible changes

  • forward() method of MarginNetwork now requires two optional arguments allocate_margin, and strategy for all Decision instances

  • __call__() method of Decision now requires two arguments allocate_margin, and strategy

  • The method allocate_margins() must now be called before every forward() call of a MarginNetwork instance

  • It is recommended to use self.input_spec instead of those defined globally outside forward() and randomize() implementations

0.5.5

Date:

April 15, 2022

Fixes

  • Behaviour objects now support the train_inverse method (works only if the train_surrogate method has completed successfully) for training a surrogate model that inverts decided variables to any variable of choice (given by the key argument) and intermediate parameters (given by the intermediate attribute)

  • Behaviour objects now support the inv_call which can be user defined (must define the intermediate and inverted attributes) or from the train_inverse method

  • if use_estimate is False, the MarginNetwork must have equal number of decision and margin nodes associated with each other (1:1 ratio)

  • The user-implemented forward method of the MarginNetwork object must include the outputs optional argument if using inv_call anywhere in the method

  • Added error handling for train_surrogate function by rejecting NaN values during sampling of the blackbox

Incompatible changes

  • use_estimate argument of compute_impact method now relates to whether a surrogate is used or not for impact calculation

  • train_surrogate argument of Behaviour class now needs the arguments n_i, n_p, n_dv, and n_tt for each of the output parameters

  • output of a decision node is given by the attribute output_value instead of decided_value

0.5.4

Date:

April 10, 2022

Fixes

  • Removed example scripts since they are more for research than for utility

  • Modified impact on performance calculation compute_impact to cap performance parameters by their maximum and minimum values

  • Fixed impact on performance calculation compute_impact to utilized target thresholds and decided values instead of excess values from surrogate

  • Added visualization tests

0.5.3

Date:

March 29, 2022

Fixes

  • removed dependency on py

0.5.2

Date:

March 29, 2022

Features

  • First public release of mvmlib

0.5.1

Date:

March 27, 2022

Incompatible changes

  • Rename the library to mvmlib and the main module to mvm

0.5.0

Date:

March 14, 2022

Incompatible changes

  • The init_decisions() must be called before the first forward() and after every randomize() or changing the input specifications to store the universe of decided values

  • if the argument num_threads of train_performance_surrogate(), compute_absorption(), or compute_decisions() is greater then 1 then Jupyter notebook cannot be used with ur script

  • The argument value of InputSpec initializer must be a float or an integer only. A Distribution object must be passed to the optional argument distribution

Features

  • The Decision class can now support multiple decided values using the n_nodes optional argument. User must supple equal length of target thresholds

  • Can pass additional arguments as kwargs to behaviour model for Decision class during the __call__ method

  • The method train_performance_surrogate() of the class MarginNetwork``now supports different surrogate models specified using the ``sm_type argument

  • The method train_performance_surrogate() of the class MarginNetwork now supports parallel processing specified using the num_threads argument

  • The method compute_absorption() of the class MarginNetwork now supports parallel processing of the decision universe (which changes every time the input specifications self.spec_vector are iterated during absorption computation) specified using the num_threads argument

  • The method compute_decisions() of the class Decision now supports parallel processing specified using the num_threads argument

Fixes

  • More efficient compute_absorption() method by lumping threshold limit and specification limit calculations

  • Fixed train_performance_surrogate() method to properly handle ordinal type variables such as INT

  • Fixed compute_absorption() method to properly handle input specifications that have negative nominal values

  • Fixed compute_absorption() method to change nan values to zero

  • Added __deepcopy__ directives to all classes

0.4.8

Date:

February 20, 2022

Incompatible changes

  • Added mandatory argument variable_type to InputSpec and DesignParam classes during initialization

Features

  • Add the Decision class for defining decision nodes and off-the-shelf components

  • Add the integer and continuous type variables for InputSpec and DesignParam classes

0.4.7

Date:

February 17, 2022

Incompatible changes

  • AbsorptionMatrix class is removed, instead call MarginNetwork.absoprtion_matrix.value to retrieve absorption values

  • ImpactMatrix class is removed, instead call MarginNetwork.impact_matrix.value to retrieve impact values

  • AbsorptionMatrix.deteriorations attribute is removed, instead call MarginNetwork.deterioration_vector.value to retrieve deterioration values

  • All random sampling functions use the .random() method to draw samples. Cannot use the __call__ operator anymore

  • MarginNetwork method reset_outputs() not takes a single optional argument to reset by N samples

  • dist method reset_outputs() not takes a single optional argument to reset by N samples

  • Distribution object method .random() (previously __call__) now returns a 1D np.ndarray for one dimensional pdfs

  • Rename methods to comply with PEP 582 standard compute_mvp, get_array, set_func

  • Rename classes to comply with PEP 582 standard GuassianFunc, UniformFunc, TriangularFunc, FuzzySet, FuzzyFunc, FuzzySystem, FuzzyRule

Features

  • Separate absorption, deterioration, and impact matrics into separate MarginNetwork attributes

  • Use a Factory design parameter for defining matrix and vector caches used during stochastic simulation of MarginNetwork

0.4.6

Date:

January 14, 2022

Features

  • Add utilization calculation as part of the compute_absorption method

  • Add utilization storage to AbsorptionMatrix class

  • Add compute_MVP method to MarginNetwork class to show margin value map

  • Add nearest method to dmLib to allow calculation of the distance metric for the MVP

Fixes

  • Adapt train_performance_surrogate, view_perf, and compute_impact to include scaling functionality when training Kriging model

  • Add input specifications samples as input to performance surrogate in train_performance_surrogate to accommodate variability input specifications

Incompatible changes

  • InputSpec now requires the argument universe upon initialization

0.4.5

Date:

January 06, 2022

Features

  • Add distribution type uniformFunc for multivariate uniform distributions

Fixes

  • Fix MarginNode.value property to retrieve the last available sample after calling the reset(N) method

  • Fix value_dist property of Performance and MarginNode classes to construct histogram of samples and then initialize a Distribution class from them

  • Force absorption computing to ignore 0 deteriorations by outputting a np.nan

  • Make absorption computation sign independent

  • Add relevant tests for absorption and deterioration computation

  • Simplified length calculation procedure in strut_design.py example by using analytical expression instead of fsolve in B1 model

0.4.4

Date:

December 20, 2021

Features

  • Add ability to selectively choose how to randomize the MAN by redefining the randomize method of MarginNetwork

  • Selectively choose when to reset the outputs of the MAN using the reset_outputs method

  • Can retrieve design parameters, input specs, excess, target thresholds, decided values, and performances using the properties design_vector, spec_vector, excess_vector, dv_vector, tt_vector, and perf_vector, respectively

  • Add output storage class for a Margin Analysis Network (MAN) AbsorptionMatrix which stores absorption and deterioration

  • Add method compute_absorption to compute an observation of the change absorption capability matrix and deterioration vector

  • Add view(), view_cdf(), view_det(), view_det_cdf() methods to AbsorptionMatrix class by inheritance from VisualizeDist

Incompatible changes

  • instances of InputSpec should be called using the .value property just like DesignParam and FixedParam

  • train_performance_surrogate argument ext_samples now takes training points of (excess, performance) instead of (decided_value, performance)

0.4.3

Date:

December 18, 2021

Features

  • Add VisualizeDist class to uncertaintyLib.py module

  • Add output storage class for a Margin Analysis Network (MAN) Performance

  • Add output storage class for a Margin Analysis Network (MAN) ImpactMatrix

  • Add method train_performance_surrogate which uses the library SMT to estimate threshold performances

  • Add method compute_impact to compute an observation of the Impact on Performance matrix

  • Add method view_perf to MarginNetwork class to visualize 2D projections of performance surrogate models

  • Add view() and view_cdf() methods to Performance and ImpactMatrix classes by inheritance from VisualizeDist

  • Design class can now take array_like values for argument nsamples if using doe_type='full_fact'

Incompatible changes

  • move compute_cdf() method from class MarginNode to module level method in uncertaintyLib.py module

  • use property .values instead of excess to retrieve observations of excess from MarginNode object

  • Added dependency on SMT

  • view() and view_cdf() methods now take optional arguments folder, file, img_format, instead of just savefile

  • Argument type of Design initialization changed to doe_type to avoid overloading python object type

0.4.2

Date:

December 17, 2021

Features

  • Add building block for a Margin Analysis Network (MAN) as a class object InputSpec

  • Add building block for a Margin Analysis Network (MAN) as a class object FixedParam

  • Add building block for a Margin Analysis Network (MAN) as a class object DesignParam

  • Add building block for a Margin Analysis Network (MAN) as a class object Behaviour

  • Behaviour __call__ method must be redefined by the user

  • Add MarginNetwork class object that must be inherited and redefined by user

  • Add ability to call MarginNetwork.forward() in a Monte Carlo setting

0.4.1

Date:

December 15, 2021

Incompatible changes

  • MarginNode class object is now called using MarginNode(decided_value,threshold), where decided_value and threshold are vectors of equal length sampled from their respective functions

0.4.0

Date:

October 26, 2021

Features

  • Add building block for a Margin Analysis Network (MAN) as a class object MarginNode

  • Add ability to call MarginNode() using a set of requirement observations and design parameters in a Monte Carlo setting

  • Add ability to view MarginNode excess pdf and cdf using MarginNode.view() and MarginNode.view_cdf() methods

Fixes

  • Transfer class object labels to plot axes for fuzzySystem.view(), Distribution.view(), and gaussianFunc.view()

0.3.0

Date:

October 23, 2021

Features

  • Add support for defining arbitrary probability densities using raw density values Distribution(p)

  • Add support for random sampling from instance of Distribution by calling it

  • Add support for sampling from Gaussian distribution gaussianFunc by calling it directly

  • Add support for viewing samples from defined distribution using the .view() method for Distribution and gaussianFunc instances

  • Add support for viewing aggregate function after computing using .view() method for fuzzySystem after using .compute() method

Incompatible changes

  • Must manually reset fuzzySystem instance after .compute() to clear aggregate function

Fixes

  • Fixed problem with fuzzySystem.output_activation` not being calculated properly using element-wise operations

  • Add PDF_examples.py script

  • Improve existing tests test_fuzzyInference_N

  • Add new tests test_gaussian_pdf_rvs and test_arbitrary_pdf_rvs

  • Update documentation conf.py to include class docstring from __init__

0.2.1

Date:

October 14, 2021

Features

  • Add support for calculating probability density of multivariate Gaussian at a given Mahalanobis distance gaussianFunc.compute_density_r

Incompatible changes

  • Rename the method gaussianFunc.multivariateGaussian to gaussianFunc.compute_density_r

0.2.0

Date:

October 14, 2021

Features

  • Add support for multi-dimensional arrays or floats for triangularFunc.interp, fuzzyRule.apply, fuzzySet.interp, and fuzzySystem.compute

  • Update example TRS_example.py and documentation example to use these functionalities

  • Add support for directly plotting triangularFunc using triangularFunc.view()

Incompatible changes

  • Simplify API to directly import triangularFunc, fuzzyRule, fuzzySet, fuzzySystem, Design, and gaussianFunc

0.1.0

Date:

October 9, 2021

Features

  • Introduce fuzzyLib, DOELib, and uncertaintyLib, and fuzzySystem.compute

  • Introduce fuzzy inference using dmLib.fuzzyLib.fuzzySystem.fuzzySystem.compute() for a dict of floats

  • Add example TRS_example.py and documentation example to use these functionalities