예제 #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 (float, float) EvaluateNetwork(float[] input)
    {
        float[] output = new float[NEAT_CONFIGS.OUTPUTS];
        for (int i = 1; i < NEAT_CONFIGS.INPUTS; i++)
        {
            GetNodeGenes()[i].SetValue(input[i - 1]);
        }


        foreach (var KeyValue in GetNodeGenes())
        {
            double   sum  = 0;
            int      key  = KeyValue.Key;
            NodeGene node = KeyValue.Value;
            if (key > NEAT_CONFIGS.INPUTS)
            {
                foreach (ConnectionGene con in node.GetIncomingConnections())
                {
                    if (con.GetEnabled())
                    {
                        sum += (GetNodeGenes()[con.GetInputNode()].GetValue() * con.GetWeight());
                    }
                }

                node.SetValue(Math.Tanh(sum));
            }
        }
        int j = 0;

        foreach (NodeGene node in GetNodeGenes().Values)
        {
            if (node.GetType() == NodeGene.TYPE.OUTPUT)
            {
                output[j] = (float)node.GetValue();
                j++;
            }
        }
        return(output[0], output[1]);
    }