基本的な hash table. [詳細]
#include <simpleHashTable.h>
Public メソッド | |
SimpleHashTable (size_t capacity=100000, int minimum_record_limit=0, int verbose=0) | |
~SimpleHashTable () | |
void | setMinimumRecordLimit (int new_limit) |
SimpleHashRecord * | allocate (const HashKey &key, int limit) |
表を探し,登録されてなければ新規エントリを登録する | |
int | minimumRecordLimit () const |
void | setVerbose (int verbose=1) |
int | verboseLevel () const |
bool | isVerbose () const |
bool | isConsistent () const |
int | divSize () const |
lock contention を下げるために分割した大きさ | |
void | getPV (const HashKey &, MoveVector &, size_t *quiesce_start=0) const |
Private 変数 | |
int | minimum_limit |
int | verbose |
基本的な hash table.
とりあえず g++ (SGI STL) の hash_map を使って実装
機能:
ある程度基本的な機能を実装したら,自分で実装しなおすほうがbetter。 この hash_map では GCを実装することは困難と思われるため
find, allocate で ポインタを返すため,要素を追加しても,既存の要素の アドレスが変化しないデータ構造を用いる必要がある.
simpleHashTable.h の 32 行で定義されています。
osl::search::SimpleHashTable::SimpleHashTable | ( | size_t | capacity = 100000 , |
|
int | minimum_record_limit = 0 , |
|||
int | verbose = 0 | |||
) | [explicit] |
capacity | 表に保持する最大局面 | |
minimumRecordLimit | recordUpperBound, recordLowerBound において limit がこれ未満のものは登録要求を無視する. 末端の静止探索も記録する場合はマイナスにする |
simpleHashTable.cc の 15 行で定義されています。
osl::search::SimpleHashTable::~SimpleHashTable | ( | ) |
osl::search::SimpleHashRecord * osl::search::SimpleHashTable::allocate | ( | const HashKey & | key, | |
int | limit | |||
) |
表を探し,登録されてなければ新規エントリを登録する
TableFull |
simpleHashTable.cc の 54 行で定義されています。
参照先 osl::container::GeneralSimpleHashTable< SimpleHashRecord >::find(), と minimumRecordLimit().
参照元 osl::search::AlphaBeta2Tree< EvalT >::alphaBetaSearchAfterMove(), osl::search::AlphaBeta2< EvalT >::alphaBetaSearchRoot(), osl::search::AlphaBeta2< EvalT >::findCheckmateInPV(), osl::search::AlphaBeta2< EvalT >::makeMove(), osl::search::qallocate(), qsearch(), osl::search::AlphaBeta3::searchRoot(), osl::game_playing::HistoryToTable::setPV(), と osl::search::AlphaBeta2< EvalT >::setRoot().
int osl::search::SimpleHashTable::divSize | ( | ) | const |
lock contention を下げるために分割した大きさ
osl::container::GeneralSimpleHashTable< SimpleHashRecord >を再定義しています。
simpleHashTable.cc の 74 行で定義されています。
void osl::search::SimpleHashTable::getPV | ( | const HashKey & | root, | |
MoveVector & | out, | |||
size_t * | quiesce_start = 0 | |||
) | const |
simpleHashTable.cc の 81 行で定義されています。
参照先 osl::search::QuiescenceRecord::bestMove(), osl::search::SimpleHashRecord::bestMove(), osl::MoveLogProb::getMove(), osl::Move::isInvalid(), osl::hash::HashKey::newHashWithMove(), osl::search::SimpleHashRecord::qrecord, osl::hash::GeneralHashKey< BoardKeyBase >::size(), と osl::container::GeneralSimpleHashTable< SimpleHashRecord >::table.
bool osl::search::SimpleHashTable::isConsistent | ( | ) | const |
simpleHashTable.cc の 68 行で定義されています。
bool osl::search::SimpleHashTable::isVerbose | ( | ) | const [inline] |
osl::container::GeneralSimpleHashTable< SimpleHashRecord >を再定義しています。
simpleHashTable.h の 79 行で定義されています。
参照先 verboseLevel().
参照元 osl::search::AlphaBeta2Tree< EvalT >::addMultiPV(), osl::search::AlphaBeta2< EvalT >::alphaBetaSearchRoot(), osl::search::AlphaBeta2< EvalT >::computeBestMoveIteratively(), osl::search::AlphaBeta2< EvalT >::findCheckmateInPV(), osl::game_playing::HistoryToTable::setPV(), と osl::search::AlphaBeta2Tree< EvalT >::updateRootPV().
int osl::search::SimpleHashTable::minimumRecordLimit | ( | ) | const |
void osl::search::SimpleHashTable::setMinimumRecordLimit | ( | int | new_limit | ) |
new_limit | recordUpperBound, recordLowerBound において limit がこれ未満のものは登録要求を無視する |
simpleHashTable.cc の 41 行で定義されています。
参照先 minimum_limit.
void osl::search::SimpleHashTable::setVerbose | ( | int | verbose = 1 |
) |
simpleHashTable.cc の 35 行で定義されています。
参照先 verbose.
int osl::search::SimpleHashTable::verboseLevel | ( | ) | const |
int osl::search::SimpleHashTable::minimum_limit [private] |
simpleHashTable.h の 35 行で定義されています。
int osl::search::SimpleHashTable::verbose [private] |
simpleHashTable.h の 36 行で定義されています。
参照元 setVerbose(), verboseLevel(), と ~SimpleHashTable().