Содержание архива
- Исходный код проекта на языке программирования Java (запустить можете в IntelliJ IDEA)
- Дипломная работа 52 страницы + 3 приложения (с учетом приложений 74 страницы)
Содержание отчета к программе (Отчет 74 страницы)
- Содержание 6
- Введение 8
- Основные подходы к постановке задачи составления расписания 12
- 1.1. Постановка задачи составления расписания 12
- 1.1.1. Анализ предметной области 13
- 1.1.2. Математическая модель задачи составления расписания 14
- 1.2. Семантический анализ предметной области 18
- 1.3. Систематизация исходных данных 21
- 2. Исследование видов генетических алгоритмов и генетических операторов, влияющих на эффективность алгоритма 22
- 2.1. Методы составления расписания. Выбор метода. 23
- 2.2. Решение задачи составления расписания с использованием генетического алгоритма 27
- 2.3. Основные понятия, используемые при составлении алгоритма 28
- 2.4. Реализация основных этапов алгоритма 29
- 2.4.1. Инициализация 30
- 2.4.2. Моделирование эволюционного процесса 31
- 2.4.3. Параметры генетического алгоритма 36
- 3. Экспериментальная проверка предложенного генетического алгоритма 37
- 3.1. Выбор среды разработки 37
- 3.2. Организация ввода данных 38
- 3.3. Программная реализация генетического алгоритма в проекте 43
- 3.4. Анализ результатов работы алгоритма 47
- Заключение 52
- Список использованных источников 53
- Приложение А Пример кода для заполнения классов «Classroom» и «Distribution» 58
- Приложение Б Код реализации фитнесс-функции, турнирного отбора, кроссовера и мутации62
- Приложение В Форма расписания для печати для студентов и преподавателей 72
Исходное задание на дипломную работу по программированию
1. Задача предназначена для представления расписания занятий студентов факультета компьютерных наук в электронном виде, позволяющем внести дополнительный уровень контроля и исключения ошибок при расстановке предметов по времени, по аудиториям, исключению постановки разных групп в одну аудиторию, а также для предоставления расписания в электронном виде и в виде печатной формы. Цель. найти расписание, обслуживающее все дисциплины, удовлетворяющее требованиям преподавателей к проведению занятий, и не имеющее противоречий и накладок относительно аудиторий.
2. Требования к задаче
2.1. Перечень элементов, ux назначение и основные характеристики, требования к числу уровней иерархии и степени централизации задачи. Задача строится по модульному принципу. Каждый модуль выполняет определенный набор функций, соответствующих каждому объекту автоматизации, и является функциональным элементом. Все элементы пользуются общими информационными ресурсами, хранящимися в единой базе данных.
2.2. Требования к способам и средствам связи для информационного обмена между компонентами задачи. Ввод информации в систему обеспечивается: операторным методом Информация выводится в виде: экранных форм и твердых копий (печатных форм)
2.3. Требования к эргономике и технической эстетике. Обеспечение эмоционального комфорта пользователя с учетом выполнения следующих требований: использование стандартных элементов управления (кнопки, выпадающие списки, меню), принятых в OC Windows выбор оптимального объема одновременно отображаемой текстовой информации; ограничение количества типов шрифтов (не более трех), используемых на экранных формах, и оптимальный подбор их размеров.
2.4. Требования по стандартизации и унификации При эксплуатации системы на устанавливаются Microsoft Office. рабочих местах пользователей
2.5. Требования к функциям, выполняемым задачей.
2.6. Алгоритм работы задачи: B задаче выделены следующие функциональные блоки:
2.6.1. Формирование входных данных: - справочник семестров: семестр, курс, наименование программа подготовки, количество групп, форма обучения, квалификация, срок обучения; справочник дисциплин: наименование дисциплины, вид занятия по дисциплине, количество часов, семестр; справочник аудиторий: номер, дополнительное оборудование, вид занятия, тип аудитории (лекционная, практическая, лабораторная), адрес; - справочник преподавателей: фамилия, имя, отчество, должность, ученое звание; справочник календарный учебный график: месяц, недели, дни; справочник вид занятий: лекция, практика, лабораторная работа (практика и необходимость дополнительного оборудования); справочник учебный день: No занятия, время начала занятия, время окончания занятия.
2.6.2. Формирование учебного плана: семестр, квалификация, дисциплина, вид занятия по дисциплине,
- группа (1, 0 деление по подгруппам: «да»/«нет»).
2.6.3. Распределение дисциплин по преподавателям: семестр, преподаватель, дисциплина, вид занятия по дисциплине, количество часов, ограничение по дням недели (кроме каких-либо дней), ограничение по времени (кроме каких-либо часов, временного интервала).
2.7. Перечень выходных форм: расписание для студентов; расписание для преподавателей; расписание по аудиториям.
2.8. Формирование расписания занятий Входными данными для формирования расписания занятий факультета являются учебный план факультета, списки преподавателей и списки аудиторий. На основании этих сведений формируется расписание занятий студентов и преподавателя. Условия: группа может делиться на подгруппы при проведении практических или лабораторных занятий; ограничения по дням недели (кроме каких-либо дней) и по времени (кроме каких-либо часов, временного интервала) у преподавателей при распределения дисциплин могут быть или не быть, при составлении расписания учитываются, но если это приводит к невозможности проведения занятий в полном обьеме, то не принимаются; дисциплины могут быть числитель знаменатель; - воскресенье - не учебный день; Ограничения (т.е. те ограничения, которые влияют на целевую функцию) - минимальное количество «окон» в расписании, предельная продолжительность рабочего времени преподавателя 36 часов в неделю, максимальная загрузка аудиторного фонда,
Скриншоты из отчета
Описание программного продукта
- Среда разработки: IntellijIdea
- Язык программирования: Java
- Тип кодирования - объектный
- Тип алгоритма - классический
- Вид отбора - турнирный
- Вид скрещивания - одноточечный
- Вид мутации - замена гена
- Оценка приспособленности - функция fitness() с условиями
- Семестры
- Дисциплины
- Аудитории
- Преподаватели
- Виды занятий
- Учебный день
- Дни недели

