예제 #1
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            if (cmbAlgorithms.Text == "" || cmbFunction.Text == "" || txtExperiments.Text == "")
            {
                MessageBox.Show("Lütfen bilgileri eksiksiz giriniz.");
            }
            else
            {
                table.Columns.Clear();
                table.Rows.Clear();
                label3.Text  = "";
                label4.Text  = "";
                label5.Text  = "";
                label11.Text = "";



                table.Columns.Add("En iyi çözüm", typeof(double));
                for (int i = 0; i < nd; i++)
                {
                    table.Columns.Add("Çözüm adayı " + (i + 1), typeof(double));
                }
                table.Columns.Add("İşlem süresi", typeof(double));
                table.Columns.Add("Deney sayısı", typeof(int));
                table.Columns.Add("Min en iyi çözüm", typeof(double));
                table.Columns.Add("Max en iyi çözüm", typeof(double));
                table.Columns.Add("En iyi çözümlerin ortalaması", typeof(double));
                table.Columns.Add("Standart sapma", typeof(double));
                dgwFitnessInf.DataSource = table;

                NumofExp = int.Parse(txtExperiments.Text);
                sw.Start();
                switch (cmbAlgorithms.Text)
                {
                case "Genetic Algorithm":

                    for (int i = 0; i < NumofExp; i++)
                    {
                        Genetic gen       = new Genetic();
                        double  globalMin = gen.geneticStart(cmbFunction.Text);
                        if (gen.getDeger() == -1)
                        {
                            MessageBox.Show("Fonksiyonun parametre sayısı ile değişkenlerinizin sayısı uyuşmuyor!"); break;
                        }
                        else
                        {
                            double[][] randPop  = gen.getRandPop();
                            MinBul     min      = new TekMinBul(gen.getFitness());
                            int        minindex = min.minBul();
                            sw.Stop();

                            row = table.NewRow();

                            row["En iyi çözüm"] = globalMin;
                            for (int h = 0; h < nd; h++)
                            {
                                row["Çözüm adayı " + (h + 1)] = randPop[minindex][h];
                            }
                            row["İşlem süresi"] = sw.ElapsedMilliseconds;

                            table.Rows.Add(row);
                            dgwFitnessInf.DataSource = table;
                        }
                    }
                    break;

                case "SOS Algorithm":

                    for (int i = 0; i < NumofExp; i++)
                    {
                        Sos    sos       = new Sos();
                        double globalMin = sos.sosStart(cmbFunction.Text);

                        if (sos.getDeger() == -1)
                        {
                            MessageBox.Show("Fonksiyonun parametre sayısı ile değişkenlerinizin sayısı uyuşmuyor!"); break;
                        }
                        else
                        {
                            double[][] randPop  = sos.getRandPop();
                            MinBul     min      = new TekMinBul(sos.getFitness());
                            int        minindex = min.minBul();
                            sw.Stop();

                            row = table.NewRow();

                            row["En iyi çözüm"] = globalMin;
                            for (int h = 0; h < nd; h++)
                            {
                                row["Çözüm adayı " + (h + 1)] = randPop[minindex][h];
                            }
                            row["İşlem süresi"] = sw.ElapsedMilliseconds;

                            table.Rows.Add(row);
                            dgwFitnessInf.DataSource = table;
                        }
                    }
                    break;
                }

                try
                {
                    double[] bfs = new double[dgwFitnessInf.Rows.Count - 1];
                    foreach (DataGridViewRow row in dgwFitnessInf.Rows)
                    {
                        ort += Convert.ToDouble(row.Cells[0].Value);
                        bf   = Convert.ToDouble(row.Cells[0].Value);
                        if (m == dgwFitnessInf.Rows.Count - 1)
                        {
                            break;
                        }
                        bfs[m] = bf;
                        m++;
                    }
                    average = ort / dgwFitnessInf.Rows.Count;
                    for (int i = 0; i < dgwFitnessInf.Rows.Count - 1; i++)
                    {
                        ss += Math.Pow((bfs[i] - average), 2);
                    }
                    ss = ss / (dgwFitnessInf.Rows.Count - 2);

                    label3.Text  = bfs.Min() + "";
                    label4.Text  = bfs.Max() + "";
                    label5.Text  = (average) + "";
                    label11.Text = ss + "";

                    row["Deney sayısı"]                 = txtExperiments.Text;
                    row["Min en iyi çözüm"]             = bfs.Min();
                    row["Max en iyi çözüm"]             = bfs.Max();
                    row["En iyi çözümlerin ortalaması"] = average;
                    row["Standart sapma"]               = ss;
                    pnlInfo.Visible  = true;
                    btnStart.Enabled = false;
                }
                catch (Exception)
                {
                    MessageBox.Show("Lütfen probleminize uygun bir fonksiyon seçiniz.");;
                }
            }
        }