generate_ndset: Generate a random set of mutually nondominated points

View source: R/generate.R

generate_ndsetR Documentation

Generate a random set of mutually nondominated points

Description

Generate a random set of n mutually nondominated points of dimension d with the shape defined by method.

When integer = FALSE (the default), the points are generated within the hypercube (0,1)^d and can be scaled to another range using normalise(). Otherwise, points are scaled to a non-negative integer range that keeps the points mutually nondominated.

Usage

generate_ndset(n, d, method, seed = NULL, integer = FALSE)

Arguments

n

integer(1)
Number of rows in the output.

d

integer(1)
Number of columns in the output.

method

character(1)
Method used to generate the random nondominated set. See Details below for more information.

seed

integer(1)
Integer seed for random number generation. If NULL, a random seed is generated.

integer

logical(1)
If TRUE, return integer-valued points.

Details

The available methods are:

  • "simplex", "linear", or "L": Uniformly samples points on the standard simplex.

  • "concave-sphere", "sphere", or "C": Uniformly samples points on the positive orthant of the unit hypersphere (concave for minimisation).

  • "convex-sphere" or "X": Equivalent to 1 - generate_ndset(..., method="concave-sphere"), which is convex for minimisation.

  • "convex-simplex": Equivalent to generate_ndset(..., method="concave-sphere")^4, which is convex for minimisation. Such a set cannot be obtained by any affine transformation of a subset of the hyper-sphere.

Method "simplex" uniformly samples points on the standard (d-1)-simplex defined by \{x \in R_+^d : \sum_i x_i = 1\}. This shape of nondominated set is also called "linear" in the literature \citepLacKlaFon2017box. Each point \vec{z} \in (0,1)^d \subset \mathbb{R}^d is generated by sampling d independent and identically distributed values (x_1,x_2, \dots, x_d) from the exponential distribution, then dividing each value by the L1-norm of the vector, z_i = x_i / \sum_{i=1}^d x_i \citepRubMel1998simulation. Values sampled from the exponential distribution are guaranteed to be positive.

Sampling from either the standard normal distribution \citepGueFonPaq2021hv or the uniform distribution \citepLacKlaFon2017box does not produce a uniform distribution when projected into the simplex.

Method "concave-sphere" uniformly samples points on the positive orthant of the hyper-sphere, which is concave when all objectives are minimised. Each point \vec{z} \in (0,1)^d \subset \mathbb{R}^d is generated by sampling d independent and identically distributed values \vec{x}=(x_1,x_2, \dots, x_d) from the standard normal distribution, then dividing each value by the l2-norm of the vector, z_i = \frac{|x_i|}{\|\vec{x}\|_2} \citepMuller1959sphere. The absolute value in the numerator ensures that points are sampled on the positive orthant of the hyper-sphere. Sampling from the uniform distribution \citepLacKlaFon2017box does not result in a uniform sampling when projected onto the surface of the hyper-sphere.

Method "convex-sphere" is equivalent to 1 - generate_ndset(..., method="concave-sphere"), which is convex for minimisation problems. It corresponds to translating points from the negative orthant of the hyper-sphere to the positive orthant.

Method "convex-simplex" is equivalent to generate_ndset(..., method="concave-sphere")^4, which is convex for minimisation problems. The corresponding surface is equivalent to a simplex curved towards the origin.

Value

A numeric matrix of size ⁠n × d⁠ containing nondominated points.

References

\insertAllCited

Examples

generate_ndset(5, 3, "simplex", seed = 42)
generate_ndset(5, 3, "simplex", seed = 42, integer = TRUE)
generate_ndset(4, 2, "sphere", seed = 123)
generate_ndset(3, 5, "convex-sphere", seed = 123)
generate_ndset(4, 4, "convex-simplex", seed = 123)


moocore documentation built on Jan. 11, 2026, 9:06 a.m.