public HeuristicNode <T> ChildNode(IInformedProblem <T> problem, IAction <T> action, IHeustisticFunction <T> heurisctic)
        {
            T   state         = problem.Transition(this.State, action);
            int stepCost      = problem.StepCost(this.State, action);
            int totalCost     = this.PathCost + stepCost;
            int heuristicCost = totalCost + heurisctic.Calculate(problem, state);

            return(new HeuristicNode <T>(state, action, this, totalCost, heuristicCost));
        }