Exemplo n.º 1
0
        public static void subXor(NetworkGenome cppn)
        {
            DecodedNetworks decodedNetwork = (DecodedNetworks)null;

            double[] inputs = new double[4];
            bool     flag1  = true;

            inputs[0] = 1.0;
            inputs[1] = 0.0;
            inputs[2] = 0.0;
            inputs[3] = 0.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(2);
            double[] outputs1 = decodedNetwork.GetOutputs();
            cppn.Fitness  = 0.0;
            cppn.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs1[0]));
            bool flag2 = flag1 && outputs1[0] < 0.5;

            decodedNetwork.Flush();
            inputs[0] = 0.0;
            inputs[1] = 0.0;
            inputs[2] = 0.0;
            inputs[3] = 1.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(2);
            double[] outputs2 = decodedNetwork.GetOutputs();
            cppn.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs2[0]));
            bool flag3 = flag2 && outputs2[0] < 0.5;

            decodedNetwork.Flush();
            inputs[0] = 0.0;
            inputs[1] = 1.0;
            inputs[2] = 0.0;
            inputs[3] = 0.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(2);
            double[] outputs3 = decodedNetwork.GetOutputs();
            cppn.Fitness += Math.Min(1.0, Math.Max(0.0, outputs3[0]));
            bool flag4 = flag3 && outputs3[0] >= 0.5;

            decodedNetwork.Flush();
            inputs[0] = 0.0;
            inputs[1] = 0.0;
            inputs[2] = 1.0;
            inputs[3] = 0.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(2);
            double[] outputs4 = decodedNetwork.GetOutputs();
            cppn.Fitness += Math.Min(1.0, Math.Max(0.0, outputs4[0]));
            bool flag5 = flag4 && outputs4[0] >= 0.5;

            decodedNetwork.Flush();
            if (!flag5)
            {
                return;
            }
            cppn.Fitness = 4.0;
        }
Exemplo n.º 2
0
        public static void Xor(object target)
        {
            NetworkGenome genome = target as NetworkGenome;

            double[]        inputs         = new double[2];
            bool            flag1          = true;
            DecodedNetworks decodedNetwork = DecodedNetworks.DecodeGenome(genome);

            inputs[0] = 0.0;
            inputs[1] = 0.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(6);
            double[] outputs1 = decodedNetwork.GetOutputs();
            genome.Fitness  = 0.0;
            genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs1[0]));
            bool flag2 = flag1 && outputs1[0] < 0.5;

            decodedNetwork.Flush();
            inputs[0] = 1.0;
            inputs[1] = 1.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(6);
            double[] outputs2 = decodedNetwork.GetOutputs();
            genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs2[0]));
            bool flag3 = flag2 && outputs2[0] < 0.5;

            decodedNetwork.Flush();
            inputs[0] = 0.0;
            inputs[1] = 1.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(6);
            double[] outputs3 = decodedNetwork.GetOutputs();
            genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs3[0]));
            bool flag4 = flag3 && outputs3[0] >= 0.5;

            decodedNetwork.Flush();
            inputs[0] = 1.0;
            inputs[1] = 0.0;
            decodedNetwork.SetInputs(inputs);
            decodedNetwork.ActivateNetwork(6);
            double[] outputs4 = decodedNetwork.GetOutputs();
            genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs4[0]));
            bool flag5 = flag4 && outputs4[0] >= 0.5;

            decodedNetwork.Flush();
            if (!flag5)
            {
                return;
            }
            genome.Fitness = 4.0;
        }
