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 4.2.0 (2022-12-22)¶
Added¶
Add a new property to
MatlabDiscipline
in order to get access to theMatlabEngine
instance attribute. #536The
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 ofdisciplines
. #520SobolAnalysis
can compute thesecond_order_indices
.SobolAnalysis
uses asymptotic distributions by default to compute the confidence intervals. #524PCERegressor
has a new attributesecond_sobol_indices
. #525The
DistributionFactory
has two new methods:create_marginal_distribution()
andcreate_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
When 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 itsdatabase
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 thespecial_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 usingCOMPLEX_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 usingCOMPLEX_STEP
. Thedisciplines
is now a property that returns the protected attribute_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 (usesave()
andload()
). ASensitivityAnalysis
can be loaded from the disk with the functionload_sensitivity_analysis()
. #417The
PCERegressor
has new properties related to the PCE output, namely itsmean
,covariance
,variance
andstandard_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
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 withplot_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 samexlabel
. #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¶
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. #409
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 itslocal_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
The
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
). #256The 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. #325The 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
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()
.-
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. For Python versions < 3.7 and Numpy < 1.20.0, there is a known issue where one of the processes gets hung randomly, updating your environment is strongly recommended. 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