|
| | AbstractZobristDistribution (const D &domain, std::uint64_t seed=1) |
| | constructor, drawing the table of the abstract features from the seed
|
| std::uint64_t | hash (const state_t< D > &s) const |
| | the abstract Zobrist hash of s
|
| std::uint32_t | key (const state_t< D > &s) const |
| | the key of s, the high 32 bits of its hash
|
| unsigned | owner (const state_t< D > &s, unsigned p) const |
| | the owner of s among p workers, that of its key
|
| 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
|
template<AbstractFeatureDomain D>
class PBeFS_di_unipi_it::AbstractZobristDistribution< D >
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.