Exemplo n.º 3
0
        public static bool NormalXor(List <NetworkGenome> genomes, bool test)
        {
            double[] inputs = new double[2];
            bool     flag1  = false;

            foreach (NetworkGenome genome in genomes)
            {
                bool            flag2          = true;
                DecodedNetworks decodedNetwork = DecodedNetworks.DecodeGenome(genome);
                inputs[0] = 0.0;
                inputs[1] = 0.0;
                decodedNetwork.SetInputs(inputs);
                decodedNetwork.ActivateNetwork(6);
                double[] outputs1 = decodedNetwork.GetOutputs();
                genome.Fitness  = 0.0;
                genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs1[0]));
                bool flag3 = flag2 && outputs1[0] < 0.5;
                decodedNetwork.Flush();
                inputs[0] = 1.0;
                inputs[1] = 1.0;
                decodedNetwork.SetInputs(inputs);
                decodedNetwork.ActivateNetwork(6);
                double[] outputs2 = decodedNetwork.GetOutputs();
                genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs2[0]));
                bool flag4 = flag3 && outputs2[0] < 0.5;
                decodedNetwork.Flush();
                inputs[0] = 0.0;
                inputs[1] = 1.0;
                decodedNetwork.SetInputs(inputs);
                decodedNetwork.ActivateNetwork(6);
                double[] outputs3 = decodedNetwork.GetOutputs();
                genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs3[0]));
                bool flag5 = flag4 && outputs3[0] >= 0.5;
                decodedNetwork.Flush();
                inputs[0] = 1.0;
                inputs[1] = 0.0;
                decodedNetwork.SetInputs(inputs);
                decodedNetwork.ActivateNetwork(6);
                double[] outputs4 = decodedNetwork.GetOutputs();
                genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs4[0]));
                bool flag6 = flag5 && outputs4[0] >= 0.5;
                decodedNetwork.Flush();
                if (flag6)
                {
                    genome.Fitness = 4.0;
                }
                flag1 = flag1 || flag6;
            }
            return(flag1);
        }
Exemplo n.º 4
0
        //by phillip
        static void MapWeights(NetworkGenome genome, DecodedNetworks cppn)
        {
            double[]       coords = new double[4];
            double[]       output;
            LinkGene       temp;
            SubstrateNodes source;
            SubstrateNodes target;

            int linkId = 0;

            for (int i = 1; i < genome.Links.Count; i++)
            {
                temp   = genome.Links[i];
                source = (SubstrateNodes)genome.Nodes[temp.Source];
                target = (SubstrateNodes)genome.Nodes[temp.Target];
                if (temp.Source != 0)
                {
                    coords[0] = source.Coordinate[0];
                    coords[1] = source.Coordinate[1];
                }
                else
                {
                    coords[0] = target.Coordinate[0];
                    coords[1] = target.Coordinate[1];
                }
                coords[2] = target.Coordinate[0];
                coords[3] = target.Coordinate[1];
                cppn.Flush();
                cppn.SetInputs(coords);
                cppn.ActivateNetwork(5);
                output = cppn.GetOutputs();


                if (source.Id != 0)
                {
                    temp.Weight = output[0];
                }
                else
                {
                    temp.Weight = output[1];
                }
            }

            if (saveSub)
            {
                NetworkGenome.SaveToFile(genome, "Sub.xml");
                saveSub = false;
            }
        }
Exemplo n.º 5
0
        public static void XorCreate(NetworkGenome sub, DecodedNetworks cppn)
        {
            SubstrateNodes substrateNode1 = sub.Nodes.Find((Predicate <NodeGene>)(n => n.Type == NodeType.Output)) as SubstrateNodes;

            double[] inputs = new double[4];
            int      id     = 0;

            for (int index = 0; index < sub.Nodes.Count - 1; ++index)
            {
                SubstrateNodes substrateNode2 = sub.Nodes[index] as SubstrateNodes;
                cppn.Flush();
                inputs[0] = substrateNode2.Coordinate[0];
                inputs[1] = substrateNode2.Coordinate[1];
                inputs[2] = substrateNode1.Coordinate[0];
                inputs[3] = substrateNode1.Coordinate[1];
                cppn.SetInputs(inputs);
                cppn.ActivateNetwork(5);
                double[] outputs = cppn.GetOutputs();
                sub.Links.Add(new LinkGene(id, substrateNode2.Id, substrateNode1.Id, outputs[0]));
            }
        }