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(); }
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(); }
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)); } }
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>(); }
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 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(); }