static void Main()
    {
        var persons = new PersonList();

        for (int i = 0; i < 100000; i++)
        {
            persons.Add(new Person("P" + i.ToString(), RandomString(5, true)));
        }

        var unsortedPersons = new PersonList(persons);

        const int COUNT = 30;
        Stopwatch watch = new Stopwatch();

        for (int i = 0; i < COUNT; i++)
        {
            watch.Start();
            Sort(persons);
            watch.Stop();
            persons.Clear();
            persons.AddRange(unsortedPersons);
        }
        Console.WriteLine("Sort: {0}ms", watch.ElapsedMilliseconds);

        watch = new Stopwatch();
        for (int i = 0; i < COUNT; i++)
        {
            watch.Start();
            OrderBy(persons);
            watch.Stop();
            persons.Clear();
            persons.AddRange(unsortedPersons);
        }
        Console.WriteLine("OrderBy: {0}ms", watch.ElapsedMilliseconds);

        watch = new Stopwatch();
        for (int i = 0; i < COUNT; i++)
        {
            watch.Start();
            OrderByWithToList(persons);
            watch.Stop();
            persons.Clear();
            persons.AddRange(unsortedPersons);
        }
        Console.WriteLine("OrderByWithToList: {0}ms", watch.ElapsedMilliseconds);
    }
Exemple #2
0
        public PersonList List()
        {
            var list = new PersonList();

            list.AddRange(this.ListHandler());

            return(list);
        }
Exemple #3
0
        /// <summary>
        /// Returns the person matching this ID
        /// </summary>
        /// <param name="personID"></param>
        /// <returns></returns>
        public PersonList GetPerson(int?personID)
        {
            personID = personID.GetValueOrDefault(0);

            using (var cxt = DataStore.GetDataStore())
            {
                var data = (
                    from person in cxt.Person
                    where (person.PersonID == personID || personID == 0)
                    select person
                    ).ToList();

                data = data.ToList();
            }
            // Run through cache
            Func <string, PersonList> func = delegate(string cacheKey)
            {
                var result = new PersonList();
                using (var cxt = DataStore.GetDataStore())
                {
                    var data = (
                        from person in cxt.Person
                        where (person.PersonID == personID || personID == 0)
                        select person
                        ).ToList();
                    result.AddRange(data);
                }
                result.CacheKey = cacheKey;
                if (personID > 0)
                {
                    result.AddTag(CacheTags.Person, personID);
                }
                return(result);
            };

            var cache = Dependency.Resolve <ICacheManager>();
            var key   = new PersonList()
            {
                CacheKey = "person_" + personID.ToString()
            };
            var list = cache.Load(key, func);

            return(list);
        }
Exemple #4
0
        // Populasyon oluşturma => En büyük ve En küçük değerlere göre random bireyleri oluşturup "PersonList" Listesine ekler
        // İlk Jenarasyon ise "PopulationCount" kadar birey oluşturulur, ilk jenarasyon değil ise "PopulationCount" - "ExclusivenessCount" kadar birey oluşturulur ve
        // Populasyona seçkin bireyleri yani  "ExclusivenessPersonList" listesine ekleyerek "Elitizm" uygulanır
        private void CreatePopulation()
        {
            int Lenght = PopulationCount;

            PersonList.Clear();                                // Yeni Populasyon oluşturacağımız için eskiyi temizliyoruz

            if (ExclusivenessPersonList.Any())                 // Eğer ilk jenerasyon değil ise seçkin bireyleri , yeni populasyona ekliyoruz
            {
                Lenght = PopulationCount - ExclusivenessCount; // Seçkinleri eklediğimiz için , sayıyı azaltıyoruz
                PersonList.AddRange(ExclusivenessPersonList);
            }
            // Populasyonu Oluşturma
            for (int i = 0; i < Lenght; i++)
            {
                Person newPerson = new Person();
                newPerson.Value = rn.Next(MinValueForPerson, MaxValueForPerson); // Min-Max ' a göre random bir birey oluşturuldu

                PersonList.Add(newPerson);                                       // Bireyi populasyona Ekledik
            }
        }
