/// <summary> /// Mutates the genome by creating a new connection. /// </summary> public void Mutate_Link() { for (int i = 0; i < NEAT.LINK_ATTEMPTS; ++i) { NodeGene nodeGene_a = Nodes.GetRandomElement(); NodeGene nodeGene_b = Nodes.GetRandomElement(); if (nodeGene_a.X == nodeGene_b.X) { continue; } ConnectionGene connectionGene; if (nodeGene_a.X < nodeGene_b.X) { connectionGene = new ConnectionGene(nodeGene_a, nodeGene_b, 0); //Temp innovation number. } else { connectionGene = new ConnectionGene(nodeGene_b, nodeGene_a, 0); //Temp innovation number. } if (Connections.Contains(connectionGene)) { continue; } connectionGene = NEAT.CreateConnection(connectionGene.From, connectionGene.To); connectionGene.Weight = NEAT.WEIGHT_RANDOM + (random.NextDouble() * 2 - 1); Connections.Add_Sorted_Gene(connectionGene); //This needs to be sorted otherwise something breaks. return; } }