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 tomath.factorial
0.5.7
- Date:
March 04, 2023
Features
compute_absorption()
method ofMarginNetwork
now has an optionalmethod
argument for specifying different root finding algorithmsMargins can now be allocated using different margin allocation strategies for each margin node using the
allocate_margins
methodAdded technical documentation explaining the theory of the Margin Value Method
Fixes
Removed the update of
Distribution
histogramsself.value_dist = self.values
on every__call__
of scalar parameters to improve performance
Incompatible changes
forward()
method ofMarginNetwork
now requires the argumentstrategy
to be a list of strategies one for eachDecision
instance
0.5.6
- Date:
June 29, 2022
Features
The method
allocate_margins()
allows the user to specify a margin allocation strategy such asmin_excess
ormanual
The
Decision
class now storesselection_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 tovalue_dist
property, when attempting to generate histogram from samplesrandom()
method ofSpecification
now calls therandom()
method ofDistribution
implicitlyMarginNetwork
instances now storeSpecification
instances when using thesave
andload
methodsMarginNetwork
instances now storedeterioration_vector``and ``utilization_matrix
Fixed the
train_surrogate
,train_inverse
, andtrain_performance_surrogate
methods to cap data at 100 * dim forKRG
models
Incompatible changes
forward()
method ofMarginNetwork
now requires two optional argumentsallocate_margin
, andstrategy
for allDecision
instances__call__()
method ofDecision
now requires two argumentsallocate_margin
, andstrategy
The method
allocate_margins()
must now be called before everyforward()
call of aMarginNetwork
instanceIt is recommended to use
self.input_spec
instead of those defined globally outsideforward()
andrandomize()
implementations
0.5.5
- Date:
April 15, 2022
Fixes
Behaviour
objects now support thetrain_inverse
method (works only if thetrain_surrogate
method has completed successfully) for training a surrogate model that inverts decided variables to any variable of choice (given by thekey
argument) and intermediate parameters (given by theintermediate
attribute)Behaviour
objects now support theinv_call
which can be user defined (must define theintermediate
andinverted
attributes) or from thetrain_inverse
methodif
use_estimate
is False, theMarginNetwork
must have equal number of decision and margin nodes associated with each other (1:1 ratio)The user-implemented
forward
method of theMarginNetwork
object must include theoutputs
optional argument if usinginv_call
anywhere in the methodAdded error handling for
train_surrogate
function by rejecting NaN values during sampling of the blackbox
Incompatible changes
use_estimate
argument ofcompute_impact
method now relates to whether a surrogate is used or not for impact calculationtrain_surrogate
argument ofBehaviour
class now needs the argumentsn_i
,n_p
,n_dv
, andn_tt
for each of the output parametersoutput of a decision node is given by the attribute
output_value
instead ofdecided_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 valuesFixed impact on performance calculation
compute_impact
to utilized target thresholds and decided values instead of excess values from surrogateAdded 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 tomvm
0.5.0
- Date:
March 14, 2022
Incompatible changes
The
init_decisions()
must be called before the firstforward()
and after everyrandomize()
or changing the input specifications to store the universe of decided valuesif the argument
num_threads
oftrain_performance_surrogate()
,compute_absorption()
, orcompute_decisions()
is greater then 1 then Jupyter notebook cannot be used with ur scriptThe argument
value
ofInputSpec
initializer must be a float or an integer only. ADistribution
object must be passed to the optional argumentdistribution
Features
The
Decision
class can now support multiple decided values using then_nodes
optional argument. User must supple equal length of target thresholdsCan pass additional arguments as
kwargs
to behaviour model forDecision
class during the__call__
methodThe method
train_performance_surrogate()
of the classMarginNetwork``now supports different surrogate models specified using the ``sm_type
argumentThe method
train_performance_surrogate()
of the classMarginNetwork
now supports parallel processing specified using thenum_threads
argumentThe method
compute_absorption()
of the classMarginNetwork
now supports parallel processing of the decision universe (which changes every time the input specificationsself.spec_vector
are iterated during absorption computation) specified using thenum_threads
argumentThe method
compute_decisions()
of the classDecision
now supports parallel processing specified using thenum_threads
argument
Fixes
More efficient
compute_absorption()
method by lumping threshold limit and specification limit calculationsFixed
train_performance_surrogate()
method to properly handle ordinal type variables such asINT
Fixed
compute_absorption()
method to properly handle input specifications that have negative nominal valuesFixed
compute_absorption()
method to change nan values to zeroAdded
__deepcopy__
directives to all classes
0.4.8
- Date:
February 20, 2022
Incompatible changes
Added mandatory argument
variable_type
toInputSpec
andDesignParam
classes during initialization
Features
Add the
Decision
class for defining decision nodes and off-the-shelf componentsAdd the integer and continuous type variables for
InputSpec
andDesignParam
classes
0.4.7
- Date:
February 17, 2022
Incompatible changes
AbsorptionMatrix
class is removed, instead callMarginNetwork.absoprtion_matrix.value
to retrieve absorption valuesImpactMatrix
class is removed, instead callMarginNetwork.impact_matrix.value
to retrieve impact valuesAbsorptionMatrix.deteriorations
attribute is removed, instead callMarginNetwork.deterioration_vector.value
to retrieve deterioration valuesAll random sampling functions use the
.random()
method to draw samples. Cannot use the__call__
operator anymoreMarginNetwork
methodreset_outputs()
not takes a single optional argument to reset byN
samplesdist
methodreset_outputs()
not takes a single optional argument to reset byN
samplesDistribution
object method.random()
(previously__call__
) now returns a 1Dnp.ndarray
for one dimensional pdfsRename 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
attributesUse 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
methodAdd utilization storage to
AbsorptionMatrix
classAdd
compute_MVP
method toMarginNetwork
class to show margin value mapAdd
nearest
method todmLib
to allow calculation of the distance metric for the MVP
Fixes
Adapt
train_performance_surrogate
,view_perf
, andcompute_impact
to include scaling functionality when training Kriging modelAdd input specifications samples as input to performance surrogate in
train_performance_surrogate
to accommodate variability input specifications
Incompatible changes
InputSpec
now requires the argumentuniverse
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 thereset(N)
methodFix
value_dist
property ofPerformance
andMarginNode
classes to construct histogram of samples and then initialize aDistribution
class from themForce 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 offsolve
inB1
model
0.4.4
- Date:
December 20, 2021
Features
Add ability to selectively choose how to randomize the MAN by redefining the
randomize
method ofMarginNetwork
Selectively choose when to reset the outputs of the MAN using the
reset_outputs
methodCan 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
, andperf_vector
, respectivelyAdd output storage class for a Margin Analysis Network (MAN)
AbsorptionMatrix
which stores absorption and deteriorationAdd method
compute_absorption
to compute an observation of the change absorption capability matrix and deterioration vectorAdd
view()
,view_cdf()
,view_det()
,view_det_cdf()
methods toAbsorptionMatrix
class by inheritance fromVisualizeDist
Incompatible changes
instances of
InputSpec
should be called using the.value
property just likeDesignParam
andFixedParam
train_performance_surrogate
argumentext_samples
now takes training points of (excess
,performance
) instead of (decided_value
,performance
)
0.4.3
- Date:
December 18, 2021
Features
Add
VisualizeDist
class touncertaintyLib.py
moduleAdd 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 performancesAdd method
compute_impact
to compute an observation of the Impact on Performance matrixAdd method
view_perf
toMarginNetwork
class to visualize 2D projections of performance surrogate modelsAdd
view()
andview_cdf()
methods toPerformance
andImpactMatrix
classes by inheritance fromVisualizeDist
Design
class can now take array_like values for argumentnsamples
if usingdoe_type='full_fact'
Incompatible changes
move
compute_cdf()
method from classMarginNode
to module level method inuncertaintyLib.py
moduleuse property
.values
instead ofexcess
to retrieve observations of excess fromMarginNode
objectAdded dependency on SMT
view()
andview_cdf()
methods now take optional argumentsfolder
,file
,img_format
, instead of justsavefile
Argument
type
ofDesign
initialization changed todoe_type
to avoid overloading python objecttype
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 userAdd
MarginNetwork
class object that must be inherited and redefined by userAdd 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 usingMarginNode(decided_value,threshold)
, wheredecided_value
andthreshold
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 settingAdd ability to view
MarginNode
excess pdf and cdf usingMarginNode.view()
andMarginNode.view_cdf()
methods
Fixes
Transfer class object labels to plot axes for
fuzzySystem.view()
,Distribution.view()
, andgaussianFunc.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 itAdd support for sampling from Gaussian distribution
gaussianFunc
by calling it directlyAdd support for viewing samples from defined distribution using the
.view()
method forDistribution
andgaussianFunc
instancesAdd support for viewing aggregate function after computing using
.view()
method forfuzzySystem
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 operationsAdd
PDF_examples.py
scriptImprove existing tests
test_fuzzyInference_N
Add new tests
test_gaussian_pdf_rvs
andtest_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
togaussianFunc.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
, andfuzzySystem.compute
Update example
TRS_example.py
and documentation example to use these functionalitiesAdd support for directly plotting
triangularFunc
usingtriangularFunc.view()
Incompatible changes
Simplify API to directly import
triangularFunc
,fuzzyRule
,fuzzySet
,fuzzySystem
,Design
, andgaussianFunc
0.1.0
- Date:
October 9, 2021
Features
Introduce
fuzzyLib
,DOELib
, anduncertaintyLib
, andfuzzySystem.compute
Introduce fuzzy inference using
dmLib.fuzzyLib.fuzzySystem.fuzzySystem.compute()
for adict
of floatsAdd example
TRS_example.py
and documentation example to use these functionalities