private void generateNewBtn_Click(object sender, EventArgs e) { //try //{ //{ status.Text = "Generating a new pop"; int popC = int.Parse(populationCount.Text); List <NeuroNetGenome> population = new List <NeuroNetGenome>(); for (int i = 0; i < popC; ++i) { CNeuroNetWrapper net = new CNeuroNetWrapper(3, 1); CNeuroNetWrapper.Connection c = new CNeuroNetWrapper.Connection(r.Next(net.InputsCount), r.Next(net.InputsCount, net.InputsCount + net.OutputsCount), (r.NextDouble() - r.NextDouble()) * 2); net.Connections.Add(c); population.Add(new NeuroNetGenome(net)); } _results = teacher.AddNewGeneration(population); IndividualSelector.Maximum = (Decimal)population.Count; status.Text = "Generated a new pop"; //} /*catch (System.Exception ex) * { * MessageBox.Show("Input error.", "Input error", MessageBoxButtons.OK, MessageBoxIcon.Error); * }*/ }
public IGenome <CNeuroNetWrapper> ProceedStructuralMutation() { NeuroNetGenome copy = new NeuroNetGenome(this); CNeuroNetWrapper.Connection con = null; int maxCon = copy._neuroNet.Nodes.Count * (copy._neuroNet.Nodes.Count - copy._neuroNet.InputsCount); double chance = copy._neuroNet.Connections.Count / (double)maxCon; if (GenomeRandom.NextDouble() < chance) { do { foreach (var c in copy._neuroNet.Connections) { if (GenomeRandom.NextDouble() < (1.0 / copy._neuroNet.Connections.Count)) { con = c; break; } } } while (con == null); int from = con.From; int to = con.To; copy._neuroNet.Connections.Remove(con); int nodeId = copy._neuroNet.Nodes.Count; copy._neuroNet.AddNode(nodeId); copy._neuroNet.AddConnection(from, nodeId, (GenomeRandom.NextDouble() - GenomeRandom.NextDouble()) * 2); copy._neuroNet.AddConnection(nodeId, to, (GenomeRandom.NextDouble() - GenomeRandom.NextDouble()) * 2); } else { int from = GenomeRandom.Next(copy._neuroNet.Nodes.Count); int to = GenomeRandom.Next(copy._neuroNet.InputsCount - 1, copy._neuroNet.Nodes.Count); copy._neuroNet.AddConnection(from, to, (GenomeRandom.NextDouble() - GenomeRandom.NextDouble()) * 2); } copy._structuralMutations += 1; copy._nonStructuralMutations = 0; copy.ParentResult = this.LastResult; return(copy); }