public string StartSimulations(Board board, int numberOfSimulations) { Random random = new Random(); List <MonteCarloUpgradeMove> moves = new List <MonteCarloUpgradeMove>(); MonteCarloUpgradeMove move = new MonteCarloUpgradeMove(); AddMoves(moves, board); int amountOfTestedMoves = moves.Count; TestMoves(numberOfSimulations, board, moves, amountOfTestedMoves); setResult(moves); moves.Sort((s2, s1) => s1.result.CompareTo(s2.result)); int bestOf = 3; if (moves.Count < 3) { bestOf = moves.Count; } TestMoves(numberOfSimulations, board, moves, bestOf); setResult(moves); for (int i = bestOf; i < moves.Count; i++) { moves[i].result = 0; } moves.Sort((s2, s1) => s1.result.CompareTo(s2.result)); Console.WriteLine("Ruch: " + moves[0].MoveCode + " Liczba prob: " + moves[0].trys + " łączna liczba punktów: " + moves[0].rate + " Ocena " + moves[0].result); // writeToFile(bestOf, moves); return(moves[0].MoveCode); }
public void AddMoves(List <MonteCarloUpgradeMove> moves, Board board) { foreach (MonteCarloUpgradeMove.PossibleMoves code in Enum.GetValues(typeof(MonteCarloUpgradeMove.PossibleMoves))) { MonteCarloUpgradeMove move = new MonteCarloUpgradeMove(); string moveCode = code.ToString(); move = new MonteCarloUpgradeMove(moveCode); if (Move.IsMovePossible(move, this, board.CoinsOnBoard, board.MinesOnBoard)) { moves.Add(new MonteCarloUpgradeMove(moveCode)); } } DeleteNone(moves); }