Exemple #5
0
        /// <summary>
        /// Точка вхождения.
        /// </summary>
        /// <param name="args">Аргументы</param>
        public static void Main(string[] args)
        {
            Console.WriteLine("Для начала работы программы " +
                              "нажмите любую клавишу...");
            Console.ReadKey();

            Console.Write("\nСоздаем списки людей... ");
            var artists = new PersonList();
            var actors  = new PersonList();

            Console.WriteLine("Успешно!");
            Console.Write("Заполняем списки людей... ");

            var peopleForFirstList = new Person[]
            {
                new Person("Danzel", "Curry", 35, Genders.Male),
                new Person("Ariana", "Grande", 29, Genders.Female),
                new Person("Kendrick", "Lamar", 33, Genders.Male)
            };

            var peopleForSecondList = new Person[]
            {
                new Person("Tom", "Hanks", 63, Genders.Male),
                new Person("Jim", "Carrey", 57, Genders.Male),
                new Person("Jennifer", "Aniston", 50, Genders.Female)
            };

            artists.AddRange(peopleForFirstList);
            actors.AddRange(peopleForSecondList);

            Properties.Resources.gavno = "gen";

            PrintEndStrings();
            PrintLists(artists, actors);

            Console.Write("Добавляем нового человека в первый список... ");
            var newArtist = new Person("Kid", "Cudi", 35, Genders.Male);

            artists.AddPerson(newArtist);

            PrintEndStrings();

            Console.Write("Копируем второго человека из " +
                          "первого списка во второй... ");
            actors.AddPerson(artists[1]);
            Console.WriteLine("Успешно!\n");

            PrintLists(artists, actors);

            Console.Write("Удаляем второго человека из первого списка... ");
            artists.DeletePersonByIndex(1);
            Console.WriteLine("Успешно!");

            PrintLists(artists, actors);

            Console.Write("Очищаем второй список... ");
            actors.Clear();

            PrintEndStrings();

            Console.Write(
                "Добавляем во второй список случайного человека... ");
            actors.AddPerson(RandomPerson.CreateRandomPerson());
            Console.WriteLine("Успешно!");

            Console.WriteLine(
                "Добавим человека, получая параметры от пользователя...");
            actors.AddPerson(IOConsole.CreateNewPerson());

            PrintLists(artists, actors);

            Console.Write("Для завершения работы нажмите любую кнопку...");
            Console.ReadKey();
        }
Exemple #6
0
        private void CreateList()
        {
            Person one = new Person()
            {
                FirstName = "Sally", LastName = "Sampson"
            };
            Person two = new Person()
            {
                FirstName = "Taylor", LastName = "Swift"
            };
            Person three = new Person()
            {
                FirstName = "John", LastName = "Smith"
            };
            var sPerson = new List <Person>();

            sPerson.Add(one);
            sPerson.Add(two);
            sPerson.Add(three);

            var sList = new PersonList();

            //var sPerson = new List<Person>
            //{
            //    new Person() { FirstName = "Sally", LastName = "Sampson" },
            //    new Person() { FirstName = "Taylor", LastName = "Swift" },
            //    new Person() { FirstName = "John", LastName = "Smith" }
            //};
            //sList.Persons.AddRange(sPerson);
            //sList.Persons.Remove(three);
            sList.AddRange(sPerson);
            sList.Heading = "S";

            Person four = new Person()
            {
                FirstName = "Jane", LastName = "Doe"
            };
            var dList = new PersonList()
            {
                //new Person() { FirstName = "Billy", LastName = "Joel" }
                four
            };

            dList.Heading = "D";

            Person five = new Person()
            {
                FirstName = "Billy", LastName = "Joel"
            };
            var jList = new PersonList();

            //{
            //    new Person() { FirstName = "Billy", LastName = "Joel" }
            //};
            //var jList = new PersonList(jPerson);
            jList.Add(five);
            jList.Heading = "J";

            ListOfPeople = new List <PersonList>()
            {
                dList,
                jList,
                sList
            };
        }
Exemple #7
0
        /// <summary>
        /// Main program
        /// </summary>
        /// <param name="args">Arguments</param>
        static void Main(string[] args)
        {
            Console.WriteLine("Press any key to create lists ");
            Console.ReadKey();
            Console.Write("\nCreating lists... ");

            var listOne = new PersonList();
            var listTwo = new PersonList();

            var firstList = new Person[]
            {
                new Person("Зohn", "Do-e", 45, Gender.Male),
                new Person("Billy", "Herrington", 48, Gender.Male),
                new Person("Lisa", "Su", 50, Gender.Female),
            };

            var secondList = new Person[]
            {
                new Person("Robert", "Swan", 59, Gender.Male),
                new Person("Van", "Darkholme", 47, Gender.Male),
                new Person("Fo-o", "Bar", 34, Gender.Female),
            };

            listOne.AddRange(firstList);
            listTwo.AddRange(secondList);

            Console.WriteLine("\nLists have been created. "
                              + "Press any key to display the lists.");
            Console.ReadKey();
            Console.WriteLine();
            PrintLists(listOne, listTwo);

            bool flag = true;

            while (flag)
            {
                PrintMenu();
                switch (ExceptionHandler())
                {
                case 1:
                    Console.WriteLine("Adding a new person " +
                                      "programmatically...");
                    var newEntry = new Person("Rick", "Astley",
                                              54, Gender.Male);
                    listOne.AddPerson(newEntry);
                    Console.WriteLine("Successful!");
                    Console.WriteLine("Press Y to show list, any key " +
                                      "to go back to the menu.");
                    char key = Console.ReadKey().KeyChar;
                    if (key == 'y' || key == 'н')
                    {
                        PrintLists(listOne);
                    }
                    break;

                case 2:
                    Console.WriteLine("Which index whould you like " +
                                      "to copy?");
                    listTwo.AddPerson(ExceptionHandler(firstList));
                    SuccessfulMethod();
                    PrintLists(listOne, listTwo);
                    break;

                case 3:
                    Console.WriteLine("Which index whould you like "
                                      + " to delete?");
                    listOne.DeletePersonByIndex(IndexExceptionHandler
                                                    (firstList));
                    SuccessfulMethod();
                    PrintLists(listOne, listTwo);
                    break;

                case 4:
                    listOne.AddPerson(RandomPerson.PickPerson());
                    SuccessfulMethod();
                    PrintLists(listOne);
                    break;

                case 5:
                    listTwo.Clear();
                    SuccessfulMethod();
                    PrintLists(listOne, listTwo);
                    break;

                case 6:
                    listOne.AddPerson(CreateNewPerson());
                    PrintLists(listOne, listTwo);
                    break;

                case 0:
                    flag = false;
                    break;

                default:
                    TryAgain();
                    break;
                }
            }
        }
