public Populasyon(int buyukluk, IlkAtamaYontem ilkatamayontem)
        {
            this._buyukluk = buyukluk;
            this._iay      = ilkatamayontem;
            //         Islemler.CezaPuanlariniBelirle();

            _kromozomlist = new List <Kromozom>();
            int sayac  = 0;
            int sayac2 = 0;

            for (int i = 1; _kromozomlist.Count < this._buyukluk; i++)
            {
                Kromozom k = new Kromozom(this._iay);
                if (k.atanamayanhastalar.Count == 0)
                {
                    sayac++;
                    _kromozomlist.Add(k);
                }
                sayac2++;
                Islemler.ilkatamaKromozomSayisi = _kromozomlist.Count();
                if (sayac2 >= Islemler.ilkAtamaMaxDenemeSayisi)
                {
                    // MessageBox.Show(Islemler.atamamesaj);
                    // _kromozomlist = null;
                    Islemler.ilkatamabasarili = false;
                    return;
                }
            }
            //Thread atama = new Thread(new ThreadStart(IlkAtamaThread));
            //atama.Start();
        }
Пример #2
0
 public Kromozom(IlkAtamaYontem ilkAtamaYontem)
 {
     _staticId++;
     this._kromozomId  = _staticId;
     this._rotaListesi = new List <Rota>(); //rota listesi oluşturuldu
     this._iay         = ilkAtamaYontem;
     SkillMapOlustur();                     //Hasta ve ekip için skill kıtlığı tespitinde kullanılacak
     EkipleriAta();
     IlkAtamalariYap();
 }
Пример #3
0
 public Kromozom(Kromozom modelKromozom)
 {
     //referansı pas edilen kromozomun kopyası ile yeni bir kromozom döner
     //çaprazlama işlemlerinde kullanılması için yazıldı
     //dönen kromozom modelkromozom ile aynı ama ID si Farklı olacaktır.
     _staticId++;
     this._kromozomId  = _staticId;                        //yeni kromozom id alındı
     this._rotaListesi = new List <Rota>();                //rota listesi oluştu
     this._iay         = modelKromozom.iay;                //ilk atama yöntem modelden alındı
     foreach (Rota kopyaRota in modelKromozom.rotaListesi) //kromozomdaki rotaların kopyasını alır
     {
         this._rotaListesi.Add(new Rota(kopyaRota));
     }
 }
Пример #4
0
        public List <IyiKromozomlar> IyiList;//her nesildeki sonucu tutacak, dosyaya yada database yazdırılabilir

        public GenetikAlgoritma(IlkAtamaYontem atamaYontem, int kromozomSayisi, int caprazlamaOrani, string caprazlasecim, int mutasyonOrani, int nesilSayisi, bool elitizmVarmi = true)
        {
            this.atamaYontem     = atamaYontem;
            this.kromozomSayisi  = kromozomSayisi;
            this.caprazlamaOrani = caprazlamaOrani;
            this.caprazlasecim   = caprazlasecim;
            this.mutasyonOrani   = mutasyonOrani;
            this.nesilSayisi     = nesilSayisi;
            this.nesilanlik      = 0;
            this.elitizmEniyi    = elitizmVarmi;
            populasyon           = new Populasyon(kromozomSayisi, atamaYontem);

            if (populasyon.kromozomListesi.Count == 0)
            {
                MessageBox.Show("Verileri Kontrol Edin\nAtama yapılamadı!!!!!");

                return;
            }

            IyiList = new List <IyiKromozomlar>();
        }
Пример #5
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);
            //}
        }
Пример #6
0
        private void button4_Click(object sender, EventArgs e)
        {
            //Islemler.CezaPuanlariniBelirle();
            //int a = Islemler.CezaPuanlari[Cezalar.hataliSkill];

            //MessageBox.Show(a.ToString());
            //return;

            listBox1.Items.Clear();
            IlkAtamaYontem atamayontem         = IlkAtamaYontem.bestfitteam;
            int            populasyonbuyuklugu = 100;

            //  listBox1.Items.Add(atamayontem.ToString());
            List <Kromozom> populasyon = new List <Kromozom>();

            DateTime zaman = DateTime.Now;
            //  listBox1.Items.Add(zaman.ToString());
            int sayac = 0;

            for (int i = 1; populasyon.Count < populasyonbuyuklugu; i++)
            {
                Kromozom k = new Kromozom(atamayontem);
                if (k.atanamayanhastalar.Count == 0)
                {
                    sayac++;
                    populasyon.Add(k);
                    for (int j = 0; j < k.rotaListesi.Count; j++)
                    {
                        string yazdir = sayac.ToString() + " " + "K";
                        yazdir += i.ToString() + "->";
                        yazdir += "R" + j.ToString() + ":";
                        for (int l = 0; l < k.rotaListesi[j].ziyaretSirasi.Count; l++)
                        {
                            yazdir += " -- " + k.rotaListesi[j].ziyaretSirasi[l].hasta.hastaID.ToString();
                            yazdir += "[";
                            yazdir += k.rotaListesi[j].ziyaretSirasi[l].atandigiTimeWindow.t1.ToString();
                            yazdir += "-";
                            yazdir += k.rotaListesi[j].ziyaretSirasi[l].atandigiTimeWindow.t2.ToString();
                            yazdir += "]";
                        }
                        listBox1.Items.Add(yazdir);
                    }
                }
            }
            zaman = DateTime.Now;
            //  listBox1.Items.Add(zaman.ToString());


            return;

            Rota r1 = new Rota();

            r1.ekip = Islemler.ekipListGun[0];

            foreach (Hasta myhasta in Islemler.hastaListGun)
            {
                if (myhasta.hastaID == 0)
                {
                    continue;
                }
                r1.AtamaYap(myhasta);
            }
            foreach (Gen mygen in r1.ziyaretSirasi)
            {
                string deger = mygen.hasta.hastaID.ToString();
                deger += ">>";
                deger += mygen.atandigiTimeWindow.t1.ToString();
                deger += "-";
                deger += mygen.atandigiTimeWindow.t2.ToString();
                deger += ".........." + mygen.hasta.timeWindow.t1 + "-" + mygen.hasta.timeWindow.t2;
                // listBox1.Items.Add(deger);
            }
        }
        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();
        }