gemseo_box_subdivision.disciplines.box_mapping#

The mapping from the normalized variables of a box to the design variables.

Classes

BoxMapping(subdivision[, one_hot_names, ...])

The mapping from the normalized variables of a box to the design variables.

class gemseo_box_subdivision.disciplines.box_mapping.BoxMapping(subdivision, one_hot_names=mappingproxy({}), normalized_names=mappingproxy({}), name='')[source]#

Bases: Discipline

The mapping from the normalized variables of a box to the design variables.

The sub-problem is written in the normalized variables \(\xi \in [0, 1]^n\) of the box selected by the one-hot vector \(\alpha\), through

\[x(\xi, \alpha) = \ell(\alpha) + \xi \odot (u(\alpha) - \ell(\alpha)).\]

This is an alternative to BoxConstraint, in which the box is not a constraint of the sub-problem but the bounds of its design space. Those bounds are \([0, 1]\) whatever the box, hence:

  • the sub-problem always starts at the same point of its own box, the center for \(\xi = 0.5\), so no scenario adapter is needed to place the starting point inside the box;

  • the design space of the sub-problem does not depend on \(\alpha\), which is what the Benders formulation of GEMSEO requires, instead of being worked around;

  • the bounds are genuinely independent of \(\alpha\), so the assumption made by the post-optimal analysis of GEMSEO holds, and no margin is needed to keep a border box from losing the multiplier of its face.

The sensitivity of the sub-problem optimum then comes from the partial derivative of the objective rather than from constraint multipliers:

\[\frac{\mathrm{d}u}{\mathrm{d}\alpha_{j,k}} = \nabla_x f \cdot \frac{\partial x}{\partial \alpha_{j,k}}, \qquad \frac{\partial x_j}{\partial \alpha_{j,k}} = (1 - \xi_j)\, l_{j,k} + \xi_j\, u_{j,k},\]

which is correct both at an interior optimum, where \(\nabla_x f\) vanishes, and on a face, where \(\xi_j\) is pinned to a bound so that the partial derivative is the total one.

The counterpart is that \(x\) is bilinear in \((\xi, \alpha)\): the choice of the box enters the non-linearity of the objective, instead of staying in a jointly convex constraint as it does with BoxConstraint.

Parameters:
  • subdivision (BoxSubdivision)

  • one_hot_names (Mapping[str, str])

  • normalized_names (Mapping[str, str])

  • name (str)

default_grammar_type: ClassVar[Discipline.GrammarType] = 'SimplerGrammar'#

The default type of grammar.

property one_hot_names: dict[str, str]#

The name of the one-hot variable of each design variable.

property normalized_names: dict[str, str]#

The name of the normalized variable of each design variable.