Пример #1
0
        public override void Load(System.IO.BinaryReader r, uint id)
        {
            base.Load(r, id);

            TemplateName = r.ReadString();
            ANN          = BinarySerializable.GetObject <INeuralNetChromosome>(r);
        }
Пример #2
0
        public static EditANNChromosomeForm ShowDialogue(Window window, INeuralNetChromosome _chromosome, CloseEvent closeFunction = null, string category = null, ISkinFile file = null)
        {
            var form = new EditANNChromosomeForm();

            form.Initialize(_chromosome, closeFunction, "Edit ANN-Chromosome", true, true, category, file);
            form.Show(window);

            return(form);
        }
Пример #3
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);
        }
Пример #4
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);
        }
Пример #5
0
        public void Initialize(INeuralNetChromosome _chromosome, CloseEvent closeFunction = null, string title = null, bool resizable = false, bool isDialog = true, string category = null, ISkinFile file = null)
        {
            chromosome = _chromosome;

            base.Initialize(closeFunction, title, resizable, isDialog, category, file);
        }
Пример #6
0
        public override void ImprintGenome(INeuralNetChromosome _genome)
        {
            var genome = (SpikeNetChromosome)_genome;

            #region Creating the neurons
            foreach (var gene in genome.EyeRNeuronGenes)
            {
                var neuron = new SpInputNeuron(this);
                neuron.ImprintGene(gene);
                AddInputNeuron(neuron);
            }
            foreach (var gene in genome.EyeGNeuronGenes)
            {
                var neuron = new SpInputNeuron(this);
                neuron.ImprintGene(gene);
                AddInputNeuron(neuron);
            }
            foreach (var gene in genome.EyeBNeuronGenes)
            {
                var neuron = new SpInputNeuron(this);
                neuron.ImprintGene(gene);
                AddInputNeuron(neuron);
            }
            foreach (var gene in genome.DistanceNeuronGenes)
            {
                var neuron = new SpInputNeuron(this);
                neuron.ImprintGene(gene);
                AddInputNeuron(neuron);
            }

            foreach (var gene in genome.InputNeuronGenes)
            {
                var neuron = new SpInputNeuron(this);
                neuron.ImprintGene(gene);
                AddInputNeuron(neuron);
            }

            foreach (var gene in genome.HiddenNeuronGenes)
            {
                var neuron = new SpNeuron(this);
                neuron.ImprintGene(gene);
                AddHiddenNeuron(neuron);
            }
            foreach (var gene in genome.OutputNeuronGenes)
            {
                var neuron = new SpOutputNeuron(this);
                neuron.ImprintGene(gene);
                AddOutputNeuron(neuron);
            }

            #endregion

            #region Connection the neurons
            int count = 0;
            foreach (var gene in genome.EyeRNeuronGenes)
            {
                var neuron = InputNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }

            foreach (var gene in genome.EyeGNeuronGenes)
            {
                var neuron = InputNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }
            foreach (var gene in genome.EyeBNeuronGenes)
            {
                var neuron = InputNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }

            foreach (var gene in genome.DistanceNeuronGenes)
            {
                var neuron = InputNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }

            foreach (var gene in genome.InputNeuronGenes)
            {
                var neuron = InputNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }

            count = 0;
            foreach (var gene in genome.HiddenNeuronGenes)
            {
                var neuron = HiddenNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }

            count = 0;
            foreach (var gene in genome.OutputNeuronGenes)
            {
                var neuron = OutputNeurons[count++];

                foreach (var connectionGene in gene.Connections)
                {
                    neuron.Connections.Add(SpConnection.GetConnectionFromGene(connectionGene, neuron, this));
                }
            }

            #endregion
        }
Пример #7
0
 public abstract void ImprintGenome(INeuralNetChromosome genome);
Пример #8
0
 public void SetNetChromosome(INeuralNetChromosome netChromosome)
 {
     NetChromosome = netChromosome;
     netChromosome.Initialize(this);
 }
Пример #9
0
 public abstract INeuralNetChromosome CrossoverWith(INeuralNetChromosome c2, CrossoverFunction crossoverFunction);
Пример #10
0
        public override void AddedToContainer()
        {
            base.AddedToContainer();

            var builder = new FieldBuilder();

            builder.BuildSessionStart(this);

            var genomeTemplatesComboBox = builder.AddComboBoxField("Genome: ");

            genomeTemplatesComboBox.Items.AddRange(EditorData.GenomeTemplates.Select(s => s.TemplateName));
            genomeTemplatesComboBox.Index = 0;

            var annTemplatesComboBox = builder.AddComboBoxField("ANN: ");

            annTemplatesComboBox.Items.AddRange(EditorData.ANNTemplates.Select(s => s.TemplateName));
            annTemplatesComboBox.Index = 0;

            var creatureTemplatesComboBox = builder.AddComboBoxField("Creature: ");

            creatureTemplatesComboBox.Items.AddRange(EditorData.CreatureTemplates.Select(s => s.TemplateName));
            creatureTemplatesComboBox.Index = 0;

            var mutateCheckBox = builder.AddCheckBoxField("Mutate the genome: ");

            var amountField = builder.AddIntegerField("Amount to add: ");

            amountField.MinValue = 1;

            builder.AddResizableButtonField("OK", delegate(object sender)
            {
                string name   = genomeTemplatesComboBox.Items[genomeTemplatesComboBox.Index];
                Genome genome = null;
                foreach (var g in EditorData.GenomeTemplates)
                {
                    if (g.TemplateName == name)
                    {
                        genome = g.Genome;
                    }
                }

                name = annTemplatesComboBox.Items[annTemplatesComboBox.Index];
                INeuralNetChromosome ann = null;
                foreach (var a in EditorData.ANNTemplates)
                {
                    if (a.TemplateName == name)
                    {
                        ann = a.ANN;
                    }
                }

                name = creatureTemplatesComboBox.Items[creatureTemplatesComboBox.Index];
                ICreature creature = null;
                foreach (var c in EditorData.CreatureTemplates)
                {
                    if (c.TemplateName == name)
                    {
                        creature = c.Creature;
                    }
                }

                for (int i = 0; i < amountField.Value; i++)
                {
                    var clone       = (ICreature)creature.Clone();
                    var cloneGenome = genome.Clone();
                    cloneGenome.SetNetChromosome(ann.Clone());

                    if (mutateCheckBox.Checked)
                    {
                        cloneGenome.Mutate();
                    }

                    clone.ImprintGenome(cloneGenome);

                    world.AddEntity(clone);

                    clone.Position = new EntityPosition(Globals.Random.Next(world.Width), Globals.Random.Next(world.Height));
                }
            });

            builder.BuildSessionEnd();

            X = (Parent.Width / 2) - (Width / 2);
            Y = (Parent.Height / 2) - (Height / 2);

            CanResizeFormVertically = false;
        }