예제 #1
0
        public void CanGenerateGenoType()
        {
            var randomGenerator = new UniformRandomGenerator();

            var possibleFunctions = new List <IGenoTypeNode>
            {
                new SquareRoot(),
                new Multiplication(),
                new Plus(),
                new Minus()
            };

            var possibleTerminals = new List <IGenoTypeNode>
            {
                new FeatureTerminal("a"),
                new FeatureTerminal("b"),
                new FeatureTerminal("c"),
                new FeatureTerminal("d")
            };

            var eaGeneExpressionParameters = new EaGeneExpressionParameters(4, possibleFunctions, possibleTerminals);
            var parameterTerminalFactory   = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator);
            var genoTypeFactory            = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory);

            var genoType = genoTypeFactory.GetGenoType();

            Assert.NotNull(genoType);
        }
예제 #2
0
        public void todo(IDataSet dataSet)
        {
            var randomGenerator = new UniformRandomGenerator();

            var possibleFunctions = new List <IGenoTypeNode>
            {
                new Multiplication(),
                new Plus(),
                new Minus()
            };

            var possibleTerminals = new List <IGenoTypeNode>();

            foreach (var mappedColumn in dataSet.MappedColumns)
            {
                possibleTerminals.Add(new FeatureTerminal(mappedColumn.Key));
            }

            var eaGeneExpressionParameters = new EaGeneExpressionParameters(10, possibleFunctions, possibleTerminals);
            var parameterTerminalFactory   = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator);
            var genoTypeFactory            = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory);

            var genoType = genoTypeFactory.GetGenoType();

            var phenoTypeTree = new PhenoTypeTree(genoType.GenoTypeNodes);

            var stringExpresssion = phenoTypeTree.ToString();

            // TODO make mapped columns more sophisticated
            var mappedColumnsUsedInExpression = new Dictionary <string, int>();

            foreach (var mappedColumn in dataSet.MappedColumns)
            {
                if (stringExpresssion.Contains(mappedColumn.Key))
                {
                    mappedColumnsUsedInExpression.Add(mappedColumn.Key, mappedColumn.Value);
                }
            }

            var expression = new Expression(stringExpresssion);

            var numberOfRows = dataSet.MappedData.GetLength(0);

            var sum = 0.0;

            for (var row = 0; row < numberOfRows; row++)
            {
                foreach (var usedMappedColumn in mappedColumnsUsedInExpression)
                {
                    expression.Parameters[usedMappedColumn.Key.Replace("]", "").Replace("[", "")] = dataSet.MappedData[row, usedMappedColumn.Value];
                }

                if (!expression.HasErrors())
                {
                    var test = (double)expression.Evaluate();
                    sum = sum + test;
                }
            }
        }
예제 #3
0
        public void CanTranslateTest3()
        {
            var randomGenerator = new UniformRandomGenerator();

            var possibleFunctions = new List <IGenoTypeNode>
            {
                new SquareRoot(),
                new Multiplication(),
                new Division(),
                new Plus(),
                new Minus(),
                new Minimum(),
                new Maximum(),
                new Not(),
                new Exp(),
                new Sinus(),
                new Cosinus()
            };

            var possibleTerminals = new List <IGenoTypeNode>
            {
                new FeatureTerminal("a"),
                new FeatureTerminal("b"),
                new FeatureTerminal("c"),
                new FeatureTerminal("d")
            };

            var eaGeneExpressionParameters = new EaGeneExpressionParameters(20, possibleFunctions, possibleTerminals);
            var parameterTerminalFactory   = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator);
            var genoTypeFactory            = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory);

            eaGeneExpressionParameters.ParameterTypeInteger = true;
            eaGeneExpressionParameters.ConstantProbability  = 0;

            var genoType      = genoTypeFactory.GetGenoType();
            var phenoTypeTree = new GeneExpression.PhenoTypeTree(genoType.GenoTypeNodes);

            var expresssion = phenoTypeTree.ToString();
        }
예제 #4
0
        public void CanCrossover()
        {
            var listLeft = new List <IGenoTypeNode>
            {
                new SquareRoot(),
                new Multiplication(),
                new Plus(),
                new Minus(),
                new FeatureTerminal("a"),
                new FeatureTerminal("b"),
                new FeatureTerminal("c"),
                new FeatureTerminal("d")
            };

            var listRight = new List <IGenoTypeNode>
            {
                new Sinus(),
                new Multiplication(),
                new Division(),
                new Minus(),
                new FeatureTerminal("a1"),
                new FeatureTerminal("b1"),
                new FeatureTerminal("c1"),
                new FeatureTerminal("d1")
            };

            var possibleFunctions = new List <IGenoTypeNode>
            {
                new SquareRoot(),
                new Multiplication(),
                new Plus(),
                new Minus()
            };

            var possibleTerminals = new List <IGenoTypeNode>
            {
                new FeatureTerminal("a"),
                new FeatureTerminal("b"),
                new FeatureTerminal("c"),
                new FeatureTerminal("d")
            };

            var eaGeneExpressionParameters =
                new EaGeneExpressionParameters(4, possibleFunctions, possibleTerminals)
            {
                CrossoverProbability = 1.0
            };

            IGenoType left = new GeneExpression.GenoType {
                GenoTypeNodes = listLeft
            };
            IGenoType right = new GeneExpression.GenoType {
                GenoTypeNodes = listRight
            };
            var randomGenerator        = new UniformRandomGenerator();
            var genotypeCrossoverator1 = new GenoTypeCrossoveratorBasic1(randomGenerator, eaGeneExpressionParameters);

            var phenoTypeTreeLeft1  = new GeneExpression.PhenoTypeTree(left.GenoTypeNodes);
            var phenoTypeTreeRight1 = new GeneExpression.PhenoTypeTree(right.GenoTypeNodes);

            genotypeCrossoverator1.PerformCrossover(ref left, ref right);

            var phenoTypeTreeLeft2  = new GeneExpression.PhenoTypeTree(left.GenoTypeNodes);
            var phenoTypeTreeRight2 = new GeneExpression.PhenoTypeTree(right.GenoTypeNodes);

            Assert.NotEqual(phenoTypeTreeLeft1, phenoTypeTreeLeft2);
            Assert.NotEqual(phenoTypeTreeRight1, phenoTypeTreeRight2);
        }