parent
7b566b1e71
commit
c1957e7bee
|
@ -57,6 +57,8 @@
|
|||
#define DEPTH_ADJUST (0)
|
||||
//#define FIX_DEPTH (24)
|
||||
|
||||
//#define NULL_MOVE
|
||||
|
||||
//#define FIRST_MOVE_STAR_PREFERRED
|
||||
|
||||
//#define TIME_STAT
|
||||
|
|
|
@ -172,6 +172,13 @@ int StateInfo::generateMoves(Stack<move_t, MOVE_COUNT> &moves)
|
|||
return moves.size();
|
||||
}
|
||||
|
||||
int StateInfo::generateNullMove(Stack<move_t, MOVE_COUNT> &moves)
|
||||
{
|
||||
moves.clear();
|
||||
moves.push_back((move_t)SQ_0);
|
||||
return moves.size();
|
||||
}
|
||||
|
||||
void MoveList::create()
|
||||
{
|
||||
// Note: 未严格按 direction_t 中枚举的顺序从左到右排列
|
||||
|
|
|
@ -799,6 +799,20 @@ value_t AIAlgorithm::search(depth_t depth, value_t alpha, value_t beta, Node *no
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef NULL_MOVE
|
||||
// 空着向前裁剪 (WIP)
|
||||
doNullMove();
|
||||
st->generateNullMove(moves);
|
||||
st->generateChildren(moves, this, node);
|
||||
value = -search(depth - 1 - 2, -beta, -beta + 1, node->children[0]);
|
||||
undoNullMove();
|
||||
|
||||
if (value >= beta) {
|
||||
node->value = beta;
|
||||
return beta;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef TRANSPOSITION_TABLE_ENABLE
|
||||
// 记录确切的哈希值
|
||||
TT::recordHash(node->value,
|
||||
|
@ -963,6 +977,18 @@ void AIAlgorithm::undoMove()
|
|||
positionStack.pop();
|
||||
}
|
||||
|
||||
void AIAlgorithm::doNullMove()
|
||||
{
|
||||
// 执行空着
|
||||
st->doNullMove();
|
||||
}
|
||||
|
||||
void AIAlgorithm::undoNullMove()
|
||||
{
|
||||
// 执行空着
|
||||
st->undoNullMove();
|
||||
}
|
||||
|
||||
#ifdef ALPHABETA_AI
|
||||
const char* AIAlgorithm::bestMove()
|
||||
{
|
||||
|
|
|
@ -190,6 +190,9 @@ public:
|
|||
// 撤销着法
|
||||
void undoMove();
|
||||
|
||||
void doNullMove();
|
||||
void undoNullMove();
|
||||
|
||||
#ifdef TRANSPOSITION_TABLE_ENABLE
|
||||
// 清空哈希表
|
||||
void clearTT();
|
||||
|
|
|
@ -1051,6 +1051,18 @@ void StateInfo::changeSideToMove()
|
|||
setSideToMove(Player::getOpponent(position->sideToMove));
|
||||
}
|
||||
|
||||
bool StateInfo::doNullMove()
|
||||
{
|
||||
changeSideToMove();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool StateInfo::undoNullMove()
|
||||
{
|
||||
changeSideToMove();
|
||||
return true;
|
||||
}
|
||||
|
||||
void StateInfo::setTips()
|
||||
{
|
||||
string winnerStr, t;
|
||||
|
|
|
@ -249,6 +249,10 @@ public:
|
|||
|
||||
// 着法生成
|
||||
int generateMoves(Stack<move_t, MOVE_COUNT> &moves);
|
||||
int generateNullMove(Stack<move_t, MOVE_COUNT> &moves);
|
||||
|
||||
bool doNullMove();
|
||||
bool undoNullMove();
|
||||
|
||||
// 判断胜负
|
||||
player_t getWinner() const;
|
||||
|
|
Loading…
Reference in New Issue