-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hypervolume plus versus uncrowded hypervolume UHVI #14
Comments
It's in the appendix: ![]() |
I think they are the same when you compute them on a set of points (but @naceee should confirm). The improvement part is different though and I'm unsure what is the best course of action to clarify that. |
Hello. From my understanding, the "hypervolume plus" is what we do in COCO, i.e. normalization first wrt. ideal and nadir and then using the uncrowded hypervolume (improvement). In this sense, the two are not the same, I would say. |
Damn, now that you mention it, I'm not sure we are doing any normalization ... |
This would be a great feature to have, actually. If the ideal point is provided (in addition to the reference point, which is required for HV computation anyway), the results would be normalized ... |
I don't think that by default there should be any normalization. And maybe, there even cannot be any reasonable normalization if no ideal and nadir point are known (any normalization, "relative", to the so-far-seen archive will be void and difficult, if not even impossible to revert as soon as new points come in). |
Sounds doable. Making it more modular, it could also be a simple wrapping function class which can be called with an |
Getting back to the original issue, it seems the phrase
is not entirely correct and should be amended, right? |
I was not familiar with uncrowded hypervolume for a set only, but those two could be the same thing |
This is not the reference you were using, right? Could you give the pointer? Here, it's called In the above given reference we have
As Dimo pointed out, it is defined with a normalization which we don't have in the archive module. We should be as concise as possible. If it is correct (and |
I agree. Then also the indicator for constraint problems is wrong, as we don't do any normalization there either. |
Let me try to clarify. In the I_CMOP paper, where we extended I_HV+ to constrained cases, we renamed I_HV+ to I_MOP to make it easier to follow the various indicators we defined (we also had an I_SOP indicator, an I_CSOP indicator and proposed the I_CMOP indicator). To "go back to origins" I suggested we use the original name I_HV+ here instead. I missed the issue with the references - we should of course reference the I_HV+ paper for this indicator, not the I_CMOP paper (which I imagine we need to reference anyway for the I_CMOP indicator). However, note that I_MOP and I_HV+ are both exactly the same - they both use normalization, it just looks like I_MOP doesn't because this is not contained in the snippet. So, we still have the problem that the implementation here is not I_HV+ (nor I_MOP), but the non-normalized I_HV+. I would prefer we offer the normalized and non-normalized versions for the I_HV+ indicator (I recently needed the normalized one and was kind of a pain to have to do the normalization myself). In addition to being really useful, it would also be actually easier to explain.
That needs to be fixed, as without normalization it doesn't make much sense, I'm afraid. |
I tend to prefer to first fix and merge the current pull request and only then integrate new functionality, but in the end it's up to you. In either case, we need to explain what |
Do you agree with this characterization? @property
def hypervolume_plus(self):
"""uncrowded hypervolume of the entire archive.
This returns the smallest distance of any element to the empirical
pareto front times -1 if the hypervolume is zero and otherwise the
hypervolume w.r.t. the reference point. EDIT: when the HV is zero, the archive is empty anyways. |
Two comments/questions (otherwise, the docstring is fine besides changing the "p" in "pareto" to a capital "P"):
|
Is this even true though? Isn't the empirical Pareto front empty when the hypervolume is zero? |
The hypervolume is zero as long as no solution is found that (strictly) dominates the reference point. In this case, the UHVI is defined as the negative distance to the area/hypervolume below the reference point (when minimizing all objectives). This corresponds to the case where the reference point is the only point in the empirical Pareto front, if I am not mistaken. |
Yes, I know. My question was more basic because when the hypervolume is zero, you could have only the reference point in the archive or the archive could be empty. I'm not sure you can deduce which one it is ... EDIT: The reference point can never be part of the archive since it does not dominate the reference point. So when the hypervolume is zero, the archive is empty. |
We may be getting somewhere, 2nd attempt: @property
def hypervolume_plus(self):
"""uncrowded hypervolume of the entire archive.
`hypervolume_plus` equals to the hypervolume when the archive is
nonempty, otherwise it is the smallest Euclidean distance to the
hypervolume area (AKA reference domain) times -1 of any element
that was previously added but rejected because it did not dominate
the reference point.
Details: conceptually, the distance computation is based on the
nondominated archive as if it was not pruned by the reference
point. |
I was looking at the new readme file
https://github.com/CMA-ES/moarchiving/pull/13/files#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5
which starts with:
The text was updated successfully, but these errors were encountered: