Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
        }