Esempio n. 1
0
        private void button7_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox2.Items.Clear();
            listBox3.Items.Clear();
            DateTime zaman = DateTime.Now;

            //          listBox1.Items.Add(zaman);
            Kromozom.IDSifirla();
            IlkAtamaYontem ia = IlkAtamaYontem.firstfit;

            if (comboBox1.Text == "firstfit")
            {
                ia = IlkAtamaYontem.firstfit;
            }
            else if (comboBox1.Text == "bestfitperiod")
            {
                ia = IlkAtamaYontem.bestfitperiod;
            }
            else if (comboBox1.Text == "bestfitteam")
            {
                ia = IlkAtamaYontem.bestfitteam;
            }

            int kromozomsayisi = 0;

            try
            {
                kromozomsayisi = Int32.Parse(kromozomsayisiTxt.Text);
            }
            catch
            {
                MessageBox.Show("Kromozom sayısı değeri sayı olmalıdır");
                return;
            }

            int caprazlamaorani = 0;

            try
            {
                caprazlamaorani = Int32.Parse(caprazlamasayisiTxt.Text);
            }
            catch
            {
                MessageBox.Show("Çaprazlama oranı sayı olmalıdır");
                return;
            }

            int iterasyonsayisi = 0;

            try
            {
                iterasyonsayisi = Int32.Parse(iterasyonsayisiTxt.Text);
            }
            catch
            {
                MessageBox.Show("İterasyon sayısı degeri sayı olmalıdır");
                return;
            }

            ga = new GenetikAlgoritma(ia, kromozomsayisi, caprazlamaorani, 5, iterasyonsayisi, true);

            ga.Calistir(listBox1);

            if (Islemler.ilkatamabasarili == false)
            {
                MessageBox.Show("Daha iyi bir rota için farklı bir atama yöntemi kullanın\nSorun devam ederse;\nEkip sayısını artırabilirsiniz\nHasta gereksinimlerini kontrol edin\nHasta zaman periyodlarını kontrol edin");
                Islemler.ilkatamabasarili = true;
            }
            else
            {
                MessageBox.Show("Atamalar tamamlandı");
            }

            zaman = DateTime.Now;
            //        listBox1.Items.Add(zaman);

            //   NesilDegistir(iterasyonsayisi-1,listBox2,listBox3);

            ////nesil değiştir yazıldıktan sonra bloklandı
            //listBox2.Items.Clear();
            //listBox3.Items.Clear();
            //string rotalar = "Genel Fitness:";
            //rotalar += ga.populasyon.kromozomListesi[0].fitness.ToString();
            //listBox2.Items.Add(rotalar);
            //foreach (Rota myrota in ga.populasyon.kromozomListesi[0].rotaListesi)
            //{
            //    listBox3.Items.Add("--- " + myrota.ekip.ekipID.ToString() + " ---");

            //    rotalar = "rota fit:" + myrota.rotaceza.ToString();
            //    rotalar += " ekp:" + myrota.ekip.ekipID.ToString();
            //    rotalar += " Güz:";
            //    foreach (Gen mygen in myrota.ziyaretSirasi)
            //    {
            //        rotalar += "-" + mygen.hasta.hastaID.ToString();
            //        rotalar += "(" + mygen.atandigiTimeWindow.t1.ToString() + ":" + mygen.atandigiTimeWindow.t2.ToString() + ";" + mygen.genCeza.ToString() + ")";
            //        if (mygen.hasta.hastaID != 0) listBox3.Items.Add(mygen.hasta.hastaID);
            //    }
            //    listBox2.Items.Add(rotalar);
            //}
        }
        private void button7_Click(object sender, EventArgs e)
        {
            secim_ga_gredy = 1;
            listBox1.Items.Clear();
            listBox2.Items.Clear();
            listBox3.Items.Clear();
            Islemler.atanamayanHastalarListesi.Clear();
            DateTime zaman = DateTime.Now;

            label9.Text = zaman.ToString();

            Kromozom.IDSifirla();
            IlkAtamaYontem ia = IlkAtamaYontem.firstfit;

            if (comboBox1.Text == "firstfit")
            {
                ia = IlkAtamaYontem.firstfit;
            }
            else if (comboBox1.Text == "bestfitperiod")
            {
                ia = IlkAtamaYontem.bestfitperiod;
            }
            else if (comboBox1.Text == "bestfitteam")
            {
                ia = IlkAtamaYontem.bestfitteam;
            }

            int kromozomsayisi = 0;

            try
            {
                kromozomsayisi = Int32.Parse(kromozomsayisiTxt.Text);
            }
            catch
            {
                MessageBox.Show("Kromozom sayısı değeri sayı olmalıdır");
                return;
            }

            int caprazlamaorani = 0;

            try
            {
                caprazlamaorani = Int32.Parse(caprazlamasayisiTxt.Text);
            }
            catch
            {
                MessageBox.Show("Çaprazlama oranı sayı olmalıdır");
                return;
            }

            int iterasyonsayisi = 0;

            try
            {
                iterasyonsayisi = Int32.Parse(iterasyonsayisiTxt.Text);
            }
            catch
            {
                MessageBox.Show("İterasyon sayısı degeri sayı olmalıdır");
                return;
            }

            bool elitizmeniyi = true;
            //if (comboBox3.SelectedIndex==0)//ilk deper en iyi seçimine karşılık geliyor
            //    elitizmeniyi = true;
            //else
            //    elitizmeniyi = false;

            string caprazlasecim = comboBox3.Text;

            ga = new GenetikAlgoritma(ia, kromozomsayisi, caprazlamaorani, caprazlasecim, 5, iterasyonsayisi, elitizmeniyi);

            ga.Calistir(listBox1);

            zaman = DateTime.Now;

            if (Islemler.ilkatamabasarili == false)
            {
                string mesaj = "İstenen Kromozom sayısı:" + ga.populasyon.populasyonBuyukluk.ToString();
                mesaj += "\n" + "İlk atamada oluşturulan Kromozom sayısı:" + Islemler.ilkatamaKromozomSayisi.ToString();
                mesaj += "\nDaha iyi bir rota için farklı bir atama yöntemi kullanın\nSorun devam ederse;\nEkip sayısını artırabilirsiniz\nHasta gereksinimlerini kontrol edin\nHasta zaman periyodlarını kontrol edin";
                MessageBox.Show(mesaj);
                Islemler.ilkatamabasarili = true;

                //atamalar yapılamadı atanamayan hastaları yazdır
            }
            else
            {
                MessageBox.Show("Atamalar tamamlandı");
            }



            if (ga.populasyon.kromozomListesi.Count == 0)
            {
                return;
            }

            label6.Text = listBox1.Items[listBox1.Items.Count - 1].ToString();
            label7.Text = listBox1.Items[0].ToString();
            //        listBox1.Items.Add(zaman);

            //   NesilDegistir(iterasyonsayisi-1,listBox2,listBox3);

            ////nesil değiştir yazıldıktan sonra bloklandı
            //listBox2.Items.Clear();
            //listBox3.Items.Clear();
            //string rotalar = "Genel Fitness:";
            //rotalar += ga.populasyon.kromozomListesi[0].fitness.ToString();
            //listBox2.Items.Add(rotalar);
            //foreach (Rota myrota in ga.populasyon.kromozomListesi[0].rotaListesi)
            //{
            //    listBox3.Items.Add("--- " + myrota.ekip.ekipID.ToString() + " ---");

            //    rotalar = "rota fit:" + myrota.rotaceza.ToString();
            //    rotalar += " ekp:" + myrota.ekip.ekipID.ToString();
            //    rotalar += " Güz:";
            //    foreach (Gen mygen in myrota.ziyaretSirasi)
            //    {
            //        rotalar += "-" + mygen.hasta.hastaID.ToString();
            //        rotalar += "(" + mygen.atandigiTimeWindow.t1.ToString() + ":" + mygen.atandigiTimeWindow.t2.ToString() + ";" + mygen.genCeza.ToString() + ")";
            //        if (mygen.hasta.hastaID != 0) listBox3.Items.Add(mygen.hasta.hastaID);
            //    }
            //    listBox2.Items.Add(rotalar);
            //}

            label8.Text = zaman.ToString();
        }