LatNet Builder Manual  2.0.1-11
Software Package for Constructing Highly Uniform Point Sets
LatticeTester::Normalizer< RedDbl > Class Template Reference

Classes which inherit from this base class are used in implementing bounds on the length of the shortest nonzero vector in a lattice [3] . More...

#include <Normalizer.h>

Inherited by LatticeTester::NormaBestLat< RedDbl >, LatticeTester::NormaLaminated< RedDbl >, LatticeTester::NormaMinkL1< RedDbl >, LatticeTester::NormaMinkowski< RedDbl >, LatticeTester::NormaPalpha< Int, RedDbl >, and LatticeTester::NormaRogers< RedDbl >.

Public Member Functions

 Normalizer (RedDbl &logDensity, int t, std::string Name, NormType norm=L2NORM, double beta=1)
 Constructor for the bounds. More...
 
 Normalizer (int t, std::string Name, NormType norm=L2NORM, double beta=1)
 Constructor only used by the NormaPalpha class. More...
 
virtual ~Normalizer ()
 Destructor.
 
virtual void init (RedDbl &logDensity, double beta)
 Initializes the bounds on the length of the shortest vector. More...
 
std::string ToString () const
 Returns this object as a string.
 
NormType getNorm () const
 Returns the norm associated with this object.
 
void setLogDensity (RedDbl logDensity)
 Sets the log-density associated with this object to logDensity.
 
RedDbl getLogDensity () const
 Returns the logDensity associated with this object.
 
void setNorm (NormType norm)
 Sets the norm associated with this object to norm.
 
int getDim () const
 Returns the maximal dimension for this object.
 
double getPreComputedBound (int j) const
 Returns the bound on the length of the shortest nonzero vector in dimension \(j\) as computed in Normalizer::init.
 
double getBound (int j) const
 Calculates and returns the bound on the length of the shortest nonzero vector in dimension \(j\).
 
virtual double getGamma (int j) const
 Returns the value of the lattice constant \(\gamma_j\) in dimension \(j\). More...
 

Static Public Attributes

static const int MAX_DIM = 48
 

Protected Attributes

std::string m_name
 Name of the normalizer.
 
NormType m_norm
 Norm associated with this object.
 
RedDbl m_logDensity
 log of the density, ie log of the number of points of the lattice per unit of volume.
 
int m_maxDim
 Only elements 1 to m_maxDim (inclusive) of arrays are defined.
 
double m_beta
 Beta factor.
 
double * m_bounds
 Contains the bounds on the length of the shortest nonzero vector in the lattice in each dimension.
 

Detailed Description

template<typename RedDbl>
class LatticeTester::Normalizer< RedDbl >

Classes which inherit from this base class are used in implementing bounds on the length of the shortest nonzero vector in a lattice [3] .

These bounds are used to normalize the length of the shortest vectors. Tight lower bounds are available for all dimensions for many important cases. In most cases, the \({\mathcal{L}}_2\) norm is used to compute the length of vectors.

For some figures of merit, no useful bounds are known to normalize the length of the shortest vector. In these cases, this base class will be used as normalizer since it simply sets all normalization constants to 1. This is necessary because the tests compare the normalized values of the merit when searching for good lattices.

Constructor & Destructor Documentation

◆ Normalizer() [1/2]

template<typename RedDbl >
LatticeTester::Normalizer< RedDbl >::Normalizer ( RedDbl &  logDensity,
int  t,
std::string  Name,
NormType  norm = L2NORM,
double  beta = 1 
)

Constructor for the bounds.

Deals with lattices having \(n\) points per unit volume, in all dimensions \(\le t\). Name is the name of the Normalizer. The bias factor beta \(= \beta\) gives more weight to some of the dimensions: taking \(\beta< 1\) inflates the figure of merit by \((1/\beta)^t\), thus weakening the requirements for large \(t\) in a worst-case figure of merit. One normally uses \(\beta= 1\). Note that the log value of the density is stored (instead of the density itself) so it is easier to manipulate really large values of density.

Remarks
Richard: Je crois que ce facteur beta devrait disparaître car des poids beaucoup plus généraux sont maintenant implantés dans les classes *Weights.

References LatticeTester::Normalizer< RedDbl >::m_bounds.

◆ Normalizer() [2/2]

template<typename RedDbl >
LatticeTester::Normalizer< RedDbl >::Normalizer ( int  t,
std::string  Name,
NormType  norm = L2NORM,
double  beta = 1 
)

Constructor only used by the NormaPalpha class.

It doesn't take any log density argument. This only works for rank1 lattices, having m points per unit of volume (m being a prime number), normalized with NormaPalpha.

References LatticeTester::Normalizer< RedDbl >::m_bounds.

Member Function Documentation

◆ getGamma()

template<typename RedDbl >
double LatticeTester::Normalizer< RedDbl >::getGamma ( int  j) const
virtual

Returns the value of the lattice constant \(\gamma_j\) in dimension \(j\).

For this base class, always returns 1.

Reimplemented in LatticeTester::NormaMinkL1< RedDbl >, LatticeTester::NormaRogers< RedDbl >, LatticeTester::NormaBestLat< RedDbl >, LatticeTester::NormaLaminated< RedDbl >, and LatticeTester::NormaMinkowski< RedDbl >.

◆ init()

template<typename RedDbl >
void LatticeTester::Normalizer< RedDbl >::init ( RedDbl &  logDensity,
double  beta 
)
virtual

Initializes the bounds on the length of the shortest vector.

The lattices have \(Density\) points per unit volume and the bias factor is beta for all dimensions \(j\le\) maxDim.

Referenced by LatticeTester::NormaBestLat< RedDbl >::NormaBestLat(), LatticeTester::NormaLaminated< RedDbl >::NormaLaminated(), LatticeTester::NormaMinkL1< RedDbl >::NormaMinkL1(), LatticeTester::NormaMinkowski< RedDbl >::NormaMinkowski(), and LatticeTester::NormaRogers< RedDbl >::NormaRogers().


The documentation for this class was generated from the following file: