Changelog¶
All notable changes of this project will be documented here.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Version 5.3.1 (2024-06-06)¶
Fixed¶
The method
OptimizationProblem.to_dataset
now considers the type of each variable. #1154GEMSEO no longer sets the
maxiter
option ofTNC
that does not exist butmaxfun
. #1181The
Database
export to an HDF5 file works in “append” mode and when storing data successively for the same input value. #1216
Version 5.3.0 (2024-03-28)¶
Added¶
The SciPy implementation of the
Nelder-Mead
gradient-free algorithm is now available. #875HSICAnalysis.compute_indices
also computes the p-values for screening purposes in two different ways: through permutations and from asymptotic formula. #992Added the modified Normal Boundary Intersection (mNBI) multi-objective optimization algorithm, for use with
"MNBI"
as algorithm name. Added the classMultiObjectiveOptimizationResult
to store and display results from optimization problems with more than one objective. Added the classParetoFront
to store the points of interest of aMultiObjectiveOptimizationResult
. Added thePoloni
analytical multi-objective optimization problem. Added theFonsecaFlemming
analytical multi-objective optimization problem. Added theViennet
analytical multi-objective optimization problem. #1012The method
DataConverter.is_continuous
can tell if a variable is continuous. #1066The
Dataset
class can now be created from aDataFrame
using the new class method:from_dataframe
. #1069The boolean attribute
DatasetPlot.grid
allows to add a grid to theDatasetPlot
. #1074HSICAnalysis.compute_indices
proposes two new sensitivity analysis (SA) types, namely conditional SA and target SA. #1078Lines
andBarPlot
have HTML-based interactive versions based on plotly. #1082The method
AbstractCache.get_all_entries
that returns all the entries, whatever the tolerance.The module
gemseo.typing
that contains common type annotations. #1090Dataset.from_csv
has a new attributefirst_column_as_index
, which permits to readcsv
files that contain the index as the first column. #1093MDOFunction
supports elementwise multiplication and division by NumPy arrays.Addition, substraction, multiplication and division of a function expecting normalized inputs with a function that does not raise
RuntimeError
.The function values \(f(x)\) passed to optimizers can optionally be scaled relative to \(|f(x_0)|\) where \(x_0\) is the current value of the
DesignSpace
. This functionality is enabled by passing a positive value \(\epsilon\) as the optionscaling_threshold
of any optimizer: the function values passed to the optimizer are then \(f(x) / \max\{ |f(x_0)|, \epsilon \}\). The purpose of \(\epsilon\) is to avoid division by a value close to zero. The (default) valueNone
for the optionscaling_threshold
disables the scaling. #1100DOELibrary.compute_doe
andcompute_doe
can use a variables space dimension instead of a variables space. #1102Each DOE algorithm available in GEMSEO has a new option named
"callbacks"
to pass a list of functions to be evaluated after each call toOptimizationProblem.evaluate_functions
. #1111Implement “hdf_node_path” for “opt_problem”,”design_space” and “database”.
Allow “opt_problem” to be exported/imported to/from a node in a specified hdf file. #1119
The plotting methods of
SensitivityAnalysis
andStatistics
classes returnDatasetPlot
objects or figures from data visualization libraries, e.g. Matplotlib and Plotly.A Plotly figure can be passed to a Plotly plot. #1121
OptimizationProblem.get_all_functions
has a new argumentoriginal
to return the original functions given to the problem. #1126A property
figures
allows to retrieve the figures generated by aDatasetPlot
. #1130DriverLibrary.clear_listeners
removes the listeners added by theDriverLibrary
from theDatabase
attached to theOptimizationProblem
. #1134The
Seeder
class is a seed generator for features using random numbers, e.g.DOELibrary
; itsget_seed
method returns either the user seed or the initial seed incremented by the number of calls. #1148
Fixed¶
The stratified DOE algorithms
OT_AXIAL
,OT_COMPOSITE
andOT_FACTORIAL
correctly support the argumentsn_samples
,centers
,dimension
andlevels
. #88The
MDODiscipline
can be linearized after execution when itscache_type
is set toMDODiscipline.CacheType.None
and both inputs and outputs arguments of linearize are empty. #804MDAJacobi
andMDAGaussSeidel
have now different XDSM representations which are in line with the convention proposed in [LM12].MDAChain
is not represented anymore in the XDSM. Add tests for the pdf generation of XDSMs. Bugfixes for XDSM pdf generation. #1062The expression
LinearComposition.expr
is now correct. #1063Non-continuous variables can no longer be differentiated. #1066
The upper bound KS aggregation function is really called when aggregating constraints in an
OptimizationProblem
#1075The user no longer has to provide an initial design point to solve an optimization problem with gradient approximation. #1076
The method
Scenario.set_optimization_history_backup()
no longer causes the execution to crash at the first iteration when the Scenario includes equality or inequality constraints. #1089The
DirectoryCreator
can now consider non-existing root directory while usingDirectoryNamingMethod.NUMBERED
. #1097The missing closing parenthesis in the expression of
Rosenbrock
is no longer missing.Addition, substraction, multiplication and division of functions expecting normalized inputs yield functions expecting normalized inputs. #1100
CustomDOE.compute_doe
no longer raises an error and works correctly. #1103The axes generated by
EmpiricalStatistics.plot_cdf
are no longer switched. #1105The BiLevel formulation can now be warm started even when the MDA1 does not exist (case of weakly coupled disciplines). #1107
The attribute
ParameterSpace.distributions
is correctly updated when renaming a random variable. #1108OptimizationProblem.database
is not used whenuse_database
isFalse
in the case of aDOELibrary
. #1110Dataset.to_dict_of_arrays
no longer raises anAttributeError
when bothby_entry
andby_group
areTrue
and works properly. #1112When
function_calls
isTrue
,OptimizationProblem.reset
resets the number of calls of the original functions. #1126DesignSpace.rename_variable
can be applied to a variable without value. #1127Requesting an optimized LHS with size 1 raises an exception instead of a freeze. #1133
Database
cannot store the same listener several times. #1134The
Alternate2Delta
method now handles degenerated (ill-conditioned) least squares problems. In this case, the method now returns the iterate without transformations. #1137Dataset.add_group
works correctly whenvariable_names
defines a single variable. #1138The transformers passed to an
MLAlgo
are correctly applied when thefit_transformers
argument of thelearn
method isFalse
. #1146The
MDOChain
Jacobian is made reproducible, making the sum of composite derivative terms in an order that does not depend on the code execution. #1150The
PydanticGrammar
was not able to validateDisciplineData
objects. #1153
Changed¶
The methods
OptimizationProblem.from_hdf()
andOptimizationProblem.to_hdf()
no longer log messages when they are called. The methodDatabase.to_ggobi()
no longer logs messages when it is called. #579The option
disp
of theSciPy
algorithms shall now be passed as aboolean
instead of aninteger
. #875The method
Scenario.set_optimization_history_backup()
now starts generating plots only after the first two iterations have been computed. TheOptHistoryView
plots created byScenario.set_optimization_history_backup()
with the optiongenerate_opt_plot
are no longer updated at eachDatabase.store()
, only at each new iteration. #1089API change:
AbstractCache._{INPUTS,OUTPUTS,JACOBIAN}_GROUP
has been replaced byAbstractCache.Group
. #1090Methods
execute
andlinearize
ofgemseo.problems.sobieski.core.structure.SobieskiStructure
catch theValueError
raised by the computation of the logarithm of a non-positive weight ratio. Methodexecute
returnsnumpy.nan
for the mass term. #1101It is now possible to solve
MDA
instances that include non-numeric couplings (weak or strong), typically strings or arrays of string. The non-numeric couplings are automatically filtered during the numerical solution of theMDA
. A warning message is shown in the log atDEBUG
level with the variables that were filtered. #1124Database.clear_listeners
returns the listeners after removing them from theDatabase
. #1134OptimizationProblem.objective = mdo_function
setsmdo_function.f_type
tomdo_function.FunctionType.OBJ
; no need to do it by hand anymore. #1141The argument
uniform_distribution_name
ofIshigamiProblem
andIshigamiSpace
allows to use a uniform distribution from a library other than SciPy, e.g. OpenTURNS. #1143API change:
SEED
moved togemseo.utils.seeder
. #1148
Removed¶
Support for reStructuredText docstring format.
The function
get_default_option_values
; useinspect.get_callable_argument_defaults(cls.__init__)
instead ofget_default_option_values(cls)
. #1059
Version 5.2.0 (2023-12-20)¶
Added¶
Setting
file_format="html"
inDatasetPlot.execute
saves on the disk and/or displays in a web browser a plotly-based interactive plot.DatasetPlot.DEFAULT_PLOT_ENGINE
is set toPlotEngine.MATPLOTLIB
; this is the default plot engine used byDatasetPlot
.DatasetPlot.FILE_FORMATS_TO_PLOT_ENGINES
maps the file formats to the plot engines to override the default plot engine. #181Add
OptimizationProblem.get_last_point
method to get the last point of an optimization problem. #285The disciplines
Concatenater
,LinearCombination
andSplitter
now have sparse Jacobians. #423The method
EmpiricalStatistics.plot_barplot
generates a boxplot for each variable. The methodEmpiricalStatistics.plot_cdf
draws the cumulative distribution function for each variable. The methodEmpiricalStatistics.plot_pdf
draws the probability density function for each variable. #438MLRegressorQualityViewer
proposes various methods to plot the quality of anMLRegressionAlgo`
.DatasetPlot.execute
can use a file name suffix.SurrogateDiscipline.get_quality_viewer
returns aMLRegressorQualityViewer
. #666ScatterMatrix
can set any option of the pandasscatter_matrix
function.ScatterMatrix
can add trend curves on the scatter plots, with either the enumerationScatterMatrix.Trend
or a custom fitting technique.Scatter
can add a trend curve, with either the enumerationScatter.Trend
or a custom fitting technique. #724ScenarioResult
is a new concept attached to aScenario
. This concept enables to post-process more specifically the results of a given scenario. In particular, theScenarioResult
can be derived in order to implement dedicated post-treatments depending on the formulation.OptimizationResult.from_optimization_problem
creates anOptimizationResult
from anOptimizationProblem
.BaseFormulation.DEFAULT_SCENARIO_RESULT_CLASS_NAME
is the name of the defaultOptimizationResult
class to be used with the given formulation.ScenarioResult
stores the result of aScenario
from aScenario
or an HDF5 file.BiLevelScenarioResult
is aScenarioResult
to store the result of aScenario
using aBiLevel
formulation.ScenarioResultFactory
is a factory ofScenarioResult
.Scenario.get_result
returns the result of the execution of theScenario
as aScenarioResult
.create_scenario_result
stores the result of aScenario
from aScenario
or an HDF5 file.
The
LinearCombination
discipline now has a sparse Jacobian. #809The
normalize
option ofBasicHistory
scales the data between 0 and 1 before plotting them. #841The type of the coupling variables is no longer restricted to NumPy arrays thanks to data converters attached to grammars. #849
gemseo.mlearning.sampling
is a new package with resampling techniques, such asCrossValidation
andBootstrap
.MLAlgo.resampling_results
stores the resampling results; a resampling result is defined by aResampler
, the machine learning algorithms generated during the resampling stage and the associated predictions. The methods offered byMLQualityMeasure
to estimate a quality measure by resampling have a new argument calledstore_resampling_result
to store the resampling results and reuse them to estimate another quality measure faster. #856SciPyDOE
is a newDOELibrary
based on SciPy, with five algorithms: crude Monte Carlo, Halton sequence, Sobol’ sequence, Latin hypercube sampling and Poisson disk sampling. #857When third-party libraries do not handle sparse Jacobians, a preprocessing step is used to convert them as dense NumPy arrays. #899
R2Measure.evaluate_bootstrap
is now implemented. #914Add diagrams in the documentation to illustrate the architecture and usage of ODEProblem. #922
MDA can now handle disciplines with matrix-free Jacobians. To define a matrix-free Jacobian, the user must fill in the
MDODiscipline.jac
dictionary withJacobianOperator
overloading the_matvec
and_rmatvec
methods to respectively implement the matrix-vector and transposed matrix-vector product. #940The
SimplerGrammar
is a grammar based on element names only.SimplerGrammar` is even simpler than ``SimpleGrammar
which considers both names and types. #949HSICAnalysis
is a newSensitivityAnalysis
based on the Hilbert-Schmidt independence criterion (HSIC). #951Add the Augmented Lagrangian Algorithm implementation. #959
Support for Python 3.11. #962
Optimization problems with inequality constraints can be reformulated with only bounds and equality constraints and additional slack variables thanks to the public method:
OptimizationProblem.get_reformulated_problem_with_slack_variables.
#963The subtitle of the graph generated by
SobolAnalysis.plot
includes the standard deviation of the output of interest in addition to its variance. #965OTDistributionFactory
is aDistributionFactory
limited toOTDistribution
objects.SPDistributionFactory
is aDistributionFactory
limited toSPDistribution
objects. Thebase_class_name
attribute ofget_available_distributions
can limit the probability distributions to a specific library, e.g."OTDistribution"
for OpenTURNS and"SPDistribution"
for SciPy. #972The
use_one_line_progress_bar
driver option allows to display only one iteration of the progress bar at a time. #977OTWeibullDistribution
is the OpenTURNS-based Weibull distribution.SPWeibullDistribution
is the SciPy-based Weibull distribution. #980MDAChain
has an option to initialize the default inputs by creating aMDOInitializationChain
at first execution. #981The upper bound KS function is added to the aggregation functions. The upper bound KS function is an offset of the lower bound KS function already implemented. #985
CenteredDifferences
Approximation mode is now supported for jacobian computation. This can be used to calculateMDODiscipline
andMDOFunctions
jacobians setting the jacobian approximation mode as for the Finite Differences and the Complex Step schemes. This is a second order approach that employs twice points but as a second order accuracy with respect to the Finite Difference scheme. When calculating a Centered Difference on one of the two bounds of the Design Space, the Finite Difference scheme is used instead. #987The class
SobieskiDesignSpace
deriving fromDesignSpace
can be used in the Sobieski’s SSBJ problem. It offers new filtering methods, namelyfilter_coupling_variables
andfilter_design_variables
. #1003The
MDODiscipline
can flag linear relationships between inputs and outputs. This enables theFunctionFromDiscipline
generated from theseMDODiscipline
to be instances ofLinearMDOFunction
. AnOptimizationProblem
is now by default a linear problem unless a non-linear objective or constraint is added to the optimization problem. #1008The following methods now have an option
as_dict
to request the return values as dictionaries of NumPy arrays instead of straight NumPy arrays:DesignSpace.get_lower_bounds
,DesignSpace.get_upper_bounds
,OptimizationProblem.get_x0_normalized
andDriverLibrary.get_x0_and_bounds_vects
. #1010gemseo.SEED
is the default seed used by GEMSEO for random number generators. #1011HiGHS solvers for linear programming interfaced by SciPy are now available. #1016
Augmented Lagrangian can now pass some of the constraints to the sub-problem and deal with the rest of them thanks to the
sub_problem_constraints
option. #1026An example on the usage of the
MDODiscipline.check_jacobian
method was added to the documentation. Three derivative approximation methods are discussed: finite differences, centered differences and complex step. #1039The
TaylorDiscipline
class can be used to create the first-order Taylor polynomial of anMDODiscipline
at a specific expansion point. #1042The following machine learning algorithms have an argument
random_state
to control the generation of random numbers:RandomForestClassifier
,SVMClassifier
,GaussianMixture
,KMeans
,GaussianProcessRegressor
,LinearRegressor
andRandomForestRegressor
. Use an integer for reproducible results (default behavior). #1044BaseAlgoFactory.create
initializes the grammar of algorithm options when it is called with an algorithm name. #1048
Fixed¶
There is no longer overlap between learning and test samples when using a cross-validation technique to estimate the quality measure of a machine learning algorithm. #915
Security vulnerability when calling
subprocess.run
withshell=True
. #948Fixed bug on
LagrangeMultipliers
evaluation when bound constraints are activated on variables which have only one bound. #964The iteration rate is displayed with appropriate units in the progress bar. #973
AnalyticDiscipline
casts SymPy outputs to appropriate NumPy data types (as opposed to systematically casting tofloat64
). #974AnalyticDiscipline
no longer systematically casts inputs tofloat
. #976MDODiscipline.set_cache_policy
can useMDODiscipline.CacheType.NONE
ascache_type
value to remove the cache of theMDODiscipline
. #978The normalization methods of
DesignSpace
do no longer emit aRuntimeWarning
about a division by zero when the lower and upper bounds are equal. #1002The types used with
PydanticGrammar.update_from_types
withmerge=True
are taken into account. #1006DesignSpace.dict_to_array
returns anndarray
whose attributedtype
matches the “commondtype
” of the values of itsdict
argumentdesign_values
corresponding to the keys passed in its argumentvariables_names
. So far, thedtype
was erroneously based on all the values ofdesign_values
. #1019DisciplineData
with nested dictionary can now be serialized withjson
. #1025Full-factorial design of experiments: the actual number of samples computed from the maximum number of samples and the dimension of the design space is now robust to numerical precision issues. #1028
DOELibrary.execute
raises aValueError
when a component of theDesignSpace
is unbounded and theDesignSpace
is not aParameterSpace
.DOELibrary.compute_doe
raises aValueError
whenunit_sampling
isFalse
, a component of the design space is unbounded and theDesignSpace
is not aParameterSpace
. #1029OptimizationProblem.get_violation_criteria
no longer considers the non-violated components of the equality constraints when calculating the violation measure. #1032A
JSONGrammar
using namespaces can be serialized correctly. #1041RadarChart
displays the constraints at iterationi
wheniteration=i
. #1054
Changed¶
API:
The class
RunFolderManager
is renamedDirectoryGenerator
.The class
FoldersIter
is renamedIdentifiers
.The signature of the class
DirectoryGenerator
has changed:folders_iter
is replaced byidentifiers
output_folder_basepath
is replaced byroot_directory
The subpackage
gemseo.mlearning.data_formatters
includes theDataFormatters
used by the learning and prediction methods of the machine learning algorithms. #933The argument
use_shell
of the disciplineDiscFromExe
is no longer taken into account, executable are now always executed without shell. #948The existing KS function aggregation is renamed as
lower_bound_KS
. #985The log of the
ProgressBar
no longer displays the initialization of the progress bar. #988The
samples
option of the algorithmCustomDOE
can be a 2D-array shaped as(n_samples, total_variable_size)
, a dictionary shaped as{variable_name: variable_samples, ...}
wherevariable_samples
is a 2D-array shaped as(n_samples, variable_size)
or ann_samples
-length list shaped as[{variable_name: variable_sample, ...}, ...]
wherevariable_sample
is a 1D-array shaped as(variable_size, )
. #999PydanticGrammar
have been updated to support pydantic v2. For such grammars, NumPy ndarrays shall be typed withgemseo.core.grammars.pydantic_ndarray.NDArrayPydantic
instead of the standardndarray
orNDArray
based of annotations. #1017The example on how to do a Pareto Front on the Binh Korn problem now uses a
BiLevel
formulation instead of anMDOScenarioAdapter
manually embedded into aDOEScenario
. #1040ParameterSpace.__str__
no longer displays the current values, the bounds and the variable types when all the variables are uncertain. #1046
Removed¶
Support for Python 3.8. #962
Version 5.1.1 (2023-10-04)¶
Security¶
Upgrade the dependency pillow
to mitigate a vulnerability.
Version 5.1.0 (2023-10-02)¶
Added¶
The argument
scenario_log_level
ofMDOScenarioAdapter
allows to change the level of the root logger during the execution of its scenario.The argument
sub_scenarios_log_level
ofBiLevel
allows to change the level of the root logger during the execution of its sub-scenarios. #370DesignSpace
has a pretty HTML representation. #504The method
add_random_vector()
adds a random vector with independent components to aParameterSpace
from a probability distribution name and parameters. These parameters can be set component-wise. #551The high-level function
create_dataset
returns an emptyDataset
by default with a default name. #721OptimizationResult
has new fieldsx_0_as_dict
andx_opt_as_dict
bounding the names of the design variables to their initial and optimal values. #775Enable the possibility of caching sparse Jacobian with cache type HDF5Cache. #783
Acceleration methods for MDAs are defined in dedicated classes inheriting from
SequenceTransformer
.Available sequence transformers are:
The alternate 2-δ method:
Alternate2Delta
.The alternate δ² method:
AlternateDeltaSquared
.The secante method:
Secante
.The Aitken method:
Aitken
.The minimum polynomial method:
MinimumPolynomial
.The over-relaxation:
OverRelaxation
.
The values of the constraints can be passed to method
OptimizationProblem.get_number_of_unsatisfied_constraints.
#802MLErrorMeasureFactory
is a factory ofMLErrorMeasure
.SurrogateDiscipline.get_error_measure
returns anMLErrorMeasure
to assess the quality of aSurrogateDiscipline
; use one of its evaluation methods to compute it, e.g.evaluate_learn
to compute a learning error. #822The
DatasetFactory
is a factory ofDataset
.The high-level function
create_dataset
can return any type ofDataset
. #823Dataset
has a string propertysummary
returning some information, e.g. number of entries, number of variable identifiers, … #824MLAlgo.__repr__
returns the same asMLAlgo.__str__
before this change andMLAlgo.__str__
does not overloadMLAlgo.__repr__
. #826The method
Dataset.to_dict_of_arrays
can break down the result by entry with the boolean argumentby_entry
whose default value isFalse
. #828Added Scipy MILP solver wrapper. #833
DesignSpace.get_variables_indexes
features a new optional argumentuse_design_space_order
to switch the order of the indexes between the design space order and the user order. #850ScalableProblem.create_quadratic_programming_problem
handles the case where uncertain vectors are added in the coupling equations. #863MDODisciplineAdapterGenerator
can use a dictionary of variable sizes at instantiation. #870The multi-processing start method (spawn or fork) can now be chosen. #885
Acceleration methods and over-relaxation are now available for
MDAJacobi
,MDAGaussSeidel
andMDANewtonRaphson
. They are configured at initialization via theacceleration_method
andover_relaxation_factor
and can be modified afterward via the attributesMDA.acceleration_method
andMDA.over_relaxation_factor
.Available acceleration methods are:
Alternate2Delta
,AlternateDeltaSquared
,Aitken
,Secant
,MinimumPolynomial
,
CouplingStudyAnalysis
has a new methodgenerate_coupling_graph
.The CLI
gemseo-study
generates the condensed and full coupling graphs as PDF files. #910The
check_disciplines_consistency
function checks if two disciplines compute the same output and raises an error or logs a warning message if this is the case.MDOCouplingStructure
logs a message withWARNING
level if two disciplines compute the same output. #912The default value of an input variable of a
LinearCombination
is zero. #913BaseFactory.create
supports positional arguments. #918The algorithms of a
DriverLibrary
have a new option"log_problem"
(default:True
). Set it toFalse
so as not to log the sections related to an optimization problem, namely the problem definition, the optimization result and the evolution of the objective value. This can be useful when aDOEScenario
is used as a pure sampling scenario. #925SensitivityAnalysis.plot_bar
andSensitivityAnalysis.plot_radar
have new argumentssort
andsorting_output
to sort the uncertain variables by decreasing order of the sensitivity indices associated with a sorting output variable.DatasetPlot
has a new argumentxtick_rotation
to set the rotation angle of the x-ticks for a better readability when the number of ticks is important. #930SensitivityAnalysis.to_dataset
stores the second-order Sobol’ indices in the dictionaryDataset.misc
with the key"second"
. #936The string representation of a
ComposedDistribution
uses both the string representations of the marginals and the string representation of the copula.The string representation of a
Distribution
uses both the string representation of its parameters and its dimension when the latter is greater than 1. #937The default value of the argument
outputs
of the methodsplot_bar
andplot_radar
ofSensitivityAnalysis
is()
. In this case, theSensitivityAnalysis
uses all the outputs. #941N2HTML
can use any sized default inputs (NumPy arrays, lists, tuples, …) to deduce the size of the input variables. #945
Fixed¶
Fix the MDA residual scaling strategy based on sub-residual norms. #957
An XDSM can now take into account several levels of nested scenarios as well as nested
MDA
. An XDSM with a nested Scenario can also take into account more complex formulations thanDisciplinaryOpt
, such asMDF
. #687The properties of the
JSONGrammar
created byBaseFactory.get_options_grammar
are no longer required. #772If
time_vector
is not user-specified, then it is generated by the solver. As such, the array generated by the solver belongs in theODEResult
. #778Fix plot at the end of the Van der Pol tutorial illustrating an
ODEProblem
. #806The high-level function
create_dataset
returns a baseDataset
by default. #823SurrogateDiscipline.__str__
is less verbose by inheriting fromMDODiscipline
; useSurrogateDiscipline.__repr__
instead of the olderSurrogateDiscipline.__repr__
. #837OptHistoryView
can be executed withvariable_names=None
to explicitly display all the design variables.The variable names specified with the argument
variable_names
ofOptHistoryView
are correctly considered.OptimizationProblem.from_hdf
setspb_type
anddifferentiation_method
as string.OptHistoryView
,ObjConstrHist
andConstraintsHistory
display a limited number of iterations on the x-axis to make it more readable by avoiding xtick overlay.DesignSpace
has a new propertynames_to_indices
defining the design vector indices associated with variable names. #838execute_post
can post-process aPath
. #846The MDA chain can change at once the
max_mda_iter
of all its MDAs. The behaviour of themax_mda_iter
of this class has been changed to do so. #848The methods
to_dataset
buildDataset
objects in one go instead of adding variables one by one. #852CorrelationAnalysis
andSobolAnalysis
use the input names in the order provided by theParameterSpace
. #853The
RunFolderManager
can now work with a non-emptyoutput_folder_basepath
when usingfolders_iter = FoldersIter.NUMBERED
. Their name can be different from a number. #865The argument
output_names
ofMorrisAnalysis
works properly again. #866The argument
n_samples
passed toMorrisAnalysis
is correctly taken into account. #869DOELibrary
works when the design variables have no default value. #870The generation of XDSM diagrams for MDA looping over MDOScenarios. #879
BarPlot
handles now correctly aDataset
whose number of rows is higher than the number of variables. #880The DOE algorithms consider the optional seed when it is equal to 0 and use the driver’s one when it is missing. #886
PCERegressor
now handles multidimensional random input variables. #895get_all_inputs
andget_all_outputs
return sorted names and so are now deterministic. #901OptHistoryView
no longer logs a warning when post-processing an optimization problem whose objective gradient history is empty. #902The string representation of an
MDOFunction
is now correct even after several sign changes. #917The sampling phase of a
SensitivityAnalysis
no longer reproduces the full log of theDOEScenario
. Only the disciplines, the MDO formulation and the progress bar are considered. #925The
Correlations
plot now labels its subplots correctly when the constraints of the optimization problem include an offset. #931The string representation of a
Distribution
no longer sorts the parameters. #935SobolAnalysis
can export the indices to aDataset
, even when the second-order Sobol’ indices are computed. #936One can no longer add two random variables with the same name in a
ParameterSpace
. #938SensitivityAnalysis.plot_bar
andSensitivityAnalysis.plot_radar
use all the outputs when the argumentoutputs
is empty (e.g.None
,""
or()
). #941A
DesignSpace
containing a design variable without current value can be used to extend anotherDesignSpace
. #947Security vulnerability when calling
subprocess.run
withshell=True
. #948
Changed¶
Distribution
: the default value ofvariable
is"x"
; same forOTDistribution
,SPDistribution
and their sub-classes.SPDistribution
: the default values ofinterfaced_distribution
andparameters
areuniform
and{}
.OTDistribution
: the default values ofinterfaced_distribution
andparameters
areUniform
and()
. #551The high-level function
create_dataset
raises aValueError
when the file has a wrong extension. #721The performance of
MDANewtonRaphson
was improved. #791The classes
KMeans
use"auto"
as default value for the argumentn_init
of the scikit-learn’sKMeans
class. #825output_names
was added toMDOFunction.DICT_REPR_ATTR
in order for it to be exported when saving to an hdf file. #860OptimizationProblem.minimize_objective
is now a property that changes the sign of the objective function if needed. #909The name of the
MDOFunction
resulting from the sum (resp. subtraction, multiplication, division) of twoMDOFunction
s named"f"
and"g"
is"[f+g]"
(resp."[f-g]"
,"[f*g]"
,"[f/g]"
).The name of the
MDOFunction
defined as the opposite of theMDOFunction
named"f"
is-f
.In the expression of an
MDOFunction
resulting from the multiplication or division ofMDOFunction
s, the expression of an operand is now grouped with round parentheses if this operand is a sum or subtraction. For example, for"f(x) = 1+x"
and"g(x) = x"
the resulting expression forf*g
is"[f*g](x) = (1+x)*x"
.The expression of the
MDOFunction
defined as the opposite of itself is-(expr)
. #917Renamed
MLQualityMeasure.evaluate_learn
toMLQualityMeasure.compute_learning_measure
.Renamed
MLQualityMeasure.evaluate_test
toMLQualityMeasure.compute_test_measure
.Renamed
MLQualityMeasure.evaluate_kfolds
toMLQualityMeasure.compute_cross_validation_measure
.Renamed
MLQualityMeasure.evaluate_loo
toMLQualityMeasure.compute_leave_one_out_measure
.Renamed
MLQualityMeasure.evaluate_bootstrap
toMLQualityMeasure.compute_bootstrap_measure
. #920The argument
use_shell
of the disciplineDiscFromExe
is no longer taken into account, executable are now always executed without shell. #948
Version 5.0.1 (2023-09-07)¶
Added¶
The MDAJacobi performance and memory usage was improved. #882
Fixed¶
The MDAJacobi executions are now deterministic. The MDAJacobi m2d acceleration is deactivated when the least square problem is not well solved. #882
Version 5.0.0 (2023-06-02)¶
Main GEMSEO.API breaking changes¶
The high-level functions defined in
gemseo.api
have been moved togemseo
.Features have been extracted from GEMSEO and are now available in the form of
plugins
:gemseo.algos.opt.lib_pdfo
has been moved to gemseo-pdfo, a GEMSEO plugin for the PDFO library,gemseo.algos.opt.lib_pseven
has been moved to gemseo-pseven, a GEMSEO plugin for the pSeven library,gemseo.wrappers.matlab
has been moved to gemseo-matlab, a GEMSEO plugin for MATLAB,gemseo.wrappers.template_grammar_editor
has been moved to gemseo-template-editor-gui, a GUI to create input and output file templates forDiscFromExe
.
Added¶
Surrogate models¶
PCERegressor
has new arguments:use_quadrature
to estimate the coefficients by quadrature rule or least-squares regression.use_lars
to get a sparse PCE with the LARS algorithm in the case of the least-squares regression.use_cleaning
andcleaning_options
to apply a cleaning strategy removing the non-significant terms.hyperbolic_parameter
to truncate the PCE before training.
The argument
scale
ofPCA
allows to scale the data before reducing their dimension. #743
Post processing¶
GradientSensitivity
plots the positive derivatives in red and the negative ones in blue for easy reading. #725TopologyView
allows to visualize the solution of a 2D topology optimization problem. #739ConstraintsHistory
uses horizontal black dashed lines for tolerance. #664Animation
is a newOptPostProcessor
to generate an animated GIF from aOptPostProcessor
. #740
MDO processes¶
JSchedulerDisciplineWrapper
can submit the execution of disciplines to a HPC job scheduler. #613MDODiscipline
has now a virtual execution mode; when active,MDODiscipline.execute
returns itsMDODiscipline.default_outputs
, whatever the inputs. #558Improve the computation of
MDA
residuals with the following new strategies:each sub-residual is scaled by the corresponding initial norm,
each component is scaled by the corresponding initial component,
the Euclidean norm of the component-wise division by initial residual scaled by the problem size.
OTComposedDistribution
can consider any copula offered by OpenTURNS. #655Scenario.xdsmize
returns aXDSM
; itsXDSM.visualize
method displays the XDSM in a web browser; this object has also a HTML view. #564Add a new grammar type based on Pydantic:
PydanticGrammar
. This new grammar is still experimental and subject to changes, use with cautions. #436XLSStudyParser
has a new argumenthas_scenario
whose default value isTrue
; ifFalse
, the sheetScenario
is not required.CouplingStudyAnalysis
allows to generate an N2 diagram from an XLS file defining the disciplines in terms of input and output names.MDOStudyAnalysis
allows to generate an N2 diagram and an XDSM from an XLS file defining an MDO problem in terms of disciplines, formulation, objective, constraint and design variables. #696JSONGrammar
can validatePathLike
objects. #759Enable sparse matrices in the utils.comparisons module. #779
The method
MDODiscipline._init_jacobian
now supports sparse matrices.
Optimisation & DOE¶
Stopping options
"max_time"
and"stop_crit_n_x"
can now be used with the global optimizers of SciPy ("DIFFERENTIAL_EVOLUTION"
,"DUAL_ANNEALING"
and"SHGO"
). #663Add exterior penalty approach to reformulate
OptimizationProblem
with constraints into one without constraints. #581Documentation: the required parameters of optimization, DOE and linear solver algorithms are documented in dedicated sections. #680
The
MDOLinearFunction
expression can be passed as an argument to the instantiation. This can be useful for large numbers of inputs or outputs to avoid long computation times for the expression string. #697Enable sparse coefficients for
MDOLinearFunction
. #756
UQ¶
SobolAnalysis
provides theSobolAnalysis.output_variances
andSobolAnalysis.output_standard_deviations
.SobolAnalysis.unscale_indices
allows to unscale the Sobol’ indices usingSobolAnalysis.output_variances
orSobolAnalysis.output_standard_deviations
.SobolAnalysis.plot
now displays the variance of the output variable in the title of the graph. #671CorrelationAnalysis
proposes two new sensitivity methods, namely Kendall rank correlation coefficients (CorrelationAnalysis.kendall
) and squared standard regression coefficients (CorrelationAnalysis.ssrc
). #654
Technical improvements¶
Factory for algorithms (
BaseAlgoFactory
) can cache the algorithm libraries to provide speedup. #522When
keep_opt_history=True
, the databases of aMDOScenarioAdapter
can be exported in HDF5 files. #607The argument
use_deep_copy
has been added to the constructor ofMDOParallelChain
class. This controls the use of deepcopy when runningMDOParallelChain
. By default this is set toFalse
, as a performance improvement has been observed in use cases with a large number of disciplines. The old behaviour of using a deep copy ofMDOParallelChain.local_data
can be enabled by setting this option toTrue
. This may be necessary in some rare combination ofMDOParallelChain
and other disciplines that directly modify theMDODiscipline.input_data
. #527Added a new
RunFolderManager
to generate unique run directory names forDiscFromExe
, either as successive integers or as UUID’s. #648ScenarioAdapter
is aFactory
ofMDOScenarioAdapter
. #684A new
MDOWarmStartedChain
allows users to warm start some inputs of the chain with the output values of the previous run. #665The method
Dataset.to_dict_of_arrays
converts aDataset
into a dictionary of NumPy arrays indexed by variable names or group names. #793
Fixed¶
Surrogate models¶
MinMaxScaler
andStandardScaler
handle constant data withoutRuntimeWarning
. #719
Post processing¶
The different kinds of
OptPostProcessor
displaying iteration numbers start counting at 1. #601The option
fig_size
passed toOptPostProcessor.execute
is now taken into account. #641The subplots of
ConstraintsHistory
use their own y-limits. #656The visualization
ParallelCoordinates
uses the names of the design variables defined in theDesignSpace
instead of default ones. #675
MDO processes¶
MDODiscipline.linearize
withcompute_all_jacobians=False
(default value) computes the Jacobians only for the inputs and outputs defined withMDODiscipline.add_differentiated_inputs
andMDODiscipline.add_differentiated_outputs
if any; otherwise, it returns an empty dictionary; ifcompute_all_jacobians=True
, it considers all the inputs and outputs. #644The bug concerning the linearization of a
MDOScenarioAdapter
including disciplines that depends both only onMDOScenarioAdapter
inputs and that are linearized in theMDOScenarioAdapter._run
method is solved. Tests concerning this behavior where added. #651AutoPyDiscipline
can wrap a Python function with multiline return statements. #661Modify the computation of total derivatives in the presence of state variables to avoid unnecessary calculations. #686
Modify the default linear solver calling sequence to prevent the use of the
splu
function on SciPyLinearOperator
objects. #691Fix Jacobian of
MDOChain
includingSplitter
disciplines. #764Corrected typing issues that caused an exception to be raised when a custom parser was passed to the
DiscFromExe
at instantiation. #767The method
MDODiscipline._init_jacobian
whenfill_missing_key=True
now creates the missing keys. #782It is now possible to pass a custom
name
to theXLSDiscipline
at instantiation. #788get_available_mdas
no longer returns the abstract classMDA
. #795
Optimisation & DOE¶
OptimizationProblem.to_dataset
uses the order of the design variables given by theParameterSpace
to build theDataset
. #626Database.get_complete_history
raises aValueError
when asking for a non-existent function. #670The DOE algorithm
OT_FACTORIAL
handles correctly the tuple of parameters (levels
,centers
); this DOE algorithm does not usen_samples
. The DOE algorithmOT_FULLFACT
handles correctly the use ofn_samples
as well as the use of the parameterslevels
; this DOE algorithm can use eithern_samples
orlevels
. #676The required properties are now available in the grammars of the DOE algorithms. #680
The stopping criteria for the objective function variation are only activated if the objective value is stored in the database in the last iterations. #692
The
GradientApproximator
and its subclasses no longer include closures preventing serialization. #700A constraint aggregation
MDOFunction
is now capable of dealing with complexndarray
inputs. #716Fix
OptimizationProblem.is_mono_objective
that returned wrong values when the objective had oneoutvars
but multidimensional. #734Fix the behavior of
DesignSpace.filter_dim
method for list of indices containing more than one index. #746
UQ¶
Technical improvements¶
The method
OptProblem.constraint_names
is now built on fly from the constraints. This fixes the issue of the updating of the constraint names when the constraints are modified, as it is the case with the aggregation of constraints. #669Factory
considers the base class as an available class when it is not abstract. #685Serialization of paths in disciplines attributes and local_data in multi OS. #711
Changed¶
JSONGrammar
no longer merge the definition of a property with the dictionary-likeupdate
methods. Now the usual behavior of a dictionary will be used such that the definition of a property is overwritten. The previous behavior can be used by passing the argumentmerge = True
. #708CorrelationAnalysis
no longer proposes the signed standard regression coefficients (SSRC), as it has been removed fromopenturns
. #654Splitter
,Concatenater
,DensityFilter
, andMaterialModelInterpolation
disciplines use sparse Jacobians. #745The minimum value of the seed used by a DOE algorithm is 0. #727
Parametric
gemseo.problems.scalable.parametric.scalable_problem.ScalableProblem
:The configuration of the scalable disciplines is done with
ScalableDisciplineSettings
.The method
gemseo.problems.scalable.parametric.scalable_problem.ScalableProblem.create_quadratic_programming_problem
returns the corresponding quadratic programming (QP) problem as anOptimizationProblem
.The argument
alpha
(default: 0.5) defines the share of feasible design space.
API changes¶
The high-level functions defined in
gemseo.api
have been moved togemseo
.
Surrogate models¶
The high-level functions defined in
gemseo.mlearning.api
have been moved togemseo.mlearning
.stieltjes
andstrategy
are no longer arguments ofPCERegressor
.Rename
MLAlgo.save
toMLAlgo.to_pickle
.The name of the method to evaluate the quality measure is passed to
MLAlgoAssessor
with the argumentmeasure_evaluation_method
; any of["LEARN", "TEST", "LOO", "KFOLDS", "BOOTSTRAP"]
.The name of the method to evaluate the quality measure is passed to
MLAlgoSelection
with the argumentmeasure_evaluation_method
; any of["LEARN", "TEST", "LOO", "KFOLDS", "BOOTSTRAP"]
.The name of the method to evaluate the quality measure is passed to
MLAlgoCalibration
with the argumentmeasure_evaluation_method
; any of["LEARN", "TEST", "LOO", "KFOLDS", "BOOTSTRAP"]
.The names of the methods to evaluate a quality measure can be accessed with
MLAlgoQualityMeasure.EvaluationMethod
. #464Rename
gemseo.mlearning.qual_measure
togemseo.mlearning.quality_measures
.Rename
gemseo.mlearning.qual_measure.silhouette
togemseo.mlearning.quality_measures.silhouette_measure
.Rename
gemseo.mlearning.cluster
togemseo.mlearning.clustering
.Rename
gemseo.mlearning.cluster.cluster
togemseo.mlearning.clustering.clustering
.Rename
gemseo.mlearning.transform
togemseo.mlearning.transformers
. #701The enumeration
RBFRegressor.Function
replaced the constants:RBFRegressor.MULTIQUADRIC
RBFRegressor.INVERSE_MULTIQUADRIC
RBFRegressor.GAUSSIAN
RBFRegressor.LINEAR
RBFRegressor.CUBIC
RBFRegressor.QUINTIC
RBFRegressor.THIN_PLATE
RBFRegressor.AVAILABLE_FUNCTIONS
Post processing¶
The visualization
Lines
uses a specific tuple (color, style, marker, name) per line by default. #677YvsX
no longer has the argumentsx_comp
andy_comp
; the components have to be passed asx=("variable_name", variable_component)
.Scatter
no longer has the argumentsx_comp
andy_comp
; the components have to be passed asx=("variable_name", variable_component)
.ZvsXY
no longer has the argumentsx_comp
,y_comp
andz_comp
; the components have to be passed asx=("variable_name", variable_component)
. #722RobustnessQuantifier.compute_approximation
usesNone
as default value forat_most_niter
.HessianApproximation.get_x_grad_history
usesNone
as default value forlast_iter
andat_most_niter
.HessianApproximation.build_approximation
usesNone
as default value forat_most_niter
.HessianApproximation.build_inverse_approximation
usesNone
as default value forat_most_niter
.LSTSQApprox.build_approximation
usesNone
as default value forat_most_niter
. #750PostFactory.create
usesclass_name
, thenopt_problem
and**options
as arguments. #752Dataset.plot
no longer refers to specific dataset plots, as ScatterMatrix, lines, curves…Dataset.plot
now refers to the standard pandas plot method. To retrieve ready-to-use plots, please check ingemseo.post.dataset
. #257
MDO processes¶
Renamed
InvalidDataException
toInvalidDataError
. #23Moved the
MatlabDiscipline
to the plugin gemseo-matlab.Rename
MakeFunction
toMDODisciplineAdapter
.In
MDODisciplineAdapter
, replace the argumentmdo_function
of typeMDODisciplineAdapterGenerator
by the argumentdiscipline
of typeMDODiscipline
.Rename
MDOFunctionGenerator
toMDODisciplineAdapterGenerator
. #412Rename
AbstractCache.export_to_dataset
toAbstractCache.to_dataset
.Rename
AbstractCache.export_to_ggobi
toAbstractCache.to_ggobi
.Rename
Scenario.export_to_dataset
toScenario.to_dataset
.Rename
MDODiscipline._default_inputs
toMDODiscipline.default_inputs
.Rename
MDODiscipline.serialize
toMDODiscipline.to_pickle
.Rename
MDODiscipline.deserialize
toMDODiscipline.from_pickle
which is a static method.Rename
ScalabilityResult.save
toScalabilityResult.to_pickle
.Rename
BaseGrammar.convert_to_simple_grammar
toBaseGrammar.to_simple_grammar
.Removed the method
_update_grammar_input
fromScenario
,Scenario._update_input_grammar
shall be used instead. #558Scenario.xdsmize
Rename
latex_output
tosave_pdf
.Rename
html_output
tosave_html
.Rename
json_output
tosave_json
.Rename
open_browser
toshow_html
.Rename
outfilename
tofile_name
and do not use suffix.Rename
outdir
todirectory_path
.
XDSMizer
Rename
latex_output
tosave_pdf
.Rename
open_browser
toshow_html
.Rename
output_dir
todirectory_path
.Rename
XDSMizer.outdir
toXDSMizer.directory_path
.Rename
XDSMizer.outfilename
toXDSMizer.json_file_name
.Rename
XDSMizer.latex_output
toXDSMizer.save_pdf
.
XDSMizer.monitor
Rename
latex_output
tosave_pdf
.Rename
outfilename
tofile_name
and do not use suffix.Rename
outdir
todirectory_path
.
XDSMizer.run
Rename
latex_output
tosave_pdf
.Rename
html_output
tosave_html
.Rename
json_output
tosave_json
.Rename
open_browser
toshow_html
.Rename
outfilename
tofile_name
and do not use suffix.Rename
outdir
todirectory_path
and use"."
as default value.
StudyAnalysis.generate_xdsm
Rename
latex_output
tosave_pdf
.Rename
open_browser
toshow_html
.Rename
output_dir
todirectory_path
.
MDOCouplingStructure.plot_n2_chart
: renameopen_browser
toshow_html
.N2HTML
: renameopen_browser
toshow_html
.generate_n2_plot
renameopen_browser
toshow_html
.Scenario.xdsmize
: renameprint_statuses
tolog_workflow_status
.XDSMizer.monitor
: renameprint_statuses
tolog_workflow_status
.Rename
XDSMizer.print_statuses
toXDSMizer.log_workflow_status
.The CLI of the
StudyAnalysis
uses the shortcut-p
for the option--save_pdf
. #564Replace the argument
force_no_exec
byexecute
inMDODiscipline.linearize
andJacobianAssembly.total_derivatives
.Rename the argument
force_all
tocompute_all_jacobians
inMDODiscipline.linearize
. #644The names of the algorithms proposed by
CorrelationAnalysis
must be written in capital letters; seeCorrelationAnalysis.Method
. #654 #464DOEScenario
no longer has aseed
attribute. #621Remove
AutoPyDiscipline.get_return_spec_fromstr
. #661Remove
Scenario.get_optimum
; useScenario.optimization_result
instead. #770Rename
AutoPyDiscipline.in_names
toAutoPyDiscipline.input_names
.Rename
AutoPyDiscipline.out_names
toAutoPyDiscipline.output_names
. #661Replaced the module
parallel_execution.py
by the packageparallel_execution
.Renamed the class
ParallelExecution
toCallableParallelExecution
.Renamed the function
worker
toexecute_workers
.Renamed the argument
input_values
toinputs
.Removed the
ParallelExecution
methods:_update_local_objects
_run_task
_is_worker
_filter_ordered_outputs
_run_task_by_index
ParallelExecution
and its derive classes always take a collection of workers and no longer a single worker. #668Removed the property
penultimate_entry
fromSimpleCache
. #480Rename
GSNewtonMDA
toMDAGSNewton
. #703The enumeration
MDODiscipline.ExecutionStatus
replaced the constants:MDODiscipline.STATUS_VIRTUAL
MDODiscipline.STATUS_PENDING
MDODiscipline.STATUS_DONE
MDODiscipline.STATUS_RUNNING
MDODiscipline.STATUS_FAILED
MDODiscipline.STATUS_LINEARIZE
MDODiscipline.AVAILABLE_STATUSES
The enumeration
MDODiscipline.GrammarType
replaced the constants:MDODiscipline.JSON_GRAMMAR_TYPE
MDODiscipline.SIMPLE_GRAMMAR_TYPE
The enumeration
MDODiscipline.CacheType
replaced the constants:MDODiscipline.SIMPLE_CACHE
MDODiscipline.HDF5_CACHE
MDODiscipline.MEMORY_FULL_CACHE
The value
None
indicating no cache is replaced byMDODiscipline.CacheType.NONE
The enumeration
MDODiscipline.ReExecutionPolicy
replaced the constants:MDODiscipline.RE_EXECUTE_DONE_POLICY
MDODiscipline.RE_EXECUTE_NEVER_POLICY
The enumeration
derivation_modes.ApproximationMode
replaced the constants:derivation_modes.FINITE_DIFFERENCES
derivation_modes.COMPLEX_STEP
derivation_modes.AVAILABLE_APPROX_MODES
The enumeration
derivation_modes.DerivationMode
replaced the constants:derivation_modes.DIRECT_MODE
derivation_modes.REVERSE_MODE
derivation_modes.ADJOINT_MODE
derivation_modes.AUTO_MODE
derivation_modes.AVAILABLE_MODES
The enumeration
JacobianAssembly.DerivationMode
replaced the constants:JacobianAssembly.DIRECT_MODE
JacobianAssembly.REVERSE_MODE
JacobianAssembly.ADJOINT_MODE
JacobianAssembly.AUTO_MODE
JacobianAssembly.AVAILABLE_MODES
The enumeration
MDODiscipline.ApproximationMode
replaced the constants:MDODiscipline.FINITE_DIFFERENCES
MDODiscipline.COMPLEX_STEP
MDODiscipline.APPROX_MODES
The enumeration
MDODiscipline.LinearizationMode
replaced the constants:MDODiscipline.FINITE_DIFFERENCE
MDODiscipline.COMPLEX_STEP
MDODiscipline.AVAILABLE_APPROX_MODES
The high-level functions defined in
gemseo.problems.scalable.data_driven.api
have been moved togemseo.problems.scalable.data_driven
. #707Removed
StudyAnalysis.AVAILABLE_DISTRIBUTED_FORMULATIONS
.The enumeration
DiscFromExe.Parser
replaced the constants:DiscFromExe.Parsers
DiscFromExe.Parsers.KEY_VALUE_PARSER
DiscFromExe.Parsers.TEMPLATE_PARSER
The enumeration
MatlabEngine.ParallelType
replaced:matlab_engine.ParallelType
MDOFunciton.check_grad
argumentmethod
was renamed toapproximation_mode
and now expects to be passed anApproximationMode
.For
GradientApproximator
and its derived classes:Renamed the class attribute
ALIAS
to_APPROXIMATION_MODE
,Renamed the instance attribute
_par_args
to_parallel_args
,Renamed
GradientApproximationFactory
toGradientApproximatorFactory
and moved it to the modulegradient_approximator_factory.py
,Moved the duplicated functions to
error_estimators.py
:finite_differences.comp_best_step
finite_differences.compute_truncature_error
finite_differences.compute_cancellation_error
finite_differences.approx_hess
derivatives_approx.comp_best_step
derivatives_approx.compute_truncature_error
derivatives_approx.compute_cancellation_error
derivatives_approx.approx_hess
comp_best_step
was renamed tocompute_best_step
approx_hess
was renamed tocompute_hessian_approximation
To update a grammar from data names that shall be validated against Numpy arrays, the
update
method is now replaced by the methodupdate_from_names
.To update a
JSONGrammar
from a JSON schema, theupdate
method is now replaced by the methodupdate_from_schema
.Renamed
JSONGrammar.write
toJSONGrammar.to_file
.Renamed the argument
schema_path
tofile_path
for theJSONGrammar
constructor.To update a
SimpleGrammar
or aJSONGrammar
from a names and types, theupdate
method is now replaced by the methodupdate_from_types
. #741Renamed
HDF5Cache.hdf_node_name
toHDF5Cache.hdf_node_path
.tolerance
andname
are the first instantiation arguments ofHDF5Cache
, for consistency with other caches.Added the arguments
newton_linear_solver
andnewton_linear_solver_options
to the constructor ofMDANewtonRaphson
. These arguments are passed to the linear solver of the Newton solver used to solve the MDA coupling. #715MDA: Remove the method
set_residuals_scaling_options
. #780MDA
: Remove the attributes_scale_residuals_with_coupling_size
and_scale_residuals_with_first_norm
and add thescaling
and_scaling_data
attributes.The module
gemseo.problems.scalable.parametric.study
has been removed. #717
Optimisation & DOE¶
Moved the library of optimization algorithms
PSevenOpt
to the plugin gemseo-pseven.Moved the
PDFO
wrapper to the plugin gemseo-pdfo.Removed the useless exception
NloptRoundOffException
.Rename
MDOFunction.serialize
toMDOFunction.to_pickle
.Rename
MDOFunction.deserialize
toMDOFunction.from_pickle
which is a static method.DesignSpace
has a class methodDesignSpace.from_file
and an instance methodDesignSpace.to_file
.read_design_space
can read an HDF file.Rename
DesignSpace.export_hdf
toDesignSpace.to_hdf
.Rename
DesignSpace.import_hdf
toDesignSpace.from_hdf
which is a class method.Rename
DesignSpace.export_to_txt
toDesignSpace.to_csv
.Rename
DesignSpace.read_from_txt
toDesignSpace.from_csv
which is a class method.Rename
Database.export_hdf
toDatabase.to_hdf
.Replace
Database.import_hdf
by the class methodDatabase.from_hdf
and the instance methodDatabase.update_from_hdf
.Rename
Database.export_to_ggobi
toDatabase.to_ggobi
.Rename
Database.import_from_opendace
toDatabase.update_from_opendace
.Database
no longer has the argumentinput_hdf_file
; usedatabase = Database.from_hdf(file_path)
instead.Rename
OptimizationProblem.export_hdf
toOptimizationProblem.to_hdf
.Rename
OptimizationProblem.import_hdf
toOptimizationProblem.from_hdf
which is a class method.Rename
OptimizationProblem.export_to_dataset
toOptimizationProblem.to_dataset
.The argument
export_hdf
ofwrite_design_space
has been removed.Rename
export_design_space
towrite_design_space
.DesignSpace
no longer hasfile_path
as argument; usedesign_space = DesignSpace.from_file(file_path)
instead. #450Rename
iks_agg
tocompute_iks_agg
Rename
iks_agg_jac_v
tocompute_total_iks_agg_jac
Rename
ks_agg
tocompute_ks_agg
Rename
ks_agg_jac_v
tocompute_total_ks_agg_jac
Rename
max_agg
tocompute_max_agg
Rename
max_agg_jac_v
tocompute_max_agg_jac
Rename
sum_square_agg
tocompute_sum_square_agg
Rename
sum_square_agg_jac_v
tocompute_total_sum_square_agg_jac
Rename the first positional argument
constr_data_names
ofConstraintAggregation
toconstraint_names
.Rename the second positional argument
method_name
ofConstraintAggregation
toaggregation_function
.Rename the first position argument
constr_id
ofOptimizationProblem.aggregate_constraint
toconstraint_index
.Rename the aggregation methods
"pos_sum"
,"sum"
and"max"
to"POS_SUM"
,"SUM"
and"MAX"
.Rename
gemseo.algos.driver_lib
togemseo.algos.driver_library
.Rename
DriverLib
toDriverLibrary
.Rename
gemseo.algos.algo_lib
togemseo.algos.algorithm_library
.Rename
AlgoLib
toAlgorithmLibrary
.Rename
gemseo.algos.doe.doe_lib
togemseo.algos.doe.doe_library
.Rename
gemseo.algos.linear_solvers.linear_solver_lib
togemseo.algos.linear_solvers.linear_solver_library
.Rename
LinearSolverLib
toLinearSolverLibrary
.Rename
gemseo.algos.opt.opt_lib
togemseo.algos.opt.optimization_library
. #702The enumeration
DriverLib.DifferentiationMethod
replaced the constants:DriverLib.USER_DEFINED_GRADIENT
DriverLib.DIFFERENTIATION_METHODS
The enumeration
DriverLib.ApproximationMode
replaced the constants:DriverLib.COMPLEX_STEP_METHOD
DriverLib.FINITE_DIFF_METHOD
The enumeration
OptProblem.ApproximationMode
replaced the constants:OptProblem.USER_DEFINED_GRADIENT
OptProblem.DIFFERENTIATION_METHODS
OptProblem.NO_DERIVATIVES
OptProblem.COMPLEX_STEP_METHOD
OptProblem.FINITE_DIFF_METHOD
The method
Scenario.set_differentiation_method
no longer acceptsNone
for the argumentmethod
.The enumeration
OptProblem.ProblemType
replaced the constants:OptProblem.LINEAR_PB
OptProblem.NON_LINEAR_PB
OptProblem.AVAILABLE_PB_TYPES
The enumeration
DesignSpace.DesignVariableType
replaced the constants:DesignSpace.FLOAT
DesignSpace.INTEGER
DesignSpace.AVAILABLE_TYPES
The namedtuple
DesignSpace.DesignVariable
replaced:design_space.DesignVariable
The enumeration
MDOFunction.ConstraintType
replaced the constants:MDOFunction.TYPE_EQ
MDOFunction.TYPE_INEQ
The enumeration
MDOFunction.FunctionType
replaced the constants:MDOFunction.TYPE_EQ
MDOFunction.TYPE_INEQ
MDOFunction.TYPE_OBJ
MDOFunction.TYPE_OBS
The value
""
indicating no function type is replaced byMDOFunction.FunctionType.NONE
The enumeration
LinearSolver.Solver
replaced the constants:LinearSolver.LGMRES
LinearSolver.AVAILABLE_SOLVERS
The enumeration
ConstrAggregationDisc.EvaluationFunction
replaced:constraint_aggregation.EvaluationFunction
Use
True
as default value ofeval_observables
inOptimizationProblem.evaluate_functions
.Rename
outvars
tooutput_names
andargs
toinput_names
inMDOFunction
and its subclasses (names of arguments, attributes and methods).MDOFunction.has_jac
is a property.Remove
MDOFunction.has_dim
.Remove
MDOFunction.has_outvars
.Remove
MDOFunction.has_expr
.Remove
MDOFunction.has_args
.Remove
MDOFunction.has_f_type
.Rename
DriverLib.is_algo_requires_grad
toDriverLibrary.requires_gradient
.Rename
ConstrAggegationDisc
toConstraintAggregation
. #713Remove
Database.KEYSSEPARATOR
.Remove
Database._format_design_variable_names
.Remove
Database.get_value
; useoutput_value = database[x_vect]
instead ofoutput_value = database.get_value(x_vect)
.Remove
Database.contains_x
; usex_vect in database
instead ofdatabase.contains_x(x_vect)
.Remove
Database.contains_dataname
; useoutput_name in database.output_names
instead ofdatabase.contains_dataname(output_name)
.Remove
Database.set_dv_names
; usedatabase.input_names
to access the input names.Remove
Database.is_func_grad_history_empty
; usedatabase.check_output_history_is_empty
instead with any output name.Rename
Database.get_hashed_key
toDatabase.get_hashable_ndarray
.Rename
Database.get_all_data_names
toDatabase.get_function_names
.Rename
Database.missing_value_tag
toDatabase.MISSING_VALUE_TAG
.Rename
Database.get_x_by_iter
toDatabase.get_x_vect
.Rename
Database.clean_from_iterate
toDatabase.clear_from_iteration
.Rename
Database.get_max_iteration
toDatabase.n_iterations
.Rename
Database.notify_newiter_listeners
toDatabase.notify_new_iter_listeners
.Rename
Database.get_func_history
toDatabase.get_function_history
.Rename
Database.get_func_grad_history
toDatabase.get_gradient_history
.Rename
Database.get_x_history
toDatabase.get_x_vect_history
.Rename
Database.get_last_n_x
toDatabase.get_last_n_x_vect
.Rename
Database.get_x_at_iteration
toDatabase.get_x_vect
.Rename
Database.get_index_of
toDatabase.get_iteration
.Rename
Database.get_f_of_x
toDatabase.get_function_value
.Rename the argument
all_function_names
tofunction_names
inDatabase.to_ggobi
.Rename the argument
design_variable_names
toinput_names
inDatabase.to_ggobi
.Rename the argument
add_dv
towith_x_vect
inDatabase.get_history_array
.Rename the argument
values_dict
tooutput_value
inDatabase.store
.Rename the argument
x_vect
toinput_value
.Rename the argument
listener_func
tofunction
.Rename the arguments
funcname
,fname
anddata_name
tofunction_name
.Rename the arguments
functions
andnames
tofunction_names
.Rename the argument
names
tooutput_names
inDatabase.filter
.Rename the argument
x_hist
toadd_x_vect_history
inDatabase.get_function_history
andDatabase.get_gradient_history
.Database.get_x_vect
starts counting the iterations at 1.Database.clear_from_iteration
starts counting the iterations at 1.RadarChart
,TopologyView
andGradientSensitivity
starts counting the iterations at 1.The input history returned by
Database.get_gradient_history
andDatabase.get_function_history
is now a 2D NumPy array.Remove
Database.n_new_iteration
.Remove
Database.reset_n_new_iteration
.Remove the argument
reset_iteration_counter
inDatabase.clear
.The
Database
no longer uses the tag"Iter"
.The
Database
no longer uses the notion ofstacked_data
. #753Remove
MDOFunction.concatenate
; please useConcatenate
.Remove
MDOFunction.convex_linear_approx
; please useConvexLinearApprox
.Remove
MDOFunction.linear_approximation
; please usecompute_linear_approximation
.Remove
MDOFunction.quadratic_approx
; please usecompute_quadratic_approximation
.Remove
MDOFunction.restrict
; please useFunctionRestriction
.Remove
DOELibrary.compute_phip_criteria
; please usecompute_phip_criterion
.
UQ¶
The high-level functions defined in
gemseo.uncertainty.api
have been moved togemseo.uncertainty
.Rename
SensitivityAnalysis.export_to_dataset
toSensitivityAnalysis.to_dataset
.Rename
SensitivityAnalysis.save
toSensitivityAnalysis.to_pickle
.Rename
SensitivityAnalysis.load
toSensitivityAnalysis.from_pickle
which is a class method.ComposedDistribution
usesNone
as value for independent copula.ParameterSpace
no longer uses acopula
passed at instantiation but toParameterSpace.build_composed_distribution
.SPComposedDistribution
raises an error when set up with a copula different fromNone
. #655The enumeration
RobustnessQuantifier.Approximation
replaced the constant:RobustnessQuantifier.AVAILABLE_APPROXIMATIONS
The enumeration
OTDistributionFitter.DistributionName
replaced the constants:OTDistributionFitter.AVAILABLE_DISTRIBUTIONS
OTDistributionFitter._AVAILABLE_DISTRIBUTIONS
The enumeration
OTDistributionFitter.FittingCriterion
replaced the constants:OTDistributionFitter.AVAILABLE_FITTING_TESTS
OTDistributionFitter._AVAILABLE_FITTING_TESTS
The enumeration
OTDistributionFitter.SignificanceTest
replaced the constant:OTDistributionFitter.SIGNIFICANCE_TESTS
The enumeration
ParametricStatistics.DistributionName
replaced the constant:ParametricStatistics.AVAILABLE_DISTRIBUTIONS
The enumeration
ParametricStatistics.FittingCriterion
replaced the constant:ParametricStatistics.AVAILABLE_FITTING_TESTS
The enumeration
ParametricStatistics.SignificanceTest
replaced the constant:ParametricStatistics.SIGNIFICANCE_TESTS
The enumeration
SobolAnalysis.Algorithm
replaced the constant:SobolAnalysis.Algorithm.Saltelli
bySobolAnalysis.Algorithm.SALTELLI
SobolAnalysis.Algorithm.Jansen
bySobolAnalysis.Algorithm.JANSEN
SobolAnalysis.Algorithm.MauntzKucherenko
bySobolAnalysis.Algorithm.MAUNTZ_KUCHERENKO
SobolAnalysis.Algorithm.Martinez
bySobolAnalysis.Algorithm.MARTINEZ
The enumeration
SobolAnalysis.Method
replaced the constant:SobolAnalysis.Method.first
bySobolAnalysis.Method.FIRST
SobolAnalysis.Method.total
bySobolAnalysis.Method.TOTAL
The enumeration
ToleranceInterval.ToleranceIntervalSide
replaced:distribution.ToleranceIntervalSide
The namedtuple
ToleranceInterval.Bounds
replaced:distribution.Bounds
Remove
n_legend_cols
inParametricStatistics.plot_criteria
.Rename
variables_names
,variables_sizes
andvariables_types
tovariable_names
,variable_sizes
andvariable_types
.Rename
inputs_names
andoutputs_names
toinput_names
andoutput_names
.Rename
constraints_names
toconstraint_names
.Rename
functions_names
tofunction_names
.Rename
inputs_sizes
andoutputs_sizes
toinput_sizes
andoutput_sizes
.Rename
disciplines_names
todiscipline_names
.Rename
jacobians_names
tojacobian_names
.Rename
observables_names
toobservable_names
.Rename
columns_names
tocolumn_names
.Rename
distributions_names
todistribution_names
.Rename
options_values
tooption_values
.Rename
constraints_values
toconstraint_values
.Rename
jacobians_values
tojacobian_values
.SobolAnalysis.AVAILABLE_ALGOS
no longer exists; use theenum
SobolAnalysis.Algorithm
instead.MLQualityMeasure.evaluate
no longer exists; please use eitherMLQualityMeasure.evaluate_learn
,MLQualityMeasure.evaluate_test
,MLQualityMeasure.evaluate_kfolds
,MLQualityMeasure.evaluate_loo
andMLQualityMeasure.evaluate_bootstrap
.Remove
OTComposedDistribution.AVAILABLE_COPULA_MODELS
; please useOTComposedDistribution.CopulaModel
.Remove
ComposedDistribution.AVAILABLE_COPULA_MODELS
; please useComposedDistribution.CopulaModel
.Remove
SPComposedDistribution.AVAILABLE_COPULA_MODELS
; please useSPComposedDistribution.CopulaModel
.Remove
ComposedDistribution.INDEPENDENT_COPULA
; please useComposedDistribution.INDEPENDENT_COPULA
.Remove
SobolAnalysis.AVAILABLE_ALGOS
; please useSobolAnalysis.Algorithm
.
Technical improvements¶
Moved
gemseo.utils.testing.compare_dict_of_arrays
togemseo.utils.comparisons.compare_dict_of_arrays
.Moved
gemseo.utils.testing.image_comparison
togemseo.utils.testing.helpers.image_comparison
.Moved
gemseo.utils.pytest_conftest
togemseo.utils.testing.pytest_conftest
.Moved
gemseo.utils.testing.pytest_conftest.concretize_classes
togemseo.utils.testing.helpers.concretize_classes
. #173Dataset
inherits fromDataFrame
and uses multi-indexing columns. Some methods have been added to improve the use of multi-index;Dataset.transform_variable
has been renamed toDataset.transform_data
. Two derived classes (IODataset
andOptimizationDataset
) can be considered for specific usages.Dataset
can be imported fromgemseo.datasets.dataset
.The default group of
Dataset
isparameters
.Dataset
no longer has theget_data_by_group
,get_all_data
andget_data_by_names
methods. UseDataset.get_view`
instead. It returns a slicedDataset
, to focus on some parts. Different formats can be used to extract data using pandas default methods. For instance,get_data_by_names
can be replaced byget_view(variable_names=var_name).to_numpy()
.In a
Dataset
, a variable is identified by a tuple(group_name, variable_name)
. This tuple called variable identifier is unique, contrary to a variable name as it can be used in several groups. The size of a variable corresponds to its number of components. dataset.variable_names_to_n_components[variable_name]`` returns the size of all the variables namedvariable_name
whilelen(dataset.get_variable_components(group_name, variable_name))
returns the size of the variable namedvariable_name
and belonging togroup_name
.The methods
to_dataset
no longer have an argumentby_group
as theDataset
no longer stores the data by group (the previousDataset
stored the data in a dictionary indexed by either variable names or group names).Dataset
no longer has theexport_to_dataframe
method, since it is aDataFrame
itself.Dataset
no longer has thelength
; uselen(dataset)
instead.Dataset
no longer has theis_empty
method. Use pandas attributeempty
instead.Dataset
no longer has theexport_to_cache
method.Dataset
no longer has therow_names
attribute. Useindex
instead.Dataset.add_variable
no longer has thegroup
argument. Usegroup_name
instead.Dataset.add_variable
no longer has thename
argument. Usevariable_name
instead.Dataset.add_variable
no longer has thecache_as_input
argument.Dataset.add_group
no longer has thegroup
argument. Usegroup_name
instead.Dataset.add_group
no longer has thevariables
argument. Usevariable_names
instead.Dataset.add_group
no longer has thesizes
argument. Usevariable_names_to_n_components
instead.Dataset.add_group
no longer has thecache_as_input
andpattern
arguments.Renamed
Dataset.set_from_array
toDataset.from_array
.Renamed
Dataset.get_names
toDataset.get_variable_names
.Renamed
Dataset.set_metadata
toDataset.misc
.Removed
Dataset.n_samples
in favor oflen()
.gemseo.load_dataset
is renamed:gemseo.create_benchmark_dataset
. Can be used to create a Burgers, Iris or Rosenbrock dataset.BurgerDataset
no longer exists. Create a Burger dataset withcreate_burgers_dataset
.IrisDataset
no longer exists. Create an Iris dataset withcreate_iris_dataset
.RosenbrockDataset
no longer exists. Create a Rosenbrock dataset withcreate_rosenbrock_dataset
.problems.dataset.factory
no longer exists.Scenario.to_dataset
no longer has theby_group
argument.AbstractCache.to_dataset
no longer has theby_group
andname
arguments. #257Rename
MDOObjScenarioAdapter
toMDOObjectiveScenarioAdapter
.The scenario adapters
MDOScenarioAdapter
andMDOObjectiveScenarioAdapter
are now located in the packagegemseo.disciplines.scenario_adapters
. #407Moved
gemseo.core.factory.Factory
togemseo.core.base_factory.BaseFactory
Removed the attribute
factory
of the factories.Removed
Factory._GEMS_PATH
.Moved
singleton._Multiton
tofactory._FactoryMultitonMeta
Renamed
Factory.cache_clear
toFactory.clear_cache
.Renamed
Factory.classes
toFactory.class_names
.Renamed
Factory
toBaseFactory
.Renamed
DriverFactory
toBaseAlgoFactory
. #522The way non-serializable attributes of an
MDODiscipline
are treated has changed. From now on, instead of defining the attributes to serialize with the class variable_ATTR_TO_SERIALIZE
,MDODiscipline
and its child classes shall define the attributes not to serialize with the class variable_ATTR_NOT_TO_SERIALIZE
. When a new attribute that is not serializable is added to the list, the methods__setstate__
and__getstate__
shall be modified to handle its creation properly. #699utils.python_compatibility
was moved and renamed toutils.compatibility.python
. #689The enumeration
FilePathManager.FileType
replaced the constant:file_type_manager.FileType
Rename
Factory.classes
toFactory.class_names
.Move
ProgressBar
andTqdmToLogger
togemseo.algos.progress_bar
.Move
HashableNdarray
togemseo.algos.hashable_ndarray
.Move the HDF methods of
Database
toHDFDatabase
.Remove
BaseEnum.get_member_from_name
; please useBaseEnum.__getitem__
.StudyAnalysis.disciplines_descr
has been removed; useMDOStudyAnalysis.study.disciplines
instead.StudyAnalysis.scenarios_descr
has been removed; useMDOStudyAnalysis.study.scenarios
instead.StudyAnalysis.xls_study_path
has been removed; useCouplingStudyAnalysis.study.xls_study_path
instead.gemseo.utils.study_analysis.StudyAnalysis
has been moved togemseo.utils.study_analyses.mdo_study_analysis
and renamed toMDOStudyAnalysis
.gemseo.utils.study_analysis.XLSStudyParser
has been moved togemseo.utils.study_analyses.xls_study_parser
.gemseo.utils.study_analysis_cli
has been moved togemseo.utils.study_analyses
.MDOStudyAnalysis.generate_xdsm
no longer returns aMDOScenario
but anXDSM
.The option
fig_size
of thegemseo-study
has been replaced by the optionsheight
andwidth
.The CLI
gemseo-study
can be used for MDO studies withgemseo-study xls_file_path
and coupling studies withgemseo-study xls_file_path -t coupling
.
Removed¶
Removed the
gemseo.core.jacobian_assembly
module that is now ingemseo.core.derivatives.jacobian_assembly
.Removed the obsolete
snopt
wrapper.Removed Python 3.7 support.
Version 4.3.0 (2023-02-09)¶
Added¶
Statistics.compute_joint_probability
computes the joint probability of the components of random variables whileStatistics.compute_probability
computes their marginal ones. #542MLErrorMeasure
can split the multi-output measures according to the output names. #544SobolAnalysis.compute_indices
has a new argument to change the level of the confidence intervals. #599MDOInitializationChain
can compute the input data for a MDA from incomplete default_inputs of the disciplines. #610Add a new execution status for disciplines: “STATUS_LINEARIZE” when the discipline is performing the linearization. #612
ConstraintsHistory
:One can add one point per iteration on the blue line (default behavior).
The line style can be changed (dashed line by default).
The types of the constraint are displayed.
The equality constraints are plotted with the
OptPostProcessor.eq_cstr_cmap
.
Users can now choose whether the
OptimizationProblem.current_iter
should be set to 0 before the execution of anOptimizationProblem
passing the algo optionreset_iteration_counters
. This is useful to complete the execution of aScenario
from a backup file without exceeding the requestedmax_iter
orn_samples
. #636
Fixed¶
HDF5Cache.hdf_node_name
returns the name of the node of the HDF file in which the data are cached. #583The histories of the objective and constraints generated by
OptHistoryView
no longer return an extra iteration. #591The histories of the constraints and diagonal of the Hessian matrix generated by
OptHistoryView
use the scientific notation. #592ObjConstrHist
correctly manages the objectives to maximize. #594Statistics.n_variables
no longer corresponds to the number of variables in theStatistics.dataset
but to the number of variables considered byStatistics
.ParametricStatistics
correctly handles variables with dimension greater than one.ParametricStatistics.compute_a_value
uses 0.99 as coverage level and 0.95 as confidence level. #597The input data provided to the discipline by a DOE did not match the type defined in the design space. #606
The cache of a self-coupled discipline cannot be exported to a dataset. #608
The
ConstraintsHistory
draws the vertical line at the right position when the constraint is satisfied at the final iteration. #616Fixed remaining time unit inconsistency in progress bar. #617
The attribute
fig_size
ofsave_show_figure
impacts the figure whenshow
isTrue
. #618Transformer
handles both 1D and 2D arrays. #624SobolAnalysis
no longer depends on the order of the variables in theParameterSpace
. #626ParametricStatistics.plot_criteria
plots the confidence level on the right subplot when the fitting criterion is a statistical test. #627CorrelationAnalysis.sort_parameters
uses the rule “The higher the absolute correlation coefficient the better”. #628Fix the parallel execution and the serialization of LinearCombination discipline. #638
Fix the parallel execution and the serialization of ConstraintAggregation discipline. #642
Changed¶
Statistics.compute_probability
computes one probability per component of the variables. #542The history of the diagonal of the Hessian matrix generated by
OptHistoryView
displays the names of the design variables on the y-axis. #595QuadApprox
now displays the names of the design variables. #596The methods
SensitivityAnalysis.plot_bar
andSensitivityAnalysis.plot_comparison
ofSensitivityAnalysis
uses two decimal places by default for a better readability. #603BarPlot
uses a grid for a better readability.SobolAnalysis.plot
uses a grid for a better readability.MorrisAnalysis.plot
uses a grid for a better readability. #604Dataset.export_to_dataframe
can either sort the columns by group, name and component, or only by group and component. #622OptimizationProblem.export_to_dataset
uses the order of the design variables given by theParameterSpace
to build theDataset
. #626
Version 4.2.0 (2022-12-22)¶
Added¶
Add a new property to
MatlabDiscipline
in order to get access to theMatlabEngine
instance attribute. #536Independent
MDA
in aMDAChain
can be run in parallel. #587The
MDAChain
has now an option to run the independent branches of the process in parallel.The Ishigami use case to illustrate and benchmark UQ techniques (
IshigamiFunction
,IshigamiSpace
,IshigamiProblem
andIshigamiDiscipline
). #517An
MDODiscipline
can now be composed ofMDODiscipline.disciplines
. #520SobolAnalysis
can compute theSobolAnalysis.second_order_indices
.SobolAnalysis
uses asymptotic distributions by default to compute the confidence intervals. #524PCERegressor
has a new attributePCERegressor.second_sobol_indices
. #525The
DistributionFactory
has two new methods:DistributionFactory.create_marginal_distribution
andDistributionFactory.create_composed_distribution
. #526SobieskiProblem
has a new attributeUSE_ORIGINAL_DESIGN_VARIABLES_ORDER
to order the design variables of theSobieskiProblem.design_space
according to their original order ("x_shared"
,"x_1"
,"x_2"
and"x_3"
) rather than the GEMSEO one ("x_shared"
,"x_1"
,"x_2"
and"x_3"
), asSobieskiProblem
andSobieskiBase
are based on this original order. #550
Fixed¶
Fix the XDSM workflow of a sequential sequence within a parallel sequence. #586
Factory
no longer considers abstract classes. #280When the
DOELibrary.execute
is called twice with different DOEs, the functions attached to theOptimizationProblem
are correctly sampled during the second execution and the results correctly stored in theDatabase
. #435A
ParameterSpace
prevents the mixing of probability distributions coming from different libraries. #495MinMaxScaler
andStandardScaler
can now deal with constant variables. #512The options
use_database
,round_ints
andnormalized_design_space
passed toDriverLib.execute
are no longer ignored. #537OptimizationProblem
casts the complex numbers to real when exporting itsOptimizationProblem.database
to aDataset
. #546PCERegressor
computes the Sobol’ indices for all the output dimensions. #557Fixed a bug in
HDF5FileSingleton
that caused theHDF5Cache
to crash when writing data that included arrays of string. #559OptProblem.get_violation_criteria
is inf for constraints with NaN values. #561Fixed a bug in the iterations progress bar, that displayed inconsistent objective function and duration values. #562
NormFunction
andNormDBFunction
now use theMDOFunction.special_repr
of the originalMDOFunction
. #568DOEScenario
andMDOScenario
can be serialized after an execution. Added missing_ATTR_TO_SERIALIZE
toMDOChain
andMDOScenarioAdapter
. #578
Changed¶
Since version 4.1.0, when using a DOE, an integer variable passed to a discipline is casted to a floating point. The previous behavior will be restored in version 4.2.1.
The batches requested by pSeven are evaluated in parallel. #207
The
LagrangeMultipliers
of a non-solvedOptimizationProblem
can be approximated. The errors raised byLagrangeMultipliers
are now raised byPostOptimalAnalysis
. #372The jacobian computation in
MDOChain
now uses the minimal jacobians of the disciplines instead of theforce_all
option of the disciplines linearization. #531The jacobian computation in
MDA
now uses the minimal jacobians of the disciplines instead of all couplings for the disciplines linearization. #483The
Scenario.set_differentiation_method
now casts automatically all float default inputs of the disciplines in its formulation to complex when usingOptimizationProblem.COMPLEX_STEP
and setting the optioncast_default_inputs_to_complex
toTrue
. TheScenario.set_differentiation_method
now casts automatically the current value of theDesignSpace
to complex when usingOptimizationProblem.COMPLEX_STEP
. TheMDODiscipline.disciplines
is now a property that returns the protected attributeMDODiscipline._disciplines
. #520The methods
MDODiscipline.add_differentiated_inputs
andMDODiscipline.add_differentiated_outputs
now ignore inputs or outputs that are not numeric. #548MLQualityMeasure
usesTrue
as the default value forfit_transformers
, which means that theTransformer
instances attached to the assessedMLAlgo
are re-trained on each training subset of the cross-validation partition.MLQualityMeasure.evaluate_kfolds
usesTrue
as default value forrandomize
, which means that the learning samples attached to the assessedMLAlgo
are shuffled before building the cross-validation partition. #553
Version 4.1.0 (2022-10-25)¶
Added¶
MakeFunction
has a new optional argumentnames_to_sizes
defining the sizes of the input variables. #252DesignSpace.initialize_missing_current_values
sets the missing current design values to default ones.OptimizationLibrary
initializes the missing design values to default ones before execution. #299Boxplot
is a newDatasetPlot
to create boxplots from aDataset
. #320Scenario
offers an keyword argumentmaximize_objective
, previously passed implicitly with**formulation_options
. #350A stopping criterion based on KKT condition residual can now be used for all gradient-based solvers. #372
The static N2 chart represents the self-coupled disciplines with blue diagonal blocks. The dynamic N2 chart represents the self-coupled disciplines with colored diagonal blocks. #396
SimpleCache
can be exported to aDataset
. #404A warning message is logged when an attempt is made to add an observable twice to an
OptimizationProblem
and the addition is cancelled. #409A
SensitivityAnalysis
can be saved on the disk (useSensitivityAnalysis.save
andSensitivityAnalysis.load
). ASensitivityAnalysis
can be loaded from the disk with the functionload_sensitivity_analysis
. #417The
PCERegressor
has new properties related to the PCE output, namely itsPCERegressor.mean
,PCERegressor.covariance
,PCERegressor.variance
andPCERegressor.standard_deviation
. #428Timer
can be used as a context manager to measure the time spent within awith
statement. #431Computation of KKT criteria is made optional. #440
Bievel processes now store the local optimization history of sub-scenarios in ScenarioAdapters. #441
pretty_str
converts an object into an readable string by usingstr
. #442The functions
create_linear_approximation
andcreate_quadratic_approximation
computes the first- and second-order Taylor polynomials of anMDOFunction
. #451The KKT norm is added to database when computed. #457
MDAs now output the norm of residuals at the end of its execution. #460
pretty_str
andpretty_repr
sort the elements of collections by default. #469The module
gemseo.algos.doe.quality
offers features to assess the quality of a DOE:DOEQuality
assesses the quality of a DOE fromDOEMeasures
; the qualities can be compared with logical operators.compute_phip_criterion
computes the\varphi_p
space-filling criterion.compute_mindist_criterion
computes the minimum-distance space-filling criterion.compute_discrepancy
computes different discrepancy criteria.
Fixed¶
NLOPT_COBYLA and NLOPT_BOBYQA algorithms may end prematurely in the simplex construction phase, caused by an non-exposed and too small default value of the
stop_crit_n_x
algorithm option. #307The MDANewton MDA does not have anymore a Jacobi step interleaved in-between each Newton step. #400
The
AnalyticDiscipline.default_inputs
do not share anymore the same Numpy array. #406The Lagrange Multipliers computation is fixed for design points close to local optima. #408
gemseo-template-grammar-editor
now works with both pyside6 and pyside2. #410DesignSpace.read_from_txt
can read a CSV file with a current value set atNone
. #411The argument
message
passed toDriverLib.init_iter_observer
and defining the iteration prefix of theProgressBar
works again; its default value is"..."
. #416The signatures of
MorrisAnalysis
,CorrelationAnalysis
andSobolAnalysis
are now consistent withSensitivityAnalysis
. #424When using a unique process, the observables can now be evaluated as many times as the number of calls to
DOELibrary.execute
. #425The
DOELibrary.seed
of theDOELibrary
is used by default and increments at each execution; pass the integer optionseed
toDOELibrary.execute
to use another one, the time of this execution. #426DesignSpace.get_current_value
correctly handles the order of thevariable_names
in the case of NumPy array outputs. #433The
SimpleCache
no longer fails when caching an output that is not a Numpy array. #444The first iteration of a
MDA
was not shown in red withMDA.plot_residual_history`
. #455The self-organizing map post-processing (
SOM
) has been fixed, caused by a regression. #465The couplings variable order, used in the
MDA
class for the adjoint matrix assembly, was not deterministic. #472A multidisciplinary system with a self-coupled discipline can be represented correctly by a coupling graph. #506
Changed¶
The
LoggingContext
uses the root logger as default value oflogger
. #421The
GradientSensitivity
post-processor now includes an option to compute the gradients at the selected iteration to avoid a crash if they are missing. #434pretty_repr
converts an object into an unambiguous string by usingrepr
; usepretty_str
for a readable string. #442A global multi-processing manager is now used, this improves the performance of multiprocessing on Windows platforms. #445
The graphs produced by
OptHistoryView
use the sameOptHistoryView.xlabel
. #449Database.notify_store_listener
takes a design vector as input and when not provided the last iteration design vector is employed. The KKT criterion when kkt tolerances are provided is computed at each new storage. #457
Version 4.0.1 (2022-08-04)¶
Added¶
Fixed¶
The MDANewton MDA does not have anymore a Jacobi step interleaved in-between each Newton step. #400
The
AnalyticDiscipline.default_inputs
do not share anymore the same Numpy array. #406The Lagrange Multipliers computation is fixed for design points close to local optima. #408
gemseo-template-grammar-editor
now works with both pyside6 and pyside2. #410
Version 4.0.0 (2022-07-28)¶
Added¶
Concatenater
can now scale the inputs before concatenating them.LinearCombination
is a new discipline computing the weighted sum of its inputs.Splitter
is a new discipline splitting whose outputs are subsets of its unique input. #316The transform module in machine learning now features two power transforms:
BoxCox
andYeoJohnson
. #341A
MDODiscipline
can now use a pandas DataFrame via itsMDODiscipline.local_data
. #58Grammars can add namespaces to prefix the element names. #70
Disciplines and functions, with tests, for the resolution of 2D Topology Optimization problem by the SIMP approach were added in gemseo.problems.topo_opt. In the documentation, 3 examples covering L-Shape, Short Cantilever and MBB structures are also added. #128
A
TransformerFactory
. #154The
gemseo.post.radar_chart.RadarChart
post-processor plots the constraints at optimum by default and provides access to the database elements from either the first or last index. #159OptimizationResult
can store the optimum index. #161An
OptimizationProblem
can be reset either fully or partially (database, current iteration, current design point, number of function calls or functions preprocessing).Database.clear
can reset the iteration counter. #188The
Database
attached to aScenario
can be cleared before running the driver. #193The variables of a
DesignSpace
can be renamed. #204The optimization history can be exported to a
Dataset
from aScenario
. #209A
DatasetPlot
can associate labels to the handled variables for a more meaningful display. #212The bounds of the parameter length scales of a
GaussianProcessRegressor
can be defined at instantiation. #228Observables included in the exported HDF file. #230
ScatterMatrix
can plot a limited number of variables. #236The Sobieski’s SSBJ use case can now be used with physical variable names. #242
The coupled adjoint can now account for disciplines with state residuals. #245
Randomized cross-validation can now use a seed for the sake of reproducibility. #246
The
DriverLib
now checks if the optimization or DOE algorithm handles integer variables. #247An
MDODiscipline
can automatically detect JSON grammar files from a user directory. #253Statistics
can now estimate a margin. #255Observables can now be derived when the driver option
eval_obs_jac
isTrue
(default:False
). #256ZvsXY
can add series of points above the surface. #259The number and positions of levels of a
ZvsXY
orSurfaces
can be changed. #262ZvsXY
orSurfaces
can use either isolines or filled surfaces. #263A
MDOFunction
can now be divided by anotherMDOFunction
or a number. #267An
MLAlgo
cannot fit the transformers during the learning stage. #273The
KLSVD
wrapped from OpenTURNS can now use the stochastic algorithms. #274The lower or upper half of the
ScatterMatrix
can be hidden. #301A
Scenario
can use a standardized objective in logs andOptimizationResult
. #306Statistics
can compute the coefficient of variation. #325Lines
can use an abscissa variable and markers. #328The user can now define a
OTDiracDistribution
with OpenTURNS. #329It is now possible to select the number of processes on which to run an
IDF
formulation using the optionn_processes
. #369
Fixed¶
Ensure that a nested
MDAChain
is not detected as a self-coupled discipline. #138The method
MDOCouplingStructure.plot_n2_chart
no longer crashes when the provided disciplines have no couplings. #174The broken link to the GEMSEO logo used in the D3.js-based N2 chart is now repaired. #184
An
XLSDiscipline
no longer crashes when called using multi-threading. #186The option
mutation
of the"DIFFERENTIAL_EVOLUTION"
algorithm now checks the correct expected type. #191SensitivityAnalysis
can plot a field with an output name longer than one character. #194Fixed a typo in the
monitoring
section of the documentation referring to the functioncreate_gantt_chart
ascreate_gannt
. #196DOELibrary
untransforms unit samples properly in the case of random variables. #197The string representations of the functions of an
OptimizationProblem
imported from an HDF file do not have bytes problems anymore. #201Fix normalization/unnormalization of functions and disciplines that only contain integer variables. #219
Factory.get_options_grammar
provides the same content in the returned grammar and the dumped one. #220Dataset
uses pandas to read CSV files more efficiently. #221Missing function and gradient values are now replaced with
numpy.NaN
when exporting aDatabase
to aDataset
. #223The method
OptimizationProblem.get_data_by_names
no longer crashes when bothas_dict
andfilter_feasible
are set to True. #226MorrisAnalysis
can again handle multidimensional outputs. #237The
XLSDiscipline
test run no longer leaves zombie processes in the background after the execution is finished. #238An
MDAJacobi
inside aDOEScenario
no longer causes a crash when a sample raises aValueError
. #239AnalyticDiscipline with absolute value can now be derived. #240
The function
hash_data_dict
returns deterministic hash values, fixing a bug introduced in GEMSEO 3.2.1. #251LagrangeMultipliers
are ensured to be non negative. #261A
MLQualityMeasure
can now be applied to aMLAlgo
built from a subset of the input names. #265The given value in
DesignSpace.add_variable
is now cast to the propervar_type
. #278The
DisciplineJacApprox.compute_approx_jac
method now returns the correct Jacobian when filtering by indices. With this fix, theMDODiscipline.check_jacobian
method no longer crashes when using indices. #308An integer design variable can be added with a lower or upper bound explicitly defined as +/-inf. #311
A
PCERegressor
can now be deepcopied before or after the training stage. #340A
DOEScenario
can now be serialized. #358An
AnalyticDiscipline
can now be serialized. #359N2JSON
now works when a coupling variable has no default value, and displays"n/a"
as variable dimension.N2JSON
now works when the default value of a coupling variable is an unsized object, e.g.array(1)
. #388The observables are now computed in parallel when executing a
DOEScenario
using more than one process. #391
Changed¶
Fixed Lagrange Multipliers computation for equality active constraints. #345
The
normalize
argument ofOptimizationProblem.preprocess_functions
is now namedis_function_input_normalized
. #22API changes:
The
MDAChain
now takesinner_mda_name
as argument instead ofsub_mda_class
.The
MDF
formulation now takesmain_mda_name
as argument instead ofmain_mda_class
andinner_mda_name
instead ofsub_mda_class
.The
BiLevel
formulation now takesmain_mda_name
as argument instead ofmda_name
. It is now possible to explicitly define aninner_mda_name
as well.
The
gemseo.post.radar_chart.RadarChart
post-processor uses all the constraints by default. #159Updating a dictionary of NumPy arrays from a complex array no longer converts the complex numbers to the original data type except if required. #177
The D3.js-based N2 chart can now display the GEMSEO logo offline. #184
The caches API has been changed to be more Pythonic and expose an interface similar to a dictionary. One can iterate an
AbstractFullCache
and handle it with square brackets, eg.output_data = cache[input_data].outputs
. The entry of a cache is aCacheEntry
whose componentsentry.{inputs,outputs,jacobian}
are dictionaries of NumPy arrays indexed by variable names.API changes from old to new:
cache.inputs_names
:cache.input_names
cache.get_all_data
:[cache_entry for cache_entry in cache]
cache.get_data
: has been removedcache.get_length
:len(cache)
cache.get_outputs
:cache[input_data].outputs
cache.{INPUTS,JACOBIAN,OUTPUTS,SAMPLE}_GROUP
: have been removedcache.get_last_cached_inputs
:cache.last_entry.inputs
cache.get_last_cached_outputs
:cache.last_entry.outputs
cache.max_length
: has been removedcache.merge
:cache.update
cache.outputs_names
:cache.output_names
cache.varsizes
:cache.names_to_sizes
cache.samples_indices
: has been removed
The grammars API has been changed to be more pythonic and expose an interface similar to a dictionary. The behavior of the grammars has been made more consistent too.
API changes from old to new:
grammar.load_data
:grammar.validate
grammar.is_data_name_existing(name)
:name in grammar
grammar.update_from
:grammar.update
grammar.remove_item(name)
:del grammar[name]
grammar.get_data_names
:grammar.keys()
grammar.is_all_data_names_existing(names)
:set(names) <= set(grammar.keys())
grammar.initialize_from_data_names
:grammar.update
grammar.initialize_from_base_dict
:grammar.update_from_data
grammar.is_type_array
:grammar.is_array
grammar.update_from_if_not_in
: useupdate
withexclude_names
grammar.to_simple_grammar
:grammar.convert_to_simple_grammar()
grammar.is_required(name)
:name in grammar.required_names
grammar.set_item_value
: has been removedgrammar.remove_required(name)
:grammar.required_names.remove(name)
grammar.init_from_schema_file
:grammar.update_from_file
grammar.write_schema
:grammar.write
grammar.schema_dict
:grammar.schema
grammar.data_names
:grammar.keys()
grammar.data_types
:grammar.values()
grammar.update_elements
:grammar.update
grammar.update_required_elements
: has been removedJSONGrammar
class attributes removed:PROPERTIES_FIELD
,REQUIRED_FIELD
,TYPE_FIELD
,OBJECT_FIELD
,TYPES_MAP
AbstractGrammar
:BaseGrammar
The default number of components used by a
DimensionReduction
transformer is based on data and depends on the related technique. #244Classes deriving from
MDODiscipline
inherits the input and output grammar files of their first parent. #258The parameters of a
DatasetPlot
are now passed at instantiation. #260An
MLQualityMeasure
no longer trains anMLAlgo
already trained. #264Accessing a unique entry of a Dataset no longer returns 2D arrays but 1D arrays. Accessing a unique feature of a Dataset no longer returns a dictionary of arrays but an array. #270
MLQualityMeasure
no longer refits the transformers with cross-validation and bootstrap techniques. #273Improved the way
xlwings
objects are handled when anXLSDiscipline
runs in multiprocessing, multithreading, or both. #276A
CustomDOE
can be used without specifyingalgo_name
whose default value is"CustomDOE"
now. #282The
XLSDiscipline
no longer copies the original Excel file when bothcopy_xls_at_setstate
andrecreate_book_at_run
are set toTrue
. #287The post-processing algorithms plotting the objective function can now use the standardized objective when
OptimizationProblem.use_standardized_objective
isTrue
. When post-processing aScenario
, the name of a constraint passed to theOptPostProcessor
should be the value ofconstraint_name
passed toScenario.add_constraint
or the vale ofoutput_name
ifNone
. #302An
MDOFormulation
now shows anINFO
level message when a variable is removed from the design space because it is not an input for any discipline in the formulation. #304It is now possible to carry out a
SensitivityAnalysis
with multiple disciplines. #310The classes of the regression algorithms are renamed as
{Prefix}Regressor
. #322API changes:
AlgoLib.lib_dict
renamed toAlgoLib.descriptions
.AnalyticDiscipline.expr_symbols_dict
renamed toAnalyticDiscipline.output_names_to_symbols
.AtomicExecSequence.get_state_dict
renamed toAtomicExecSequence.get_statuses
.BasicHistory
:data_list
renamed tovariable_names
.CompositeExecSequence.get_state_dict
renamed toCompositeExecSequence.get_statuses
.CompositeExecSequence.sequence_list
renamed toCompositeExecSequence.sequences
.ConstraintsHistory
:constraints_list
renamed toconstraint_names
MatlabDiscipline.__init__
:input_data_list
andoutput_data_list
renamed toinput_names
andoutput_names
.MDAChain.sub_mda_list
renamed toMDAChain.inner_mdas
.MDOFunctionGenerator.get_function
:input_names_list
andoutput_names_list
renamed tooutput_names
andoutput_names
.MDOScenarioAdapter.__init__
:inputs_list
andoutputs_list
renamed toinput_names
andoutput_names
.OptPostProcessor.out_data_dict
renamed toOptPostProcessor.materials_for_plotting
.ParallelExecution.input_data_list
renamed toParallelExecution.input_values
.ParallelExecution.worker_list
renamed toParallelExecution.workers
.RadarChart
:constraints_list
renamed toconstraint_names
.ScatterPlotMatrix
:variables_list
renamed tovariable_names
.save_matlab_file
:dict_to_save
renamed todata
.DesignSpace.get_current_x
renamed toDesignSpace.get_current_value
.DesignSpace.has_current_x
renamed toDesignSpace.has_current_value
.DesignSpace.set_current_x
renamed toDesignSpace.set_current_value
.gemseo.utils.data_conversion
:FLAT_JAC_SEP
renamed toSTRING_SEPARATOR
DataConversion.dict_to_array
renamed toconcatenate_dict_of_arrays_to_array
DataConversion.list_of_dict_to_array
removedDataConversion.array_to_dict
renamed tosplit_array_to_dict_of_arrays
DataConversion.jac_2dmat_to_dict
renamed tosplit_array_to_dict_of_arrays
DataConversion.jac_3dmat_to_dict
renamed tosplit_array_to_dict_of_arrays
DataConversion.dict_jac_to_2dmat
removedDataConversion.dict_jac_to_dict
renamed toflatten_nested_dict
DataConversion.flat_jac_name
removedDataConversion.dict_to_jac_dict
renamed tonest_flat_bilevel_dict
DataConversion.update_dict_from_array
renamed toupdate_dict_of_arrays_from_array
DataConversion.deepcopy_datadict
renamed todeepcopy_dict_of_arrays
DataConversion.get_all_inputs
renamed toget_all_inputs
DataConversion.get_all_outputs
renamed toget_all_outputs
DesignSpace.get_current_value
can now return a dictionary of NumPy arrays or normalized design values.
API changes:
The short names of some machine learning algorithms have been replaced by conventional acronyms.
The class variable
MLAlgo.ABBR
was renamed asMLAlgo.SHORT_ALGO_NAME
.
The constructor of
AutoPyDiscipline
now allows the user to select a custom name instead of the name of the Python function. #339It is now possible to serialize an
MDOFunction
. #342All
MDA
algos now count their iterations starting from0
. TheMDA.residual_history
is now a list of normed residuals. The argumentfigsize
inplot_residual_history
was renamed tofig_size
to be consistent with otherOptPostProcessor
algos. #343API change:
fig_size
is the unique name to identify the size of a figure and the occurrences offigsize
,figsize_x
andfigsize_y
have been replaced byfig_size
,fig_size_x
andfig_size_y
. #344API change: the option
parallel_exec
inIDF
was replaced byn_processes
. #369
Removed¶
API change: Remove
DesignSpace.get_current_x_normalized
andDesignSpace.get_current_x_dict
. #323
Version 3.2.2 (March 2022)¶
Fixed¶
Cache may not be used because of the way data was hashed.
Version 3.2.1 (November 2021)¶
Fixed¶
Missing package dependency declaration.
Version 3.2.0 (November 2021)¶
Added¶
Algorithms and numerical computations¶
The matrix linear problem solvers libraries are now handled by a Factory and can then be extended by plugins.
MDA warns if it stops when reaching
max_mda_iter
but before reaching the tolerance criteria.The convergence of an MDA can be logged.
Add max line search steps option in scipy L-BFGS-B
An analytical Jacobian can be checked for subsets of input and output names and components.
An analytical Jacobian can be checked from a reference file.
Scipy global algorithms SHGO and differential evolution now handle non linear constraints.
It is now possible to get the number of constraints not satisfied by a design in an OptimizationProblem.
The names of the scalar constraints in an OptimizationProblem can be retrieved as a list.
The dimensions of the outputs for functions in an OptimizationProblem are now available as a dictionary.
The cross-validation technique can now randomize the samples before dividing them in folds.
Post processing¶
The Scatter Plot Matrix post processor now allows the user to filter non-feasible points.
OptPostProcessor can change the size of the figures with the method execute().
SensitivityAnalysis can plot indices with values standardized in [0,1].
UQ¶
MorrisAnalysis provides new indices: minimum, maximum and relative standard deviation.
MorrisAnalysis can compute indices normalized with the empirical output bounds.
Documentation and examples¶
A button to change the tagged version of GEMSEO is available on the documentation hosted by Read the Docs.
The documentation now includes a link to the gemseo-scilab plugin.
ParetoFront: an example of a BiLevel scenario to compute the Pareto front has been added the examples.
A Pareto front computation example using a bi-level scenario has been added to the documentation.
The documentation now includes hints on how to use the add_observable method.
Software improvements¶
It is now possible to execute DOEScenarios in parallel on Windows. This feature does not support the use of MemoryFullCache or HDF5Cache on Windows. The progress bar may show duplicated instances during the initialization of each subprocess, in some cases it may also print the conclusion of an iteration ahead of another one that was concluded first. This is a consequence of the pickling process and does not affect the computations of the scenario.
A ParameterSpace can be casted into a DesignSpace.
Plugins can be discovered via setuptools entry points.
A dumped MDODiscipline can now be loaded with the API function import_discipline().
Database has a name used by OptimizationProblem to name the Dataset; this is the name of the corresponding Scenario if any.
The grammar type can be passed to the sub-processes through the formulations.
Scenario, MDOScenario and DOEScenario now include the argument
grammar_type
.A GrammarFactory used by MDODiscipline allows to plug new grammars for data checking.
The coupling structure can be directly passed to an MDA.
Database has a name used by OptimizationProblem to name the Dataset; this is the name of the corresponding Scenario if any.
A dumped MDODiscipline can now be loaded with the API function
import_discipline
.The name of an MDOScenarioAdapter can be defined at creation.
The AbstractFullCache built from a Dataset has the same name as the dataset.
The HDF5 file generated by HDF5Cache has now a version number.
Changed¶
The IO grammar files of a scenario are located in the same directory as its class.
Distribution, ParameterSpace and OpenTURNS use now the logger mainly at debug level.
The grammar types “JSON” and “Simple” are replaced by the classes names “JSONGrammar” and “SimpleGrammar”.
RadarChart uses the scientific notation as default format for the grid levels and allows to change the discretization of the grid.
Fixed¶
Algorithms and numerical computations¶
Make OpenTURNS- and pyDOE-based full factorial DOEs work whatever the dimension and number of samples.
The NLopt library wrapper now handles user functions that return ndarrays properly.
Fix bilevel formulation: the strong couplings were used instead of all the couplings when computing the inputs and outputs of the sub-scenarios adapters. Please note that this bug had an impact on execution performance, but had no adverse effect on the bilevel calculations in previous builds.
Bug with the ‘sample_x’ parameter of the pSeven wrapper.
An OptimizationProblem can now normalize and unnormalize gradient with uncertain variables.
A SurrogateDiscipline can now be instantiated from an MLAlgo saved without its learning set.
Bug with the ‘measure_options’ arguments of MLAlgoAssessor and MLAlgoSelection.
The constraints names are now correctly formed with the minus sign and offset value if any.
DesignSpace no longer logs an erroneous warning when unnormalizing an unbounded variable.
Resampling-based MLQualityMeasure no longer re-train the original ML model, but a copy.
The computation of a diagonal DOE out of a design space does not crash anymore.
OptimizationProblem no longer logs a warning when using the finite-difference method on the design boundary.
OpenTURNS options are processed correctly when computing a DOE out of a design space.
Post processing¶
The Correlations post-processor now sorts labels properly when two or more functions share the same name followed by an underscore.
The ParetoFront post-processor now shows the correct labels in the plot axis.
The Gantt Chart, Basic History, Constraints History and Scatter Plot Matrix pages in the documentation now render the example plots correctly.
Post-processings based on SymLogNorm (matplotlib) now works with Python 3.6.
OptHistoryView no longer raises an exception when the Hessian diagonal contains NaN and skips the Hessian plot.
Documentation and examples¶
Bug with inherited docstrings.
The MDO Scenario example subsections are now correctly named.
Software¶
The data hashing strategy used by HDF5Cache has been corrected, old cache files shall have to be converted, see the FAQ.
Fix levels option for Full-Factorial doe: now this option is taken into account and enables to build an anisotropic sample.
The constraints names are now correctly formed with the minus sign and offset value if any.
Bug with the MATLAB discipline on Windows.
The SurrogateDiscipline can now be serialized.
The name used to export an OptimizationProblem to a Dataset is no longer mandatory.
Bug in the print_configuration method, the configuration table is now shown properly.
Bug with integer elements casted into
The image comparison tests in post/dataset no longer leave the generated files when completed.
Typo in the function name get_scenario_differenciation.
ImportError (backport.unittest_mock) on Python 2.7.
Backward compatibility with the legacy logger named “GEMSEO”.
DOE algorithms now have their own JSON grammar files which corrects the documentation of their options.
DOEScenario no longer passes a default number of samples to a DOELibrary for which it is not an option.
Issues when a python module prefixed with
gemseo_
is in the current working directory.DesignSpace can now be iterated correctly.
The Jacobian approximated by the finite-difference method is now correct when computed with respect to uncertain variables.
The standard deviation predicted by GaussianProcessRegression is now correctly shaped.
The input data to stored in a HDF5Cache are now hashed with their inputs names.
The hashing strategy used by HDF5Cache no longer considers only the values of the dictionary but also the keys.
Version 3.1.0 (July 2021)¶
Changed¶
Faster JSON schema and dependency graph creation.
The Gradient Sensitivity post processor is now able to scale gradients.
MemoryFullCache can now use standard memory as well as shared memory.
Sellar1 and Sellar2 compute y_1 and y_2 respectively, for consistency of naming.
Improve checks of MDA structure.
IDF: add option to start at equilibrium with an MDA.
Improve doc of GEMSEO study.
Unified drivers stop criteria computed by GEMSEO (xtol_rel, xtol_abs, ftol_rel, ftom_abs).
SimpleGrammars supported for all processes (MDOChain, MDAChain etc.).
JSONGrammar can be converted to SimpleGrammar.
DiscFromExe can now run executables without using the shell.
It is now possible to add observable variables to the scenario class.
ParetoFront post-processing improvements: legends have been added, it is now possible to hide the non-feasible points in the plots.
The Gradient Sensitivity, Variable Influence and Correlations post processors now show variables names instead of hard-coded names.
The Correlations post processor now allows the user to select a subset of functions to plot.
The Correlations post processor now allows the user to select the figure size.
Documentation improvements.
Added¶
Support for Python 3.9.
Support for fastjsonschema up to 2.15.1.
Support for h5py up to 3.2.1.
Support for numpy up to 1.20.3.
Support for pyxdsm up to 2.2.0.
Support for scipy to 1.6.3.
Support for tqdm up to 4.61.0.
Support for xdsmjs up to 1.0.1.
Support for openturns up to 1.16.
Support for pandas up to 1.2.4.
Support for scikit-learn up to 0.24.2.
Support for openpyxl up to 3.0.7.
Support for nlopt up to 2.7.0.
Constraint aggregation methods (KS, IKS, max, sum).
N2: an interactive web N2 chart allowing to expand or collapse the groups of strongly coupled disciplines.
Uncertainty: user interface for easy access.
Sensitivity analysis: an abstract class with sorting, plotting and comparison methods, with a dedicated factory and new features (correlation coefficients and Morris indices).
Sensitivity analysis: examples.
Concatenater: a new discipline to concatenate inputs variables into a single one.
Gantt chart generation to visualize the disciplines execution time.
An interactive web N2 chart allowing to expand or collapse the groups of strongly coupled disciplines.
Support pSeven algorithms for single-objective optimization.
DOELibrary.compute_doe computes a DOE based on a design space.
Fixed¶
The greatest value that OT_LHSC can generate must not be 0.5 but 1.
Internally used HDF5 file left open.
The Scatter Plot Matrix post processor now plots the correct values for a subset of variables or functions.
MDA Jacobian fixes in specific cases (self-coupled, no strong couplings, etc).
Strong coupling definition.
Bi-level formulation implementation, following the modification of the strong coupling definition.
Graphviz package is no longer mandatory.
XDSM pdf generation bug.
DiscFromExe tests do not fail anymore under Windows, when using a network directory for the pytest base temporary directory.
No longer need quotation marks on gemseo-study string option values.
XDSM file generated with the right name given with outfilename.
SellarSystem works now in the Sphinx-Gallery documentation (plot_sellar.py).
Version 3.0.3 (May 2021)¶
Changed¶
Documentation fixes and improvements.
Version 3.0.2 (April 2021)¶
Changed¶
First open source release!
Fixed¶
Dependency version issue for python 3.8 (pyside2).
Version 3.0.1 (April 2021)¶
Fixed¶
Permission issue with a test.
Robustness of the excel discipline wrapper.
Version 3.0.0 (January 2021)¶
Added¶
Licenses materials.
Changed¶
Renamed gems package to gemseo.
Removed¶
OpenOPT backend which is no longer maintained and has features overlap with other backends.
Fixed¶
Better error handling of the study CLI with missing latex tools.
Version 2.0.1 (December 2020)¶
Fixed¶
Improper configuration of the logger in the MDAChain test leading to GEMS crashes if the user has not write permission on the GEMS installation directory.
Max versions of h5py and Openturns defined in environment and configuration files to prevent incorrect environments due to API incompatibilites.
Max version of numpy defined in order to avoid the occurence of a fmod/OpenBlas bug with Windows 10 2004 (https://developercommunity.visualstudio.com/content/problem/1207405/fmod-after-an-update-to-windows-2004-is-causing-a.html).
Version 2.0.0 (July 2020)¶
Added¶
Support for Python3
String encoding: all the strings shall now be encoded in unicode. For Python 2 users, please read carefuly the Python2 and Python3 compatibility note to migrate your existing GEMS scripts.
Documentation: gallery of examples and tutorials + cheat sheet
New conda file to automatically create a Python environment for GEMS under Linux, Windows and Mac OS.
~35% improved performance on Python3
pyXDSM to generate latex/PDF XDSM
Display XDSM directly in the browser
Machine learning capabilities based on scikit-learn, OpenTURNS and scipy: clustering, classification, regression, dimension reduction, data scaling, quality measures, algorithm calibration.
Uncertainty package based on OpenTURNS and scipy: distributions, uncertain space, empirical and parametric statistics, Sobol’ indices.
AbstractFullCache to cache inputs and outputs in memory
New Dataset class to store data from numpy arrays, file, Database and AbstractFullCache; Unique interface to machine learning and uncertainty algorithms.
Cache post-processing via Dataset
Make a discipline from an executable with a GUI
Excel-based discipline
Prototype a MDO study without writing any code and generating N2 and XDSM diagrams
Automatic finite difference step
Post-optimal analysis to compute the jacobian of MDO scenarios
Pareto front: computation and plot
New scalable problem from Tedford and Martins
New plugin mechanism for extension of features
Changed¶
Refactored and much improved documentation
Moved to matplotlib 2.x and 3.x
Support for scipy 1.x
Improved API
Improved linear solvers robustness
Improved surrogate models based on machine learning capabilities and Dataset class.
Improved scalable models
Improved BasicHistory: works for design variables also
Improved XDSM diagrams for MDAChain
Improved BiLevel when no strong coupling is present
Improved overall tests
Fixed¶
Bug in GradientSensitivity
Bug in AutoPyDiscipline for multiple returns and non pep8 code
Version 1.3.2 (December 2019)¶
Fixed¶
Bugfix in Discipline while updating data from the cache
Version 1.3.1 (July 2019)¶
Added¶
COBYLA handle NaNs values and manages it to backtrack. Requires specific mod of COBYLA by IRT
OptHistoryView and BasicHistory handle NaNs values
BasicHistory works for design variable values
Changed¶
Improved error message when missing property in JSONGrammars
Improved imports to handle multiple versions of sklearn, pandas and sympy (thanks Damien Guenot)
Fixed¶
Bug in Caching and Discipline for inouts (Thanks Romain Olivanti)
Bug in MDASequential convergence hisotry
Version 1.3.0 (June 2019)¶
Added¶
Refactored and much improved documentation
All algorithms, MDAs, Surrogates, formulations options are now automatically documented in the HTML doc
Enhanced API: all MDO scenarios can be fully configured and run from the API
AutoPyDiscipline: faster way to wrap a Python function as a discipline
Surrogate models: Polynomial Chaos from OpenTurns
Surrogate model quality metrics:Leave one out, Q2, etc.
MDAs can handle self-coupled disciplines (inputs that are also outputs)
Lagrange Multipliers
Multi-starting point optimization as a bi-level scenario using a DOE
New aerostructure toy MDO problem
Changed¶
Bi-Level formulation can now handle black box optimization scenarios, and external MDAs
Improve Multiprocessing and multithreading parallelism handling (avoid deadlocks with caches)
Improve performance of input / output data checks, x13 faster JSONGrammars
Improve performance of disciplines execution: avoid memory copies
Enhanced Scalable discipline, DOE is now based on a driver and inputs are read from a HDF5 cache like surrogate models
More readable N2 graph
Improved logging: fix issue with output files
Improved progress bar and adapt units for runtime prediction
NLOPT Cobyla: add control for init step of the DOE (rho)
Surrogate GPR: add options handling
Version 1.2.1 (August 2018)¶
Added¶
Handle integer variables in DOEs
Changed¶
Improve performance of normalization/unnormalization
Improve x_xstar post processing to display the optimum
Fixed¶
Issue to use external optimizers in a MDOScenario
Version 1.2.0 (July 2018)¶
Added¶
New API to ease the scenario creation and use by external platforms
mix parallelism multithreading / multiprocessing
much improved and unified plugin system with factories for Optimizers, DOE, MDAs, Formulations, Disciplines, Surrogates
Surrogate models interfaces
MDAJacobi is now much faster thanks to a new acceleration set of methods
Changed¶
HTML documentation
Small improvements
Fixed¶
Many bugs
Version 1.1.0 (April 2018)¶
Added¶
Mix finite differences in the discipline derivation and analytical jacobians or complex step to compute chain rule or adjoint method when not all disciplines’ analytical derivatives are available
Ability to handle design spaces with integer variables
Analytic discipline based on symbolic calculation to easily create disciplines from analytic formulas
A scalable surrogate approximation of a discipline to benchmark MDO formulations
A HDF cache (= recorder) for disciplines to store all executions on the disk
The P-L-BFGS-B algorithm interface, a variant of LBFGSB with preconditioning coded in Python
Parallel (multiprocessing and / or multithreading) execution of disciplines and or call to functions
New constraints plot visualizations (radar chart) and constraints plot with values
Visualization to plot the distance to the best value in log scale ||x-x*||
Possibility to choose to normalize the design space or not for each variable
IDF improved for weakly coupled problems
On the fly backup of the optimization history (HDF5), in “append” mode
We can now monitor the convergence on the fly by creating optimization history plots at each iteration
Famous N2 plot in the CouplingStructure
Sphinx generated documentation in HTML (open doc/index.html), with:
GEMS in a nutshell tutorial
Discipline integration tutorial
Post processing description
GEMS architecture description
MDO formulations description
MDAs
Changed¶
Improved automatically finding the best point in an optimization history
Improved callback functions during optimization / DOE
Improved stop criteria for optimization
Improved progress bar
Improved LGMRES solver for MDAs when using multiple RHS (recycle Krylov subspaces to accelerate convergence)
Fixed¶
Many bugs
Version 1.0.0 (December 2016)¶
Added¶
Design of Experiment (DOE) capabilities from pyDOE, OpenTURNS or a custom samples set
Full differentiation of the process is available:
analytical gradient based optimization
analytical Newton type coupling solver for MDA (Multi Disciplinary Analyses)
analytical derivation of the chains of disciplines (MDOChain) via the chain rule
Post processing of optimization history: many plots to view the constraints, objective, design variables
More than 10 MDA (coupled problems) solver available, some gradient based (quasi newton) and hybrid multi-step methods (SequantialMDA) !
OptimizationProblem and its solution can be written to disk and post processed afterwards
Handling of DOE and optimization algorithm options via JSON schemas
Introduced an OptimizationProblem class that is created by the MDOFormulation and passed to an algorithm for resolution
Serialization mechanism for MDODiscipline and subclasses (write objects to disk)
Intensive testing: 500 tests and 98 % line coverage (excluding third party source)
Improved code coverage by tests from 95% to 98% and all modules have a coverage of at least 95%
Reduced pylint warnings from 800 to 40 !
Changed¶
Code architecture refactoring for below items
Modularized post processing
Refactored algorithms part with factories
Removed dependency to json_shema_generator library, switched to GENSON (embeded with MIT licence)
Moved from JsonSchema Draft 3 to Draft 4 standard
Refactored the connection between the functions and the optimizers
Refactored MDOScenario
Refactored IDF formulation
Refactored Bilevel formulation
Refactored MDAs and introduced the CouplingStructure class
Refactored the DataProcessor for data interface with workflow engines
Refactored Sobieski use case to improve code quality
Included AGI remarks corrections on code style and best practices
Version 0.1.0 (April 2016)¶
Added¶
Basic MDO formulations: MDF, IDF, Bilevel formulations
Some optimization history views for convergence monitoring of the algorithm
Optimization algorithms: Scipy, OpenOPT, NLOPT
Possible export of the optimization history to the disk
Complex step and finite differences optimization
Benchmark cases:
Sobieski’s Supersonic Business Jet MDO case
Sellar
Propane