gemseo.formulations.idf module#

The Individual Discipline Feasible (IDF) formulation.

class IDF(disciplines, objective_name, design_space, settings_model=None, minimize_objective=True, **settings)[source]#

Bases: BaseMDOFormulation[IDF_Settings]

The Individual Discipline Feasible (IDF) formulation.

The IDF formulation expresses an MDO problem as

\[\begin{split}\begin{aligned} & \underset{x,z,y^t}{\text{min}} & & f(x, z, y^t) \\ & \text{subject to} & & g(x, z, y^t) \le 0 \\ & & & h(x, z, y^t) = 0 \\ & & & y_i(x_i, z, y^t_{j \neq i}) - y_i^t = 0, \quad \forall i \in \{1,\ldots, N\} \end{aligned}\end{split}\]

where

  • \(N\) is the number of disciplines,

  • \(f\) is the objective function,

  • \(g\) are the inequality constraint functions,

  • \(h\) are the equality constraint functions,

  • \(z\) are the global design variables,

  • \(x=(x_1,x_2,\ldots,x_N)\) are the local design variables,

  • \(x_i\) are the design variables specific to the \(i\)-th discipline,

  • \(y=(y_1,y_2,\ldots,y_N)\) are the coupling variables outputted by the disciplines,

  • \(y_i\) are the coupling variables outputted by the \(i\)-th discipline,

  • \(y^t=(y_1^t,y_2^t,\ldots,y_N^t)\) are the target coupling variables used by the disciplines in input,

  • \(y_i^t\) are the target coupling variables used by the \(i\)-th discipline,

Note that:

  1. the search space includes both the design variables and the target coupling variables,

  2. the original constraints are supplemented by equality constraints called consistency constraints.

  3. the disciplinary analysis is made at each optimization iteration while the multidisciplinary analysis, i.e. \(y=y^t\), is made at the optimum.

  4. the use of the target coupling variables in input of the disciplines instead of the coupling variables decouples the multidisciplinary process and makes it possible to evaluate the disciplines in parallel.

Initialize self. See help(type(self)) for accurate signature.

Parameters:
  • disciplines (Sequence[Discipline]) -- The disciplines.

  • objective_name (str | Sequence[str]) -- The name(s) of the discipline output(s) used as objective. If multiple names are passed, the objective will be a vector.

  • design_space (DesignSpace) -- The design space.

  • settings_model (T | None) -- The settings of the formulation as a Pydantic model. If None, use **settings.

  • minimize_objective (bool) --

    Whether to minimize the objective.

    By default it is set to True.

  • **settings (Any) -- The settings of the formulation. This argument is ignored when settings_model is not None.

Settings#

alias of IDF_Settings

get_top_level_disciplines(include_sub_formulations=False)[source]#

Return the top level disciplines that are executed in the foreground.

A formulation structures the optimization problem into multiple levels of disciplines. The top level disciplines map from the design_space to the objective, constraint and observable spaces. They can be composed of both user disciplines and process disciplines added by the formulation, e.g. MDOChain. These process disciplines may also include both user disciplines and process disciplines, and so on.

Parameters:

include_sub_formulations (bool) --

Whether to include the top level disciplines of the formulations that make up the current one.

By default it is set to False.

Returns:

The top level disciplines.

Return type:

tuple[Discipline, ...]

property all_couplings: list[str]#

The inputs of disciplines that are also outputs of other disciplines.

property coupling_structure: CouplingStructure#

The coupling structure of the disciplines.

property normalize_constraints: bool#

Whether the outputs of the coupling consistency constraints are scaled.