public MCTS(POGame poGame, Dictionary <string, List <Card> > decksDict, Dictionary <string, double> probsDict,
             int turnDepth = 1, int timeBudget = 2000, SelectionStrategy selectionStrategy = SelectionStrategy.UCT,
             StateRateStrategy stateRateStrategy = StateRateStrategy.Greedy, double explorationConstant = 0.5)
 {
     TurnDepth            = turnDepth;
     COMPUTATIONAL_BUDGET = timeBudget;
     EXPLORATION_CONSTANT = explorationConstant;
     Selection            = selectionStrategy;
     StateRate            = stateRateStrategy;
     player       = poGame.CurrentPlayer;
     Root         = new Node(poGame, player.PlayerId);
     InitialState = poGame;
     InitializeNode(Root, InitialState);
     DecksDict         = decksDict;
     ProbabilitiesDict = probsDict;
     ActionEstimator   = new ActionEstimator(DecksDict, ProbabilitiesDict);
     //poGame.CurrentPlayer.Options().ForEach(task => Console.Write(task + " "));
     //Console.WriteLine();
 }
 public static Func <POGame, Controller, int> GetStateRateStrategy(StateRateStrategy strategy)
 {
     return(StateRateStrategiesDict.GetValueOrDefault(strategy, StateRateStrategiesDict[StateRateStrategy.Greedy]));
 }