Exemplo n.º 1
0
        public virtual GeneModule CrossoverModule(GeneModule g2, CrossoverFunction crossoverFunction)
        {
            var child = GetNewThis();

            crossoverFunction.Crossover(geneList, g2.geneList, child.geneList);
            child.GenesHasChanged();

            return(child);
        }
Exemplo n.º 2
0
        public override GeneModule CrossoverModule(GeneModule g2, CrossoverFunction crossoverFunction)
        {
            var child = (DefaultSigmoid)GetNewThis();

            DefaultSigmoid s2 = (DefaultSigmoid)g2;

            crossoverFunction.Crossover(geneList, s2.geneList, child.geneList);
            child.GenesHasChanged();

            return(child);
        }
Exemplo n.º 3
0
        public override void Load(BinaryReader r, uint id)
        {
            base.Load(r, id);

            IsFirstGeneration = r.ReadBoolean();
            Parent1           = r.ReadUInt32();
            Parent2           = r.ReadUInt32();

            LoadListInfo(BodyGenes, r);

            LoadListInfo(MutationGenes, r);

            NetChromosome     = ReadNullableObject <INeuralNetChromosome>(r);
            CrossoverFunction = ReadNullableObject <CrossoverFunction>(r);
        }
Exemplo n.º 4
0
        public override INeuralNetChromosome CrossoverWith(INeuralNetChromosome netC2, CrossoverFunction crossoverFunction)
        {
            var c2    = (SpikeNetChromosome)netC2;
            var child = new SpikeNetChromosome();

            //CrossoverTwoGeneLists(MutationGenes, c2.MutationGenes, CrossoverRate.Value, child.MutationGenes);

            //CrossoverTwoGeneLists(EyeRNeuronGenes, c2.EyeRNeuronGenes, CrossoverRate.Value, child.EyeRNeuronGenes);
            //CrossoverTwoGeneLists(EyeGNeuronGenes, c2.EyeGNeuronGenes, CrossoverRate.Value, child.EyeGNeuronGenes);
            //CrossoverTwoGeneLists(EyeBNeuronGenes, c2.EyeBNeuronGenes, CrossoverRate.Value, child.EyeBNeuronGenes);
            //CrossoverTwoGeneLists(DistanceNeuronGenes, c2.DistanceNeuronGenes, CrossoverRate.Value, child.DistanceNeuronGenes);

            //CrossoverTwoGeneLists(HiddenNeuronGenes, c2.HiddenNeuronGenes, CrossoverRate.Value, child.HiddenNeuronGenes);
            //CrossoverTwoGeneLists(InputNeuronGenes, c2.InputNeuronGenes, CrossoverRate.Value, child.InputNeuronGenes);
            //CrossoverTwoGeneLists(OutputNeuronGenes, c2.OutputNeuronGenes, CrossoverRate.Value, child.OutputNeuronGenes);

            return((INeuralNetChromosome)child);
        }
Exemplo n.º 5
0
        public static void Crossover(this CrossoverFunction crossoverFunction, NeuralNetwork child,
                                     GenerationEvaluation evaluation, SelectionFunction selectionFunction, float fitnessPower)
        {
            var(b, w)          = evaluation.pool.Select(selectionFunction, fitnessPower);
            var(better, worse) = (b.Genes, w.Genes);

            var genes     = child.genes;
            var count     = genes.Length;
            var halfCount = genes.Length / 2;

            switch (crossoverFunction)
            {
            case CrossoverFunction.HalfWorstBest:
                for (var i = 0; i < halfCount; i++)
                {
                    child.genes[i] = better[i];
                }
                for (var i = halfCount; i < count; i++)
                {
                    child.genes[i] = worse[i];
                }
                break;

            case CrossoverFunction.HalfBestWorse:
                for (var i = 0; i < halfCount; i++)
                {
                    child.genes[i] = worse[i];
                }
                for (var i = halfCount; i < count; i++)
                {
                    child.genes[i] = better[i];
                }
                break;

            case CrossoverFunction.HalfRandomShift:
                var shift    = Random.Range(0, count - 1);
                var overlaps = shift + halfCount > count - 1;

                for (var i = 0; i < count; i++)
                {
                    child.genes[i] = (!overlaps && i > shift && i < shift + halfCount || overlaps && !(i > shift && i < shift + halfCount) ? better : worse)[i];
                }
                break;

            case CrossoverFunction.Step:
                for (var i = 0; i < count; i++)
                {
                    genes[i] = (i % 2 == 0 ? better : worse)[i];
                }
                break;

            case CrossoverFunction.StepRandom:
                for (var i = 0; i < count; i++)
                {
                    genes[i] = (Random.value > .5f ? better : worse)[i];
                }
                break;

            case CrossoverFunction.FractionRandom: {
                for (var i = 0; i < count; i++)
                {
                    var fraction = Random.value;
                    genes[i] = better[i] * fraction + worse[i] * (1f - fraction);
                }

                break;
            }

            case CrossoverFunction.FractionByFitness: {
                var fraction = b.Fitness / (b.Fitness + w.Fitness);
                for (var i = 0; i < count; i++)
                {
                    genes[i] = better[i] * fraction + worse[i] * (1f - fraction);
                }

                break;
            }

            case CrossoverFunction.Average:
            default:
                for (var i = 0; i < count; i++)
                {
                    genes[i] = (better[i] + worse[i]) * .5f;
                }
                break;
            }
        }
Exemplo n.º 6
0
 public abstract INeuralNetChromosome CrossoverWith(INeuralNetChromosome c2, CrossoverFunction crossoverFunction);
Exemplo n.º 7
0
        public override INeuralNetChromosome CrossoverWith(INeuralNetChromosome netC2, CrossoverFunction crossoverFunction)
        {
            var c2    = (RMP_Chromosome)netC2;
            var child = new RMP_Chromosome();

            crossoverFunction.Crossover(MutationGenes, c2.MutationGenes, child.MutationGenes);

            crossoverFunction.Crossover(EyeRNeuronGenes, c2.EyeRNeuronGenes, child.EyeRNeuronGenes);
            crossoverFunction.Crossover(EyeGNeuronGenes, c2.EyeGNeuronGenes, child.EyeGNeuronGenes);
            crossoverFunction.Crossover(EyeBNeuronGenes, c2.EyeBNeuronGenes, child.EyeBNeuronGenes);
            crossoverFunction.Crossover(DistanceNeuronGenes, c2.DistanceNeuronGenes, child.DistanceNeuronGenes);

            crossoverFunction.Crossover(HiddenNeuronGenes, c2.HiddenNeuronGenes, child.HiddenNeuronGenes);
            crossoverFunction.Crossover(InputNeuronGenes, c2.InputNeuronGenes, child.InputNeuronGenes);
            crossoverFunction.Crossover(OutputNeuronGenes, c2.OutputNeuronGenes, child.OutputNeuronGenes);

            child.GlobalSigmoidFunction       = (SigmoidFunction)GlobalSigmoidFunction.CrossoverModule(c2.GlobalSigmoidFunction, crossoverFunction);
            child.GlobalOutputSigmoidFunction = (SigmoidFunction)GlobalOutputSigmoidFunction.CrossoverModule(c2.GlobalOutputSigmoidFunction, crossoverFunction);

            return(child);
        }