Multiobjective Optimization
multOpt: multiobjective optimization
This subpackage contains scalarization methods to solve (possibly box-constrained) multiobjective optimization problems of the form
The general idea of scalarization methods is to transform the multiobjective
optimization problem into a series of scalar optimization problems. which can
then be solved by using methods from unconstrained or constrained optimization
(see the subpackages unconOpt
or conOpt
). The three existing scalarizaton
methods are the weighted-sum method (WSM), the Euclidean reference point method
(ERPM) and the Pascoletti-Serafini method (PSM).
Documentation is available in the docstrings and online here.
Methods
oppy.multOpt.mop module
Multiobjective optimization problem solver.
This module contains method to solve (possibly box-constrained) multiobjective optimization problems with arbitrarily many cost functions of the form
by a scalarization method, which can either be the weighted-sum method, the Euclidean reference point method or the Pascoletti-Serafini method. The idea of the algorithm for the Euclidean reference point method and the Pascoletti-Serafini method is to hierarchically solve subproblems of the multiobjective optimization problems, i.e., multiobjective optimization problems, which consider only a subset of all cost functions. When solving a subproblem, the information of all previously solved subproblems of this subproblem are used to create the necessary parameters for the Euclidean reference point method and the Pascoletti-Serafini method, respectively. For consistency, the weighted-sum method also hierarchically solves subproblems, although for this method, the required parameters could be computed already in the beginning of the optimization.
In general and from a theoretical point of view, the weighted-sum method and the Euclidean reference point method can only solve convex multiobjective optimization problems, whereas the Pascoletti-Serafini method is also well-suited for non-convex problems.
The advantage of the Euclidean reference point method over the weighted-sum method is that one has a guaranteed approximation fineness of the Pareto front, which is specified by the grid size hx, whereas the approximation of the Pareto front by the weighted-sum method might have larger gaps.
Note that even though the Pascoletti-Serafini method is in principle capable of solving non-convex problems, the quality of the result strongly depends on computing the global minimizer of the arising Pascoletti-Serafini method, which can in general not be guaranteed when using local optimization methods.
If the problem is non-convex (i.e., at least one of the cost functions is non-convex), this can be specified in the options. In this case, the three methods heuristically try to increase the probability of computing the global minimizer of the arising scalarized optimization problems by solving each of them twice with different initial values.
-
oppy.multOpt.mop.
solve_MultiobjectiveOptimizationProblem
(fhandle, dfhandle, x, low, up, options=None, ddfhandle=None) -
Solver for general multiobjective optimization problems.
This method solves a given multiobjective optimization problem by a specified scalarization method (either the weighted-sum method, the Euclidean reference point method or the Pascoletti-Serafini method).
Parameters: -
fhandle (
list
ofcallable()
, length k) –The list of length k containing the objective functions to be minimized. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and
args
is a tuple of the fixed parameters needed to completely specify the function. -
dfhandle (
list
ofcallable()
, length k) –The list of length k containing the gradients of the objective functions. For the i-th entry with \(0 \leq i \leq k-1\) we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and
fargs
is a tuple of the fixed parameters needed to completely specify the function. -
x (
numpy.ndarray
, shape (n,)) – Initial guess for solving the scalar optimization problems of all individual cost functions. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
low (
numpy.ndarray
, shape (n,)) – Lower bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
up (
numpy.ndarray
, shape (n,)) – Upper bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
options (
Options
, optional) –Options for the weighted-sum method method, represented as a
Options
object. The default is None. Options for the multiobjective optimization are:-
- mop_method
str
- Scalarization method, with which the multiobjective optimization problem is supposed to be solved. Possible choices are “WSM”, “ERPM” and “PSM”, initialized with “WSM”.
- mop_method
-
- num_weights_per_dimension
int
- If mop_method == “WSM”: Number of weights per dimension used for the discretization of the set of weights. Initialized with \(20\).
- num_weights_per_dimension
-
- r_PSM
numpy.ndarray
, shape (k,) - If mop_method == “PSM”: Target direction r for the Pascoletti-Serafini problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem, initialized with np.ones(k).
- r_PSM
-
- hp
float
- If mop_method == (“ERPM” or “PSM”): Shifting value for the coordinate axis containing the reference points, initialized with \(1\).
- hp
-
- hx
float
- If mop_method == (“ERPM” or “PSM”): Grid size of the reference point grid, initialized with \(0.5\).
- hx
-
- WSM_optimeth
callable()
- Callable function that solves the weighted-sum problems, initialized with gradmethod.
- WSM_optimeth
-
- ERPM_optimeth
callable()
- If mop_method == “ERPM”: Callable function that solves the Euclidean reference point problems, initialized with gradmethod.
- ERPM_optimeth
-
- PSM_optimeth
callable()
- If mop_method == “PSM”: Callable function that solves the Pascoletti-Serafini problems, initialized with the augmented Lagrangian method.
- PSM_optimeth
-
- problem_type
str
- Indicates if the problem is convex or non-convex. The string can either contain “convex” or “non-convex”, initialized with “convex”.
- problem_type
-
-
ddfhandle (
list
ofcallable()
, length k, optional) –The list of length k containing the Hessians of the objective functions. Only required if the optimizer is a second order method. Therefore, the default is None. Otherwise, for the i-th entry of the list with \(0 \leq i \leq k-1\) we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
Returns: -
MOP (
dict
) – Dictionary containing the solutions to the multiobjective optimization problem. Its keys are given by the strings of all subproblems and the problem itself, e.g., the key “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\). Each of the values corresponding to such a key is a dictionary itself and contains the following keys:-
- ”Results”
list
ofResults
, length num_sol -
List of instances of the class
Results
with length num_sol, where num_sol is the number of computed Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) -
Solution vector of the optimization problem.
- x
-
- iterationsscalar
-
Number of iterations the algorithm needed.
-
- reslist
-
List with the norm of the residuals.
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) -
Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the MOP.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) -
Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”t”
numpy.ndarray
, shape (num_sol,) -
For the PSM: Optimal max-values of the computed Pareto-optimal points. Array of size (num_sol,), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem.
- ”t”
-
- ”alpha”
numpy.ndarray
, shape (num_alpha, k_current) -
For the WSM: Weight vectors for the current subproblem. Array of size (num_alpha, k_current), where ‘num_alpha’ is the number of weight vectors and k_current is the number of cost functions of the current subproblem.
- ”alpha”
-
- ”alpha_all”
numpy.ndarray
, shape (num_alpha, k) -
For the WSM: Weight vectors for the current subproblem seen as weights of the entire MOP. Created by adding 0s to the weights from ‘alpha’ in the respective dimensions. Array of size (num_alpha, k), where ‘num_alpha’ is the number of weight vectors and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”alpha_all”
-
- ”z_ref”
numpy.ndarray
, shape (num_z_ref, k_current) -
For the ERPM and the PSM: Reference points for the current subproblem. Array of size (num_z_ref, k_current), where ‘num_z_ref’ is the number of referece points and k_current is the number of cost functions of the current subproblem.
- ”z_ref”
-
- ”z_ref_all”
numpy.ndarray
, shape (num_z_ref, k) -
For the ERPM and the PSM: Reference points for the current subproblem seen as reference points of the entire multiobjective optimization problem. Created by adding the function values of the non-involved cost functions to the reference points from “z_ref” in the respective dimensions. Array of size (num_z_ref, k), where ‘num_z_ref’ is the number of reference points and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”z_ref_all”
-
-
data (
dict
) – Dictionary containing additional data of the multiobjective optimization problem. In comparison to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following key:-
- ”ynad”
numpy.ndarray
, shape (k,) -
Nadir point of the current subproblem w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
-
Information about the reference points of the current subproblem, which are needed to create reference points for all superproblems of the current subproblem. Each entry of the list is a dictionary and corresponds to a reference points. It has the following (key,value) pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) -
Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) -
Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Boxnumber”
-
- ”Subproblem”
str
-
The subproblem to which the current reference point belongs, written as a string (e.g, the string “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\)).
- ”Subproblem”
-
- ”Missing_CFs”
str
-
The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions \(f_3\) and \(f_4\) are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
-
Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
References
M. Ehrgott. Multicriteria Optimization. Springer, Berlin, Heidelberg, Second Edition, 2005, see Ehrgott [Ehr05].
J. Jahn. Vector Optimization. Springer, Berlin, Heidelberg, Second Edition, 2011, see Jahn and others [J+11].
A. Pascoletti and P. Serafini. Scalarizing Vector Optimization Problems. Journal of Optimization Theory and Applications, 42(4):499–524, 1984, see Pascoletti and Serafini [PS84].
A.P. Wierzbicki. The Use of Reference Objectives in Multiobjective Optimization. Multiple Criteria Decision Making Theory and Application, 468–486, 1980, see Wierzbicki [Wie80].
L. Zadeh. Optimality and Non-Scalar-Valued Performance Criteria. IEEE Transactions on Automatic Control, 8(1):59–60, 1963, see Zadeh [Zad63].
Examples
Multiobjective optimization of two parabolas
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from oppy.options import Options >>> from oppy.multOpt.mop import solve_MultiobjectiveOptimizationProblem
Define the cost functions and their gradients
>>> f1 = (lambda x: (x[0] - 1)**2 + (x[1] - 1)**2) >>> f2 = (lambda x: (x[0] + 0.5)**2 + (x[1] + 1)**2) >>> df1 = (lambda x: np.array([2*(x[0] - 1), 2*(x[1] - 1)])) >>> df2 = (lambda x: np.array([2*(x[0] + 0.5), 2*(x[1] + 1)]))
Store the cost functions, their gradients and Hessians in a list
>>> f = [f1, f2] >>> df = [df1, df2]
No box constraints
>>> low = np.array([-np.Inf, -np.Inf]) >>> up = np.array([np.Inf, np.Inf])
Specify the initial value
>>> x0 = np.array([0, 0])
Options for the weighted sum method
>>> options_WSM = Options(mop_method="WSM", num_weights_per_dimension=30)
Options for the Euclidean reference point method
>>> options_ERPM = Options(mop_method="ERPM", hp=0.2, hx=0.5)
Options for the Pascoletti-Serafini method
>>> options_PSM = Options(mop_method="PSM", hp=0.2, hx=0.5, >>> r_PSM=np.ones(len(f)))
Execute the multiobjective optimization:
For the weighed-sum method
>>> MOP_WSM, data_WSM = solve_MultiobjectiveOptimizationProblem( >>> f, df, x0, low, up, options=options_WSM >>> )
For the Euclidean reference point method
>>> MOP_ERPM, data_ERPM = solve_MultiobjectiveOptimizationProblem( >>> f, df, x0, low, up, options=options_ERPM >>> )
For the Pascoletti-Serafini method
>>> MOP_PSM, data_PSM = solve_MultiobjectiveOptimizationProblem( >>> f, df, x0, low, up, options=options_PSM >>> )
Get the optimal solutions
>>> x_opt_WSM = MOP_WSM["1,2"].x >>> x_opt_ERPM = MOP_ERPM["1,2"].x >>> x_opt_PSM = MOP_PSM["1,2"].x
Plot the obtained approximations of the Pareto set
>>> fig = plt.figure() >>> plt.plot(x_opt_WSM[:, 0], x_opt_WSM[:, 1], 'o') >>> plt.plot(np.array([1, -0.5]), np.array([1, -1])) >>> plt.title('Weighted-Sum Method') >>> fig = plt.figure() >>> plt.plot(x_opt_ERPM[:, 0], x_opt_ERPM[:, 1], 'o') >>> plt.plot(np.array([1, -0.5]), np.array([1, -1])) >>> plt.title('Euclidean Reference Point Method') >>> fig = plt.figure() >>> plt.plot(x_opt_PSM[:, 0], x_opt_PSM[:, 1], 'o') >>> plt.plot(np.array([1, -0.5]), np.array([1, -1])) >>> plt.title('Pascoletti-Serafini Method')
The exact Pareto set is the line between the two vertices [1,1] and [-0.5,-1]. One can see that for all three methods, the results are approximating the exact Pareto set, which is plotted in orange, very well.
-
fhandle (
oppy.multOpt.erpm module
Euclidean reference point method.
-
oppy.multOpt.erpm.
erpm
(fhandle, dfhandle, x, low, up, MOP, data, options, ddfhandle=None) -
Euclidean reference point method.
This method solves a given subproblem (potentially the entire problem) of a given multiobjective optimization problem by the Euclidean reference point method. It uses information from already solved subproblems of the current subproblem to create the refernce points for the current subproblem. For all created reference points z, the Euclidean reference point problem
\[\min_x \sum_{i=1}^k \frac{1}{2} (f_i(x) - z_i)^2\]\[\text{s. t. } \text{low} \leq x \leq \text{up}\]is solved by using an optimziation method for constrained optimization, which is specified in the options.
Parameters: -
fhandle (
list
ofcallable()
, length k) –The list of length k containing the objective functions of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and
args
is a tuple of the fixed parameters needed to completely specify the function. -
dfhandle (
list
ofcallable()
, length k) –The list of length k containing the gradients of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry with \(0 \leq i \leq k-1\) we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and
fargs
is a tuple of the fixed parameters needed to completely specify the function. -
x (
numpy.ndarray
, shape (n,)) – Initial guess for solving the scalar optimization problems. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
low (
numpy.ndarray
, shape (n,)) – Lower bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
up (
numpy.ndarray
, shape (n,)) – Upper bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
MOP (
dict
) –Dictionary containing the solutions to the multiobjective optimization problem. It conatins keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved. Each of the alues corresponding to such a key is a dictionary itself and contains the following keys:
-
- ”Results”
list
ofResults
, length num_sol - List of instances of the class
Results
with length num_sol, where num_sol is the number of Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) - Solution vector of the optimization problem.
- x
-
- iterations
int
- Number of iterations the algorithm needed.
- iterations
-
- res
list
- List with the norm of the residuals.
- res
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) - Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the MOP.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) - Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”z_ref”
numpy.ndarray
, shape (num_z_ref, k_current) - Reference points for the current subproblem. Array of size (num_z_ref, k_current), where ‘num_z_ref’ is the number of referece points and k_current is the number of cost functions of the current subproblem.
- ”z_ref”
-
- ”z_ref_all”
numpy.ndarray
, shape (num_z_ref, k) - Reference points for the current subproblem seen as reference points of the entire multiobjective optimization problem. Created by adding the function values of the non-involved cost functions to the reference points from “z_ref” in the respective dimensions. Array of size (num_z_ref, k), where ‘num_z_ref’ is the number of reference points and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”z_ref_all”
-
-
data (
dict
) –Dictionary containing additional data of the multiobjective optimization problem. It contains keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved.
-
- ”1,2”
dict
-
- Dictionary containing the keys
-
-
- ”ynad”
numpy.ndarray
, shape (k,) - Nadir point of the subproblem “1,2” w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
- Information about the reference points of the current
subproblem, which are needed to create reference points
for all superproblems of the current subproblem. Each
entry of the list is a dictionary and corresponds to a
reference points. It has the following (key,value)
pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) - Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) - Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Boxnumber”
-
- ”Subproblem”
str
- The subproblem to which the current reference point belongs, written as a string (e.g, the string “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\)).
- ”Subproblem”
-
- ”Missing_CFs”
str
- The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions f_3 and f_4 are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
- Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
- ”1,2”
Additionally, data contains the following keys:
-
- ”yid”
numpy.ndarray
, shape (k,) - Ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the nunmber of cost functions of the entire multiobjective optimization problem. The value of each entry is given by the minimal value of the corresponding cost function.
- ”yid”
-
- ”yidshift”
numpy.ndarray
, shape (k,) - Shifted ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem. The shifted ideal point is given by yid - d, where d is the specified shifting vector of the problem.
- ”yidshift”
-
- ”current_subproblem”
tuple
, length num_current_sp - Tuple containing the indices of the cost functions involved in
the current subproblem. Tuple of length num_current_sp, where
'num_current_sp'
is the number of cost functions in the current subproblem.
- ”current_subproblem”
-
-
options (
Options
, optional) –Options for the weighted-sum method method, represented as a
Options
object. The default is None. Possible/Relevant options for the Euclidean reference point method are:-
- mop_method
str
- Scalarization method, with which the multiobjective
optimization problem is supposed to be solved. Possible choices
are “WSM”, “ERPM” and “PSM”. This method is only called, if the
method is
"ERPM"
.
- mop_method
-
- hp
float
- Shifting value for the coordinate axis containing the reference points.
- hp
-
- hx
float
- Grid size of the reference point grid.
- hx
-
- ERPM_optimeth
callable()
- Callable function that solves the Euclidean reference point problems, initialized with gradmethod.
- ERPM_optimeth
-
- problem_type
str
- Indicates if the problem is convex or non-convex. The string can either contain “convex” or “non-convex”, initialized with “convex”.
- problem_type
-
-
ddfhandle (
list
ofcallable()
, length k, optional) –The list of length k containing the Hessians of the objective functions. Only required if the optimizer is a second order method. Therefore, the default is None. Otherwise, note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
Returns: -
MOP (
dict
) – Dictionary containing the solutions to the multiobjective optimization problem. In addition to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following keys:-
- ”Results”
list
ofResults
, length num_sol -
List of instances of the class
Results
with length num_sol, where num_sol is the number of Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) -
Solution vector of the optimization problem.
- x
-
- iterations
int
-
Number of iterations the algorithm needed.
- iterations
-
- res
list
-
List with the norm of the residuals.
- res
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) -
Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the MOP.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) -
Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”z_ref”
numpy.ndarray
, shape (num_z_ref, k_current) -
Reference points for the current subproblem. Array of size (num_z_ref, k_current), where ‘num_z_ref’ is the number of referece points and k_current is the number of cost functions of the current subproblem.
- ”z_ref”
-
- ”z_ref_all”
numpy.ndarray
, shape (num_z_ref, k) -
Reference points for the current subproblem seen as reference points of the entire multiobjective optimization problem. Created by adding the function values of the non-involved cost functions to the reference points from “z_ref” in the respective dimensions. Array of size (num_z_ref, k), where ‘num_z_ref’ is the number of reference points and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”z_ref_all”
-
-
data (
dict
) – Dictionary containing additional data of the multiobjective optimization problem. In comparison to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following keys:-
- ”ynad”
numpy.ndarray
, shape (k,) -
Nadir point of the current subproblem w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
-
Information about the reference points of the current subproblem, which are needed to create reference points for all superproblems of the current subproblem. Each entry of the list is a dictionary and corresponds to a reference points. It has the following (key,value) pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) -
Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) -
Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Boxnumber”
-
- ”Subproblem”
str
-
The subproblem to which the current reference point belongs, written as a string (e.g, the string “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\)).
- ”Subproblem”
-
- ”Missing_CFs”
str
-
The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions \(f_3\) and \(f_4\) are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
-
Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
References
S. Banholzer. ROM-Based Multiobjective Optimization with PDE Constraints. PhD Thesis, 2021, see Banholzer [Ban21].
S. Banholzer and S. Volkwein. Hierarchical Convex Multiobjective Optimization by the Euclidean Reference Point Method. Techincal Report, 2019, see Banholzer and Volkwein [BV19].
K.M. Miettinen. Nonlinear Multiobjective Optimization. Kluwer Academic Publishers, AH Dordrecht, First Edition, 1999, see Miettinen [Mie99].
A.P. Wierzbicki. The Use of Reference Objectives in Multiobjective Optimization. Multiple Criteria Decision Making Theory and Application, 468–486, 1980, see Wierzbicki [Wie80].
A.P. Wierzbicki. On the Completeness and Constructiveness of Parametric Characterizations to Vector Optimization Problems. Operations-Researh-Spektrum, 8(2):73–87, 1986, see Wierzbicki [Wie86].
A.P. Wierzbicki. Reference Point Methods in Vector Optimziation and Decision Support. IIASA Interim Report, 1998, see Wierzbicki [Wie98].
-
fhandle (
-
oppy.multOpt.erpm.
create_reference_points
(data, options) -
Create the reference points for the Euclidean reference point method.
This method creates the reference points for the Euclidean reference point method by using information of the solutions of all subproblems of the current problem.
Parameters: -
data (
dict
) –Dictionary containing additional data of the multiobjective optimization problem. It contains keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved.
-
- ”1,2”
dict
-
- Dictionary containing the keys
-
-
- ”ynad”
numpy.ndarray
, shape (k,) - Nadir point of the subproblem “1,2” w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
- Information about the reference points of the current
subproblem, which are needed to create reference points
for all superproblems of the current subproblem. Each
entry of the list is a dictionary and corresponds to a
reference points. It has the following (key,value)
pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) - Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) - Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem. The subproblem to which the current reference point belongs, written as a string (e.g, the string “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\)).
- ”Boxnumber”
-
- ”Missing_CFs”
str
- The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions \(f_3\) and \(f_4\) are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
- Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
- ”1,2”
Additionally, data contains the following keys:
-
- ”yid”
numpy.ndarray
, shape (k,) - Ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the nunmber of cost functions of the entire multiobjective optimization problem. The value of each entry is given by the minimal value of the corresponding cost function.
- ”yid”
-
- ”yidshift”
numpy.ndarray
, shape (k,) - Shifted ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem. The shifted ideal point is given by yid - d, where d is the specified shifting vector of the problem.
- ”yidshift”
-
- ”current_subproblem”
tuple
, length num_current_sp - Tuple containing the indices of the cost functions involved in the current subproblem. Tuple of length num_current_sp, where ‘num_current_sp’ is the number of cost functions in the current subproblem.
- ”current_subproblem”
-
-
options (
Options
, optional) –Options for the Euclidean reference point method, represented as a
Options
object. The default isNone
. Possible/Relevant options for the creation of the reference points are:
Returns: z_ref – Created reference point for the current subproblem. Array of size (num_z_ref, num_current_sp), where ‘num_z_ref’ is the number of reference points and num_current_sp is the number of cost functions of the current subproblem.
Return type: numpy.ndarray
, shape (num_z_ref, num_current_sp) -
data (
-
oppy.multOpt.erpm.
create_z_ref_grid
(interval_list) -
Create the reference point grid for the current subproblem.
This method creates the reference point grid on the shifted coordinate planes.
Parameters: interval_list ( list
, length num_current_sp) – List of reference point grids of the individual cost functions that are part of the current subproblem. The length of the list is num_current_sp, which is the number of the cost functions of the current subproblem. Each entry of the list is an array containing the reference point grid for the respective cost function.Returns: z_ref_grid – Reference point grid on the shifted coordinate planes. Array of size (num_z_ref_grid, num_current_sp), where ‘num_z_ref_grid’ is the number of reference points on the grid and ‘num_current_sp’ is the number of cost functions of the current subproblem. Return type: numpy.ndarray
, shape (num_z_ref_grid, num_current_sp)
-
oppy.multOpt.erpm.
evalFunc_ERPM
(fhandle, x, z) -
Evaluate the Euclidean reference point function.
This method evaluates the Euclidean reference point function given the point x and the reference point z.
Parameters: -
fhandle (
list
ofcallable()
, length num_costfun) –The list containing the objective functions of the considered Euclidean reference point function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Current value of the variable. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
z (
numpy.ndarray
, shape (num_costfun,)) – Reference point of the Euclidean reference point function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: func_val – Function value of the Euclidean reference point function.
Return type: -
fhandle (
-
oppy.multOpt.erpm.
evalGrad_ERPM
(fhandle, dfhandle, x, z) -
Evaluate the gradient of the Euclidean reference point function.
This method evaluates the gradient of the Euclidean reference point function given the point x and the reference point z.
Parameters: -
fhandle (
list
ofcallable()
, length num_costfun) –The list containing the objective functions of the considered Euclidean reference point function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
dfhandle (
list
ofcallable()
, length num_costfun) –The list containing the gradients of the objective functions of the considered Euclidean reference point function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Current value of the variable. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
z (
numpy.ndarray
, shape (num_costfun,)) – Reference point of the Euclidean reference point function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: grad_val – Gradient of the Euclidean reference point function at the point x. Array of size (n,), where ‘n’ is the number of independent variables.
Return type: numpy.ndarray
, shape (n,) -
fhandle (
-
oppy.multOpt.erpm.
evalHess_ERPM
(fhandle, dfhandle, ddfhandle, x, z) -
Evaluate the Hessian of the Euclidean reference point function.
This method evaluates the Hessian of the Euclidean reference point function given the point x and the reference point z.
Parameters: -
fhandle (
list
ofcallable()
, length num_costfun) –The list containing the objective functions of the considered Euclidean reference point function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
dfhandle (
list
ofcallable()
, length num_costfun) –The list containing the gradients of the objective functions of the considered Euclidean reference point function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
ddfhandle (
list
ofcallable()
, length num_costfun) –The list containing the Hessians of the objective functions of the considered Euclidean reference point function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Current value of the variable. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
z (
numpy.ndarray
, shape (num_costfun,)) – Reference point of the Euclidean reference point function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: hess_val – Hessian of the Euclidean reference point function at the point x. Array of size (n,n), where ‘n’ is the number of independent variables.
Return type: numpy.ndarray
, shape (n,n) -
fhandle (
oppy.multOpt.handle_subproblems module
Helper functions for multiobjective optimization.
This module contains helper functions for handling the subproblems of a multiobjective optimization problem.
-
oppy.multOpt.handle_subproblems.
get_involved_cfs_string
(problem_string) -
Get a list of strings containing single numbers.
Parameters: problem_string ( str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2” for the subproblem with the cost functions \(f_1\) and \(f_2\).Returns: single_string_list – List of strings containing the numbers of the involved cost functions. For the above example: [“1”, “2”] Return type: list
-
oppy.multOpt.handle_subproblems.
get_involved_cfs_list
(problem_string) -
Get a list of integers of the involved cost functions.
Parameters: problem_string ( str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2” for the subproblem with the cost functions \(f_1\) and \(f_2\).Returns: subproblem_single_list – List of integers corresponding to the numbers of the involved cost functions. For the above example: [1, 2] Return type: list
-
oppy.multOpt.handle_subproblems.
get_involved_cfs_array
(problem_string) -
Get an np-array of integers of the involved cost functions.
Parameters: problem_string ( str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2” for the subproblem with the cost functions \(f_1\) and \(f_2\).Returns: subproblem_single_array – Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions contained in the string, containing the numbers of the involved cost functions. For the above example: array([1, 2]) Return type: numpy.ndarray
, shape (num_costfun,)
-
oppy.multOpt.handle_subproblems.
get_involved_cfs_set
(problem_string) -
Get a set of integers of the involved cost functions.
Parameters: problem_string ( str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2” for the subproblem with the cost functions \(f_1\) and \(f_2\).Returns: subproblem_single_set – Set of integers corresponding to the numbers of the involved cost functions. For the above example: {1, 2} Return type: set
-
oppy.multOpt.handle_subproblems.
get_all_subproblems_string
(problem_string) -
Get list of strings containing all subproblems w.r.t. a subproblem.
Parameters: problem_string ( str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2,4” for the subproblem with the cost functions \(f_1\), \(f_2\) and \(f_4\).Returns: all_subproblems_string – List of strings containing all subproblems of the current subproblem. Each entry is a string containing the involved cost functions of the subsubproblem. For the above example: [‘1’, ‘2’, ‘4’, ‘1,2’, ‘1,4’, ‘2,4’] Return type: list
-
oppy.multOpt.handle_subproblems.
get_all_subproblems_set
(problem_string) -
Get list of strings containing all subproblems w.r.t. a subproblem.
Parameters: problem_string ( str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2,4” for the subproblem with the cost functions \(f_1\), \(f_2\) and \(f_4\).Returns: all_subproblems_set – List of sets containing all subproblems of the current subproblem. Each entry is a set containing the involved cost functions of the subsubproblem. For the above example: [{1}, {2}, {4}, {1, 2}, {1, 4}, {2, 4}] Return type: list
-
oppy.multOpt.handle_subproblems.
get_missing_cfs_set
(problem_string, cf_string) -
Missing cost functions of a subproblem w.r.t. a subproblem as set.
Parameters: -
problem_string (
str
) – Contains the numbers of the involved cost functions separated by a comma as a string , e.g., “1,2,4” for the subproblem with the cost functions \(f_1\), \(f_2\) and \(f_4\). -
cf_string (
str
) – Contains another subproblem as a string, e.g., “1” for the subproblem with the cost functions \(f_1\).
Returns: cf_missing_set – Contains a set of integers with the numbers of the missing cost functions. In the above example: {2, 4}
Return type: -
problem_string (
-
oppy.multOpt.handle_subproblems.
get_missing_cfs_string
(problem_string, cf_string) -
Missing cost functions of a subproblem w.r.t. a subproblem as string.
Parameters: Returns: cf_missing_string – String containing the numbers of the missing cost functions separated by a comma. In the above example: “2,4”
Return type:
oppy.multOpt.psm module
Pascoletti-Serafini method.
-
oppy.multOpt.psm.
psm
(fhandle, dfhandle, x, low, up, MOP, data, options, ddfhandle=None) -
The Pascoletti-Serafini method.
This method solves a given subproblem (potentially the entire problem) of a given multiobjective optimization problem by the Pascoletti-Serafini method. It uses information from already solved subproblems of the current subproblem to create the refernce points for the current subproblem. For all created reference points z, the Pascoletti-Serafini problem
\[\min_x \max_{i \in \{1,\ldots,k\}} \frac{1}{r_i} (f_i(x) - z_i)\]\[\text{s.t. } \text{low} \leq x \leq \text{up}\]is solved. For the numerical optimization, this non-smooth problem is reformulated as
\[\min_{x,t} t\]\begin{eqnarray} \text{s.t. } f_i(x) - z_i - t r_i & \leq 0, \\ \text{low} \leq x & \leq \text{up}, \end{eqnarray}which is solved by using an optimization method being able to deal with these kind of problems (preferably the augmented Lagrange method). The optimization method is specified in the options.
Parameters: -
fhandle (
list
ofcallable()
, length k) –The list of length k containing the objective functions of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
dfhandle (
list
ofcallable()
, length k) –The list of length k containing the gradients of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry with \(0 \leq i \leq k-1\) we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Initial guess for solving the scalar optimization problems. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
low (
numpy.ndarray
, shape (n,)) – Lower bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
up (
numpy.ndarray
, shape (n,)) – Upper bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
MOP (
dict
) –Dictionary containing the solutions to the multiobjective optimization problem. It conatins keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved. Each of the values corresponding to such a key is a dictionary itself and contains the following keys:
-
- ”Results”
list
ofResults
, length num_sol - List of instances of the class
Results
with length num_sol, where num_sol is the number of computed Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) - Solution vector of the optimization problem.
- x
-
- iterations
int
- Number of iterations the algorithm needed.
- iterations
-
- reslist
- List with the norm of the residuals.
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) - Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the MOP.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) - Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”t”
numpy.ndarray
, shape (num_sol,) - Optimal max-values of the computed Pareto-optimal points. Array of size (num_sol,), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem.
- ”t”
-
- ”z_ref”
numpy.ndarray
, shape (num_z_ref, k_current) - Reference points for the current subproblem. Array of size (num_z_ref, k_current), where ‘num_z_ref’ is the number of referece points and k_current is the number of cost functions of the current subproblem.
- ”z_ref”
-
- ”z_ref_all”
numpy.ndarray
, shape (num_z_ref, k) - Reference points for the current subproblem seen as reference points of the entire multiobjective optimization problem. Created by adding the function values of the non-involved cost functions to the reference points from “z_ref” in the respective dimensions. Array of size (num_z_ref, k), where ‘num_z_ref’ is the number of reference points and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”z_ref_all”
-
-
data (
dict
) –Dictionary containing additional data of the multiobjective optimization problem. It contains keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved.
-
- ”1,2”
dict
-
- Dictionary containing the key
-
-
- ”ynad”
numpy.ndarray
, shape (k,) - Nadir point of the subproblem “1,2” w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
- Information about the reference points of the current
subproblem, which are needed to create reference points
for all superproblems of the current subproblem. Each
entry of the list is a dictionary and corresponds to a
reference points. It has the following (key,value)
pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) - Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) - Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Boxnumber”
-
- ”Missing_CFs”
str
- The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions \(f_3\) and \(f_4\) are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
- Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
- ”1,2”
Additionally, data contains the following keys:
-
- ”yid”
numpy.ndarray
, shape (k,) - Ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the nunmber of cost functions of the entire multiobjective optimization problem. The value of each entry is given by the minimal value of the corresponding cost function.
- ”yid”
-
- ”yidshift”
numpy.ndarray
, shape (k,) - Shifted ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem. The shifted ideal point is given by yid - d, where d is the specified shifting vector of the problem.
- ”yidshift”
-
- ”current_subproblem”
tuple
, length num_current_sp - Tuple containing the indices of the cost functions involved in the current subproblem. Tuple of length num_current_sp, where ‘num_current_sp’ is the number of cost functions in the current subproblem.
- ”current_subproblem”
-
-
options (
Options
, optional) –Options for the weighted-sum method method, represented as a
Options
object. The default is None. Possible/Relevant options for the Pascoletti-Serafini method are:-
- mop_method
str
- Scalarization method, with which the multiobjective optimization problem is supposed to be solved. Possible choices are “WSM”, “ERPM” and “PSM”. This method is only called, if the method is “ERPM”.
- mop_method
-
- r_PSM
numpy.ndarray
, shape (k,) - Target direction r for the Pascoletti-Serafini problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- r_PSM
-
- hp
float
- Shifting value for the coordinate axis containing the reference points.
- hp
-
- hx
float
- Grid size of the reference point grid.
- hx
-
- PSM_optimeth
callable()
- Callable function that solves the Pascoletti-Serafini problems, initialized with the augmented Lagrangian method.
- PSM_optimeth
-
- problem_type
str
- Indicates if the problem is convex or non-convex. The string can either contain “convex” or “non-convex”, initialized with “convex”.
- problem_type
-
-
ddfhandle (
list
ofcallable()
, length k, optional) –The list of length k containing the Hessians of the objective functions. Only required if the optimizer is a second order method. Therefore, the default is None. Otherwise, note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and
args
is a tuple of the fixed parameters needed to completely specify the function.
Returns: -
MOP (
dict
) – Dictionary containing the solutions to the multiobjective optimization problem. In addition to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following keys:-
- ”Results”
list
ofResults
, length num_sol -
List of instances of the class
Results
with length num_sol, where num_sol is the number of computed Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) -
Solution vector of the optimization problem.
- x
-
- iterations
float
-
Number of iterations the algorithm needed.
- iterations
-
- res
list
-
List with the norm of the residuals.
- res
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) -
Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the MOP.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) -
Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”t”
numpy.ndarray
, shape (num_sol,) -
Optimal max-values of the computed Pareto-optimal points. Array of size (num_sol,), where ‘num_sol’ is the number of computed Pareto optimal points of the current subproblem.
- ”t”
-
- ”z_ref”
numpy.ndarray
, shape (num_z_ref, k_current) -
Reference points for the current subproblem. Array of size (num_z_ref, k_current), where ‘num_z_ref’ is the number of referece points and k_current is the number of cost functions of the current subproblem.
- ”z_ref”
-
- ”z_ref_all”
numpy.ndarray
, shape (num_z_ref, k) -
Reference points for the current subproblem seen as reference points of the entire multiobjective optimization problem. Created by adding the function values of the non-involved cost functions to the reference points from “z_ref” in the respective dimensions. Array of size (num_z_ref, k), where ‘num_z_ref’ is the number of reference points and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”z_ref_all”
-
-
data (
dict
) – Dictionary containing additional data of the multiobjective optimization problem. In comparison to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following key:-
- ”ynad”
numpy.ndarray
, shape (k,) -
Nadir point of the current subproblem w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
-
Information about the reference points of the current subproblem, which are needed to create reference points for all superproblems of the current subproblem. Each entry of the list is a dictionary and corresponds to a reference points. It has the following (key,value) pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) -
Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) -
Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Boxnumber”
-
- ”Subproblem”
str
-
The subproblem to which the current reference point belongs, written as a string (e.g, the string “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\)).
- ”Subproblem”
-
- ”Missing_CFs”
str
-
The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions \(f_3\) and \(f_4\) are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
-
Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
References
S. Banholzer. ROM-Based Multiobjective Optimization with PDE Constraints. PhD Thesis, University of Konstanz, 2021, see Banholzer [Ban21].
G. Eichfelder. Adaptive Scalarization Methods in Multiobjective Optimization. Springer, Berlin, Heidelberg, First Edition, 2008, see Eichfelder [Eic08].
K. Khaledian and M. Soleimani-damaneh. A New Approach to Approximate the Bounded Pareto Front. Mathematical Methods of Operations Research, 82(2):211–228, 2015, see Khaledian and Soleimani-damaneh [KSd15].
D. Mueller-Gritschneder, H. Graeb and U. Schlichtmann. A Successive Approach to Compute the Bounded Pareto Front of Practical Multiobjective Optimization Problems. SIAM J. Optim., 20(2):915–934, 2009, see Mueller-Gritschneder et al. [MGGS09].
A. Pascoletti and P. Serafini. Scalarizing Vector Optimization Problems. Journal of Optimization Theory and Applications, 42(4):499–524, 1984, see Pascoletti and Serafini [PS84].
-
fhandle (
-
oppy.multOpt.psm.
create_reference_points
(data, options) -
Create the reference points for the Pascoletti-Serafini method.
This method creates the reference points for the Pascoletti-Serafini method by using information of the solutions of all subproblems of the current problem.
Parameters: -
data (
dict
) –Dictionary containing additional data of the multiobjective optimization problem. It contains keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved.
-
- ”1,2”
dict
-
- Dictionary containing the keys
-
-
- ”ynad”
numpy.ndarray
, shape (k,) - Nadir point of the subproblem “1,2” w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”z_ref_create”
list
- Information about the reference points of the current
subproblem, which are needed to create reference points
for all superproblems of the current subproblem. Each
entry of the list is a dictionary and corresponds to a
reference points. It has the following (key,value)
pairs:
-
- ”Coordinates”
numpy.ndarray
, shape (k,) - Coordinates of the current reference point w.r.t. all cost functions (see z_ref_all in MOP). Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Coordinates”
-
- ”Boxnumber”
numpy.ndarray
ofint
, shape (k,) - Specifies the box on the shifted coordinate plane that the current reference point lies in. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”Boxnumber”
-
- ”Subproblem”
str
- The subproblem to which the current reference point belongs, written as a string (e.g, the string “1,2” stands for the subproblem with the cost functions \(f_1\) and \(f_2\)).
- ”Subproblem”
-
- ”Missing_CFs”
str
- The missing cost functions that are not part of the current subproblem written as a string (e.g., the string “3,4” means that the cost functions \(f_3\) and \(f_4\) are not part of the current subproblem).
- ”Missing_CFs”
-
- ”Coordinate_Plane”
str
- Index of the coordinate plane that the current reference point lies on written as a string.
- ”Coordinate_Plane”
-
- ”z_ref_create”
-
- ”1,2”
Additionally, data contains the following keys:
-
- ”yid”
numpy.ndarray
, shape (k,) - Ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the nunmber of cost functions of the entire multiobjective optimization problem. The value of each entry is given by the minimal value of the corresponding cost function.
- ”yid”
-
- ”yidshift”
numpy.ndarray
, shape (k,) - Shifted ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem. The shifted ideal point is given by yid - d, where d is the specified shifting vector of the problem.
- ”yidshift”
-
- ”current_subproblem”
tuple
, length num_current_sp - Tuple containing the indices of the cost functions involved in the current subproblem. Tuple of length num_current_sp, where ‘num_current_sp’ is the number of cost functions in the current subproblem.
- ”current_subproblem”
-
-
options (
Options
, optional) –Options for the Pascoletti-Serafini method, represented as a
Options
object. The default is None. Possible/Relevant options for the creation of the reference points are:
Returns: z_ref – Created reference point for the current subproblem. Array of size (num_z_ref, num_current_sp), where ‘num_z_ref’ is the number of reference points and num_current_sp is the number of cost functions of the current subproblem.
Return type: numpy.ndarray
, shape (num_z_ref, num_current_sp) -
data (
-
oppy.multOpt.psm.
create_z_ref_grid
(interval_list) -
Create the reference point grid for the current subproblem.
This method creates the reference point grid on the shifted coordinate planes.
Parameters: interval_list ( list
, length num_current_sp) – List of reference point grids of the individual cost functions that are part of the current subproblem. The length of the list is num_current_sp, which is the number of the cost functions of the current subproblem. Each entry of the list is an array containing the reference point grid for the respective cost function.Returns: z_ref_grid – Reference point grid on the shifted coordinate planes. Array of size (num_z_ref_grid, num_current_sp), where ‘num_z_ref_grid’ is the number of reference points on the grid and ‘num_current_sp’ is the number of cost functions of the current subproblem. Return type: numpy.ndarray
, shape (num_z_ref_grid, num_current_sp)
-
oppy.multOpt.psm.
evalFunc_InequConstr_PSM
(fhandle, xt, z, r_target) -
Evaluate the inequality constraints of the Pascoletti-Serafini problem.
This method evaluates the inequality constraints of the Pascoletti-Serafini problem at the current point xt = \((x,t)\).
Parameters: -
fhandle (
list
ofcallable()
, length num_costfun) –The list containing the objective functions of the considered Pascoletti-Serafini problem. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
xt (
numpy.ndarray
, shape (n+1,)) – Contains \((x,t)\). Array of real elements of size (n+1,), where ‘n’ is the number of independent variables. -
z (
numpy.ndarray
, shape (num_costfun,)) – Reference point of the Euclidean reference point function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions. -
r_target (
numpy.ndarray
, shape (num_costfun,)) – Target direction of the Pascoletti-Serafini problem. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: func_val – Function value of the inequality constraints of the Pascoletti-Serafini problem at the current point xt. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Return type: numpy.ndarray
, shape (num_costfun,) -
fhandle (
-
oppy.multOpt.psm.
evalGrad_InequConstr_PSM
(dfhandle, xt, z, r_target) -
Evaluate gradient of the ineq. constr. of the Pascoletti-Serafini.
This method evaluates the gradients of the inequality constraints of the Pascoletti-Serafini problem at the current point xt = (x,t).
Parameters: -
dfhandle (
list
ofcallable()
, length num_costfun) –The list containing the gradients of the objective functions of the considered Pascoletti-Serafini problem. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
xt (
numpy.ndarray
, shape (n+1,)) – Contains \((x,t)\). Array of real elements of size (n+1,), where ‘n’ is the number of independent variables. -
z (
numpy.ndarray
, shape (num_costfun,)) – Reference point of the Euclidean reference point function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions. -
r_target (
numpy.ndarray
, shape (num_costfun,)) – Target direction of the Pascoletti-Serafini problem. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: grad_val – Gradient of the inequality constraints of the Pascoletti-Serafini problem. Array of size (num_costfun, n+1), where num_costfun is the number of cost functions, and ‘n’ is the number of independent variables. The rows of the array contain the gradients of the inequality constraints.
Return type: numpy.ndarray
, shape (num_costfun, n+1) -
dfhandle (
-
oppy.multOpt.psm.
evalHess_InequConstr_PSM
(ddfhandle, xt, z, r_target) -
Evaluate gradient of the ineq. constr. of the Pascoletti-Serafini.
This method evaluates the gradients of the inequality constraints of the Pascoletti-Serafini problem at the current point xt = (x,t).
Parameters: -
ddfhandle (
list
ofcallable()
, length num_costfun) –The list containing the Hessians of the objective functions of the considered Pascoletti-Serafini problem. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
ddfhandle[i](x, *fargs) -> array, shape (n, n).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
xt (
numpy.ndarray
, shape (n+1,)) – Contains \((x,t)\). Array of real elements of size (n+1,), where ‘n’ is the number of independent variables. -
z (
numpy.ndarray
, shape (num_costfun,)) – Reference point of the Euclidean reference point function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions. -
r_target (
numpy.ndarray
, shape (num_costfun,)) – Target direction of the Pascoletti-Serafini problem. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: hess_val – Hessian of the inequality constraints of the Pascoletti-Serafini problem. Array of size (num_costfun, n+1, n+1), where num_costfun is the number of cost functions, and ‘n’ is the number of independent variables. The second and third dimension of the array contain the Hessian of the respective inequality constraint.
Return type: numpy.ndarray
, shape (num_costfun, n+1, n+1) -
ddfhandle (
oppy.multOpt.wsm module
Weighted-sum method.
This method is well-suited for quickly solving convex problems.
However, note that the approximation of the Pareto front might be non-uniform, since there might be regions, which are badly approximated and other regions, where the approximation points cluster (see Das and Dennis [DD97] in the references).
-
oppy.multOpt.wsm.
wsm
(fhandle, dfhandle, x, low, up, MOP, data, options=None, ddfhandle=None) -
The weighted-sum method.
This method solves a given subproblem (potentially the entire problem) of a given multiobjective optimization problem by the weighted-sum method. If ‘k’ is the number of cost functions of the current problem, then the set of convex combinations
\[\Delta_k = \{\alpha \in \mathbb{R}^k_\geq \mid \sum_{i=1}^k \alpha_i = 1\}\]is discretized by using a number of discretization points per dimensio, which is specified in the options. For all weights alpha in this discretized set of weights, the weighted-sum problem
\[\min_x \sum_{i=1}^k \alpha_i f_i(x)\]\[\text{low} \leq x \leq \text{up}\]is solved by using an optimziation method for constrained optimization, which is specified in the options.
Parameters: -
fhandle (
list
ofcallable()
, length k) –The list of length k containing the objective functions of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
dfhandle (
list
ofcallable()
, length k) –The list of length k containing the gradients of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry with \(0 \leq i \leq k-1\) we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
ddfhandle (
list
ofcallable()
, length k, optional) –The list of length k containing the Hessians of the entire multiobjective optimization problem. Note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Initial guess for solving the first weighted-sum problem in case of a scalar problem (k = 1 cost function). Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
low (
numpy.ndarray
, shape (n,)) – Lower bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
up (
numpy.ndarray
, shape (n,)) – Upper bound. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
MOP (
dict
) –Dictionary containing the solutions to the multiobjective optimization problem. It conatins keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved. Each of the values corresponding to such a key is a dictionary itself and contains the following keys:
-
- ”Results”
list
ofResults
, length num_sol - List of instances of the class
Results
with length num_sol, where num_sol is the number of Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) - Solution vector of the optimization problem.
- x
-
- iterations
int
- Number of iterations the algorithm needed.
- iterations
-
- res
list
- List with the norm of the residuals.
- res
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) - Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the multiobjective optimization problem.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) - Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”alpha”
numpy.ndarray
, shape (num_alpha, k_current) - Weight vectors for the current subproblem. Array of size (num_alpha, k_current), where ‘num_alpha’ is the number of weight vectors and k_current is the number of cost functions of the current subproblem.
- ”alpha”
-
- ”alpha_all”
numpy.ndarray
, shape (num_alpha, k) - Weight vectors for the current subproblem seen as weights of the entire MOP. Created by adding 0s to the weights from “alpha” in the respective dimensions. Array of size (num_alpha, k), where ‘num_alpha’ is the number of weight vectors and ‘k’ is the number of cost function of the entire multiobjective optimization problem.
- ”alpha_all”
-
-
data (
dict
) –Dictionary containing additional data of the multiobjective optimization problem. It contains keys given by the strings of all already solved subproblems, e.g., it contains the key “1,2”, if the subproblem with the cost functions \(f_1\) and \(f_2\) has already been solved.
-
- ”1,2”
dict
-
- Dictionary containing the key
-
-
- ”ynad”
numpy.ndarray
, shape (k,) - Nadir point of the subproblem “1,2” w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
- ”1,2”
Additionally, data contains the following keys:
-
- ”yid”
numpy.ndarray
, shape (k,) - Ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the nunmber of cost functions of the entire multiobjective optimization problem. The value of each entry is given by the minimal value of the corresponding cost function.
- ”yid”
-
- ”yidshift”
numpy.ndarray
, shape (k,) - Shifted ideal point of the multiobjective optimization problem. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem. The shifted ideal point is given by yid - d, where d is the specified shifting vector of the problem.
- ”yidshift”
-
- ”current_subproblem”
tuple
, length num_current_sp - Tuple containing the indices of the cost functions involved in the current subproblem. Tuple of length num_current_sp, where ‘num_current_sp’ is the number of cost functions in the current subproblem.
- ”current_subproblem”
-
-
options (
Options
, optional) –Options for the weighted-sum method method, represented as a
Options
object. The default is None. Possible/Relevant options for the weighted-sum method are:-
- mop_method
str
- Scalarization method, with which the multiobjective optimization problem is supposed to be solved. Possible choices are “WSM”, “ERPM” and “PSM”. Note that the current ‘wsm’-method is also called in case of the scalarization methods “ERPM” and “PSM”, in order to compute the minimizers of the individual cost functions in the first step.
- mop_method
-
- num_weights_per_dimension
int
- Number of weights per dimension used for the discretization of the set of weights
- num_weights_per_dimension
-
- WSM_optimeth
callable()
- Callable function that solves the weighted-sum problems, initialized with gradmethod.
- WSM_optimeth
-
- problem_type
str
- Indicates if the problem is convex or non-convex. The string can either contain “convex” or “non-convex”, initialized with “convex”.
- problem_type
-
-
ddfhandle –
The list of length k containing the Hessians of the objective functions. Only required if the optimizer is a second order method. Therefore, the default is None. Otherwise, note that not all of them might be considered, but only those who are part of the current subproblem specified in data. For the i-th entry of the list with \(0 \leq i \leq k-1\) we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and
args
is a tuple of the fixed parameters needed to completely specify the function.
Returns: -
MOP (
dict
) – Dictionary containing the solutions to the multiobjective optimization problem. In addition to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following keys:-
- ”Results”
list
, length num_sol -
List of instances of the class
oppy.results.results.Results
with length num_sol, where num_sol is the number of Pareto optimal points of the current subproblem. Represents the optimization results. Attributes of the object depend on the choice of theoptions.results
parameter. With default choice the object has the following attributes:-
- x
numpy.ndarray
, shape (n,) -
Solution vector of the optimization problem.
- x
-
- iterationsscalar
-
Number of iterations the algorithm needed.
-
- reslist
-
List with the norm of the residuals.
-
- ”Results”
-
- ”func_values”
numpy.ndarray
, shape (num_sol, k) -
Pareto optimal function values of the current subproblem. Array of size (num_sol, k), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘k’ is the number of total cost functions of the MOP.
- ”func_values”
-
- ”x”
numpy.ndarray
, shape (num_sol, n) -
Pareto optimal points of the current subproblem. Array of size (num_sol, n), where ‘num_sol’ is the number of Pareto optimal points of the current subproblem and ‘n’ is the number of independent variables.
- ”x”
-
- ”alpha”
numpy.ndarray
, shape (num_alpha, k_current) -
Weight vectors for the current subproblem. Array of size (num_alpha, k_current), where ‘num_alpha’ is the number of weight vectors and k_current is the number of cost functions of the current subproblem.
- ”alpha”
-
- ”alpha_all”
numpy.ndarray
, shape (num_alpha, k) -
Weight vectors for the current subproblem seen as weights of the entire MOP. Created by adding 0s to the weights from “alpha” in the respective dimensions. Array of size (num_alpha, k), where ‘num_alpha’ is the number of weight vectors and k is the number of cost function of the entire MOP.
- ”alpha_all”
-
-
data (
dict
) – Dictionary containing additional data of the multiobjective optimization problem. In comparison to the input, the key corresponding to the current subproblem has been added. The value of this key is a dictionary itself and contains the following key:-
- ”ynad”
numpy.ndarray
, shape (k,) -
Nadir point of the current subproblem w.r.t. all cost functions. Array of size (k,), where ‘k’ is the number of cost functions of the entire multiobjective optimization problem.
- ”ynad”
-
References
I. Das and J.E. Dennis. A closer Look at Drawbacks of Minimizing Weighted Sums of Objectives for Pareto Set Generation in Multcriteria Optimization Problems. Structural optimization, 14:63-69, 1997, see Das and Dennis [DD97]. M. Ehrgott. Multicriteria Optimization. Springer, Berlin, Heidelberg, Second Edition, 2005, see Ehrgott [Ehr05].
K.M. Miettinen. Nonlinear Multiobjective Optimization. Kluwer Academic Publishers, AH Dordrecht, First Edition, 1999, see Miettinen [Mie99].
L. Zadeh. Optimality and Non-Scalar-Valued Performance Criteria. IEEE Transactions on Automatic Control, 8(1):59–60, 1963, see Zadeh [Zad63].
-
fhandle (
-
oppy.multOpt.wsm.
create_weights
(dim, num_weights_per_dimension, val=1) -
Create the weights for the weighted-sum method.
This method creates the discretized weights for the weighted-sum method. It recursively calls itself to build the weights.
Parameters: Returns: alpha – Discretized weight vectors. Array of size (num_alpha, dim), where ‘num_alpha’ is the number of weight vectors and ‘dim’ is the dimension of the weight space.
Return type: numpy.ndarray
, shape (num_alpha, dim)
-
oppy.multOpt.wsm.
evalFunc_WSM
(fhandle, x, alpha) -
Evaluate the weighted-sum function.
This method evaluates the weighted-sum function given the point x and the weight alpha.
Parameters: -
fhandle (
list
ofcallable()
, length num_costfun) –The list containing the objective functions of the considered weighted-sum function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
fhandle[i](x, *fargs) -> float
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Current value of the variable. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
alpha (
numpy.ndarray
, shape (num_costfun,)) – Weight vector of the weighted-sum function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: func_val – Function value of the weighted-sum function.
Return type: -
fhandle (
-
oppy.multOpt.wsm.
evalGrad_WSM
(dfhandle, x, alpha) -
Evaluate the gradient of the weighted-sum function.
This method evaluates the gradient of the weighted-sum function given the point x and the weight alpha.
Parameters: -
dfhandle (
list
ofcallable()
, length num_costfun) –The list containing the gradients of the objective functions of the considered weighted-sum function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
dfhandle[i](x, *fargs) -> array_like, shape (n,).
where x is an 1-D array with shape (n,) and fargs is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Current value of the variable. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
alpha (
numpy.ndarray
, shape (num_costfun,)) – Weight vector of the weighted-sum function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: grad_val – Gradient of the weighted-sum function at the point x. Array of size (n,), where ‘n’ is the number of independent variables.
Return type: numpy.ndarray
, shape (n,) -
dfhandle (
-
oppy.multOpt.wsm.
evalHess_WSM
(ddfhandle, x, alpha) -
Evaluate the Hessian of the weighted-sum function.
This method evaluates the Hessian of the weighted-sum function given the point x and the weight alpha.
Parameters: -
ddfhandle (
list
ofcallable()
, length num_costfun) –The list containing the Hessians of the objective functions of the considered weighted-sum function. For the i-th entry of the list with \(0 \leq i \leq \text{num_costfun} - 1\), we have
ddfhandle[i](x, *fargs) -> array_like, shape (n,n).
where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.
-
x (
numpy.ndarray
, shape (n,)) – Current value of the variable. Array of real elements of size (n,), where ‘n’ is the number of independent variables. -
alpha (
numpy.ndarray
, shape (num_costfun,)) – Weight vector of the weighted-sum function. Array of size (num_costfun,), where ‘num_costfun’ is the number of cost functions.
Returns: hess_val – Hessian of the weighted-sum function at the point x. Array of size (n,n), where ‘n’ is the number of independent variables.
Return type: numpy.ndarray
, shape (n,n) -
ddfhandle (