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); }
public PersonList List() { var list = new PersonList(); list.AddRange(this.ListHandler()); return(list); }
/// <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); }
// 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 } }
/// <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(); }
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 }; }
/// <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; } } }
// Ç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(); }