示例#1
0
 public void InitTournament(PlayerType _p1Type, PlayerType _p2Type, int _p1SearchDepth, int _p2SearchDepth, string _p1nnFileName, string _p2nnFileName, int _gameCount)
 {
     model      = new CheckersMain();
     player1    = _p1Type;
     player2    = _p2Type;
     training   = false;
     tournament = true;
     model.InitTournament(_p1Type, _p2Type, _p1SearchDepth, _p2SearchDepth, _p1nnFileName, _p2nnFileName, _gameCount);
     model.gameActive = true;
 }
示例#2
0
 public void InitTrainingGame(double _alpha, double _lambda, int _maxIterations, string _nnFileName, int _searchDepth)
 {
     model      = new CheckersMain();
     player1    = PlayerType.AI;
     player2    = PlayerType.AI;
     training   = true;
     tournament = false;
     model.InitTraining(_alpha, _lambda, _maxIterations, _nnFileName, _searchDepth);
     model.gameActive = true;
 }
示例#3
0
文件: AI.cs 项目: Csmidget/DraughtsAI
    public float GetBoardRating(Board board, int _activePlayer, out FFData data)
    {
        //pieceAdvantage        : 0;
        //pieceDisadvantage     : 1;
        //pieceTake             : 2;
        //pieceThreat           : 3;
        //doubleDiagonal        : 4;
        //enemyDoubleDiagonal   : 5;
        //backRowBridge         : 6;
        //centreControl         : 7;
        //enemyCentreControl    : 8;
        //kingCentreControl     : 9;
        //enemyKingCentreControl: 10;
        //stoneCount            : 11;
        //enemystoneCount       : 12;
        //kingCount             : 13;
        //enemyKingCount        : 14;

        double[] dataArray = new double[15];

        for (int i = 0; i < dataArray.Length; i++)
        {
            dataArray[i] = 0;
        }

        if (_activePlayer == 1)
        {
            if ((board.state[0] == TileState.BlackKing || board.state[0] == TileState.BlackPiece) && (board.state[2] == TileState.BlackKing || board.state[2] == TileState.BlackPiece))
            {
                dataArray[6] = 1;
            }

            for (int i = 0; i < centreTiles.Length; i++)
            {
                TileState state = board.state[centreTiles[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[7]++; dataArray[11]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[8]++; dataArray[12]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[9]++; dataArray[13]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[10]++; dataArray[14]++;
                }
            }

            for (int i = 0; i < doubleDiagonals.Length; i++)
            {
                TileState state = board.state[doubleDiagonals[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[4]++; dataArray[11]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[5]++; dataArray[12]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[4]++; dataArray[13]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[5]++; dataArray[14]++;
                }
            }

            for (int i = 0; i < centreDoubleDiagonals.Length; i++)
            {
                TileState state = board.state[centreDoubleDiagonals[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[7]++; dataArray[4]++; dataArray[11]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[8]++; dataArray[5]++; dataArray[12]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[9]++; dataArray[4]++; dataArray[13]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[10]++; dataArray[5]++; dataArray[14]++;
                }
            }

            for (int i = 0; i < otherTiles.Length; i++)
            {
                TileState state = board.state[otherTiles[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[11]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[12]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[13]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[14]++;
                }
            }
        }
        else
        {
            if ((board.state[34] == TileState.WhiteKing || board.state[34] == TileState.WhitePiece) && (board.state[32] == TileState.WhiteKing || board.state[32] == TileState.WhitePiece))
            {
                dataArray[6] = 1;
            }

            for (int i = 0; i < centreTiles.Length; i++)
            {
                TileState state = board.state[centreTiles[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[8]++; dataArray[12]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[7]++; dataArray[11]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[10]++; dataArray[14]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[9]++; dataArray[13]++;
                }
            }

            for (int i = 0; i < doubleDiagonals.Length; i++)
            {
                TileState state = board.state[doubleDiagonals[i]];
                if (state == 0)
                {
                    continue;
                }

                if (state == TileState.BlackPiece)
                {
                    dataArray[5]++; dataArray[12]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[4]++; dataArray[11]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[5]++; dataArray[14]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[4]++; dataArray[13]++;
                }
            }

            for (int i = 0; i < centreDoubleDiagonals.Length; i++)
            {
                TileState state = board.state[centreDoubleDiagonals[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[8]++; dataArray[5]++; dataArray[12]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[7]++; dataArray[4]++; dataArray[11]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[10]++; dataArray[5]++; dataArray[14]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[9]++; dataArray[4]++; dataArray[13]++;
                }
            }

            for (int i = 0; i < otherTiles.Length; i++)
            {
                TileState state = board.state[otherTiles[i]];
                if (state == 0)
                {
                    continue;
                }
                if (state == TileState.BlackPiece)
                {
                    dataArray[12]++;
                }
                else if (state == TileState.WhitePiece)
                {
                    dataArray[11]++;
                }
                else if (state == TileState.BlackKing)
                {
                    dataArray[14]++;
                }
                else if (state == TileState.WhiteKing)
                {
                    dataArray[13]++;
                }
            }
        }

        dataArray[0] = dataArray[11] + dataArray[13] - dataArray[12] - dataArray[14];
        dataArray[1] = -dataArray[0];

        if (dataArray[0] < 0)
        {
            dataArray[0] = 0;
        }
        if (dataArray[1] < 0)
        {
            dataArray[1] = 0;
        }

        dataArray[2] = board.GetCapThreats(_activePlayer);
        dataArray[3] = board.GetCapThreats(3 - _activePlayer);

        data = net.FeedForward(dataArray);

        int winner;

        if (CheckersMain.CheckForWinner(board, _activePlayer, out winner))
        {
            if (winner == _activePlayer)
            {
                return(1);
            }
            else if (winner == 3 - _activePlayer)
            {
                return(0);
            }
        }

        return((float)data.a3[0, 0]);
    }