Фрагмент программного кода
Метод fitness()для реализации фитесс-функции public long fitness() { if(fitnessValue != null) { returnfitnessValue; } fitnessValue = 0L; for (ScheduleRowi : scheduleRows) { for(ScheduleRowj : scheduleRows) { // разные предметы в одной аудитории в одно время if(i.getClassroom().getId().equals(j.getClassroom().getId()) &&i.getSemester().equals(j.getSemester()) &&i.getDayOfWeek().equals(j.getDayOfWeek()) &&i.getTimePeriod().equals(j.getTimePeriod()) && !i.getDiscipline().equals(j.getDiscipline())) { fitnessValue+= HARD_POINTS; } // в одной аудитории разные преподаватели в одно и тоже время if(i.getClassroom().getId().equals(j.getClassroom().getId()) &&i.getSemester().equals(j.getSemester()) &&i.getDayOfWeek().equals(j.getDayOfWeek()) &&i.getTimePeriod().equals(j.getTimePeriod()) && !i.getLecturer().equals(j.getLecturer())) { fitnessValue+= HARD_POINTS; } // одинаковый преподаватель в однов время в разных аудиториях if(i.getLecturer().getId().equals(j.getLecturer().getId()) &&i.getSemester().equals(j.getSemester()) &&i.getDayOfWeek().equals(j.getDayOfWeek()) &&i.getTimePeriod().equals(j.getTimePeriod()) && !i.getClassroom().equals(j.getClassroom())) { fitnessValue+= HARD_POINTS; } // одинаковый преподаватель в однов время ведет разные предметы в разных группах в разных аудиториях if(i.getLecturer().getId().equals(j.getLecturer().getId()) &&i.getSemester().equals(j.getSemester())
-