cvt, a C++ code which creates Centroidal Voronoi Tessellation (CVT) datasets.
The generation of a CVT dataset is of necessity more complicated than for a quasirandom sequence. An iteration is involved, so there must be an initial assignment for the generators, and then a number of iterations. Moreover, in each iteration, estimates must be made of the volume and location of the Voronoi cells. This is typically done by Monte Carlo sampling. The accuracy of the resulting CVT depends in part on the number of sampling points and the number of iterations taken.
The library is mostly used to generate a dataset of points uniformly distributed in the unit hypersquare. However, a user may be interested in computations with other geometries or point densities. To do this, the user needs to replace the USER routine in the CVT library, and then specify the appropriate values init=3 and sample=3.
The USER routine returns a set of sample points from the region of interest. The default USER routine samples points uniformly from the unit circle. But other geometries are easy to set up. Changing the point density simply requires weighting the sampling in the region.
The computer code and data files described and made available on this web page are distributed under the MIT license
cvt is available in a C++ version and a FORTRAN90 version and a MATLAB version.
BOX_BEHNKEN, a C++ code which computes a Box-Behnken design, that is, a set of arguments to sample the behavior of a function of multiple parameters;
CCVT_BOX, a C++ code which computes a CVT with some points forced to lie on the boundary.
CVT, a dataset directory which contains files describing a number of CVT's.
FAURE, a C++ code which computes Faure sequences.
HALTON, a C++ code which computes Halton sequences.
HAMMERSLEY, a C++ code which computes Hammersley sequences.
IHS, a C++ code which computes improved Latin Hypercube datasets.
LATIN_CENTER, a C++ code which computes Latin square data choosing the center value.
LATIN_EDGE, a C++ code which computes Latin square data choosing the edge value.
LATIN_RANDOM, a C++ code which computes Latin square data choosing a random value in the square.
NIEDERREITER2, a C++ code which computes Niederreiter sequences with base 2.
NORMAL, a C++ code which computes elements of a sequence of pseudorandom normally distributed values.
SOBOL, a C++ code which computes Sobol sequences.
UNIFORM, a C++ code which computes uniform random values.
VAN_DER_CORPUT, a C++ code which computes van der Corput sequences.