/// <summary> /// Before we start GP prepare all neccessery information /// </summary> /// <param name="termSet"></param> /// <param name="funSet"></param> /// <param name="gpParams"></param> public void PrepareAlgorithm(GPTerminalSet termSet, GPFunctionSet funSet, GPParameters gpParams = null) { m_IterationCounter = 0; if (Population == null) { Population = new CHPopulation(); } Population.InitPopulation(termSet, funSet, gpParams); Population.CalculatePopulation(); IsAlgorthmPrepared = true; StopIteration = false; //calculate model and prediction GPChromosome ch = Population.bestChromosome as GPChromosome; double[][] model = CalculateModel(ch); double[][] prediction = CalculateModel(ch, false); //Report the evolution has been started if (ReportEvolution != null) { ReportEvolution(this, new ProgressIndicatorEventArgs() { ReportType = ProgramState.Started, AverageFitness = Population.fitnessAvg, BestChromosome = Population.bestChromosome, CurrentIteration = 0, LearnOutput = model, PredicOutput = prediction }); } }
private void GenerateTerminals(IForecastingDataSets datasets, double[] gpConstants) { if (terminalSet == null) { terminalSet = new GPTerminalSet(); } if (gpConstants == null) { gpConstants = GenerateConstants(mGPModelParameter.ConstantsIntervalFrom, mGPModelParameter.ConstantsIntervalTo, mGPModelParameter.ConstantsNumber); } //Kada znamo broj konstanti i podatke o experimenti sada mozemo popuniti podatke terminalSet.NumConstants = mGPModelParameter.ConstantsNumber; terminalSet.NumVariables = NumberOfVariables; terminalSet.RowCount = NumberOfSamples; terminalSet.TrainingData = new double[terminalSet.RowCount][]; int numOfVariables = terminalSet.NumVariables + terminalSet.NumConstants + 1 /*Output Value of experiment*/; for (int i = 0; i < terminalSet.RowCount; i++) { terminalSet.TrainingData[i] = new double[numOfVariables]; for (int j = 0; j < numOfVariables; j++) { if (j < terminalSet.NumVariables) { terminalSet.TrainingData[i][j] = datasets.InputData[i][j]; } else if (j >= terminalSet.NumVariables && j < numOfVariables - 1) { terminalSet.TrainingData[i][j] = gpConstants[j - terminalSet.NumVariables]; } else { terminalSet.TrainingData[i][j] = datasets.OutputData[i][0]; } } } terminalSet.CalculateStat(); TerminateExperiments(); }
/// <summary> /// /// </summary> /// <param name="gpTrainigData"></param> /// <param name="consts"></param> /// <param name="gpTestingData"></param> /// <returns></returns> public static GPTerminalSet GenerateTRANSPORTTerminalSet(double[][] gpTrainigData) { GPTerminalSet terminalSet = new GPTerminalSet(); //First define the initial properties of the terminalset terminalSet.NumConstants = 0; terminalSet.NumVariables = gpTrainigData[0].Length - 1; terminalSet.RowCount = gpTrainigData.Length - 1; //Generate training data terminalSet.TrainingData = new double[terminalSet.RowCount][]; // terminalSet.Destinations = new int[terminalSet.NumVariables]; terminalSet.Sources = new int[terminalSet.RowCount]; for (int i = 0; i < gpTrainigData.Length; i++) { if (i == 0) { for (int j = 1; j < gpTrainigData[i].Length; j++) { terminalSet.Destinations[j - 1] = (int)gpTrainigData[i][j]; } } else { terminalSet.TrainingData[i - 1] = new double[terminalSet.NumVariables]; for (int j = 0; j < gpTrainigData[i].Length; j++) { if (j == 0) { terminalSet.Sources[i - 1] = (int)gpTrainigData[i][j]; } else { terminalSet.TrainingData[i - 1][j - 1] = gpTrainigData[i][j]; } } } } return(terminalSet); }
/// <summary> /// /// </summary> /// <param name="gpTrainigData"></param> /// <param name="consts"></param> /// <param name="gpTestingData"></param> /// <returns></returns> public static GPTerminalSet GenerateALOCTerminalSet(double[][] gridLocation) { GPTerminalSet terminalSet = new GPTerminalSet(); //First define the initial properties of the terminalset terminalSet.NumConstants = 0; terminalSet.NumVariables = gridLocation[0].Length; terminalSet.RowCount = gridLocation.Length; //Generate training data terminalSet.TrainingData = new double[terminalSet.RowCount][]; for (int j = 0; j < terminalSet.RowCount; j++) { terminalSet.TrainingData[j] = new double[terminalSet.NumVariables]; for (int i = 0; i < terminalSet.NumVariables; i++) { terminalSet.TrainingData[j][i] = gridLocation[j][i]; } } return(terminalSet); }
/// <summary> /// /// </summary> /// <param name="gpTrainigData"></param> /// <param name="consts"></param> /// <param name="gpTestingData"></param> /// <returns></returns> public static GPTerminalSet GenerateTSPTerminalSet(double[][] tspMapCity) { GPTerminalSet terminalSet = new GPTerminalSet(); //First define the initial properties of the terminalset terminalSet.NumConstants = 0; terminalSet.NumVariables = tspMapCity.Length; terminalSet.RowCount = tspMapCity.Length; //Generate training data terminalSet.TrainingData = new double[terminalSet.RowCount][]; for (int j = 0; j < terminalSet.RowCount; j++) { terminalSet.TrainingData[j] = new double[2]; for (int i = 0; i < 2; i++) { terminalSet.TrainingData[j][i] = tspMapCity[j][i]; } } return(terminalSet); }
/// <summary> /// Initialisation of chromosomes in Genetic programming /// </summary> /// <param name="size">Size of the chromosomes, default value is 1000</param> /// <param name="initMethod">Initializastion method, default HalfandHalf</param> public void InitPopulation( GPTerminalSet termSet, GPFunctionSet funSet, GPParameters gpParams = null ) { if (gpParams == null) { gpParameters = new GPParameters(); } else { gpParameters = gpParams; } fitnessFunction = gpParameters.GPFitness; if (funSet == null) { throw new Exception("FunctionSet is not defined, and cannot be null!"); } { functionSet = funSet; Globals.functions = functionSet; } if (funSet == null) { throw new Exception("TerminalSet is not defined, and cannot be null!"); } Globals.terminals = termSet; GeneratePopulation(gpParameters.popSize); }
public void SetTerminalSet(GPTerminalSet gpTSet) { Population.SetTerminalSet(gpTSet); }
/// <summary> /// /// </summary> /// <param name="gpTrainigData"></param> /// <param name="consts"></param> /// <param name="gpTestingData"></param> /// <returns></returns> public static GPTerminalSet GenerateTerminalSet(double[][] gpTrainigData, double[] consts, double[][] gpTestingData) { int numConst = 0; if (consts != null) { numConst = consts.Length; } if (gpTrainigData == null) { throw new Exception("Training data cannot be null!"); } GPTerminalSet terminalSet = new GPTerminalSet(); //First define the initial properties of the terminalset terminalSet.NumConstants = numConst; terminalSet.NumVariables = (gpTrainigData[0].Length - 1); terminalSet.RowCount = gpTrainigData.Length; int numOfVariables = terminalSet.NumVariables + terminalSet.NumConstants + 1 /*Output Value of experiment*/; //Generate training data terminalSet.TrainingData = new double[terminalSet.RowCount][]; for (int j = 0; j < terminalSet.RowCount; j++) { terminalSet.TrainingData[j] = new double[numOfVariables]; for (int i = 0; i < numOfVariables; i++) { if (i < terminalSet.NumVariables)//input variable { terminalSet.TrainingData[j][i] = gpTrainigData[j][i]; } else if (i >= terminalSet.NumVariables && i < numOfVariables - 1)//constants { terminalSet.TrainingData[j][i] = consts[i - terminalSet.NumVariables]; } else { terminalSet.TrainingData[j][i] = gpTrainigData[j][i - terminalSet.NumConstants];//output variable } } } // // terminalSet.CalculateStat(); //Generate training data if exist if (gpTestingData != null) { //Generate training data terminalSet.TestingData = new double[gpTestingData.Length][]; for (int j = 0; j < gpTestingData.Length; j++) { terminalSet.TestingData[j] = new double[numOfVariables]; for (int i = 0; i < numOfVariables; i++) { if (i < terminalSet.NumVariables)//input variable { terminalSet.TestingData[j][i] = gpTestingData[j][i]; } else if (i >= terminalSet.NumVariables && i < numOfVariables - 1)//constants { terminalSet.TestingData[j][i] = consts[i - terminalSet.NumVariables]; } else { terminalSet.TestingData[j][i] = gpTestingData[j][i - terminalSet.NumConstants]; } } } } return(terminalSet); }
/// <summary> /// /// </summary> /// <param name="tSet"></param> internal void SetTerminalSet(GPTerminalSet tSet) { Globals.gpterminals = tSet; }
/// <summary> /// Initialisation of chromosomes in Genetic programming /// </summary> /// <param name="size">Size of the chromosomes, default value is 1000</param> /// <param name="initMethod">Initializastion method, default HalfandHalf</param> public void InitPopulation( GPTerminalSet termSet, IFunctionSet funSet, GPParameters gpParams = null ) { if (gpParams == null) { Globals.gpparameters = new GPParameters(); } else { Globals.gpparameters = gpParams; } if (Globals.gpparameters.algorithmType == Algorithm.GA) { if (Globals.gpparameters.chromosomeKind == GAChromosome.Continue) { GANumChromosome.functionSet = funSet; } else if (Globals.gpparameters.chromosomeKind == GAChromosome.TSP) { GAVChromosome.functionSet = funSet; } else if (Globals.gpparameters.chromosomeKind == GAChromosome.ALOC) { GAVChromosome.functionSet = funSet; } else if (Globals.gpparameters.chromosomeKind == GAChromosome.TP) { GAMChromosome.terminalSet = termSet; GAMChromosome.functionSet = funSet; } else { GABinChromosome.functionSet = funSet; } } else { GPChromosome.MaxOperationLevel = Globals.gpparameters.maxOperationLevel; } //init default fitness type if (Globals.gpparameters.GPFitness == null) { Globals.gpparameters.GPFitness = new RMSEFitness(); } fitnessFunction = Globals.gpparameters.GPFitness; if (funSet == null) { throw new Exception("FunctionSet is not defined, and cannot be null!"); } else { functionSet = funSet; Globals.functions = functionSet; } if (termSet == null) { throw new Exception("TerminalSet is not defined, and cannot be null!"); } else { Globals.gpterminals = termSet; } var siz = Globals.gpparameters.popSize - chromosomes.Count; if (siz > 0) { GeneratePopulation(siz); } }