public void Initialize()
        {
            Console.WriteLine("Initializing GeneticTensorFlowLearning by Evolution.");

            Console.WriteLine("Function arguments and expected result: arg1,arg2=expected result.");
            Console.WriteLine("Sample1: 1,2,3=6");
            Console.WriteLine("Sample2: 2,3,4=24");
            Console.WriteLine("When finish, type ENTER to start the GA.");

            m_inputs = new List <InstinctualLearningInput>();
            do
            {
                var parts = Console.ReadLine().Split('=');

                if (parts.Length != 2)
                {
                    Console.WriteLine("Max number of operations?");
                    m_maxOperations = Convert.ToInt32(Console.ReadLine());

                    break;
                }

                var arguments = parts[0].Split(',');

                var input = new InstinctualLearningInput(
                    arguments.Select(a => Convert.ToDouble(a)).ToList(),
                    Convert.ToDouble(parts[1]));

                m_inputs.Add(input);
            }while (true);

            m_fitness = new InstinctualLearningFitness <Environment>(m_inputs.ToArray());
        }
        /// <summary>
        /// Gets the function result.
        /// </summary>
        /// <returns>The function result.</returns>
        /// <param name="function">The function.</param>
        /// <param name="input">The arguments values and expected results of the function.</param>
        public double GetFunctionResult(string function, InstinctualLearningInput input)
        {
            //var func = Parser<DoubleEvaluator>.Parse(function);

            //var ctx = new VariableContext<DoubleEvaluator>();
            //var vars = "ABCDEFGH";
            //for(int i = 0;i<input.Arguments.Count;i++)
            //{
            //    ctx.AddVariable(vars.Substring(i, 1), input.Arguments[i]);
            //}

            //var result = func.Eval(ctx);
            var expression = new NCalc.Expression(function);

            for (int i = 0; i < m_parameterNames.Length; i++)
            {
                expression.Parameters.Add(m_parameterNames[i], input.Arguments[i]);
            }

            var result = expression.Evaluate();

            return((double)result);

            //return result.Result;
            // return 0.0;
        }