public void SetInput(double[] inputArray) { if (_network.InputLayer == null) { _network.SetInputLayer(inputArray); } else { _network.SetInputLayer(inputArray); } }
private void NearGenesCrossWithOffspring(NeuronNet individualA, NeuronNet individualB) { NeuronNet offspring = new NeuronNet(Shape, Rnd); double extraRange = 0.1; offspring.SetInputLayer(InputExample); if (individualA.Layers.Count != individualB.Layers.Count) { throw new Exception("Different layer size. Can not cross"); } for (int i = 0; i < individualA.Layers.Count; i++) { if (individualA.Layers[i].Neurons.Count != individualB.Layers[i].Neurons.Count) { throw new Exception("Different neuron size. Can not cross"); } for (int j = 0; j < individualA.Layers[i].Neurons.Count; j++) { double auxBiasA = individualA.Layers[i].Neurons[j].Bias; double auxBiasB = individualB.Layers[i].Neurons[j].Bias; double maximumBias; double minimumBias; if (auxBiasA > auxBiasB) { maximumBias = auxBiasA + (auxBiasA * extraRange); minimumBias = auxBiasB - (auxBiasA * extraRange); } else { maximumBias = auxBiasB + (auxBiasA * extraRange); minimumBias = auxBiasA - (auxBiasA * extraRange); } offspring.Layers[i].Neurons[j].Bias = Rnd.NextDouble() * (maximumBias - minimumBias) + minimumBias; if (individualA.Layers[i].Neurons[j].Dendrites.Count != individualB.Layers[i].Neurons[j].Dendrites.Count) { throw new Exception("Different dendrite count. Can not cross"); } for (int k = 0; k < individualA.Layers[i].Neurons[j].Dendrites.Count; k++) { double auxDendriteWeightA = individualA.Layers[i].Neurons[j].Dendrites[k].Weight; double auxDendriteWeightB = individualB.Layers[i].Neurons[j].Dendrites[k].Weight; double maximum; double minimum; if (auxDendriteWeightA > auxDendriteWeightB) { maximum = auxDendriteWeightA + (auxDendriteWeightA * extraRange); minimum = auxDendriteWeightB - (auxDendriteWeightA * extraRange); } else { maximum = auxDendriteWeightB + (auxDendriteWeightA * extraRange); minimum = auxDendriteWeightA - (auxDendriteWeightA * extraRange); } offspring.Layers[i].Neurons[j].Dendrites[k].Weight = Rnd.NextDouble() * (maximum - minimum) + minimum; } } } PopulationList.Add(offspring); }