Автор работы: Пользователь скрыл имя, 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
end.
Листинг Fitness - функции
procedure Fitness(var c:TChrom);
var
i,n: integer;
disc_numbers:TDiscNumbers;
double_disc: integer;
all_hours: integer;
begin
c.fitness:=0;
for i:=1 to c.length do - Формирование массива с номерами дисциплин
disc_numbers[i]:=c.disc[i].
writeln('.');
for i:=1 to c.length do
write (disc_numbers[i],' ');
double_disc:=
if
double_disc>0 then c.fitness:=c.fitness-BALL*
all_hours:=0;
for i:=1 to c.length do - Проверка общего числа часов хромосомы, общему числу часов учебного плана по ФГОС
all_hours:=all_hours+c.disc[
if all_hours<>(HOURS_ALL - HOURS_PRAC-HOURS_EXAM) then
c.fitness:=c.fitness-
h_aud:=0;
h_src:=0;
for i:=1 to c.length do begin - Подсчет и проверка соотношения часов и самостоятельных работ
h_aud:=h_aud+d[i].h_
src_hourse:=srs_hourse[i]
end;
if
(aud_hourse/src_hourse>AUD/
fitness:=fitness-BALL
else fitness:=fitness+BALL
for i:=0 to kolsem do begin
kol_exam:=0; kol_zach:=0;
kol_kr:=0; kol_kp:=0;
for i:=1 to c.koldisc do begin - Подсчет числа экзаменов в семестре
if disc[j].examination=I then
kol_exam++;
if disc[j].final_test=I then
kol_zach++;
if disc[j].yearly_project=I then
kol_kp++;
if disc[j].yearly_work=I then
kol_kr++;
end;
if (kol_exam>KOL_EXAM_SEM) then - Проверка на допустимое число экзаменов в семестре
fitness:=fitness-BALL
else fitness:=fitness+BALL
if (kol_kp>KOL_EARLY_PROJECT_SEM) then
fitness:=fitness-BALL
else fitness:=fitness+BALL
end;
end;
Листинг вариативной функции
Procedure GenerateVariation(d:TDisc; var v:TVariation; var n_v:integer);
var
i,j: integer;
b1,b2,b3,b4: integer;
p1,p2,p3,p4: integer;
l1,l2,l3: integer;
vv:array[1..12]of TDisc;
N:integer;
w: array[1..4]of real;
r:real;
s:integer;
begin
CopyDisc(d,v[1]); v[1].number:=1;
n_v:=1;
{вариации по экзамену зачёту}
CopyDisc(d,v[2]); v[2].number:=2; inc(n_v);
CopyDisc(d,v[3]); v[3].number:=3; inc(n_v);
if (v[1].examination=true) and (d.final_test=true) then
begin
v[2].examination:=true;v[2].
v[3].examination:=false;v[3]
v[3].h_min_by_standart:=v[3]
v[3].h_all:= v[3].h_all-36;
end;
if (v[1].examination=true) and (d.final_test=false) then
begin
v[2].examination:=true;v[2].
v[3].examination:=false;v[3].
v[3].h_min_by_standart:=v[3]
v[3].h_all:= v[3].h_all-36;
end;
if (v[1].examination=false) and (d.final_test=true) then
begin
v[2].examination:=true;v[2].
v[3].examination:=true;v[3].
end;
{вариации по к.работе, к.проекту, домашнему заданию и реферату}
CopyDisc(v[1],v[4]); v[4].number:=4; inc(n_v);
CopyDisc(v[1],v[5]); v[5].number:=5; inc(n_v);
CopyDisc(v[1],v[6]); v[6].number:=6; inc(n_v);
Variation_1_4(v[1],v[4],v[5],
CopyDisc(v[2],v[7]); v[7].number:=7; inc(n_v);
CopyDisc(v[2],v[8]); v[8].number:=8; inc(n_v);
CopyDisc(v[2],v[9]); v[9].number:=9; inc(n_v);
Variation_1_4(v[2],v[7],v[8],
CopyDisc(v[3],v[10]); v[10].number:=10; inc(n_v);
CopyDisc(v[3],v[11]); v[11].number:=11; inc(n_v);
CopyDisc(v[3],v[12]); v[12].number:=12; inc(n_v);
Variation_1_4(v[3],v[10],v[11]
{вариации по часам лекций, лаб. и прак.}
if (v[1].h_laborat=0)and(v[1].h_
begin {выкидуем комбинации экзамен-1 зачёт-1}
j:=1;
for i:=1 to 12 do
if (v[i].examination=false)or(v[
begin
CopyDisc(v[i],
vv[j]); inc(j);
end;
for i:=1 to 8 do
CopyDisc(vv[i], vv[i]);
n_v:=8;
case v[1].h_lection of
14,17,18 : begin b1:=num_weeks*2; b2:=0; end;
28,34,36 : begin b1:=num_weeks; b2:=num_weeks*3;
42,51,54 : begin b1:=num_weeks; b2:=0;
end;
end;
end;
N:=n_v; j:=0;
for i:=1 to N do
begin
CopyDisc(v[i],v[N+i+j]);
v[N+i+j].number:=N+i+j;
inc(n_v);
v[N+i+j].h_lection:=b1;
if b2<>0 then
begin
inc(j);
CopyDisc(v[i],v[N+i+j]);
v[N+i+j].number:=N+i+j;
inc(n_v);
v[N+i+j].h_lection:=b2;
end;
end;
end;
{если лек и лаб }
if (v[1].h_laborat<>0)and(v[1].h_
begin
case v[1].h_lection of
(NUM_WEEK div 2): begin
b1:=num_weeks*2; p1:=num_weeks;
b2:=num_weeks*2; p2:=num_weeks*2;
b3:=0; p3:=0;
b4:=0; p4:=0;
end;
NUM_WEEK : begin
b1:=num_weeks; p1:=num_weeks;
b2:=num_weeks*3; p2:=num_weeks;
if v[1].h_laborat=num_weeks then
begin
b3:=num_weeks*2; p3:=num_weeks*2;
b4:=0; p4:=0;
end
else begin
b3:=num_weeks*2; p3:=num_weeks;
b4:=num_weeks*3; p4:=num_weeks*2;
end;
end;
NUM_WEEK+(NUM_WEEK div 2) : begin
b1:=num_weeks*2; p1:=num_weeks;
b2:=num_weeks*2; p2:=num_weeks*2;
if v[1].h_laborat=num_weeks then
begin
b3:=num_weeks*3;
p3:=num_weeks*2;
end
else begin
b3:=num_weeks*3;
p3:=num_weeks;end;
b4:=0; p4:=0;
end; end;
N:=n_v; j:=0;
for i:=1 to N do
begin
CopyDisc(v[i],v[N+i+j]);
v[N+i+j].number:=N+i+j;
inc(n_v);
v[N+i+j].h_lection:=b1;
v[N+i+j].h_laborat:=p1;
inc(j);
CopyDisc(v[i],v[N+i+j]);
v[N+i+j].number:=N+i+j;
inc(n_v);
v[N+i+j].h_lection:=b2;
v[N+i+j].h_laborat:=p2;
if b3<>0 then
begin
inc(j);
CopyDisc(v[i],v[N+i+j]);
v[N+i+j].number:=N+i+j;
inc(n_v);
v[N+i+j].h_lection:=b3;
v[N+i+j].h_laborat:=p3;
end;
if b4<>0 then
begin
inc(j);
CopyDisc(v[i],v[N+i+j]);
v[N+i+j].number:=N+i+j;
inc(n_v);
v[N+i+j].h_lection:=b4;
v[N+i+j].h_laborat:=p4;
end;
end;
end;
{если лек и прак}
if (v[1].h_practical<>0)and(v[1].
begin
case v[1].h_lection of
14,17,18 : begin
b1:=num_weeks*2;
p1:=num_weeks;
b2:=num_weeks*2;
p2:=num_weeks*2;
b3:=0; p3:=0;
b4:=0; p4:=0;
end;
28,34,36 : begin
b1:=num_weeks;
p1:=num_weeks;
b2:=num_weeks*3;
p2:=num_weeks;
if v[1].h_practical=num_weeks then
begin
b3:=num_weeks*2;
p3:=num_weeks*2;
b4:=0; p4:=0;
Информация о работе Составление учебных планов на основе генетических алгоритмов