Beispiel #1
0
        public static void Mutasyon(List <Eleman> canta)
        {
            RastgeleSayi sayi  = new RastgeleSayi();
            int          indis = sayi.BetweenInteger(0, canta.Count - 1);

            canta[indis].AlindiMi = 1 - canta[indis].AlindiMi;
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            int    N = 10;
            double Pc = 0.75, Pm = 0.1;



            VeriOkuma    veri           = new VeriOkuma();
            int          elemanlarcount = veri.elemanlarListesi().Count;
            RastgeleSayi sayi           = new RastgeleSayi();
            Knapsack     knapsack       = new Knapsack(N);
            int          rastgele;

            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < elemanlarcount; j++)
                {
                    int agirlik = knapsack.CantaAgirligi(knapsack.Cantalar[i]);
                    if (agirlik <= veri.Kapasite)
                    {
                        rastgele = sayi.BetweenInteger(0, elemanlarcount - 1);

                        int esyaIndisi = knapsack.RastgeleSecim(knapsack.Cantalar[i]);
                        knapsack.CantayaElemanEkle(knapsack.Cantalar[i], veri.elemanlarListesi()[esyaIndisi]);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            RuletiCevir(N, veri.Kapasite, FitnesslariHesapla(N, elemanlarcount, knapsack.Cantalar, veri.Kapasite), Pc, Pm, knapsack.Cantalar);

            Console.ReadKey();
        }
Beispiel #3
0
        public static void Caprazlama(List <List <Eleman> > cantalar, int canta1, int canta2)
        {
            RastgeleSayi  rastgele     = new RastgeleSayi();
            List <Eleman> canta        = new List <Eleman>();
            int           rastgeleSayi = rastgele.BetweenInteger(0, cantalar[0].Count - 1);

            for (int i = 0; i < rastgeleSayi; i++)
            {
                canta.Add(cantalar[canta1][i]);
            }

            for (int i = rastgeleSayi; i < cantalar[i].Count; i++)
            {
                canta.Add(cantalar[canta2][i]);
            }

            cantalar[canta1] = canta;
        }
Beispiel #4
0
        public static List <double> RuletiCevir(int N, int kapasite, List <int> fitnessListesi, double Pc, double Pm, List <List <Eleman> > knapsack)
        {
            double        toplam            = 0;
            double        hesap             = 0;
            RastgeleSayi  olasilik          = new RastgeleSayi();
            List <double> ruletOlasiliklari = new List <double>();

            for (int i = 0; i < N; i++)
            {
                toplam += fitnessListesi[i];
            }
            toplam -= N * kapasite;
            for (int i = 0; i < fitnessListesi.Count; i++)
            {
                hesap = (1 - (fitnessListesi[i] / toplam)) / (fitnessListesi.Count - 1);
                ruletOlasiliklari.Add(hesap);
            }
            List <double> pastaOranlari = new List <double>(PastaOlasiliklariniHesapla(ruletOlasiliklari));

            for (int i = 0; i < fitnessListesi.Count; i++)
            {
                double rastgele = olasilik.BetweenDouble(0, 1);
                if (Pc < rastgele)
                {
                    rastgele = olasilik.BetweenDouble(0, 1);
                    if (rastgele < pastaOranlari[i + 1] && rastgele > pastaOranlari[i - 1])
                    {
                        Caprazlama(knapsack, i, AraligiBul(pastaOranlari, rastgele));
                    }
                }
                rastgele = olasilik.BetweenDouble(0, 1);
                if (Pm > rastgele)
                {
                    Mutasyon(knapsack[i]);
                }
            }
            return(ruletOlasiliklari);
        }