Beispiel #1
0
 public void SetInput(double[] inputArray)
 {
     if (_network.InputLayer == null)
     {
         _network.SetInputLayer(inputArray);
     }
     else
     {
         _network.SetInputLayer(inputArray);
     }
 }
Beispiel #2
0
        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);
        }