private CourseOffering CreateCourseOffering(Course course, Section section, AcademicSemester currentActiveSemester) { var courseOffering = new CourseOffering { SectionId = section.Id, CourseId = course.Id, AcademicSemesterId = currentActiveSemester.Id }; if (course.Lecture > 0) { courseOffering.Instructors.Add(new InstructorAssignment { TypeId = 1 }); courseOffering.Rooms.Add(new CourseOfferingRoomAssignment { TypeId = 1 }); } if (course.Lab > 0) { courseOffering.Instructors.Add(new InstructorAssignment { TypeId = 2 }); courseOffering.Rooms.Add(new CourseOfferingRoomAssignment { TypeId = 2, LabTypeId = course.LabTypeId }); } if (course.Tutor > 0) { courseOffering.Instructors.Add(new InstructorAssignment { TypeId = 3 }); courseOffering.Rooms.Add(new CourseOfferingRoomAssignment { TypeId = 3 }); } return(courseOffering); }
public ActionResult SaveSemester(AcademicSemestersViewModel model) { if (ModelState.IsValid) { var academicSemester = new AcademicSemester { AcademicYearId = model.AcademicYearId, CurrentSemester = true, Semester = model.Semester, StartDate = model.StartDate, EndDate = model.EndDate }; var academicSemesterStartEvent = new AcademicEvent { Subject = "Academic Semester Start Date", Description = $"Semester {academicSemester.AcademicSemesterTitle} Start Date", Start = model.StartDate }; var academicSemesterEndEvent = new AcademicEvent { Subject = "Academic Semester End Date", Description = $"Semester {academicSemester.AcademicSemesterTitle} End Date", Start = model.EndDate }; var previousSemesters = _context.AcademicSemesters.Where(s => s.CurrentSemester); foreach (var semester in previousSemesters) { semester.CurrentSemester = false; } _context.AcademicSemesters.Add(academicSemester); _context.AcademicEvents.Add(academicSemesterStartEvent); _context.AcademicEvents.Add(academicSemesterEndEvent); _context.SaveChanges(); return(RedirectToAction("Index", "Home")); } return(View("Index")); }
private async Task <ICollection <Schedule> > InitializePopulation(Section section, ScheduleConfiguration scheduleConfiguration, AcademicSemester currentSemester) { ICollection <Schedule> population = new Collection <Schedule>(); var weekDays = await unitOfWork.WeekDays.GetFirstWeekDays(scheduleConfiguration.NumberOfDaysPerWeek); for (int i = 0; i < GeneticAlgorithmConf.POPULATION_SIZE; i++) { var schedule = helper.InitializeScheduleForSection(section, scheduleConfiguration, weekDays.ToList(), currentSemester); population.Add(schedule); } return(population); }
public Schedule InitializeScheduleForSection(Section section, ScheduleConfiguration scheduleConfiguration, IList <WeekDay> weekDays, AcademicSemester academicSemester) { var schedule = new Schedule(section, scheduleConfiguration, weekDays, academicSemester); foreach (var courseOffering in section.CourseOfferings) { var lecture = courseOffering.Course.Lecture; var tutor = courseOffering.Course.Tutor; var lab = courseOffering.Course.Lab; while (lecture > 0) { var randDay = Helper.GetRandomInteger(scheduleConfiguration.NumberOfDaysPerWeek); var lectureInstructor = GetInstructor(courseOffering, LECTURE_ID); var lectureRoom = GetRoom(courseOffering, LECTURE_ID); var scheduleEntry = CreateScheduleEntry(courseOffering.Course, lectureInstructor, lectureRoom, LECTURE_ID); if (lecture >= GeneticAlgorithmConf.MAX_CONSECUTIVE_LECTURE) { scheduleEntry.Duration = GeneticAlgorithmConf.MAX_CONSECUTIVE_LECTURE; lecture -= schedule.AddScheduleEntry(scheduleEntry, randDay); } else if (lecture > 0) { scheduleEntry.Duration = GeneticAlgorithmConf.MAX_CONSECUTIVE_LECTURE - 1; lecture -= schedule.AddScheduleEntry(scheduleEntry, randDay); } } while (tutor > 0) { var randDay = Helper.GetRandomInteger(scheduleConfiguration.NumberOfDaysPerWeek); var tutorInstructor = GetInstructor(courseOffering, TUTOR_ID); var tutorRoom = GetRoom(courseOffering, TUTOR_ID); var scheduleEntry = CreateScheduleEntry(courseOffering.Course, tutorInstructor, tutorRoom, TUTOR_ID, duration: 1); tutor -= schedule.AddScheduleEntry(scheduleEntry, randDay); } while (lab > 0) { var randDay = Helper.GetRandomInteger(scheduleConfiguration.NumberOfDaysPerWeek); var labInstructor = GetInstructor(courseOffering, LAB_ID); var labRoom = GetRoom(courseOffering, LAB_ID); var scheduleEntry = CreateScheduleEntry(courseOffering.Course, labInstructor, labRoom, LAB_ID); if (lab >= GeneticAlgorithmConf.MAX_CONSECUTIVE_LAB) { scheduleEntry.Duration = GeneticAlgorithmConf.MAX_CONSECUTIVE_LAB; lab -= schedule.AddScheduleEntry(scheduleEntry, randDay); } else if (lab >= (GeneticAlgorithmConf.MAX_CONSECUTIVE_LAB - 1)) { scheduleEntry.Duration = GeneticAlgorithmConf.MAX_CONSECUTIVE_LAB - 1; lab -= schedule.AddScheduleEntry(scheduleEntry, randDay); } } } return(schedule); }