Exemple #8
0
        // Çaprazlama => Tek noktalı çaprazlama yapılıyor.
        // Çaprazlama yaparken Sayılar Bit'e dönüştürülür. Ve bu orana göre bir çaprazlama yapılır
        // Örn: x1 = [1,1,1,1,1] ile x2 = [0,0,0,0,0] iki bireyimiz olsun. Bu oran da 0.6 olsun bu durumda ;
        // Yeni Birey(x1)=> x1'in 0.6sına kadar olan kısmı ve x2'in 0.6'sından sonra olan kısmı yani => [1,1,1,0,0]
        // Yeni Birey(x2))=> [0,0,0,1,1] olur
        // Her 2 Birey İçin Yapılır, bundan Önce hepsi büyükten küçüğe sıralanır
        private void CrossOver()
        {
            // İlk önce bireylerin kromozom yapısı çıkartılır
            // Her bir birey bite dönüştürülür ve değeri tanımlanır
            // Önemli => Bireyleri çaprazlarken uygunluk değerine göre çaprazlancağı için ilk önce uygunluk değerlerine göre sıralandı
            PersonList = PersonList.OrderByDescending(s => s.AccordanceValue).ToList();
            PersonList.ForEach(person => person.BitsValue = ConverToBinary(Math.Abs(person.Value)));

            List <Person> temp = new List <Person>();
            // Çaprazlamayı 2 birey arasında yapacağımız için populasyon sayısı tek ise sondaki elemanı almıyacağız, o yüzden tek olur ise 1 eksilttik
            int length = PopulationCount % 2 == 0 ? PopulationCount : PopulationCount - 1;

            // Girilen Çaprazlama oranına göre kromozomdaki bölüm noktası
            // => Örn: 5 bitlik ise crossRate = 0.6 ise 3.bit hedef noktaso olur
            // Anlamı ilk bireyin  => ilk 3 bitini al , 2.bireyin => 3.bitten sonrakini al
            int targetPoint = Convert.ToInt32(Math.Round((CrossProbability * BitCount), 0));

            // 2 Birey Çaprazlamaya tutulacağı için döngüyü 2 şer arttırdık
            for (int i = 0; i < length; i = i + 2)
            {
                // Çaprazlama İşlemine tabi tutlacak Bireyler
                Person p1 = PersonList.ElementAt(i);     // İlk birey
                Person p2 = PersonList.ElementAt(i + 1); // Bir sonraki birey

                // Yeni Bireyler
                // Tek noktalı çaprazlama ile yeni bireyler oluşturulup, yeni değerleri hesaplanır
                // populasyona eklenir
                // Yeni bireyler eski bireyden kalıtım aldıkları için ilk bireyin işaretini taşırlar => "Negatif" yada "Pozitif"
                Person firstPerson = new Person();
                firstPerson.BitsValue = SinglePointCrossover(p1, p2, targetPoint, true);

                //Negatiflik Kontrolü
                if (Math.Abs(p1.Value) == p1.Value)
                {
                    firstPerson.Value = BinaryToInt(firstPerson.BitsValue);
                }
                else // Negaitf Yapma
                {
                    firstPerson.Value = BinaryToInt(firstPerson.BitsValue) * -1;
                }

                temp.Add(firstPerson);

                Person secondPerson = new Person();
                secondPerson.BitsValue = SinglePointCrossover(p1, p2, targetPoint, false); // 2. Birey oldugu için False

                //Negatiflik Kontrolü
                if (Math.Abs(p2.Value) == p2.Value)
                {
                    secondPerson.Value = BinaryToInt(secondPerson.BitsValue);
                }
                else // Negaitf Yapma
                {
                    secondPerson.Value = BinaryToInt(secondPerson.BitsValue) * -1;
                }

                temp.Add(secondPerson);
            }

            PersonList.Clear();
            PersonList.AddRange(temp);

            // Yeni Bireyler Oluşturuldukta sonra Uygunluk Değerleri Yeniden Hesaplanır
            this.PurposeFunction();
        }