bool AlphaBetaSearch::getNextMoveVec(IDType playerToMove, MoveArray & moves, const size_t & moveNumber, const TTLookupValue & TTval, const size_t & depth, std::vector<Action> & moveVec) const { if (_params.maxChildren() && (moveNumber >= _params.maxChildren())) { return false; } // if this move is beyond the first, check to see if we are only using a single move if (moveNumber == 1) { // if we are player modeling, we should have only generated the first move if (_params.playerModel(playerToMove) != PlayerModels::None) { // so return false return false; } // if there is a transposition table entry for this state if (TTval.found()) { // if there was a valid move found with higher depth, just do that one const AlphaBetaMove & abMove = getAlphaBetaMove(TTval, playerToMove); if ((TTval.entry()->getDepth() >= depth) && abMove.isValid()) { // so return false return false; } } } const Array<std::vector<Action>, Constants::Max_Ordered_Moves> & orderedMoves(_orderedMoves[depth]); moveVec.clear(); // if this move should be from the ordered list, return it from the list if (moveNumber < orderedMoves.size()) { moveVec.assign(orderedMoves[moveNumber].begin(), orderedMoves[moveNumber].end()); return true; } // otherwise return the next move vector starting from the beginning else { if (moves.hasMoreMoves()) { moves.getNextMoveVec(moveVec); return true; } else { return false; } } }
bool UCTSearch::getNextMove(IDType playerToMove, MoveArray & moves, const size_t & moveNumber, std::vector<UnitAction> & actionVec) { if (moveNumber > _params.maxChildren()) { return false; } // if this move is beyond the first, check to see if we are only using a single move if (moveNumber == 1) { // if we are player modeling, we should have only generated the first move if (_params.playerModel(playerToMove) != PlayerModels::None) { // so return false return false; } } actionVec.clear(); // if this move should be from the ordered list, return it from the list if (moveNumber < _orderedMoves.size()) { actionVec.assign(_orderedMoves[moveNumber].begin(), _orderedMoves[moveNumber].end()); return true; } // otherwise return the next move vector starting from the beginning else { if (moves.hasMoreMoves()) { moves.getNextMoveVec(actionVec); return true; } else { return false; } } }