示例#1
0
    public void InitialNetwork()
    {
        //INPUT NODES -> VALUE = 0
        NodeGenes.Add(1, new NodeGene(1, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(2, new NodeGene(2, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(3, new NodeGene(3, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(4, new NodeGene(4, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(5, new NodeGene(5, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(6, new NodeGene(6, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(7, new NodeGene(7, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(8, new NodeGene(8, NodeGene.TYPE.INPUT, 0));
        NodeGenes.Add(9, new NodeGene(9, NodeGene.TYPE.INPUT, 0));
        //BIAS NODE -> VALUE = 1
        NodeGenes.Add(10, new NodeGene(10, NodeGene.TYPE.BIAS, 1)); //Bias


        //OUTPUT NODE -> VALUE = 0
        NodeGenes.Add(11, new NodeGene(11, NodeGene.TYPE.OUTPUT, 0));
        NodeGenes.Add(12, new NodeGene(12, NodeGene.TYPE.OUTPUT, 0));

        int j = 1;

        for (int i = 1; i < 11; i++)
        {
            ConnectionGenes.Add(new ConnectionGene(i, 11, random.NextDouble(), true, j));

            ConnectionGenes.Add(new ConnectionGene(i, 12, random.NextDouble(), true, j + 1));
            j = j + 2;
        }

        foreach (ConnectionGene connection in GetConnectionGenes())
        {
            NodeGene node = GetNodeGenes()[connection.GetOutputNode()];

            if (!node.GetIncomingConnections().Contains(connection))
            {
                node.AddIncomingConnection(connection);
            }
        }
    }
示例#2
0
    public void MutateAddNode()
    {
        ConnectionGene randomConnection = GetConnectionGenes()[random.Next(GetConnectionGenes().Count)];

        NodeGene InNode  = GetNodeGenes()[randomConnection.GetInputNode()];
        NodeGene OutNode = GetNodeGenes()[randomConnection.GetOutputNode()];


        randomConnection.SetEnabled(false);

        NodeGene MiddleNode = new NodeGene(GetNodeGenes().Count + 1, NodeGene.TYPE.HIDDEN, 0);

        ConnectionGene InputToMiddle = new ConnectionGene(InNode.GetID(), MiddleNode.GetID(), 1, true, NEAT_CONFIGS.GLOBAL_INNOVATION_NUMBER++);

        ConnectionGenes.Add(InputToMiddle);
        MiddleNode.AddIncomingConnection(InputToMiddle);
        ConnectionGene MiddleToOutput = new ConnectionGene(MiddleNode.GetID(), OutNode.GetID(), randomConnection.GetWeight(), true, NEAT_CONFIGS.GLOBAL_INNOVATION_NUMBER++);

        ConnectionGenes.Add(MiddleToOutput);
        OutNode.AddIncomingConnection(MiddleToOutput);
        //Add to the total current Pool Connections Made in this instance
        NodeGenes.Add(MiddleNode.GetID(), MiddleNode);
    }