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; } } }
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; } } }