public void populasyonuIlkle() { for (int i = 0; i < populasyon.Length; i++) { populasyon[i] = new Hucre(boyutSayisi, adimBuyuklugu, parametreAraliklari, goruntuIslemleri); } }
public void yuzme(Hucre yeniHucre, Hucre eskiHucre) { for (int i = 0; i < boyutSayisi; i++) { yeniHucre.Konum[i] = yeniHucre.Konum[i] + eskiHucre.AdımBuyuklugu * yuvarAdım[i]; // Normalizasyon yeniHucre.Konum[i] = Math.Max(Math.Min(yeniHucre.Konum[i], parametreAraliklari[i, 1]), parametreAraliklari[i, 0]); } }
public void enIyiyiKontrolEt(Hucre aday) { if (aday.Cost > enIyiHucre.Cost) { enIyiHucre.Uygunluk = aday.Uygunluk; enIyiHucre.Cost = aday.Cost; enIyiHucre.Konum[0] = aday.Konum[0]; enIyiHucre.Konum[1] = aday.Konum[1]; enIyiHucre.Konum[2] = aday.Konum[2]; } }
public void kemotaksi() { double Jlast; Hucre yenhucre = new Hucre(boyutSayisi, adimBuyuklugu, parametreAraliklari, goruntuIslemleri); for (int i = 0; i < populasyonBuyuklugu; i++) { etkilesim(populasyon[i]); Jlast = populasyon[i].Uygunluk; yuvarlanma(yenhucre, populasyon[i]); populasyon[i].Cost = goruntuIslemleri.ParametreleriDegerlendir(populasyon[i].Konum[0], populasyon[i].Konum[1], populasyon[i].Konum[2]); enIyiyiKontrolEt(populasyon[i]); etkilesim(yenhucre); for (int j = 0; j < boyutSayisi; j++) { populasyon[i].Konum[j] = yenhucre.Konum[j]; } populasyon[i].Cost = yenhucre.Cost; populasyon[i].Uygunluk = yenhucre.Uygunluk; populasyon[i].Can += populasyon[i].Uygunluk; for (int m = 0; m < yuzmeUzunlugu; m++) { if (yenhucre.Uygunluk < Jlast) { Jlast = yenhucre.Uygunluk; yuzme(yenhucre, populasyon[i]); populasyon[i].Cost = goruntuIslemleri.ParametreleriDegerlendir(populasyon[i].Konum[0], populasyon[i].Konum[1], populasyon[i].Konum[2]); enIyiyiKontrolEt(populasyon[i]); etkilesim(yenhucre); for (int j = 0; j < boyutSayisi; j++) { populasyon[i].Konum[j] = yenhucre.Konum[j]; } populasyon[i].Cost = yenhucre.Cost; populasyon[i].Uygunluk = yenhucre.Uygunluk; populasyon[i].Can += populasyon[i].Uygunluk; } else { break; } } } }
private int hucreKiyasla(Hucre sol, Hucre sag) { if (sol.Can < sag.Can) { return(-1); } if (sol.Can > sag.Can) { return(1); } else { return(0); } }
public void etkilesim(Hucre h) { double attract = 0.0, repel = 0.0, diff = 0.0; for (int i = 0; i < this.populasyonBuyuklugu; i++) { for (int j = 0; j < this.boyutSayisi; j++) { diff += Math.Pow(h.Konum[j] - this.populasyon[i].Konum[j], 2.0); } attract += 1.0 * dAttract * Math.Exp(-1.0 * wAtrract * diff); repel += hRepel * Math.Exp(-1.0 * wRepel * diff); } // Sürü etkisini oluşturur. h.Uygunluk = h.Cost + attract + repel; }
public void yuvarlanma(Hucre yeniHucre, Hucre eskiHucre) { double a = -1.0, b = 1.0, temp1 = 0.0, temp2 = 0.0; for (int i = 0; i < this.boyutSayisi; i++) { delta[i] = rastgeleSayi(a, b); // rastgele.NextDouble() * (b - a) + a; temp1 += Math.Pow(delta[i], 2.0); } temp2 = Math.Sqrt(temp1); for (int i = 0; i < boyutSayisi; i++) { yuvarAdım[i] = delta[i] / temp2; yeniHucre.Konum[i] = eskiHucre.Konum[i] + eskiHucre.AdımBuyuklugu * yuvarAdım[i]; // Normalizasyon yeniHucre.Konum[i] = Math.Max(Math.Min(yeniHucre.Konum[i], parametreAraliklari[i, 1]), parametreAraliklari[i, 0]); } }
public double[] aramaBaslat(int sayacLimiti) { double eski_cost; int sayac = sayacLimiti; int nesilSayisi = 0; populasyonuIlkle(); enIyiHucre = new Hucre(boyutSayisi, adimBuyuklugu, parametreAraliklari, goruntuIslemleri); do { sayac -= 1; nesilSayisi += 1; eski_cost = enIyiHucre.Cost; //for (int k = 0; k < kemotaksiSayisi; k++) //{ kemotaksi(); //} ureme(); eliminasyon_dagıtım(); if (eski_cost != enIyiHucre.Cost) { sayac = sayacLimiti; // Reset } //Console.WriteLine("Nesil sayısı: " + nesilSayisi); //Console.WriteLine("En iyi varyans:" + enIyiHucre.Cost); } while (sayac > 0); enIyiKonumlar[0] = enIyiHucre.Konum[0]; enIyiKonumlar[1] = enIyiHucre.Konum[1]; enIyiKonumlar[2] = enIyiHucre.Konum[2]; return(enIyiHucre.Konum); }