Ejemplo n.º 1
0
        void initArrays()
        {
            groupSubjectEdge = new int[groups.Count, subjects.Count];

            dayState = new ScheduleDayState[workDays + 1];
            List <Group> refList = groups.Select(g => g.CloneFull()).ToList();

            for (int day = 1; day <= workDays; day++)
            {
                dayState[day] = new ScheduleDayState(refList.Select(g => g.ClonePartial(g.weekLims)).ToList(), teachers, maxLessons);
            }

            groupSubject2Teacher = new int[groups.Count, subjects.Count];
            for (int g = 0; g < groups.Count; g++)
            {
                for (int s = 0; s < groups[g].subject2Teacher.Count; s++)
                {
                    if (groups[g].subject2Teacher[s].Item2 == null)
                    {
                        continue;
                    }

                    groupSubject2Teacher[g, s] = teachers.FindIndex(t => t.name == groups[g].subject2Teacher[s].Item2.name);
                }
            }

            teacherGroup2Subjects = new List <int> [teachers.Count, groups.Count];
            for (int t = 0; t < teachers.Count; t++)
            {
                for (int g = 0; g < groups.Count; g++)
                {
                    teacherGroup2Subjects[t, g] = new List <int>();
                    for (int s = 0; s < groups[g].subject2Teacher.Count; s++)
                    {
                        if (groups[g].subject2Teacher[s].Item2 == null)
                        {
                            continue;
                        }

                        if (groups[g].subject2Teacher[s].Item2.name == teachers[t].name)
                        {
                            teacherGroup2Subjects[t, g].Add(s);
                        }
                    }
                }
            }

            if (lastConfig is null)
            {
                lastConfigSolution = new DaySchedule[workDays + 1];
                lastConfig         = new List <Tuple <int, int> > [workDays + 1][];
                for (int day = 1; day <= workDays; day++)
                {
                    lastConfig[day] = null;
                }
            }
        }
Ejemplo n.º 2
0
        void init()
        {
            allMultilessons = new List <Multilesson>();
            foreach (Group g in groups)
            {
                foreach (Multilesson m in g.requiredMultilessons)
                {
                    allMultilessons.Add(m);
                }
            }

            usedMultilessons = new bool[allMultilessons.Count];
            for (int i = 0; i < usedMultilessons.Length; i++)
            {
                usedMultilessons[i] = false;
            }

            dayState = new ScheduleDayState[workDays + 1];
            List <Group> refList = groups.Select(g => g.CloneFull()).ToList();

            for (int day = 1; day <= workDays; day++)
            {
                dayState[day] = new ScheduleDayState(refList.Select(g => g.ClonePartial(g.weekLims)).ToList(), teachers, maxLessons);
            }

            for (int day = 1; day <= workDays; day++)
            {
                supergroupMultilessons[day] = new List <Tuple <SuperGroup, int> >(100);
            }

            teacherDemand = new int[teachers.Count];
            for (int t = 0; t < teachers.Count; t++)
            {
                teacherDemand[t] = superGroups.Where(sg => sg.teachers.Any(x => x.Equals(teachers[t]) == true) == true).Sum(sg => sg.weekLessons);
            }

            supergroup2TeacherInds     = new List <int> [superGroups.Count];
            supergroup2GroupSubjetInds = new List <Tuple <int, int> > [superGroups.Count];

            for (int i = 0; i < superGroups.Count; i++)
            {
                supergroup2TeacherInds[i] = new List <int>();
                foreach (Teacher t in superGroups[i].teachers)
                {
                    supergroup2TeacherInds[i].Add(teachers.FindIndex(x => x.Equals(t)));
                }

                supergroup2GroupSubjetInds[i] = new List <Tuple <int, int> >();
                foreach (var g in superGroups[i].groups)
                {
                    supergroup2GroupSubjetInds[i].Add(Tuple.Create(groups.FindIndex(x => x.Equals(g.Item1) == true),
                                                                   g.Item1.findSubject(g.Item2)));
                }
            }

            supergroupMultilessonsAdded = new bool[superGroups.Count][];
            for (int i = 0; i < supergroupMultilessonsAdded.Length; i++)
            {
                supergroupMultilessonsAdded[i] = new bool[superGroups[i].requiredMultilessons.Count];
                for (int j = 0; j < supergroupMultilessonsAdded[i].Length; j++)
                {
                    supergroupMultilessonsAdded[i][j] = false;
                }
            }
        }