# moocore C library

## 0.19.2

 * nondominated_kung.h (maxima_rec_dim): Avoid crash with size <= KUNG_SMALL_THRESHOLD.
 * The maximum number of dimensions supported by most functions is now raised
   to 255, except for hypervolume and hypervolume approximation, where it
   remains 31.


## 0.19.1

 * nondominated_kung.h: Fix potential undefined behavior.

## 0.19

 * `fpli_hv()` calculates 4D contributions as the base case, which is
   significantly faster for more than four dimensions. (Andreia P. Guerreiro)
 * nondominated_kung.h: New.
 * hvapprox.c (hv_approx_rphi_fang_wang_plus): New function.
 * Define `boolvec` as the type used for Boolean arrays to get zero-copy
   conversion between C and Python/R and for helping auto-vectorization.  Use
   it to replace most `bool *` arguments.
 * `is_nondominated()` and `pareto_rank()` do not return pointers to newly
   allocated memory to help zero-copy communication with Python/R.
 * Add `--no-check` option to `epsilon` and `igd` executables.
 * `pareto_rank()` is now O(n^2 log^{d-2} n) in >=4 dimensions, which is faster than the naive O(n^3).


## 0.18

 * `pareto_rank()` is now O(k * n log n) in 3D, which is faster than the naive O(n^3).
 * HV3D+ is slightly faster with repeated coordinates (#41).
 * Switch argument order of `fpli_hv()`, `hv_contributions()`, `IGD()`,
   `IGD_plus()`, `avg_Hausdorff_dist()`, `epsilon_additive()`, `epsilon_mult()`,
   `find_weakly_dominated_point()`, `is_nondominated()`, `pareto_rank()`,
   `agree_normalise()`, `hv_approx_hua_wang()`, `hv_approx_normal()`
   to pass first the number of rows then the number of columns.
 * Reorganize igd.h so that helper functions are inlined and more loops are vectorized.
 * Change the type of `minmax` from `signed char *` to `int *` to help vectorization.
 * Fix bug in `epsilon_mult()` with mixed min-max objectives.

## 0.17.0

 * `hv_contributions()` gains a parameter `ignore_dominated`.  The 3D case uses the HVC3D algorithm implemented in `hvc3d()`.
 * In the output of `hv --contributions`, dominated points do not affect the
   contribution of nondominated points.
 * `find_dominated_point_()` and `find_nondominated_set_()` are significantly faster due to several code optimizations.
 * `pareto_rank()` returns 0-based ranks.
 * `find_dominated_point_()` and `find_nondominated_set_()` are now stable in 2D and 3D with `!keep_weakly`, that is, only the first of duplicated points is marked as nondominated.

## 0.16.6

 * main-hvapprox.c, hv_approx.c: New.
 * The license of files copyrighted by Manuel López-Ibáñez, Carlos M. Fonseca, Luís Paquete, Andreia P. Guerreiro and Leonardo C.T. Bezerra is now MPL v2.0.
 * Add option `--contributions` to `hv` to compute exclusive hypervolume
   contributions.

## 0.16.5

 * The base case of the recursive HV algorithm is HV4D+.
 * Remove the `--shift` option of `hv` executable.

## 0.16.4

 * Implementation of HV4D+ algorithm.

## 0.16.3

 * Implementation of HV3D+ algorithm.

## 0.16.2

 * Faster reading of datasets.
