jMetal / jMetalPy

A framework for single/multi-objective optimization with metaheuristics
https://jmetal.github.io/jMetalPy/index.html
MIT License
497 stars 150 forks source link

How to compute reference point for hypervolume computation? #127

Closed mishras9 closed 2 years ago

mishras9 commented 2 years ago

@ajnebro I am using jMetalPy for solving a multiobjective optimization problem.

For my problem, I have obtained a reference front by increasing the number of functional evaluations iteratively and then considering the non-dominated ones. If the decision variables are bounded, should reference point be the maximum of each objective function value in reference front or any front?

if i use reference point as maximum of objective function values in a approximation front obtained on solving an algorithm, then my hypervolume increases with increase in number of functional evaluations which is correct; however, my epsilon indicator increases with increase in number of functional evaluations which is again incorrect.

So, basically I have a reference Pareto front for my problem (which is fixed) and I run an algorithm to obtain an approximated front. Now, I want to compute its hypervolume. How can I compute the reference point?

from jmetal.core.quality_indicator import GenerationalDistance,InvertedGenerationalDistance,EpsilonIndicator,HyperVolume

GD = GenerationalDistance(reference_front)
print('GD:', GD.compute(approximation_front))

IGD = InvertedGenerationalDistance(reference_front)
print('IGD:', IGD.compute(approximation_front))

Epsilon = EpsilonIndicator(reference_front)
print('Epsilon:', Epsilon.compute(approximation_front))

HV = HyperVolume(reference_point)
print('Hypervolume:', HV.compute(approximation_front))