public void TestSubGroup()
        {
            List <Lesson>      lessons      = new List <Lesson>();
            List <Teacher>     teachers     = new List <Teacher>();
            List <Group>       groups       = new List <Group>();
            List <Subject>     subjects     = new List <Subject>();
            List <Room>        rooms        = new List <Room>();
            List <SubjectType> subjectTypes = new List <SubjectType>();
            List <RoomType>    roomTypes    = new List <RoomType>();
            STGCfg             config       = new STGCfg(1, 1, 2, 1, 5, 10);

            teachers.Add(new Teacher(0));
            teachers.Add(new Teacher(1));

            List <Group> subGroups = new List <Group>();

            subGroups.Add(new Group(0, 10, 1, 1));
            subGroups.Add(new Group(1, 15, 1, 2));
            groups.Add(new Group(2, 25, subGroups));

            roomTypes.Add(new RoomType(1));

            rooms.Add(new Room(0, 40, roomTypes[0]));
            rooms.Add(new Room(1, 40, roomTypes[0]));

            subjectTypes.Add(new SubjectType(0, 2));

            subjects.Add(new Subject(0, subjectTypes[0]));


            foreach (Group g in groups)
            {
                lessons.Add(new Lesson(teachers[0], g.getSubGroup()[0], subjects[0], roomTypes[0], 2));
                lessons.Add(new Lesson(teachers[0], g.getSubGroup()[0], subjects[0], roomTypes[0], 2));

                lessons.Add(new Lesson(teachers[1], g.getSubGroup()[1], subjects[0], roomTypes[0], 2));
                lessons.Add(new Lesson(teachers[1], g.getSubGroup()[1], subjects[0], roomTypes[0], 2));
            }

            SchoolTimetable stt = new SchoolTimetable(teachers, groups, rooms, lessons, 3, 3, config);

            stt.generateSchoolTimetable();
            stt.print();
            Console.WriteLine("################");
            SchoolTimetable stt2 = new SchoolTimetable(stt);

            stt2.print();

            foreach (Lesson l in stt.getLessons())
            {
                Console.WriteLine(l.ToString());
            }

            Console.WriteLine(stt.isCorrect() + " " + stt.fitness());

            stt.genWeb("subGroupTest");
        }
        public void TestMethod1()
        {
            List <Lesson>      lessons      = new List <Lesson>();
            List <Teacher>     teachers     = new List <Teacher>();
            List <Group>       groups       = new List <Group>();
            List <Subject>     subjects     = new List <Subject>();
            List <Room>        rooms        = new List <Room>();
            List <RoomType>    roomTypes    = new List <RoomType>();
            List <SubjectType> subjectTypes = new List <SubjectType>();
            STGCfg             config       = new STGCfg(1, 1, 5, 1, 5, 10);

            for (int j = 0; j < 7; j++)
            {
                teachers.Add(new Teacher(j));
            }
            for (int j = 0; j < 6; j++)
            {
                List <Group> subGroups  = new List <Group>();
                int          randAmount = new Random().Next(15, 20);
                subGroups.Add(new Group(j + 10, randAmount));
                subGroups.Add(new Group(j + 10, (25 + j) - randAmount));
                groups.Add(new Group(j, 25 + j, subGroups));
            }

            roomTypes.Add(new RoomType(0));
            roomTypes.Add(new RoomType(1));
            roomTypes.Add(new RoomType(2));

            int nr = 0;

            rooms.Add(new Room(nr++, 25, roomTypes[0]));
            rooms.Add(new Room(nr++, 40, roomTypes[0]));
            rooms.Add(new Room(nr++, 40, roomTypes[0]));
            rooms.Add(new Room(nr++, 40, roomTypes[0]));
            rooms.Add(new Room(nr++, 40, roomTypes[0]));
            rooms.Add(new Room(nr++, 40, roomTypes[1]));
            rooms.Add(new Room(nr++, 40, roomTypes[1]));
            rooms.Add(new Room(nr++, 40, roomTypes[1]));
            rooms.Add(new Room(nr++, 40, roomTypes[2]));
            rooms.Add(new Room(nr++, 40, roomTypes[2]));

            subjectTypes.Add(new SubjectType(0, 7));
            subjectTypes.Add(new SubjectType(1, 8));
            subjectTypes.Add(new SubjectType(2, 6));
            subjectTypes.Add(new SubjectType(3, 9));
            subjectTypes.Add(new SubjectType(4, 3));
            subjectTypes.Add(new SubjectType(5, 3));

            int i = 0;

            subjects.Add(new Subject(0, subjectTypes[0]));
            subjects.Add(new Subject(1, subjectTypes[2]));
            subjects.Add(new Subject(2, subjectTypes[1]));
            subjects.Add(new Subject(3, subjectTypes[0]));
            subjects.Add(new Subject(4, subjectTypes[0]));
            subjects.Add(new Subject(5, subjectTypes[1]));
            subjects.Add(new Subject(6, subjectTypes[1]));
            subjects.Add(new Subject(7, subjectTypes[1]));
            subjects.Add(new Subject(8, subjectTypes[4]));
            subjects.Add(new Subject(9, subjectTypes[5]));
            subjects.Add(new Subject(10, subjectTypes[3]));
            subjects.Add(new Subject(11, subjectTypes[3]));

            foreach (Group g in groups)
            {
                int tI     = 0;
                int sI     = 0;
                int amount = 0;
                //max = 45
                //----------pol----------
                tI = 0; sI = 0; amount = 5;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount, 2));
                //----------ang----------
                tI = 1; sI++; amount = 4;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------mat----------
                tI = 2; sI++; amount = 5;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------his----------
                tI = 3; sI++; amount = 1;
                //lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------wos----------
                tI = 3; sI++; amount = 2;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------fiz----------
                tI = 5; sI++; amount = 2;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------bio----------
                tI = 3; sI++; amount = 1;
                //lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------geo----------
                tI = 3; sI++; amount = 2;
                //lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------w-f----------
                tI = 4; sI++; amount = 2;
                lessons.Add(new Lesson(teachers[tI], g.getSubGroup()[0], subjects[sI], roomTypes[2], amount));
                lessons.Add(new Lesson(teachers[tI], g.getSubGroup()[0], subjects[sI], roomTypes[2], amount));

                tI = 3; amount = 2;
                lessons.Add(new Lesson(teachers[tI], g.getSubGroup()[1], subjects[sI], roomTypes[2], amount));
                lessons.Add(new Lesson(teachers[tI], g.getSubGroup()[1], subjects[sI], roomTypes[2], amount));

                //----------rel----------
                tI = 5; sI++; amount = 3;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[0], amount));
                //----------inf----------
                tI = 4; sI++; amount = 2;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[1], amount));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[1], amount));
                //----------pro----------
                tI = 6; sI++; amount = 5;
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[1], amount, 2));
                lessons.Add(new Lesson(teachers[tI], g, subjects[sI], roomTypes[1], amount, 3));
            }
            Console.WriteLine(lessons.Count);

            SchoolTimetable stt = new SchoolTimetable(teachers, groups, rooms, lessons, 5, 9, config);

            stt.generateSchoolTimetable();
            stt.print();

            Console.WriteLine("###############################");

            SchoolTimetable stt2 = new SchoolTimetable(teachers, groups, rooms, lessons, 5, 9, config);

            stt2.generateSchoolTimetable();
            stt2.print();

            Console.WriteLine("###############################");

            SchoolTimetable stt3 = new SchoolTimetable(stt);

            //stt3.print();
            stt3.crossover(stt2);
            //stt3.print();

            Console.WriteLine("###############################");

            stt2.mutate();
            stt2.print();

            Console.WriteLine(stt2.isCorrect() + " " + stt2.fitness());
            stt.genWeb("test1");
        }