Exemplo n.º 1
0
        /// <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
                });
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
 public void SetTerminalSet(GPTerminalSet gpTSet)
 {
     Population.SetTerminalSet(gpTSet);
 }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="tSet"></param>
 internal void SetTerminalSet(GPTerminalSet tSet)
 {
     Globals.gpterminals = tSet;
 }
Exemplo n.º 10
0
        /// <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);
            }
        }