/// <summary> /// Сгенерировать нейроны сети. /// </summary> /// <param name="attributes">Количество параметров входящего вектора.</param> /// <param name="neuronsCount">Количество нейронов.</param> public void GenerateNeurons(List <NetworkAttribute> attributes, int neuronsCount) { Neurons.Clear(); Weights.Clear(); InputAttributes.Clear(); InputAttributes.AddRange(attributes.Select(a => new InputAttributeBase { InputAttributeNumber = a.OrderNumber, Name = a.Name }) .ToList()); for (int i = 0; i < neuronsCount; i++) { Neurons.Add(new NeuronBase { NeuronNumber = i }); } foreach (var inputAttribute in InputAttributes) { foreach (var neuron in Neurons) { var randomWeight = NormalizationType.GetNeuronWeight(attributes.Count); Weights.Add(new WeightBase { InputAttributeNumber = inputAttribute.InputAttributeNumber, NeuronNumber = neuron.NeuronNumber, Value = randomWeight }); } } }
public void FromParents(Neat parent, Neat other) { lock (ThinkLock) { OnRemove?.Invoke(); Neurons.Clear(); Genes.Clear(); } if (other == null || R.NextDouble() > mutate_crossover) { CopyFrom(parent); VaryColor(parent, null); } else { Dictionary <int, Gene> genes = new Dictionary <int, Gene>(); foreach (Gene gene in parent.Genes.Concat(other.Genes)) { if (!genes.ContainsKey(gene.innovation)) { Gene mutate = gene; if (!mutate.enabled && R.NextDouble() < mutate_enable) { mutate.enabled = true; } genes[gene.innovation] = mutate; } } int max = 0; foreach (Gene gene in genes.Values) { max = Max(max, Max(gene.from, gene.axon.destination)); Genes.Add(gene); } addNeurons(max); innovation = Max(parent.innovation, other.innovation); VaryColor(parent, other); } MutateEnable(); Mutate(); }
protected void ConnectInnovNbNetwork() { if (Neurons == null) { Neurons = new Dictionary <int, Neuron>(); } else { Neurons.Clear(); } foreach (var neuron in NeuronLst) { if (!Neurons.ContainsKey(neuron.innovNb)) { Neurons.Add(neuron.innovNb, neuron); } else if (Neurons[neuron.innovNb] != neuron) { throw new Exception("AAAAaAAAaaaaa: " + neuron.innovNb); } } }