# 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.