static void InitializeFromDataBase(BazaDanychDataContext db, string semestr, out IList<Zajecia> genotyp, out IDictionary<Przedmiot, IList<Prowadzący>> prowadzacyZajecia) { prowadzacyZajecia = new Dictionary<Przedmiot, IList<Prowadzący>>(); //filtr przedmiotow var przedmiotyWSemestrze = db.Przedmiots.Select(x => x).Where(x => x.semestr.Equals(semestr)).ToList(); //ustalenie granic dla locus var wszystkieSale = db.Salas.Select(x => x).ToList(); TimetableLocus.SetBoundry(6 * 10, wszystkieSale.Count); //genotyp = (from przydzial in db.Przypisany_przedmiots // join prowadzacy in db.Prowadzacies on przydzial.id_prowadzacego equals prowadzacy.id // join przedmiot in przedmiotyWSemestrze on przydzial.id_przedmiotu equals przedmiot.id // join grupa in db.Grupas on new {przedmiot.kierunek, przedmiot.rok} equals new { grupa.kierunek, grupa.rok } // select new Zajecia() {Grupa=grupa, Prowadzacy=prowadzacy, Przedmiot=przedmiot} ).ToList(); //do ustalenia genotypu var listaObligatoryjnychPrzedmiotow = (from przedmiot in przedmiotyWSemestrze join grupa in db.Grupas on new { przedmiot.rok, przedmiot.kierunek } equals new { grupa.rok, grupa.kierunek } select new { Grupa = grupa, Przedmiot = przedmiot }).ToList(); genotyp = new List<Zajecia>(); foreach (var e in listaObligatoryjnychPrzedmiotow) { for (int i = 0, length = e.Przedmiot.ćwiczenia / 15; i < length; i++) genotyp.Add(new Zajecia() { Typ = TypZajec.Cwiczenia, Grupa = e.Grupa, Przedmiot = e.Przedmiot, Prowadzacy = null, Index = i }); for (int i = 0, length = e.Przedmiot.laboratoria / 15; i < length; i++) genotyp.Add(new Zajecia() { Typ = TypZajec.Laboratoria, Grupa = e.Grupa, Przedmiot = e.Przedmiot, Prowadzacy = null, Index = i }); } //do mutacji var prowadzacyWszyscy = db.Prowadzącies.Select(x => x).ToList(); foreach (var e in przedmiotyWSemestrze) { var przypisaneZajecia = (from przydzial in db.Przypisany_przedmiots where przydzial.Przedmiot.Equals(e) select przydzial.Prowadzący).ToList(); prowadzacyZajecia.Add(e, przypisaneZajecia); } }
public void values_init() { //---pobranie danych z bazy danych--- var db = new BazaDanychDataContext(); IDictionary<Przedmiot, IList<Prowadzący>> prowadzacyZajecia; IList<Zajecia> genotyp; InitializeFromDataBase(db, this.comboBox1.Text, out genotyp, out prowadzacyZajecia); Application.DoEvents(); //---przypisanie genotypu--- Timetable.Genome = genotyp; //---randomy--- DoubleRandomGenerator randMutation = new DoubleRandomGenerator(); DoubleRandomGenerator randSelector = new DoubleRandomGenerator(); IntegerRandomGenerator randGen = new IntegerRandomGenerator(); IntegerRandomGenerator randMateUp = new IntegerRandomGenerator(); IntegerRandomGenerator randGenSelector = new IntegerRandomGenerator(); //---komponenty algorytmu--- population = new List<Timetable>(); mutation = new TimetableTeacherMutation(prowadzacyZajecia, randMutation, randGenSelector, 0.02); breeder = new TimetableFactory(mutation, randMateUp); evalSelector = new TimetableEvaluator(); //Timetable primeChromosome = breeder.CreateNew(); reproducer = new CrossOverReproducer<Timetable, TimetableLocus, Zajecia>(randMateUp, breeder, new CrossOverReproducer<Timetable, TimetableLocus, Zajecia>.Config() { ChildCount = 2, ParentCount = 2 }); selector = new RouletSelector<Timetable, TimetableLocus, Zajecia>(evalSelector, randSelector); //---inicjacja populacji--- (calosciowy plan dla uczelni) //Application.DoEvents(); for (int i = 0; i < MaxPopulationCount; i++) population.Add(breeder.CreateNew()); //moze zrobic tak... //populacje duzych planow rozpic na N populacjie mniejszych planow //dla kazdego duzego planu //duzy plan uzyskany z populacji rozbic na mniejsze juz teraz //stworzyc populacje pomiejszych planow //przeprowadzic iteracje GA //potem wszystkie te plany skonkatenowac //odtworzyc populacje duzych planow //i ocenic... it = 0; this.wykres.Series[0].Points.Clear(); this.wykres.Series[1].Points.Clear(); this.comboBox1.Enabled = true; this.poprzedni.Enabled = false; this.nastepny.Enabled = true; wybranaGrupa_SelectedIndexChanged(null, null); this.dataGridView1.ReadOnly = false; this.dataGridView1.AllowUserToDeleteRows = true; this.dataGridView2.ReadOnly = false; this.dataGridView2.AllowUserToDeleteRows = true; this.dataGridView3.ReadOnly = false; this.dataGridView3.AllowUserToDeleteRows = true; this.dataGridView4.ReadOnly = false; this.dataGridView4.AllowUserToDeleteRows = true; this.dataGridView5.ReadOnly = false; this.dataGridView5.AllowUserToDeleteRows = true; }