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); } } }
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]); }