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; }
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; }
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]); }