AbstractZobristDistribution

Declared in astar/Distribution.h; the same class on the site of Doxygen.

template<AbstractFeatureDomain D>
class AbstractZobristDistribution

HDA*[Z,Afeature]: Zobrist hashing of the abstract features (AZHDA*).

\( AZ( s ) = R[ A( x_0 ) ] \oplus \cdots \oplus R[ A( x_n ) ] \), where \( A \) is the feature projection of the Domain [see Jinnai and Fukunaga, JAIR 2017, equation (2)]. A successor that changes no abstract feature keeps the owner of its parent, which cuts the communication, while the Zobrist hashing of all the abstract features keeps the load balanced. The table is laid out by raw feature (Algorithm 3 of the paper), so that hashing costs exactly as much as with ZobristDistribution.

Public Functions

inline explicit AbstractZobristDistribution(const D &domain, std::uint64_t seed = 1)

constructor, drawing the table of the abstract features from the seed

inline std::uint64_t hash(const state_t<D> &s) const

the abstract Zobrist hash of s

inline std::uint32_t key(const state_t<D> &s) const

the key of s, the high 32 bits of its hash

inline unsigned owner(const state_t<D> &s, unsigned p) const

the owner of s among p workers, that of its key

inline std::uint32_t key(std::uint32_t k, const state_t<D> &s, const state_t<D> &t) const

the key of t, a successor of s whose key is k

Equal to key( t ), but it reads the entries of the features that the move changes only [see IncrementalFeatureDomain].

Public Static Functions

static inline std::string name(void)

the name in the notation of Jinnai and Fukunaga