- Hypervolume Indicator: https://www.mathworks.com/matlabcentral/fileexchange/19651-hypervolume-indicator
- Multiobjective Optimization: https://www.mathworks.com/help/gads/multiobjective-optimization.html
How to calculate Hypervolume Indicator for Negative Objective Values on Pareto Front
19 views (last 30 days)
Show older comments
Good day.
I'm currently working on a two-objective multiobjective algorithm. I need assistance in calculating the hypervolume indicator between the estimated Pareto front (P) and a reference point (R). Despite checking certain Matlab files, such as
- Yi Cao (2023). Hypervolume Indicator (https://www.mathworks.com/matlabcentral/fileexchange/19651-hypervolume-indicator), MATLAB Central File Exchange. Retrieved December 15, 2023.
- Bahman Ahmadi (2023). C-index, spacing, and hypervolume (https://www.mathworks.com/matlabcentral/fileexchange/125980-c-index-spacing-and-hypervolume), MATLAB Central File Exchange. Retrieved December 15, 2023.
it seems they only support cases where the objective function values on the Pareto front are strictly positive.
When I tested with benchmark functions like Kursawe (which has negative objectives function values on both sides), the hypervolume results appeared incorrect. Are there any solutions or code available for calculating the hypervolume when objective function values are negative?"
Thank you in advance.
0 Comments
Answers (1)
Gowtham
on 20 Dec 2023
Edited: Gowtham
on 20 Dec 2023
Hello,
I understand that you are working on a two-objective multi-objective optimization algorithm and facing issue when the objective function values on the Pareto front are negative.
I tried to reproduce the issue at my end and found out a workaround to resolve it. This can be achieved by normalization and shifting the Pareto front approximation (P) and the reference point (R).
To resolve this issue, I suggest you add the following code snippet after input and output validation at line 27 in the function definition of ‘hypervolume’ (Hypervolume Indicator) from File Exchange.
error(nargoutchk(0,1,nargout));
% ---
lower_bound = min(P);
P = P - lower_bound;
r = r - lower_bound;
% ---
P=P*diag(1./r);
Please find the attachment of the updated function definition of 'hypervolume'.
For a sample demonstration of the above process, kindly refer to the following code snippet:
% number of points in P
num_points = 3;
% dimension of the points in P
dim = 3;
% generate random points in P (negative if possible)
P = (rand(num_points, dim) - 0.5) * 10;
% generate a reference point R that is
% greater than the max of P in each dimension
r = max(P, [], 1) + rand(1, dim) * 2;
% number of random points to estimate
N = 5;
% call the hypervolume function with the generated values
v = hypervolume(P, r, N);
disp(v);
Kindly refer to the following MATLAB Documentation(s) for further information on how to use the mentioned functions:
Hope this helps.
Best Regards,
Gowtham
3 Comments
Gowtham
on 20 Dec 2023
In this case, N represents the number of random points to generate within the bounded hyper-cuboid defined by the reference point r. These random points are used to estimate the hypervolume that is dominated by the Pareto front approximation P.
The selection of an appropriate value for N may be influenced by various factors, including the dimensionality (d) and the desired level of accuracy. While the default value for N is set to 1000, it is worth noting that this parameter can be adjusted iteratively to refine the performance and precision of the results.
See Also
Categories
Find more on Multiobjective Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!