Read the literature and try to understand how the algorithm works:
[x] for 2D
[x] for 3D (kind of)
[ ] for 4D
2. MOArchive3d
Create a class structure, similar to the one of Niko, and connect it to already implemented functions, or write some, that should be fairly easy once familiar with it:
[x] initializing the object for a given list and reference point
[x] calculating the hypervolume for the initial points contained in the object
[x] method to check if a given point is dominating the reference point (in_domain)
[x] add infos for the points in the list (infos)
[x] check if pareto front dominates a new solution (dominates, dominators)
[x] tests, to check if everythink is OK, most of them can probably be reused from Mila's tests, others should be fairly simple I think
[x] #3
[x] removing an element (remove)
[x] calculating contributing_hypervolume and hypervolume_improvement (I guess something similar is already implemented?)
[x] calculating hypervolume for current state of the object (after insertions and deletions)
[x] distance_to_pareto_front - no clue (yet) how to do this (efficiently)
[x] distance_to_hypervolume_area - this one should be a bit easier
[x] copy
[x] tests: for adding and removing should be pretty straightforward, others could be hard - especially calculating distance to pareto front
[x] save kink points when calculated them once?
[ ] improve the implementation of some functions to be faster: I think remove can be done faster, if there is a good use case for doing it?
3. MOArchive4d
[x] initializing the object for a given list and reference point
[x] hypervolume calculation
[x] in_domain
[x] infos
[x] dominates
[x] dominators
[x] add
[x] add_list
[x] remove
[x] contributing_hypervolume
[x] hypervolume_improvement
[x] distance_to_pareto_front
[x] distance_to_hypervolume_area
[x] copy
[ ] more efficient implementation for add, remove and some other functions
[x] tests for distance to pareto front
4. Fix some potential issues about compatibility with Nikos current code
[x] In Nikos' in_domain function, f_pair can be a pair of values, but it can also be an index, which is not implemented here (same for contributing_hypervolume)
[x] in 2D implementation reference point is not needed imediatelly at creation, can the same be implemented in 3 and 4D case? (I think yes, maybe setting it to infinity by default or something like that?)
[x] Niko's code (can) use fractions, maybe that could be implemented here as well
5. Additional stuff
[x] Implement the hypervolume plus indicator
[ ] Implement indicator for constrained problems
6. Make it nice
[x] Tea said something about factory method
[x] Parent class for 3D and 4D implementation
[x] I think it would be nice to remove the hv_plus.py file and move needed functions to other files
A rough plan to get started:
1. Literature
Read the literature and try to understand how the algorithm works:
2. MOArchive3d
Create a class structure, similar to the one of Niko, and connect it to already implemented functions, or write some, that should be fairly easy once familiar with it:
hypervolume
for the initial points contained in the objectin_domain
)infos
)dominates
,dominators
)remove
)contributing_hypervolume
andhypervolume_improvement
(I guess something similar is already implemented?)distance_to_pareto_front
- no clue (yet) how to do this (efficiently)distance_to_hypervolume_area
- this one should be a bit easierremove
can be done faster, if there is a good use case for doing it?3. MOArchive4d
hypervolume
calculationin_domain
infos
dominates
dominators
add
add_list
remove
contributing_hypervolume
hypervolume_improvement
distance_to_pareto_front
distance_to_hypervolume_area
copy
add
,remove
and some other functions4. Fix some potential issues about compatibility with Nikos current code
in_domain
function,f_pair
can be a pair of values, but it can also be an index, which is not implemented here (same forcontributing_hypervolume
)5. Additional stuff
6. Make it nice
hv_plus.py
file and move needed functions to other files