private static void MutateSynapseFromLayer(Ann ann) { if (ann.synapses.Count == 0) { return; } Synapse synapse = ann.synapses[Util.rand.Next(ann.synapses.Count)]; int layer = ann.GetAllLayers()[Util.rand.Next(ann.GetAllLayers().Length)]; if (synapse.ToLayer != layer && !HelperDoesSynapseExist(ann, layer, synapse.FromNeuron, synapse.ToLayer, synapse.ToNeuron)) { synapse.FromLayer = layer; } }
private static void MutateSynapseToNeuron(Ann ann) { if (ann.synapses.Count == 0) { return; } Synapse synapse = ann.synapses[Util.rand.Next(ann.synapses.Count)]; int toLayer = synapse.ToLayer; Neuron[] neuronsInLayer = ann.GetNeuronsForLayer(toLayer); Neuron neuron = neuronsInLayer.Length != 0 ? neuronsInLayer[Util.rand.Next(neuronsInLayer.Length)] : null; int newNeuronPosition = neuron != null ? neuron.NeuronPosition : 0; if (!HelperDoesSynapseExist(ann, synapse.FromLayer, synapse.FromNeuron, synapse.ToLayer, newNeuronPosition)) { synapse.ToNeuron = newNeuronPosition; } }