gemseo.algos.opt.mnbi.mnbi module#
Modified Normal Boundary Intersection (mNBI) algorithm.
Based on [Shu07].
- class BetaSubOptimOutput(f_min, x_min, w, database, n_calls)[source]#
Bases:
NamedTuple
An output from a beta sub optimization.
Create new instance of BetaSubOptimOutput(f_min, x_min, w, database, n_calls)
- f_min: RealArray#
The coordinates in the objective space of the sub-optimization result.
- n_calls: int#
The number of calls to the main objective function by the optimizer during the sub-optimization.
- w: RealArray#
The vector w used to compute the values of beta that can be skipped in the following sub-optimizations.
- x_min: RealArray#
The coordinates in the design space of the sub-optimization result.
- class IndividualSubOptimOutput(f_min, x_min, database, n_calls)[source]#
Bases:
NamedTuple
An output from a sub optimization.
Create new instance of IndividualSubOptimOutput(f_min, x_min, database, n_calls)
- f_min: RealArray#
The value of f at the design value minimizing f_i.
- x_min: RealArray#
The value of the design variables minimizing f_i.
- class MNBI(algo_name='MNBI')[source]#
Bases:
BaseOptimizationLibrary
MNBI optimizer.
This algorithm computes the Pareto front of a multi-objective optimization problem by decomposing it into a series of constrained single-objective problems. Considering the following problem:
\[\begin{split}\begin{align} & \min_{x \in D} f(x),\\ & g(x) \leq 0,\\ & h(x) = 0 \end{align}\end{split}\]the algorithm first finds the individual optima \((x_i^\ast)_{i=1..m}\) of the \(m\) components of the objective function \(f\). The corresponding anchor points \((f(x_i^\ast))_{i=1..m}\) are stored in a matrix \(\Phi\).
The simplex formed by the convex hull of the anchor points can be expressed as \(\Phi \beta\), where \(\beta = \{ (b_1, ..., b_m)^T | \sum_{i=1}^m b_i =1 \}\).
Given a list of vectors \(\beta\), mNBI will solve the following single-objective problems:
\[\begin{split}\begin{align} & \max_{x \in D, t \in \mathbb{R}} t,\\ & \Phi \beta + t \hat{n} \geq f(x),\\ & g(x) \leq 0,\\ & h(x) = 0 \end{align}\end{split}\]where \(\hat{n}\) is a quasi-normal vector to the \(\Phi \beta\) simplex pointing towards the origin of the objective space. If \((x^{*}, t^{*})\) is a solution of this problem, \(x^{*}\) is proven to be at least weakly Pareto-dominant.
Let \(w = \Phi \beta + t^{*} \hat{n}\), and \(\pi\) denote the projection (in the direction of \(\hat{n}\)) on the simplex formed by the convex hull of the anchor points. If not all constraints \(\Phi \beta + t^{*} \hat{n} \geq f(x^{*})\) are active, \(x^{*}\) will weakly dominate the solution of the sub-problem for all values \(\beta_{dom}\) that verify:
\[\Phi \beta_{dom} \in \pi[(f(x^{*}) + \mathbb{R}_m^{+}) \cap (w - \mathbb{R}_m^{+})]\]Therefore, the corresponding sub-optimizations are redundant and can be skipped to reduce run time.
Notes
The missing current values of the
DesignSpace
attached to theOptimizationProblem
are automatically initialized with the methodDesignSpace.initialize_missing_current_values()
.- Parameters:
algo_name (str) --
The algorithm name.
By default it is set to "MNBI".
- Raises:
KeyError -- When the algorithm is not in the library.
- ALGORITHM_INFOS: ClassVar[dict[str, MNBIAlgorithmDescription]] = {'MNBI': MNBIAlgorithmDescription(algorithm_name='mNBI', internal_algorithm_name='mNBI', library_name='MNBI', description='Modified Normal Boundary Intersection (mNBI) method', website='', Settings=<class 'gemseo.algos.opt.mnbi.settings.mnbi_settings.MNBI_Settings'>, handle_integer_variables=True, handle_equality_constraints=True, handle_inequality_constraints=True, handle_multiobjective=True, positive_constraints=False, for_linear_problems=False, require_gradient=False)}#
The description of the algorithms contained in the library.
- class MNBIAlgorithmDescription(algorithm_name, internal_algorithm_name, library_name='MNBI', description='', website='', Settings=<class 'gemseo.algos.opt.base_optimizer_settings.BaseOptimizerSettings'>, handle_integer_variables=True, handle_equality_constraints=True, handle_inequality_constraints=True, handle_multiobjective=True, positive_constraints=False, for_linear_problems=False, require_gradient=False)[source]#
Bases:
OptimizationAlgorithmDescription
The description of the MNBI optimization algorithm.
- Parameters:
algorithm_name (str)
internal_algorithm_name (str)
library_name (str) --
By default it is set to "MNBI".
description (str) --
By default it is set to "".
website (str) --
By default it is set to "".
Settings (type[BaseOptimizerSettings]) --
By default it is set to <class 'gemseo.algos.opt.base_optimizer_settings.BaseOptimizerSettings'>.
handle_integer_variables (bool) --
By default it is set to True.
handle_equality_constraints (bool) --
By default it is set to True.
handle_inequality_constraints (bool) --
By default it is set to True.
handle_multiobjective (bool) --
By default it is set to True.
positive_constraints (bool) --
By default it is set to False.
for_linear_problems (bool) --
By default it is set to False.
require_gradient (bool) --
By default it is set to False.
- handle_equality_constraints: bool = True#
Whether the optimization algorithm handles equality constraints.