コード例 #1
0
ファイル: TestPhenotype.cs プロジェクト: aszpreece/SoupV2
        public void TestAdder()
        {
            NeatBrainGenotype test = new NeatBrainGenotype();

            test.AddNamedNode("input1", NodeType.INPUT, ActivationFunctionType.RELU);
            test.AddNamedNode("hidden1", NodeType.HIDDEN, ActivationFunctionType.RELU);
            test.AddNamedNode("output1", NodeType.OUTPUT, ActivationFunctionType.RELU);

            test.ConnectionGenes.Add(new ConnectionGene(1, 0, 1, 1));             // Input to hidden
            test.ConnectionGenes.Add(new ConnectionGene(2, 1, 1, 1, true, true)); // Hidden to hidden (recurrent)
            test.ConnectionGenes.Add(new ConnectionGene(3, 1, 2, 1));             //# Hidden to output

            var network = new NeatBrainPhenotype(test);

            network.SetInput("input1", 1.0f);
            Assert.AreEqual(1.0f, network.Get("input1"));
            network.Calculate();
            Assert.AreEqual(0, network.Get("output1"));
            network.SetInput("input1", 2.0f);
            network.Calculate();
            Assert.AreEqual(1, network.Get("output1"));
            network.SetInput("input1", 10.0f);
            network.Calculate();
            Assert.AreEqual(3, network.Get("output1"));
            Assert.AreEqual(13, network.Get("hidden1"));
            Assert.AreEqual(10, network.Get("input1"));
        }
コード例 #2
0
ファイル: TestPhenotype.cs プロジェクト: aszpreece/SoupV2
        public void TestRecurrentFromOutput()
        {
            NeatBrainGenotype test = new NeatBrainGenotype();

            test.AddNamedNode("input1", NodeType.INPUT, ActivationFunctionType.RELU);
            test.AddNamedNode("input2", NodeType.INPUT, ActivationFunctionType.RELU);
            test.AddNamedNode("input3", NodeType.INPUT, ActivationFunctionType.RELU);

            // Hidden genes
            test.NodeGenes.Add(new NodeGene(3, NodeType.HIDDEN, ActivationFunctionType.RELU));
            test.NodeGenes.Add(new NodeGene(4, NodeType.HIDDEN, ActivationFunctionType.RELU));

            // Output genes
            test.AddNamedNode("output", NodeType.OUTPUT, ActivationFunctionType.RELU);

            test.NodeGenes.Add(new NodeGene(5, NodeType.OUTPUT, ActivationFunctionType.RELU));


            // Input connections
            test.ConnectionGenes.Add(new ConnectionGene(1, 0, 3, 1));
            test.ConnectionGenes.Add(new ConnectionGene(2, 1, 3, 1));
            test.ConnectionGenes.Add(new ConnectionGene(3, 1, 4, 1));
            test.ConnectionGenes.Add(new ConnectionGene(4, 2, 4, 1));
            // Hidden connection
            test.ConnectionGenes.Add(new ConnectionGene(5, 3, 4, 1));
            // The recurrent connection from 4 to 3
            test.ConnectionGenes.Add(new ConnectionGene(6, 4, 3, 1, true, true));
            // Hidden to output
            test.ConnectionGenes.Add(new ConnectionGene(7, 3, 5, 1));
            test.ConnectionGenes.Add(new ConnectionGene(8, 4, 5, 1));
            // The recurrent connection from 5 to 3
            test.ConnectionGenes.Add(new ConnectionGene(9, 5, 3, -1));

            var network = new NeatBrainPhenotype(test);

            network.SetInput("input1", 1.0f);
            network.SetInput("input2", 2.0f);
            network.SetInput("input3", 3.0f);
            network.Calculate();
            Assert.AreEqual(0.0d, network.Get(5));
            network.SetInput("input1", 1.0f);
            network.SetInput("input2", 2.0f);
            network.SetInput("input3", 3.0f);
            network.Calculate();
            Assert.AreEqual(8.0d, network.Get(5));
            network.SetInput("input1", 1.0f);
            network.SetInput("input2", 2.0f);
            network.SetInput("input3", 3.0f);
            network.Calculate();
            Assert.AreEqual(16.0d, network.Get(5));
        }