private void button1_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); Elterngeneration.Clear(); Kindgeneration.Clear(); TierchenHistory.Clear(); BesteFitness.Clear(); DurchschnittsFitness.Clear(); BesterDerHistoryFitness.Clear(); loadDocument = true; try { // Elterngeneration einladen XDocument doc = XDocument.Load(openFileDialog1.FileName); Elterngeneration = // lade alle "tier"-Elemente doc.Root.Descendants("tier").Select(tier => // erzeuge für jedes ein Tierchen Object new Tierchen( // lade Problem new Problem(int.Parse(tier.Attribute("problemType").Value)), // lade innerhalb des "tier"-Elementes alle "gen"-Elemente tier.Descendants("gen").Select(gen => // erzeuge für jedes ein Allel new Allel( // lade innerhalb des "gen"-Elementes alle "allel"-Elemente gen.Descendants("allel").Select(allel => // parse den bool-Wert bool.Parse(allel.Value)).ToList(), // Intervall steht als Attribut innerhalb des "gen"-Elementes new Intervall( int.Parse(gen.Attribute("interval_start").Value), int.Parse(gen.Attribute("interval_end").Value)) ) ).ToList() ) ).ToList(); elternSize = Elterngeneration.Count(); binärStringLenght = Elterngeneration.SelectMany(tier => tier.GenCode.Select(allel => allel.Size)).Distinct().FirstOrDefault(); gene = Elterngeneration.Select(tier => tier.GenCode.Count()).Distinct().FirstOrDefault(); problem = Elterngeneration.Select(tier => tier.Problem).Distinct().FirstOrDefault(); intervalle = Elterngeneration.SelectMany(tier => tier.GenCode.Select(allel => allel.Interval).Distinct(new IntervallComparer())).Distinct(new IntervallComparer()).ToList(); textBox1.Text = elternSize.ToString(); textBox2.Text = String.Join(",", intervalle.Select(o => o.ToString()).ToArray()); textBox3.Text = gene.ToString(); textBox5.Text = binärStringLenght.ToString(); int index = 0; foreach (var item in comboBox1.Items) { if (((string)item).StartsWith(string.Format("[{0}]", (int)problem.ProblemType))) { comboBox1.SelectedIndex = index; } index++; } m_Generator = new generator(Elterngeneration, Kindgeneration, TierchenHistory, problem, BesteFitness, DurchschnittsFitness, BesterDerHistoryFitness); } catch (Exception) { loadDocument = false; } }
private void button3_Click(object sender, EventArgs e) { if (m_Generator == null) { m_Generator = new generator(Elterngeneration, Kindgeneration, TierchenHistory, problem, BesteFitness, DurchschnittsFitness, BesterDerHistoryFitness); } int mutationType = 0; int mutationRateStart = (int)numericUpDown1.Value; int mutationRateEnd = (int)numericUpDown2.Value; int rekombinationsPunkte = 0; int anzahlGenerationen = 0; int anzahlKinder = 0; int historySize = 0; int selectionStrategie = 0; int wahlVerfahren = 0; Int32.TryParse(comboBox3.SelectedItem.ToString().Substring(1, 1), out mutationType); Int32.TryParse(textBox7.Text, out rekombinationsPunkte); Int32.TryParse(textBox4.Text, out anzahlGenerationen); Int32.TryParse(textBox10.Text, out anzahlKinder); Int32.TryParse(textBox9.Text, out historySize); Int32.TryParse(comboBox2.SelectedItem.ToString().Substring(1, 1), out selectionStrategie); Int32.TryParse(comboBox4.SelectedItem.ToString().Substring(1, 1), out wahlVerfahren); progressBar1.Enabled = true; progressBar1.Value = 0; backgroundWorker1.RunWorkerAsync(new object[] { mutationType, mutationRateStart, mutationRateEnd, historySize, anzahlGenerationen, anzahlKinder, rekombinationsPunkte, selectionStrategie, wahlVerfahren }); }
private void button2_Click(object sender, EventArgs e) { Random randomizer = new Random(); Elterngeneration.Clear(); Kindgeneration.Clear(); TierchenHistory.Clear(); BesteFitness.Clear(); DurchschnittsFitness.Clear(); BesterDerHistoryFitness.Clear(); // erzeuge Elterngeneration Int32.TryParse(textBox1.Text, out elternSize); Int32.TryParse(textBox5.Text, out binärStringLenght); Int32.TryParse(textBox3.Text, out gene); problem = new Problem(Int32.Parse(comboBox1.SelectedItem.ToString().Substring(1, 1))); var matches = Regex.Matches(textBox2.Text, @"\[(.*?)\]"); intervalle.Clear(); foreach (Match m in matches) { Intervall intervall; Intervall.TryParse(m.Groups[1].Value, out intervall); intervalle.Add(intervall); } if (checkBox1.Checked && intervalle.Count() == 1) { while (intervalle.Count() < gene) { intervalle.Add(intervalle[0]); } } progressBar1.Enabled = true; progressBar1.Value = 0; while (Elterngeneration.Count < elternSize) { Elterngeneration.Add(Tierchen.RandomTier(randomizer, binärStringLenght, intervalle, gene, problem)); /* * ### Wie kommt das mit dem Distinct zustande ? ### * ### Ist ToList() eine Methode einer über TierchenComparer liegenden Klasse ? ### * ### Welche voraussetzungen müssen erfüllt sein ? ### * !!! Hatten wir ja geklärt, oder? */ Elterngeneration = Elterngeneration.Distinct(new TierchenComparer()).ToList(); progressBar1.Value = Elterngeneration.Count() * 100 / elternSize; } SaveGeneration("last.xml"); progressBar1.Enabled = false; m_Generator = new generator(Elterngeneration, Kindgeneration, TierchenHistory, problem, BesteFitness, DurchschnittsFitness, BesterDerHistoryFitness); }