コード例 #1
0
        void populasyon_sirala(List <KromozomS> list)
        {
            List <SiralamaUzaklıkHesapla> uzaklikNesnesi = new List <SiralamaUzaklıkHesapla>();

            for (int i = 0; i < list.Count; i++)
            {
                SiralamaUzaklıkHesapla a = new SiralamaUzaklıkHesapla(Math.Abs((double)(list[i].UygDegeri - fonksiyon.MinDeger)), list[i].UygDegeri);
                uzaklikNesnesi.Add(a);
            }
            for (int i = 0; i < uzaklikNesnesi.Count; i++)
            {
                for (int j = 0; j < uzaklikNesnesi.Count; j++)
                {
                    if (uzaklikNesnesi[i].uzaklik < uzaklikNesnesi[j].uzaklik)
                    {
                        SiralamaUzaklıkHesapla temp = uzaklikNesnesi[i];
                        uzaklikNesnesi[i] = uzaklikNesnesi[j];
                        uzaklikNesnesi[j] = temp;
                    }
                }
            }
            for (int i = 0; i < list.Count; i++)
            {
                for (int j = i; j < list.Count; j++)
                {
                    if (uzaklikNesnesi[i].uygunluk == list[j].UygDegeri)
                    {
                        KromozomS temp = list[j];
                        list[j] = list[i];
                        list[i] = temp;
                    }
                }
            }
        }
コード例 #2
0
        public void ilkPopulasyon()
        {
            FonkS fonksiyon = new EggHolder();

            for (int i = 0; i < populasyonBuyuklugu; i++)
            {
                kromozom = new KromozomS();
                for (int j = 0; j < fonksiyon.GenSayisi; j++)
                {
                    kromozom.genEkle(new GenS(rnd.NextDouble() * (fonksiyon.UstSinir - fonksiyon.AltSinir) + fonksiyon.AltSinir));
                }
                kromozom.UygDegeri = fonksiyon.hesapla(kromozom.Genler);
                populasyon.kromozomEkle(kromozom);
            }
            populasyon_sirala(populasyon.Kromozomlistesi);
            sonlanma_durumu();
            bireyListele(dtIterasyon);
            enIyiUygunluklar.Add(populasyon.Kromozomlistesi[0].UygDegeri);
        }
コード例 #3
0
        public void iterasyon()
        {
            populasyon_sirala(populasyon.Kromozomlistesi);
            iterasyonSayisi++;
            bireySec = BireySec.yontem();

            listeKopyala();
            birey1 = bireySec.birey_sec(yedekPopulasyon);

            yedekPopulasyon.Remove(yedekPopulasyon[Form1.index]);
            birey2 = bireySec.birey_sec(yedekPopulasyon);
            CaprazlamaS cs = new CaprazlamaS();

            caprazlamakromozomList = cs.caprazla(birey1, birey2, caprazlama);

            mutasyonOran *= 100;

            int a = rnd.Next(0, 101);

            if (a >= 0 && a < mutasyonOran)
            {
                mutasyon = MutasyonS.mutasyon_yontem();
                caprazlamakromozomList = mutasyon.mutasyon_yap(caprazlamakromozomList, mutasyonKatsayi, fonksiyon.AltSinir, fonksiyon.UstSinir);
                mutasyonsayisi++;
            }

            foreach (var item in caprazlamakromozomList)
            {
                item.UygDegeri = fonksiyon.hesapla(item.Genler);
            }

            populasyon_sirala(caprazlamakromozomList);
            secilenCocukKromozom = caprazlamakromozomList[0];


            populasyon_sirala(populasyon.Kromozomlistesi);
            populasyon.Kromozomlistesi.Remove(populasyon.Kromozomlistesi[populasyon.Kromozomlistesi.Count - 1]);

            populasyon.kromozomEkle(secilenCocukKromozom);
            populasyon_sirala(populasyon.Kromozomlistesi);

            enIyiUygunluklar.Add(populasyon.Kromozomlistesi[0].UygDegeri);
        }
コード例 #4
0
        public List <KromozomS> caprazla(KromozomS ilkbry, KromozomS ikincibry, double caprazlamaOran)
        {
            minnaklar.Clear();
            int rastgele = rnd.Next(0, ilkbry.Genler.Count);

            for (int i = 0; i < 2; i++)
            {
                KromozomS kromozom = new KromozomS();
                for (int j = 0; j < ilkbry.Genler.Count; j++)
                {
                    if (i == 0)
                    {
                        if (rastgele == j)
                        {
                            kromozom.genEkle(ikincibry.Genler[rastgele]);
                        }
                        else
                        {
                            kromozom.genEkle(ilkbry.Genler[j]);
                        }
                    }
                    else
                    {
                        if (rastgele == j)
                        {
                            kromozom.genEkle(ilkbry.Genler[rastgele]);
                        }
                        else
                        {
                            kromozom.genEkle(ikincibry.Genler[j]);
                        }
                    }
                }
                minnaklar.Add(kromozom);
            }
            return(minnaklar);
        }
コード例 #5
0
 public void kromozomEkle(KromozomS kromozom)
 {
     kromozomlistesi.Add(kromozom);
 }