Exemple #1
0
 public QuiescenceSearch(ArtemisEngine engine, GameState gameState, PositionEvaluator evaluator, MoveEvaluator moveEvaluator)
 {
     this.engine        = engine;
     this.gameState     = gameState;
     this.evaluator     = evaluator;
     this.moveEvaluator = moveEvaluator;
 }
 public void HasHelpText()
 {
     Assert.DoesNotThrow(() =>
     {
         var x = new MoveEvaluator("", Substitute.For <IUIMap>()).Help;
     });
 }
        public SearchThread(ArtemisEngine engine, ThreadMaster master, GameState gameState, TranspositionTable transpositionTable, ConcurrentDictionary <ulong, bool> searchedNodes, IEngineConfig config)
        {
            this.master    = master;
            this.gameState = gameState;
            EvaluationConfig evConfig = new EvaluationConfig();

            evaluator     = new PositionEvaluator(gameState, evConfig);
            moveEvaluator = new MoveEvaluator(evConfig);
            quietSearch   = new QuiescenceSearch(engine, gameState, evaluator, moveEvaluator);
            pvSearch      = new PVSearch(engine, gameState, transpositionTable, killerMoves, evaluator, moveEvaluator, quietSearch, searchedNodes, config);
            this.config   = config;
        }
Exemple #4
0
 public PVSearch(ArtemisEngine engine, GameState gameState, TranspositionTable transpositionTable, KillerMoves killerMoves, PositionEvaluator evaluator, MoveEvaluator moveEvaluator,
                 QuiescenceSearch quietSearch, ConcurrentDictionary <ulong, bool> searchedNodes, IEngineConfig config)
 {
     this.engine             = engine;
     this.gameState          = gameState;
     this.transpositionTable = transpositionTable;
     this.killerMoves        = killerMoves;
     this.evaluator          = evaluator;
     this.moveEvaluator      = moveEvaluator;
     this.quietSearch        = quietSearch;
     this.searchedNodes      = searchedNodes;
     this.config             = config;
 }
Exemple #5
0
        public SimpleAi(IGameController controller, IBoardAnalyzer analyzer, IRandomProvider random, IMillRuleEvaluator millRuleEvaluator) : base(controller, analyzer, millRuleEvaluator)
        {
            using (Stream resourceStream = GetType().Assembly.GetManifestResourceStream(GetType().Namespace + ".Board.json")) {
                using (StreamReader sr = new StreamReader(resourceStream)) {
                    string content = sr.ReadToEnd();
                    this._protoBoard = JsonConvert.DeserializeObject <ProtoBoard>(content);
                }
            }

            this._random           = random;
            this._setMoveEvaluator = new MoveEvaluator(this.BoardAnalyzer, random, this._protoBoard);
            this._setMoveEvaluator.Initialize();
        }
Exemple #6
0
    private Move computeBestMove(Side side, Chessboard chessboard, int presentCumulativeScore)
    {
        currentDepth++;

        // First, get the set of available moves
        List <Move> moves = new List <Move>();
        Move        bestMoveForIteration = new Move(null, null);

        bool isPlayingSide = chessboard.CurrentMovingSide() == side;

        foreach (AbstractPiece piece in chessboard.getActivePieces())
        {
            if (piece.side == chessboard.CurrentMovingSide())
            {
                foreach (Position movePosition in piece.GetSafeMovesForCurrentPosition().GetPositions())
                {
                    Move newMove = MoveEvaluator.EvaluateMove(new Move(piece, movePosition), isPlayingSide);
                    moves = InsertionSortMove(moves, newMove);
                }
            }
        }

        if (moves.Count > 0)
        {
            bestMoveForIteration = moves.ToArray()[0];
            if (currentDepth < maxAllowableDepth)
            {
                foreach (Move move in moves)
                {
                    Chessboard copyChessboard = Chessboard.MakeCopyOfChessboard(chessboard);
                    copyChessboard.MoveTo(copyChessboard.GetPieceAtPosition(move.getPiece().GetCurrentPosition()), move.getPosition());
                    copyChessboard.ChangeMovingSide();
                    int followUpScore = computeBestMove(side, copyChessboard, presentCumulativeScore + move.getScore()).getScore();

                    if (move.getScore() + followUpScore > bestMoveForIteration.getScore())
                    {
                        bestMoveForIteration = move;
                    }
                }
            }
        }

        currentDepth--;

        return(bestMoveForIteration);
    }