Exemplo n.º 1
0
        public override void Train(IForecastingDataSets datasets)
        {
            OnStartRunning(new ComponentRunEventArgs(datasets));
            NumberOfVariables = datasets.InputVectorLength;
            NumberOfSamples   = datasets.Length;
            EnvolutionStep    = 0;
            if (functionSet == null)
            {
                functionSet = new GPFunctionSet();
            }
            Initialize();
            GenerateFunction();
            double [] gpConstraints = GenerateConstants(mGPModelParameter.ConstantsIntervalFrom, mGPModelParameter.ConstantsIntervalTo, mGPModelParameter.ConstantsNumber);
            GenerateTerminals(datasets, gpConstraints);

            if (population == null)
            {
                EnvolutionStep = 1;
                population     = new GPPopulation(mGPModelParameter.PopulationSize, terminalSet, functionSet, parameters, mGPModelParameter.MultipleCore);
            }
            GPBestHromosome = population.bestChromosome;

            while (ProveEnvolution(EnvolutionStep, mGPModelParameter.EnvolveConditionValue, mGPModelParameter.EnvolveIndicator))
            {
                population.StartEvolution();
                OnRunningEpoch(new ComponentRunEpochEventArgs(EnvolutionStep));
                EnvolutionStep++;
            }

            int        indexOutput = terminalSet.NumConstants + terminalSet.NumVariables - 1;
            List <int> lst         = new List <int>();

            FunctionTree.ToListExpression(lst, GPBestHromosome.Root);
            double y = 0;

            datasets.ForecastedData = new double[datasets.Length][];
            for (int i = 0; i < terminalSet.RowCount; i++)
            {
                // evalue the function
                y = functionSet.Evaluate(lst, terminalSet, i);

                // check for correct numeric value
                if (double.IsNaN(y) || double.IsInfinity(y))
                {
                    y = 0;
                }
                datasets.ForecastedData[i]    = new double[1];
                datasets.ForecastedData[i][0] = y;
            }
            OnFinishRunning(new ComponentRunEventArgs(datasets)
            {
                State = functionSet.DecodeExpression(lst, terminalSet)
            });
        }
Exemplo n.º 2
0
 public override double Forecast(double[] inputVector)
 {
     if (GPBestHromosome != null)
     {
         List <int> lst = new List <int>();
         FunctionTree.ToListExpression(lst, GPBestHromosome.Root);
         return(functionSet.Evaluate(lst, inputVector));
     }
     else
     {
         return(0);
     }
 }