Пример #1
0
        protected void StartFromScratch()
        {
            // Add basic genome input and output into alive genomes;
            Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 1),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 2),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 3),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 4),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 5),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 6),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 7),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output, _IOIndex: 0),
            };

            Genometype genome = new Genometype(nodes);

            GenomeMutationController mutationController = new GenomeMutationController(genome);

            mutationController.MutateByAddingConnection();
            m_aliveGenomes.AddRange(mutationController.mutations);

            for (int i = 0; i < m_aliveGenomes.Count; i++)
            {
                m_weightOptimizers.Add(new WeightOptimize(this, genomeBirdCount, genomeBirdSurviveCount));
                m_weightOptimizers[i].InsertGenome(m_aliveGenomes[i]);
            }
        }
        private void StartFromScratch()
        {
            Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 1),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output, _IOIndex: 0),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output, _IOIndex: 1),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output, _IOIndex: 2),
            };

            Genometype.ConnectionGenens[] connections = new Genometype.ConnectionGenens[] {
                new Genometype.ConnectionGenens(0, 2, Random.Range(-10f, 10f), _operatorType: Genometype.ConnectionGenens.OperatorType.Multiply),
                new Genometype.ConnectionGenens(0, 3, Random.Range(-10f, 10f), _operatorType: Genometype.ConnectionGenens.OperatorType.Multiply),
                new Genometype.ConnectionGenens(1, 4, Random.Range(-10f, 10f), _operatorType: Genometype.ConnectionGenens.OperatorType.Plus),
            };

            m_weightOptimizer.InsertGenome(new Genometype(nodes, connections));
        }
Пример #3
0
    public void GenomeConnectionMutation()
    {
        Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Hidden),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output),
        };

        GenomeMutationController controller = new GenomeMutationController(new Genometype(nodes, new Genometype.ConnectionGenens[0] {
        }));

        controller.MutateByAddingConnection();

        for (int i = 0; i < controller.mutations.Count; i++)
        {
            Debug.Log(controller.mutations[i]);
        }
    }
        protected void StartFromScratch()
        {
            Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 1),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 5),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 7),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Hidden),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output),
            };

            Genometype.ConnectionGenens[] connections = new Genometype.ConnectionGenens[] {
                new Genometype.ConnectionGenens(0, 3, Random.Range(-10f, 10f)),
                new Genometype.ConnectionGenens(1, 3, Random.Range(-10f, 10f)),
                new Genometype.ConnectionGenens(2, 3, Random.Range(-10f, 10f)),
                new Genometype.ConnectionGenens(3, 4, Random.Range(-10f, 10f), Genometype.ConnectionGenens.OperatorType.Plus),
            };

            m_weightOptimizer.InsertGenome(new Genometype(nodes, connections));
        }
Пример #5
0
    public void NodeGenes()
    {
        // Test multiply node
        Genometype.NodeGenes node = new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input);
        node.value = 1;
        Assert.AreEqual(node.Value, 1);

        // Test reverse output node
        Genometype.NodeGenes reverseNode = new Genometype.NodeGenes(
            Genometype.NodeGenes.Types.Input,
            _outputMode: Genometype.NodeGenes.OutputMode.Reverse);
        reverseNode.value = -1;
        Assert.AreEqual(reverseNode.Value, 1);

        // Test node cloning
        Genometype.NodeGenes cloneNode = node;
        cloneNode.value = 2;
        Assert.AreEqual(node.Value, 1);
        Assert.AreEqual(cloneNode.Value, 2);
    }
Пример #6
0
    public void GenomeNodeMutation()
    {
        Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output),
        };

        Genometype.ConnectionGenens[] connections = new Genometype.ConnectionGenens[] {
            new Genometype.ConnectionGenens(0, 2, 0.123f),
            new Genometype.ConnectionGenens(1, 2, 3f),
        };

        GenomeMutationController controller = new GenomeMutationController(new Genometype(nodes, connections));

        controller.MutateByInsertNodeBetweenConnection();

        for (int i = 0; i < controller.mutations.Count; i++)
        {
            Debug.Log(controller.mutations[i]);
        }
    }
Пример #7
0
    public void DataProcess()
    {
        Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Hidden),
            new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output),
        };

        Genometype.ConnectionGenens[] connections = new Genometype.ConnectionGenens[] {
            new Genometype.ConnectionGenens(0, 1, 0.1f),
            new Genometype.ConnectionGenens(1, 2, 1f, Genometype.ConnectionGenens.OperatorType.Plus),
        };

        GenomeController controller = new GenomeController(new Genometype(nodes, connections));

        // Test get output
        controller.Reset();
        Assert.AreEqual(controller.GetOutput(0), 0);

        // Test insert input and process data
        controller.Input(new float[] { 0.9f });
        controller.StartProcess();
        Assert.AreEqual(controller.GetOutput(0), 1.09f);
    }