The performance assessment of algorithms for multiobjective optimization problems is far from being a trivial issue. Recent results indicate that unary performance measures, i.e. performance measures which assign a single value to each non-dominated point set, are inherently limited in their inferential power. Despite these limitations, the hypervolume indicator (also known as Lebesgue measure or S metric) is still considered to possess some reasonable properties, having also been proposed as a guidance criterion for accepting solutions in Multiobjective Evolutionary Algorithms. Therefore, the computational time taken for computing the hypervolume indicator is a crucial factor for the performance of such algorithms.
This program implements a recursive, dimension-sweep algorithm for computing the hypervolume indicator of the quality of a set of n non-dominated points in d dimensions. It also incorporates a recent result for the three-dimensional special case. The proposed algorithm achieves O(nd-2 log n) time and linear space complexity in the worst-case, but experimental results show that the pruning techniques used may reduce the time complexity even further. The program assumes that all objectives must be minimized. Maximization objectives may be multiplied by -1 to convert them to minimization.
In GNU/Linux, the program can be compiled from source by invoking
The command-line tool can now be compiled in Windows with the GCC version provided by MINGW.
We recommend that you compile it specifically for your architecture.
Depending on the compiler and version of the compiler you use there are
different ways to achieve this. For recent GCC versions,
will pick a suitable
-march argument based on the processor of
the build machine. This can be overridden by passing an
make. Similarly if you use the Intel C compiler, it
will pick a sensible default architecture (
-xHOST) for you. If
you want to override this, pass
to build for an Intel Core2 you would use
if you are using the GCC compiler and
for the Intel C compiler. Generally
make will try to pick
good flags for you, but if you need to, you can override them by passing a
OPT_CFLAGS argument to make. To build an unoptimized version of
hv you could run:
make OPT_CFLAGS="-O0 -g"
Finally, if you do not want to see the command line of each compiler
The program reads a set of points provided by filenames in the command line:
or standard input:
cat data | hv
In the input files, each point is given in a separate line, and each
coordinate within a line is separated by whitespace. An empty line denotes a
separate set. (See also the
--union option). The program
assumes that all objectives must be minimized. Maximization objectives may
be multiplied by -1 to convert them to minimization.
A reference point can be given by the option
hv -r "10 10 10" data
If no reference point is given, the default is the maximum value for each coordinate from the union of all input points.
For the remainder options available, check the output of
This program is free software (software libre); you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version. As a particular exception, the files
hv.h may also be redistributed and/or
modified under the terms of the GNU Lesser General Public License (LGPL) as
published by the Free Software Foundation; either version 3 of the License,
or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
IMPORTANT NOTE: Please be aware that the fact that this program is released as Free Software does not excuse you from scientific propriety, which obligates you to give appropriate credit! If you write a scientific paper describing research that made substantive use of this program, it is your obligation as a scientist to (a) mention the fashion in which this software was used in the Methods section; (b) mention the algorithm in the References section. The appropriate citation is:
Carlos M. Fonseca,
Luís Paquete, and Manuel López-Ibáñez.
dimension - sweep algorithm for the hypervolume indicator. In
Proceedings of the 2006 Congress on Evolutionary Computation
(CEC'06), pages 1157–1163. IEEE Press, Piscataway, NJ, July
Moreover, as a personal note, I would appreciate it if you would email
manuel.lopez-ibanezulb.ac.be with citations of papers referencing this work so
I can mention them to my funding agent and tenure committee.
hv.hare now also licensed under the GNU LGPL, which allows calling to the function that computes the hypervolume (See section "Embedding" in the README file) from other software that uses a license incompatible with the GNU GPL.
hv.c, See section "Embedding" in the README file for how to use it in your applications).
--unionemulates the previous behaviour.
-u, --union treat all input sets within a FILE as a single set. -s, --suffix=STRING Create an output file for each input file by appending this suffix. This is ignored when reading from stdin. If missing, output is sent to stdout.
Hypervolume_MEX.c). Use `
make mex` to compile it.
fpli_hv()and it is compiled into a separate library
fpli_hv.athat can be linked with other C/C++ applications. See section "Embedding" in the README file. Thanks to Olaf Mersmann for this suggestion.
make march=pentium VARIANT=4
hv [OPTIONS] [FILE...]
Calculate the hypervolume of the union set of all input FILEs. With no FILE, or when FILE is -, read standard input. Options: -h, --help print this summary and exit. --version print version number and exit. -v, --verbose print some information (time, input points, output points, etc). Default is --quiet. -q, --quiet print just the hypervolume (as opposed to --verbose). -r, --reference=POINT use POINT as reference point. POINT must be within quotes, e.g., "10 10 10". If no reference point is given, it is taken as the maximum value for each coordinate from the input points. -1, --stop-on-1D stop recursion in dimension 1 -2, --stop-on-2D stop recursion in dimension 2 -3, --stop-on-3D stop recursion in dimension 3 (default)