The GEMSEO concepts¶
Design space¶
A design space is used to represent the optimization’s unknowns,
a.k.a. design variables. A DesignSpace
describes
this design space at a given state, in terms of names, sizes, types, bounds
and current values of the design variables. Variables can easily be added to
the DesignSpace
using the DesignSpace.add_variable()
method
or removed using the DesignSpace.remove_variable()
method. We can also
filter the design variables using the DesignSpace.filter()
method.
Getters and setters are also available to get or set the value of a given
variable property. Lastly, an instance of DesignSpace
can be stored
in a txt or HDF file.
Optimization problem¶
The OptimizationProblem
class is used to define
the optimization problem from a DesignSpace
defining:
Initial guess \(x_0\)
Bounds \(l_b \leq x \leq u_b\)
(Possible vector) objective function is defined as a MDOFunction
and set using the objective
attribute.
If the optimization problem looks for the maximum of this objective
function, the OptimizationProblem.change_objective_sign()
changes
the objective function sign because the optimization drivers seek to
minimize this objective function.
Equality and inequality constraints are also MDOFunction
s
provided to the OptimizationProblem
by means of its
OptimizationProblem.add_constraint()
method.
The OptimizationProblem
allows to evaluate the different
functions for a given design parameters vector
(see OptimizationProblem.evaluate_functions()
). Note that
this evaluation step relies on an automated scaling of function wrt bounds
so that optimizers and DOE algorithms work with scaled inputs
between 0 and 1 for all variables.
The OptimizationProblem
has also a Database
storing
the calls to all functions so that no function is called twice
with the same inputs. Concerning the derivatives computation,
the OptimizationProblem
automates the generation of finite
differences or complex step wrappers on functions,
when analytical gradient is not available.
Lastly, various getters and setters are available, as well as methods
to export the Database
to an HDF file or to a Dataset
for future post-processing.
Driver library¶
A driver library aims to solve an DriverLib
using a particular algorithm from a particular family of numerical methods.
This algorithm will be in charge of evaluating the objective and constraints
functions at different points of the design space, using the
DriverLib.execute()
method.
The most famous kinds of numerical methods to solve an optimization problem
are optimization algorithms and design of experiments (DOE). A DOE driver
browses the design space agnostically, i.e. without taking into
account the function evaluations. On the contrary, an optimization algorithm
uses this information to make the journey through design space
as relevant as possible in order to reach as soon as possible the optimum.
These families are implemented in DOELibrary
and OptimizationLibrary
.