desdeo.optimization.OptimizationProblem

This module contains single objective optimization problems. Principally there are scalarization functions for converting multi-objective problems into single-objective functions.

class desdeo.optimization.OptimizationProblem.AchievementProblemBase(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.ScalarizedProblem

Solves problems of the form:

\[\begin{split}& \mbox{minimize}\ \ & \displaystyle{ \max_{i=1, \dots , k} \left\{\, \mu_i(\dots) \right\}} + \rho \sum_{i=1}^k \mu_i (\dots) \\ & \mbox{subject to}\ & {\bf{x}} \in S\end{split}\]

This is an abstract base class. Implementors should override _ach, _augmentation and _set_scaling_weights.

__abstractmethods__ = frozenset({'_ach', '_augmentation', '_set_scaling_weights'})
__init__(mo_problem, **kwargs)[source]

Constructor

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
abstract _ach(objectives)[source]

Calculate achievement term

Return type

List[float]

abstract _augmentation(objectives)[source]

Calculate augmentation term

Return type

List[float]

_evaluate(objectives)[source]
Return type

Tuple[List[float], Optional[ndarray]]

_set_preferences()[source]
abstract _set_scaling_weights()[source]
class desdeo.optimization.OptimizationProblem.EpsilonConstraintProblem(mo_problem, obj_bounds=None)[source]

Bases: desdeo.optimization.OptimizationProblem.OptimizationProblem

Epsilon constraint problem

\[\begin{split}& \mbox{minimize}\ \ & f_r({\bf{x}}) \\ & \mbox{subject to}\ & f_j({\bf{x}}) \le z _j, j = 1, \dots, k, j \neq r, \\ & {\bf{x}} \in S, \\\end{split}\]
bounds

Boundary value for the each of the objectives. The objective with boundary of None is to be minimized

Type

List of numerical values

__abstractmethods__ = frozenset({})
__init__(mo_problem, obj_bounds=None)[source]

Constructor

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
_evaluate(objectives)[source]
Return type

Tuple[List[float], Optional[ndarray]]

class desdeo.optimization.OptimizationProblem.MaxEpsilonConstraintProblem(mo_problem, obj_bounds=None)[source]

Bases: desdeo.optimization.OptimizationProblem.EpsilonConstraintProblem

Epsilon constraint problem where the objective is to be maximized

\[\begin{split}& \mbox{maximize}\ \ & f_r({\bf{x}}) \\ & \mbox{subject to}\ &f_j({\bf{x}}) \le z _j, j = 1, \dots, k, j \neq r, \\ & {\bf{x}} \in S\end{split}\]

This is a special case of using epsilon constraint, to be very clear when using maximized scalarizing function.

bounds

Boundary value for the each of the objectives. The objective with boundary of None is to be minimized

Type

List of numerical values

__abstractmethods__ = frozenset({})
__init__(mo_problem, obj_bounds=None)[source]

Constructor

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
class desdeo.optimization.OptimizationProblem.NIMBUSAchievementProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.NadirStarStarScaleMixin, desdeo.optimization.OptimizationProblem.SimpleAchievementProblem

Finds new solution by solving NIMBUS version of the achivement problem.

\[\begin{split}& \mbox{minimize }\ \ & \displaystyle{\max_{i=1, \dots , k}\left\lbrack\, \frac{f_i(\mathbf x) - \bar z_i}{z_i^{\mathrm{nad}}-z^{\star\star}_i}\, \right\rbrack} + \rho \sum_{i=1}^k \frac{f_i(\mathbf x) }{z_i^{\mathrm{nad}}-z^{\star\star}_i} \\ &\mbox{subject to }\ &\mathbf x \in S.\end{split}\]
__abstractmethods__ = frozenset({})
__module__ = 'desdeo.optimization.OptimizationProblem'
_get_rel()[source]
class desdeo.optimization.OptimizationProblem.NIMBUSGuessProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.SimpleAchievementProblem

Finds new solution by solving NIMBUS version of the GUESS method.

\[\begin{split}& \mbox{minimize }\ \ & \displaystyle{\max_{i \notin I^{\diamond}}} \left\lbrack \frac{f_i(\mathbf x) - z_i^{\mathrm{nad}}}{z_i^{\mathrm{nad}}- \bar z_i} \right\rbrack + \rho \sum_{i=1}^k \frac{f_i(\mathbf x)}{z_i^{\mathrm{nad}}-\bar z_i} \\ &\mbox{subject to }\ &\mathbf x \in S.\end{split}\]

In this implementation \(z^\mathrm{nad}\) is eps larger than the true nadir to protect against the case where \(\bar z_i = z_i^{\mathrm{nad}}\) causing division by zero.

__abstractmethods__ = frozenset({})
__module__ = 'desdeo.optimization.OptimizationProblem'
_get_rel()[source]
_set_scaling_weights()[source]

Set scaling weights to:

\[\frac{1}{z_i^{\mathrm{nad}}-\bar z_i}\]
class desdeo.optimization.OptimizationProblem.NIMBUSProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.NadirStarStarScaleMixin, desdeo.optimization.OptimizationProblem.SimpleAchievementProblem

Finds new solution by solving NIMBUS scalarizing function.

\[\begin{split}& \mbox{minimize }\ \ & \displaystyle{\max_{{i\in I^<}\atop{j \in I^{\le}}} \left [ \frac{f_i(\mathbf x) - z^{\star}_i} {z_i^{\mathrm{nad}}-z^{\star\star}_i}, \frac{f_j(\mathbf x) - \hat{z}_j }{z_j^{\mathrm{nad}}-z^{\star\star}_j} \right ] + \rho \sum_{i=1}^k \frac{f_i(\mathbf x)}{z_i^{\mathrm{nad}}-z^{\star\star}_i}} \\ & \mbox{subject to }\ &f_i(\mathbf x) \le f_i(\mathbf x^c) \ \mbox{ for all } \ \ i \in I^< \cup I^{\le} \cup I^=, \\ && f_i(\mathbf x) \le \varepsilon_i \ \mbox{ for all } \ i \in I^{\ge}, \\ && \mathbf x \in S\end{split}\]
__abstractmethods__ = frozenset({})
__init__(mo_problem, **kwargs)[source]

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

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
_ach(objectives)[source]

Calculate achievement term

_evaluate(objectives)[source]
Return type

Tuple[List[float], Optional[ndarray]]

_get_rel()[source]
class desdeo.optimization.OptimizationProblem.NIMBUSStomProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.SimpleAchievementProblem

Finds new solution by solving NIMBUS version of the satisficing trade-off method (STOM).

\[\begin{split}& \mbox{minimize }\ \ & \displaystyle{ \max_{i=1, \dots , k} \left\lbrack\, \frac{f_i(\mathbf x) - z_i^{\star\star}}{\bar{z}_i - z_i^{\star\star}} \, \right\rbrack} + \rho \sum_{i=1}^k \frac{f_i(\mathbf x)}{\bar z_i - z_i^{\star\star}} \\ &\mbox{subject to }\ &\mathbf x \in S\end{split}\]
__abstractmethods__ = frozenset({})
__module__ = 'desdeo.optimization.OptimizationProblem'
_get_rel()[source]
_set_scaling_weights()[source]

Set scaling weights to:

\[\frac{1}{\bar z_i - z_i^{\star\star}}\]
class desdeo.optimization.OptimizationProblem.NadirStarStarScaleMixin[source]

Bases: object

This mixin implements _set_scaling_weights as:

\[\frac{1}{z_i^{\mathrm{nad}} - z_i^{\star\star}}\]
__dict__ = mappingproxy({'__module__': 'desdeo.optimization.OptimizationProblem', '__doc__': '\n This mixin implements `_set_scaling_weights` as:\n\n .. math::\n\n \\frac{1}{z_i^{\\mathrm{nad}} - z_i^{\\star\\star}}\n\n ', '_set_scaling_weights': <function NadirStarStarScaleMixin._set_scaling_weights>, '__dict__': <attribute '__dict__' of 'NadirStarStarScaleMixin' objects>, '__weakref__': <attribute '__weakref__' of 'NadirStarStarScaleMixin' objects>})
__module__ = 'desdeo.optimization.OptimizationProblem'
__weakref__

list of weak references to the object (if defined)

_set_scaling_weights()[source]
class desdeo.optimization.OptimizationProblem.NautilusAchievementProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.NadirStarStarScaleMixin, desdeo.optimization.OptimizationProblem.SimpleAchievementProblem

Solves problems of the form:

\[\begin{split}& \mbox{minimize}\ \ & \displaystyle{ \max_{i=1, \dots , k} \left\{\, \mu_i(f_i(\mathbf x) - q_i)\ \right\}} + \rho \sum_{i=1}^k \frac{f_i(\mathbf x) - q_i} {z_i^{\mathrm{nad}}-z^{\star\star}_i} \\ & \mbox{subject to}\ & {\bf{x}} \in S\end{split}\]
__abstractmethods__ = frozenset({})
__module__ = 'desdeo.optimization.OptimizationProblem'
_ach(objectives)[source]

Calculate achievement term

_get_rel()[source]
class desdeo.optimization.OptimizationProblem.OptimizationProblem(mo_problem)[source]

Bases: abc.ABC

Single objective optimization problem

problem

The multi-objective problem that the single-objective problem is posed in terms of

__abstractmethods__ = frozenset({'_evaluate'})
__init__(mo_problem)[source]

Constructor

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
abstract _evaluate(objectives)[source]
Return type

Tuple[List[float], Optional[ndarray]]

evaluate(objectives)[source]

Evaluate value of the objective function and possible additional constraints

Parameters

objectives (list of objective values) –

Return type

Tuple[List[float], Optional[ndarray]]

Returns

  • objective (list of floats) – Objective function values corresponding to objectives

  • constraint (2-D matrix of floats) – Constraint function values corresponding to objectives per row. None if no constraints are added

class desdeo.optimization.OptimizationProblem.ScalarizedProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.OptimizationProblem, abc.ABC

__abstractmethods__ = frozenset({'_evaluate', '_set_preferences'})
__init__(mo_problem, **kwargs)[source]

Constructor

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
abstract _evaluate(objectives)[source]
Return type

Tuple[List[float], Optional[ndarray]]

abstract _set_preferences()[source]
evaluate(objectives)[source]

Evaluate value of the objective function and possible additional constraints

Parameters

objectives (list of objective values) –

Return type

Tuple[List[float], Optional[ndarray]]

Returns

  • objective (list of floats) – Objective function values corresponding to objectives

  • constraint (2-D matrix of floats) – Constraint function values corresponding to objectives per row. None if no constraints are added

set_preferences(preference, last_solution)[source]
class desdeo.optimization.OptimizationProblem.SelectedOptimizationProblem(mo_problem, n)[source]

Bases: desdeo.optimization.OptimizationProblem.OptimizationProblem

Converts a multi-objective optimization problem to a single-objective one by selecting only a single objective.

__abstractmethods__ = frozenset({})
__init__(mo_problem, n)[source]
Parameters

n (int) – The index of the objective to be considered

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
_evaluate(objectives)[source]
Return type

Tuple[List[float], Optional[ndarray]]

class desdeo.optimization.OptimizationProblem.SimpleAchievementProblem(mo_problem, **kwargs)[source]

Bases: desdeo.optimization.OptimizationProblem.AchievementProblemBase

Solves a simple form of achievement scalarizing function

\[\begin{split}& \mbox{minimize}\ \ & \displaystyle{ \max_{i=1, \dots , k} \left\{\, \mu_i(f_i(\mathbf x) - q_i)\ \right\}} + \rho \sum_{i=1}^k \mu_i (f_i(\mathbf x)) \\ & \mbox{subject to}\ & {\bf{x}} \in S\end{split}\]

If ach_pen=True is passed to the constructor, the full achivement function is used as the penatly, causing us to instead solve[WIERZBICKI1980]_

\[\begin{split}& \mbox{minimize}\ \ & \displaystyle{ \max_{i=1, \dots , k} \left\{\, \mu_i(f_i(\mathbf x) - q_i)\ \right\}} + \rho \sum_{i=1}^k \mu_i (f_i(\mathbf x)- q_i) \\ & \mbox{subject to}\ & {\bf{x}} \in S\end{split}\]

This is an abstract base class. Implementors should override _get_rel and _set_scaling_weights.

References

[WIERZBICKI1980] A. P. Wierzbicki, The use of reference objectives in multiobjective optimization, in: G. Fandel, T. Gal (Eds.), Multiple Criteria Decision Making, Theory and Applications, Vol. 177 of Lecture Notes in Economics and Mathematical Systems, Springer, 1980, pp. 468-486.

__abstractmethods__ = frozenset({'_get_rel', '_set_scaling_weights'})
__init__(mo_problem, **kwargs)[source]

Constructor

Return type

None

__module__ = 'desdeo.optimization.OptimizationProblem'
_ach(objectives)[source]

Calculate achievement term

Return type

List[float]

_augmentation(objectives)[source]

Calculate augmentation term

Return type

List[float]

abstract _get_rel()[source]
desdeo.optimization.OptimizationProblem.v_ach(f, w, r)
desdeo.optimization.OptimizationProblem.v_pen(f, w, r)