Hypervolume

Hypervolume computation based on variant 3 of the algorithm in the paper: C. M. Fonseca, L. Paquete, and M. Lopez-Ibanez. An improved dimension-sweep algorithm for the hypervolume indicator. In IEEE Congress on Evolutionary Computation, pages 1157-1163, Vancouver, Canada, July 2006.

FIXE: The implementation is ugly, as the algorithm as directly been translated from python

class Object
trait Matchable
class Any

Type members

Classlikes

class MultiList(numberLists: Int)

A special data structure needed by FonsecaHyperVolume.

A special data structure needed by FonsecaHyperVolume.

It consists of several doubly linked lists that share common nodes. So, every node has multiple predecessors and successors, one in every list.

class Node(numberLists: Int, val cargo: Seq[Double])

Value members

Concrete methods

def apply(front: Vector[Vector[Double]], referencePoint: Vector[Double]): Double

Compute the hypervolume that is dominated by a non-dominated front. Before the HV computation, front and reference point are translated, so that the reference point is [0, ..., 0].

Compute the hypervolume that is dominated by a non-dominated front. Before the HV computation, front and reference point are translated, so that the reference point is [0, ..., 0].

Value Params
front

the parato front

referencePoint

point the reference point for computing the volume from this point to the front

Returns

the hypervolume

def contributions(front: Vector[Vector[Double]], referencePoint: Vector[Double]): Vector[Later[Double]]

Compute the hypervolume contribution for each front

Compute the hypervolume contribution for each front

def nadir(points: Vector[Vector[Double]]): Vector[Double]

Compute the nadir of a set of points

Compute the nadir of a set of points

Value Params
points

a set of points

Returns

the nadir point

def preProcess(front: Seq[Seq[Double]], referencePoint: Seq[Double]): MultiList
def sortByDimension(nodes: Seq[Node], i: Int): Seq[Node]