public override void Load(System.IO.BinaryReader r, uint id) { base.Load(r, id); TemplateName = r.ReadString(); ANN = BinarySerializable.GetObject <INeuralNetChromosome>(r); }
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); }
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); }
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); }
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); }
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 }
public abstract void ImprintGenome(INeuralNetChromosome genome);
public void SetNetChromosome(INeuralNetChromosome netChromosome) { NetChromosome = netChromosome; netChromosome.Initialize(this); }
public abstract INeuralNetChromosome CrossoverWith(INeuralNetChromosome c2, CrossoverFunction crossoverFunction);
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; }