Автор работы: Пользователь скрыл имя, 10 Ноября 2011 в 11:33, дипломная работа
С оптимизацией человек сталкивается постоянно в своей жизни, порой даже не замечая этого. Он выбирает, на каких станциях метро нам лучше пересесть в другой поезд, чтобы добраться до места назначения быстрее и с меньшим числом пересадок. Казалось бы, простая задача, с которой каждый справляется с большим или меньшим успехом. Но даже это простой пример показывает, как неоднозначен выбор. Приходиться проводить оптимизацию по двум критериям – время и количество пересадок. А если таких критериев не 2, а несколько десятков, причём один критерий зависит от определённого количества других, то тут уже не так просто справиться с задачей, найти лучшее сочетание значений этих критериев. Не помогает даже большой опыт человека в области, в которой решается задача оптимизации.
ВВЕДЕНИЕ 3
1. ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ 7
1.1. История появления эволюционных алгоритмов 7
1.2. Общие сведения о ГА 9
1.3. Модели генетических алгоритмов 13
1.4. Другие пути решения задач оптимизации 17
1.5. Применение генетических алгоритмов 21
1.6. Постановка задачи 24
2. ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ ДЛЯ ЗАДАЧ СОСТАВЛЕНИЯ УЧЕБНЫХ ПЛАНОВ 25
2.1. Учебные планы нового поколения. Общие сведения 25
2.2. Формирование рабочих учебных планов 27
2.3. Формирование учебных планов на основе генетических алгоритмов 31
2.4. Соответствие терминов биологии и предметной области 34
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ГЕНЕТИЧЕСКОГО АЛГОРИТМА ДЛЯ ГЕНЕРАЦИИ УЧЕБНЫХ ПЛАНОВ 36
3.1. Выбор языка программирования. Pascal ABC 36
3.2. Функциональная схема работы программы 38
3.3. Описание fitness-функции 42
3.4. Генерация вариативных наборов 44
3.5. Описание констант и переменных программы 46
3.6. Описание функций программы 47
3.7. Результат работы программы 49
ЗАКЛЮЧЕНИЕ 51
Список используемой литературы 52
Таблица 2
Название | Тип | Назначение |
MAX_NUM_DISC_IN_CHROM MIN_NUM_DISC_IN_CHROM MAX_NUM_DISC MAX_NUM_COMPETENCE NUM_CHROM_IN_POPUL NUM_CHROM_TO_CROSS NUM_PAIRS NUM_SEMESTR NUM_YEAR HOURS_ALL HOURS_PRAC HOURS_WORC HOURS_EXAM disc variation real_size_genotype population new_chrom new_chrom_numbers children select1_type select2_type cross_type |
Константы
integer integer integer integer integer integer integer integer integer integer integer integer integer Переменные TDisc Tvariation Integer TIntermediate TIntermediateNumbers TPair TChildren integer integer integer |
Максимальное число дисциплин в хромосоме; Минимальное число дисциплин в хромосоме; Число генов; Уровень компетенции; Число хромосом в популяции; Число особей для скрещивания; Число пар для скрещивания; Количество семестров; Количество лет обучения; Всего часов учебного плана; Часов учебного плана на все практики; Часы на выпускную работу; Часы на подготовку
к ГОС-экзамену; Дисциплина ( ген ); Вариации одной и той же дисциплины; Размер генотипа; Набор хромосом (популяция); Популяция, особи которой будут замещать родителей в популяции; Массив с номерами хромосом после скрещивания; Полученные потомки; Способ выбора хромосом для скрещивания; Способ выбора хромосом для обновления популяции; Способ скрещивания: одно- или двух-точечный; |
Все функции программы были сгруппированы и размещены в трех модулях. Описание функций и используемых переменных каждого модуля представлено в таблице 3.
Таблица 3
Модуль | Функции | Переменные |
UnitReadWriteCopy
– содержит функции для считывания, записи
и вывода параметров базовых дисциплин UnitVariation – формирование
вариативного набора GenAlg – основная программа |
ReadStr(var s:string) и ReadInt(var
s:string) - функции чтения подстроки из
строки ReadDisc(f:Text; var d:TDisc)
и SaveDisc(f:Text; d:TDisc)- функции для чтения из
файла f строки с параметрами базовой дисциплины
и записи её в структуру d:TDisc WriteDisc(d:TDisc)-функция
для вывода на экран всех полей дисциплины CopyDisc(a:TDisc; var d:TDisc)
- функция копирования дисциплины а в дисциплину
d Grow_Comp(d:TDisc) и Low_Comp(d:TDisc)
– функции повышения/понижения уровня
компетенции Variation_1_4(d:TDisc; var
d1:TDisc;var d2:TDisc;var d3:TDisc) - функция для вариации
по к.работе, к.проекту домашнему заданию
и реферату GenerateVariation(d:TDisc;
var v:TVariation; var n_v:integer)- функция генерация
вариатива дисциплины NumDoubleDisc(mas: Fitness(var c:TChrom)- функция
пригодности: получает хромосому и заполняет
её поле fitness значением пригодности GenerateGenotype -функция
создания генотипа - набора из
всех базовых дисциплин с GenerateChrom(var c:TChrom) и GeneratePopulation – функции генерации хромосом и популяций |
Переменные
p, i – вспомогательные переменные; space – переменная символа “пробел”; substr – первая и
последняя часть шифра ; Переменные s – строка дисциплины; pointstr – переменная символа “точка”; substr – шифр бисциплины; p, i - вспомогательные переменные; codestr - первая и последняя часть шифра; b - чтениe полей
Boolean; Переменные Не имеются Переменные Не имеются Переменные Не имеются Переменные b1,b2, b3, b4 - для вариации по наличию; b5, b6,b7,b8 - к. работ, к.проектов; b9,b10,b11,b12 - дом.
заданий, рефератов; Переменные i,j – вспомогательные переменные; b1,b2,b3,b4 – кол-во недель для практик; p1,p2,p3,p4 – кол-во недель для лабораторных; l1,l2,l3 – кол-во недель для лекций; vv – массив дисциплин; N – кол-во вариаций; Переменные i,j,n,a – вспомогательные
переменные; Переменные i,n – вспомогательные переменные; disc_numbers – отдельная дисциплина; double_disc - число повторяющихся дисциплин; all_hours - реальное
число часов; Переменные Fbase, Fgenotype,Fvariation – дескрипторы файлов; d – структура с дисциплиной; num_variation – порядок дисциплины в вариативном наборе; j,k – вспомогательные
переменные; Переменные Не имеются |
Для работы программы были определены двенадцать дисциплин, представленные на рисунке 10.
Рисунок
10 – Исходный файл
с дисциплинами
На
базе каждой из двенадцати дисциплин
были сформированы вариативные наборы,
содержащие от 120 до 240 экземпляров (Рисунок
11) . Пример файла вариативного набора
дисциплин представлен в Приложении 2.
Рисунок 11 – Вариативные наборы дисциплин
Затем из полученных вариативных наборов дисциплин были сгенерирована популяция из 200 «плохих» УП с fitness-функции не выше 20 баллов.
После окончания работы ГА были получены восемь УП с максимальным значением fitness-функции (120 баллов) за 896 449 циклов. Было проведено десять экспериментов и из «УП-победителей» были выбраны наиболее “полезные” и был составлен учебный план занятий (рисунок 12).
Рисунок
12 – Учебный план занятия
Генетические
алгоритмы представляют собой мощное
средство, используемое для решения
задач оптимизации и
Наиболее распространенный и важный для практики классом задач являются задачи оптимизации. Их приходится решать любому из нас или в быту, распределяя свое время между разными делами, или на работе, добиваясь максимальной скорости работы программы. Среди этих задач есть решаемые простым путем, но есть и такие, точное решение которых найти практически невозможно.
Представленный
алгоритм использовался для формирования
ряда магистерских учебных планов кафедры
«Электронных вычислительных машин»
Южно-Российского
Предложенный
способ формирования учебных планов
может применяться для
Таким
образом, генетические алгоритмы являются
эффективной процедурой поиска, которая
конкурирует с другими
программирования».
условиях», - М.: 1991 г., стр. 164-170
данных», М.: 2001г., стр. 220
вузов», - М.: 1987 г., стр. 67-89
«Генетические алгоритмы по-русски» http://www.chat.ru/~saisa
«Нейропроект. Аналитические технологии XXI века» http://www.neuroproject.ru
«Научное издательство ТВП» http://www.tvp.ru/mathem3.htm
«Факультет вычислительной
математики и кибернетики МГУ (ВМиК)» http://cmc.cs.msu.su/labs/lvk/
«Neural Bench Development»
http://www.neuralbench.ru/rus/
Листинг
основной программы
program GenAlg;
uses crt, UnitConstTyteData,
UnitReadWriteCopy, UnitVariation;
begin
clrscr;
randomize;
filename:='discsau.txt';
num_weeks:=NUM_WEEK; - способ отбора хромосом для скрещивания
cross_type:=1; - способ скрещивания: 1 - одноточечный
mutation_probability:=5;
select2_type:=2; - способ выбора хромосом после скрещивания
GenerateGenotype; - сгенерировать генотип - массив genotype
GeneratePopulation; - создать популяцию - массив population
count:=0;
while (count<100) do
begin
inc(count);
case select1_type of
1: IntermediatePopulationRnd; - отобрать из популяции особи для
скрещивания
2: IntermediatePopulationElit; - отобрать из популяции особи для скрещивания
3: IntermediatePopulationRoulete; - отобрать из популяции особи для скрещивания
end;
MakePairsToCross; - составить всевозможные пары для скрещивания
case cross_type of
1: Crossing1; - одноточечное скрещивание хромосом
2: Crossing2; - двухточечное скрещивание хромосом
end;
if (count mod mutation_probability) = 0 then - если прошло 100 циклов
begin
Mutation1;
end;
{отбор особей после скрещивания для записи в популяцию в количестве NUM_CHROM_TO_CROSS}
case select2_type of
1: ChildrenRnd; - случайный выбор потомков
2: ChildrenElit; - отбор элитных потомков
3: ChildrenParentElit; - отбор элитных особей из множества родителей и детей
end;
write('цикл ',count,': ');
for i:=1 to NUM_CHROM_TO_CROSS do
write(new_chrom[i].
{удалить родителей и поместить отобранные особи в популяцию}
ChangePopulation;
FitnessPopulation;
end;
Информация о работе Составление учебных планов на основе генетических алгоритмов