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) }); }
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); } }