Example #1
0
        public override AbstractPhenotype Translate(BitVector genom)
        {
            //NB: Requires explicit size genom size of 33
            double a = binaryToDoubleRange(genom.GetRange(0, 7), 0.001, 0.2); //200 values : 8 bit
            double b = binaryToDoubleRange(genom.GetRange(7, 7), 0.01, 0.3); // 30 values : 5 bit
            double c = binaryToDoubleRange(genom.GetRange(14, 7), -80.0, -30.0); // 51 values : 6 bit
            double d = binaryToDoubleRange(genom.GetRange(21, 7), 0.1, 10.0); // 100 values : 7 bit
            double k = binaryToDoubleRange(genom.GetRange(28, 7), 0.01, 1.0); // 100 values : 7 bit

            return new IzhikevichPhenotype(a, b, c, d, k) {Genotype = genom, Fitness = 0.0, RouletteProportion = 0.0};
        }
Example #2
0
        public override AbstractPhenotype Translate(BitVector genom)
        {
            Network network = new Network();
            network.createGraph();
            int index = 0;

            foreach (Node hiddenNode in network.HiddenNodes)
            {
                foreach (var neighbour in hiddenNode.UpstreamConnections)
                {
                    if (neighbour.left == network.BiasNode)
                        neighbour.right = binaryToDoubleRange(genom.GetRange(index++*8, 8), -10.0, 0.0);
                    else
                        neighbour.right = binaryToDoubleRange(genom.GetRange(index++*8, 8), -5.0, 5.0);
                }
                hiddenNode.Gain = binaryToDoubleRange(genom.GetRange(index++*8, 8), 1.0, 5.0);
                hiddenNode.TimeConstant = binaryToDoubleRange(genom.GetRange(index++*8, 8), 1.0, 2.0);
            }
            foreach (Node outputNode in network.OutputNodes)
            {
                foreach (var neighbour in outputNode.UpstreamConnections)
                {
                    if (neighbour.left == network.BiasNode)
                        neighbour.right = binaryToDoubleRange(genom.GetRange(index++*8, 8), -10.0, 0.0);
                    else
                        neighbour.right = binaryToDoubleRange(genom.GetRange(index++*8, 8), -5.0, 5.0);
                }
                outputNode.Gain = binaryToDoubleRange(genom.GetRange(index++*8, 8), 1.0, 5.0);
                outputNode.TimeConstant = binaryToDoubleRange(genom.GetRange(index++*8, 8), 1.0, 2.0);
            }

            MinCogPhenotype pheno = new MinCogPhenotype(network.InputNodes, network.HiddenNodes, network.OutputNodes, network.BiasNode)
            {
                Genotype = genom,
                Fitness = 0.0,
                RouletteProportion = 0.0
            };
            return pheno;
        }