예제 #1
0
        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; }
        }
예제 #2
0
        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 });
        }
예제 #3
0
        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);
        }