public int uygunlukFonk(Cozum cozum)
        {
            for (int i_kromozom = 0; i_kromozom < cozum.Kromozom.Count; i_kromozom++)
            {
                int ilce       = cozum.Kromozom[i_kromozom];
                int oncekiIlce = cozum.Kromozom[i_kromozom == 0 ? i_kromozom : i_kromozom - 1];

                Sehir suankiSehir = tumSehirListesi.Where(c => c.Sira == ilce).FirstOrDefault();
                Sehir oncekiSehir = tumSehirListesi.Where(c => c.Sira == oncekiIlce).FirstOrDefault();

                double aradakiMesafe = Geography.CalculateDistance(suankiSehir.Enlem, suankiSehir.Boylam, oncekiSehir.Enlem, oncekiSehir.Boylam);

                // uygunluk fonksıyorunu hesaplanırken tabu da o durum varsa o cozum ceza puanıyle uzaklastırılıyor
                for (int i = 0; i < tabuListemiz.Count; i++)
                {
                    Tabu temp = tabuListemiz[i];
                    if (temp.kimden == oncekiSehir.Sira && temp.kime == suankiSehir.Sira)
                    {
                        aradakiMesafe += 1000 * 100;
                    }
                }
                cozum.Uygunluk += (int)aradakiMesafe / 1000;
            }
            return(cozum.Uygunluk);
        }
        public List <Cozum> swapla(Cozum buNeslinEnIyibireyi)
        {
            List <Cozum> ilkRastgeleCozum = new List <Cozum>();

            //en ıyı bireyımı kısa hafızaya aldım
            ilkRastgeleCozum.Add(buNeslinEnIyibireyi);

            for (int i = 0; i < buNeslinEnIyibireyi.Kromozom.Count - 1; i++)
            {
                List <int> gelenOrjinalKromozom = new List <int>(buNeslinEnIyibireyi.Kromozom);

                int geciciBir = gelenOrjinalKromozom[i];
                int geciciiki = gelenOrjinalKromozom[i + 1];

                gelenOrjinalKromozom[i]     = geciciiki;
                gelenOrjinalKromozom[i + 1] = geciciBir;

                // en iyi bireyimin yan yana cozumlerinin yerini değiştirdim tek tek
                Cozum yeniCozum = new Cozum(gelenOrjinalKromozom, 0);

                //bu swaplanmış olan bıreyın uygunlugu hesaplanıyor
                yeniCozum.Uygunluk = uygunlukFonk(yeniCozum);

                //eger yenı buldugum oncekınden iyiyse
                if (yeniCozum.Uygunluk < buNeslinEnIyibireyi.Uygunluk)
                {
                    //daha iyiye sebep olan kriteri tabuye eklıyorum
                    // ekleme işleminde fifo uygulanıyor. (first in first out, ilk giren ilk çıkar)
                    Tabu tabu = new Tabu(geciciiki, geciciBir);
                    try
                    {
                        tabuListemiz[3] = tabuListemiz[2];
                    }
                    catch (Exception) {}
                    try
                    {
                        tabuListemiz[2] = tabuListemiz[1];
                    }
                    catch (Exception) { }
                    try
                    {
                        tabuListemiz[1] = tabuListemiz[0];
                    }
                    catch (Exception) { }
                    try
                    {
                        tabuListemiz[0] = tabu;
                    }
                    catch (Exception) { }
                }

                //daha ıyı cozumu de kısa hafızaya alıyorum
                ilkRastgeleCozum.Add(yeniCozum);
            }

            /* if (eniyiler.Count != 0)
             * {
             *   Cozum enSonCozum = eniyiler[eniyiler.Count - 1];
             *
             *   if (buNeslinEnIyibireyi.Uygunluk < enSonCozum.Uygunluk)
             *   {
             *   }
             * }
             */
            return(ilkRastgeleCozum);
        }