public virtual ISPTreeNode AddChild(IPuzzleMove move, IPuzzleState state)
        {
            untriedMoves.Remove(move);
            SP_UCTTreeNode n = new SP_UCTTreeNode(move, this, state, rnd, const_C, const_D, true);

            childNodes.Add(n);
            return(n);
        }
 public SP_UCTTreeNode(IPuzzleMove move, SP_UCTTreeNode parent, IPuzzleState state, MersenneTwister rng, double const_C = 1, double const_D = 20000, bool generateUntriedMoves = true)
 {
     this.move     = move;
     this.parent   = parent;
     this.const_C  = const_C;
     this.const_D  = const_D;
     rnd           = rng;
     childNodes    = new List <SP_UCTTreeNode>();
     wins          = 0;
     visits        = 0;
     squaredReward = 0;
     topScore      = double.MinValue;
     if (generateUntriedMoves)
     {
         untriedMoves = state.GetMoves();
     }
 }