Skemalægning med genetiske algoritmerflasch.dk/wp-content/uploads/speciale.pdf · Resume: I dette...
Transcript of Skemalægning med genetiske algoritmerflasch.dk/wp-content/uploads/speciale.pdf · Resume: I dette...
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
Skemalægning med genetiske algoritmer
Datalogisk speciale, RUC 2/6/2009 Skrevet af: Flemming R.P. Rasch Vejleder: Henning Christiansen
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
2
Resume:
I dette speciale præsenteres skemalægning som et data-
logisk problem. Der gennemgås forskellige løsningsme-
toder fra litteraturen, med speciel fokus på genetiske
algoritmer. Det demonstreres herefter med et problem
taget fra praksis samt til lejligheden fremstillet program-
mel hvordan skemalægningsproblemer kan løses ved
hjælp af genetiske algoritmer. Løsningen diskuteres og
sammenlignes med andre løsninger.
Building timetables with genetic algorithms
Abstract:
In this thesis automated timetabling as a computer sci-
ence field of study is presented. Various methods for
solving timetabling problems are shown, with special
focus on genetic algorithms. A real timetabling problem
is then solved with genetic algorithm software made for
this thesis and the solution is evaluated and compared to
other solutions.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
3
Indhold
1 Indledning ..........................................................................................................4
1.1 Skemalægning...........................................................................................4
1.2 Genetiske algoritmer.................................................................................4
1.3 Målet med dette speciale...........................................................................4
2 Skemalægning....................................................................................................5
2.1 Typer af skemalægningsproblemer...........................................................5
2.1.1 Skoleskemaer ...................................................................................5
2.1.2 Lektionsplaner..................................................................................6
2.1.3 Eksamensplaner ...............................................................................6
2.1.4 Andre................................................................................................7
2.2 Skemalægning i folkeskoler/gymnasier ....................................................7
2.2.1 Skemaets parametre .........................................................................7
2.3 Karakteristik af skemalægning som datalogisk problem..........................8
2.3.1 Finde løsninger.................................................................................8
2.3.2 Optimering .......................................................................................8
2.3.3 Kompleksitet og eksistens af løsning...............................................8
3 Metoder til automatisk skemalægning .............................................................10
3.1 Simple heurestikker ................................................................................10
3.2 Tabu search .............................................................................................10
3.3 Simulated annealing................................................................................10
3.4 Constraint logic programming ................................................................11
3.5 Genetiske algortimer...............................................................................11
3.5.1 Hollands skemateorem og byggeklodshypotesen.........................12
3.6 Memetiske algoritmer .............................................................................12
3.7 Andre metoder ........................................................................................13
4 GenetiskSkema - en genetisk algoritme til skemalægning ..............................14
4.1 Designovervejelser..................................................................................14
4.1.1 Genomer og gener.........................................................................14
4.1.2 Hard constraints ............................................................................14
4.1.3 Fitness ...........................................................................................15
4.2 Implementerede hard constraints ............................................................15
4.3 Implementerede soft constraints .............................................................15
4.4 Beskrivelse af programmel .....................................................................16
4.4.1 Java klasser ...................................................................................16
4.5 Kalibrering ..............................................................................................17
4.6 En praktisk test........................................................................................18
4.6.1 Præsentation af test-problem..........................................................18
4.6.2 Vurdering af programmellets praktiske anvendelighed .................18
4.6.3 Analyse af testdata .........................................................................19
4.6.4 Sammenligning med et færdigudviklet skemalægningsprogram...21
4.7 Test af den genetiske algoritme ..............................................................25
4.8 Konklusion på test...................................................................................26
5 Konklusion.......................................................................................................27
5.1 Forskningsfeltet skemalægning nu og i fremtiden..................................27
6 Litteratur ..........................................................................................................28
Appendiks A: Programkode............................................................................... 30
Appendiks B: Beskrivelse af parametre og inddata........................................... 46
Appendiks C: Inddata og uddata for praktisk test.............................................. 48
Appendiks D: Inddata og uddata for test af den genetiske algoritme ................ 58
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
4
1 Indledning
Datalogiske problemer er ofte ganske praktiske problemer, som lader sig løse til en hvis grad
uden brug af maskiner, men hvor computere vil muliggøre en hurtigere og/eller bedre løs-
ning. Et eksempel på dette er hvordan man lægger et skema for undervisningen på en skole.
Indenfor området kunstig intelligens, et område af datalogien der udsprang af ønsket om at
lave en computer der efterlignede en menneskehjerne, findes der nu en lang række teknolo-
gier, som er inspireret af studier af naturen, men som i stedet for at bruges i forsøg på at ef-
tergøre naturen, anvendes som praktiske løsninger på veldefinerede problemer. En af disse
teknologier er genetiske algoritmer og et af de praktiske problemer, der ofte søges løst ved
hjælp af genetiske algoritmer, er netop skemalægning.
1.2 Skemalægning
Ved skemalægning forstås tidsplanlægning af aktiviteter for en større mængde personer over
et længere tidsrum. Det forudsættes at aktiviteternes tidsforbrug og fordeling på personer er
bestemt på forhånd, så problemet består i at fordele personernes aktiviteter indenfor nogle
givne rammer.
1.2 Genetiske algoritmer
Genetiske algoritmer er algoritmer som er baseret på principper fra genetikken, nærmere be-
stemt hvordan en population af individer udvikler sig over tid. Begreberne tilpasning, re-
kombination af DNA og mutation bruges til at lade en række løsninger til et problem udvikle
sig frem mod en stigende grad af anvendelighed, på samme måde som individer i en popula-
tion i naturen bliver tilpasset deres omgivelser.
1.3 Målet med dette speciale
I det følgende vil problemet skemalægning blive kortlagt og forskellige måder det er løst på i
litteraturen bliver gennemgået, med særlig fokus på genetiske algoritmer og relaterede meto-
der. Dernæst vil en konkret implementering af en genetisk algoritme til løsning af problemet
blive præsenteret og vurderet.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
5
2 Skemalægning
Givet et antal personer der skal deltage, som oftest elever, E, et antal hold eller klasser de er
delt op i, K, et antal aktiviteter eller fag de skal deltage i / undervises i, F, og et antal perso-
ner der skal stå for disse aktiviteter, som oftest lærere der skal undervise, U. Med notation
fra relationsdatabaser har vi da følgende funktionelle afhængigheder:
E → K
K → F
U → KF
Problemet består da i at der er givet en række tidsintervaller, T, og et antal lokaler, L, der er
til rådighed indenfor hvert tidsinterval. Aktiviteterne, hvert bestående af et hold(klasse) K og
en aktivitet (fag) F, skal da fordeles på tidsintervallerne og lokalerne:
KF → TL
Fordelingen skal dels ske under overholdelse af nogle regler for hvad der skal lade sig gøre, i
det følgende kaldet hard constraints (da de er ufravigelige begrænsninger), dels skal der ske
en optimering af fordelingen i forhold til en lang række ønsker som skemalæggeren har til
skemaet, der ofte præsenteres som soft constraints (ønskelige, men ikke ufravigelige krav).
En typisk hard constraint er at en underviser ikke kan være to steder på en gang. En typisk
soft constraint er at der ikke må være utildelte tidsintervaller tilhørende den samme klasse
den samme dag, som er omkranset af tildelte tidsintervaller (også kaldet mellemtimer).
2.1 Typer af skemalægningsproblemer
Skemalægningsproblemer er i virkeligheden en række forskelligartede problemer, som dog
har så meget til fælles at metoderne til at løse dem i høj grad er de samme. Men programmel-
let til løsning af problemerne vil have meget forskellige krav til f.eks. konkret udformning af
algoritmer og brugerinterface, så det er ofte kun på det teoretiske plan der kan udveksles vi-
den.
2.1.1 Skoleskemaer
I en skole – folkeskole, gymnasium og lignende - har man typisk et identisk skema uge for
en uge gennem et helt skoleår eller en længere periode. Tidsintervallerne lader sig derfor
nemt sætte op på skemaform:
Som regel er det sådan med skoleskemaer at der er lokaler nok til at samtlige klasser kan un-
dervises samtidig. Det vil derfor kun være specielle lokaler som fysiklokaler, IT-lokaler og
gymnastiksale, som der skal tages hensyn til ved skemalægningen. Problemet bliver da redu-
ceret til:
Mandag Tirsdag …
Kl. 8-9 Tii Tji …
Kl. 9-10 Tij Tjj …
Kl. 11-12 Tik Tkk …
... … … …
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
6
KF → T
Undervisere på en skole bruger tid på andet end undervisning – forberedelse til undervis-
ning, møder, kurser m.m. – så set fra en undervisers side vil der generelt være meget færre
tidsintervaller at udfylde med undervisning i løbet af en uge end set fra en elevs side.
En anden karakteristisk egenskab, i forhold til nogle af de andre skemalægningsproblemer,
er at det sjældent forekommer at elever følger flere hold/klasser. Der forekommer dog hold
på tværs af de faste klasser, men som regel vil det kun være et mindre antal af fagene det fo-
rekommer i, og ske på en af disse måder:
1. Elever i samme klasse splittes op og undervises hver for sig i to eller flere hold.
2. Elever fra to eller flere klasser slås sammen og undervises samtidigt.
3. En kombination af ovenstående.
Det første tilfælde kan f.eks. repræsenteres ved at indføre to nye klasser, med den hard
constraint at disse klasser ikke kan undervises samtidigt med den klasse de stammer fra. I det
andet tilfælde kan man f.eks. slække på hard constraints om at en lærer ikke kan være to ste-
der på en gang og sørge for at klasse/fag-kombinationen bliver tildelt de samme tidsinterval-
ler for alle klasserne.
2.1.2 Lektionsplaner
På universiteter er elever (studerende) ikke delt op i grupper i nær samme grad. I princippet
er alle fag åbne for alle studerende, når forudsætninger opfyldes. Hvis der laves en lektions-
plan, hvori alle fag på det pågældende universitet optræder, er man derfor interesseret i at
optimere mængden af mulige studieforløb for de enkelte studerende, så visse anbefalede stu-
dieforløb altid er mulige, mens muligheden for andre kombinationer af fag der kan passe
sammen er størst mulig. Det vil sige det er
E´K → T
hvor E´ er eksempler på elever der følger forskellige anbefalede studieforløb som skal være
mulige. Det er således ikke er krav, som med f.eks. skoleskemaer, at alle studerende skal ha-
ve et skema hvor det er muligt at følge alle fag på alle tidspunkter, da det er muligt at vælge
andre end de anbefalede forløb.
Når tilmeldingerne er sket, skal der så lægges et nye skema for lokalefordelingen, da man
først på dette tidspunkt kender antal studerende pr. hold.
2.1.3 Eksamensplaner
At planlægge eksamen minder en del om at lave et skoleskema, men der er her ikke tale om
et skema for en uge som genbruges. Der skal tages hensyn til andre ting end ved skoleske-
maet, så som at der skal være et vist mellemrum mellem at de samme elever skal til eksamen
og at mundtlige eksameners tidsforbrug afhænger af antal elver der skal til eksamen. Tidspe-
rioderne vil ofte være meget forskellige fra fag til fag, og med hensyn til optimering (soft
constraints) gælder det om at få fordelt eksamenerne jævnt ud over hele eksamenstiden for
hver klasse og elev, hvilket er det omvendte af optimering af skoleskemaet, hvor det som
regel gælder om at undgå for lange pauser mellem fagene.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
7
2.1.4 Andre
Planlægning af større arrangementer, koordinering af kalendere og planlægning af større
sportsbegivenheder har problemstillinger der minder om skemalægning.
2.2 Skemalægning i folkeskoler/gymnasier
En gang eller et par gange om året skal der på de fleste skoler lægges et skema. Det sker ef-
ter det er klart hvilke klasser der bliver i den kommende periode, hvilke fag de skal have
samt hvordan lærerne skal fordeles på fag og klasser. Som regel afleverer lærerne nogle øn-
sker til den del af skemaet der vedrører dem, som skemalæggeren kan tage hensyn til. Heref-
ter lægges et skema en gang for alle, der sjældent laves om i løbet af den periode det gælder
for.
2.2.1 Skemaets parametre
Næsten al undervisning på traditionelle skoler er opdelt i et antal lektioner pr. dag der falder
på ganske bestemte tidsintervaller og har en varighed af 45 minutter, og der er næsten altid
fem ugedages undervisning. Den uge gentages da gennem hele perioden. Det forekommer at
der er undervisning som ikke følger disse regler, men det er som regel et langt mindre pro-
blem at håndtere dette end at lægge selve det store skema, så det bliver normalt lavet manu-
elt.
Typisk er der op til 8-10 lektioner på en dag og skemaet gælder for et halvt år eller et helt
skoleår.
En klasse har i størrelsesorden 10 forskellige fag, hvert fag med typisk 2-4 lektioner pr. uge.
Antal klasser på en skole varier fra nede omkring 6-8 klasser for et lille gymnasium eller en
lille handelsskole, op til måske 40-50 klasser for en stor folkeskole.
Antal fag en skole udbyder vil være noget større end antallet af fag en enkelt klasse har, da
fagene veksler med årgang og for eksempel studieretning for klassen. Størrelsesorden 20-30
fag.
Antal lærere vil naturligvis afhænge af antallet af elever, da antal elever pr. klasse er nogen-
lunde det samme for store og små skoler. Da lærere generelt har færre timer undervisning pr.
uge end elever på grund af forberedelse, mødeaktivitet m.m., vil antallet at lærere være i
størrelsesorden det dobbelte af antal klasser.
De fleste steder har klasserne et klasseværelse hvor det meste af undervisningen foregår.
Derfor er det ikke nødvendigt at lave lokalefordeling, på nær for speciallokaler.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
8
2.3 Karakteristik af skemalægning som datalogisk problem
Skemalægning handler grundlæggende om at finde en løsning på et problem med at få nogle
ressourcer - tid og lærere - fordelt på nogle ressource-forbrugere - klasser og elever - kombi-
neret med et problem med at finde frem til den af disse løsninger der er mest optimal ud fra
nogle andre kriterier.
2.3.1 Finde løsninger
Blot at finde en løsning der overholder et antal hard constraints er et problem der kan løses
rent logisk: Der kan være ingen, mange eller eventuelt en enkelt løsning på problemet. I
praksis vil der næsten altid være mange løsninger på problemet, da man inden skemaet skal
lægges sørger for at for eksempel ingen lærere har flere timer end der er plads til i et skema.
Men det kunne være relevant at lave en undersøgelse af eksistens af en løsning inden selve
skemalægningen går i gang.
2.3.2 Optimering
Ved optimering er der et antal ønsker fra brugerne af skemaet som på en eller anden måde
skal kvantificeres. Dernæst skal programmellet sørge for at disse ønsker bliver opvejet mod
hinanden i den løsning der findes.
Problemet med at kvantificere et ønske lader sig ikke løse entydigt. I økonomisk teori har
man begreber som nytteværdi og paretooptimale løsninger. Her antager man ved hjælp af
markedsmekanismer kan omsætte ønsker i målbare mængder nytte og at man kan finde frem
til en løsning der er mest optimal for alle parter. Det er muligt, om end måske ikke særligt
praktisk, at indføre markedsmekanismer i skemalægning, men i praksis foregår det på en må-
de der i forhold til økonomisk teori minder mere om planøkonomi: Optimeringen sker på
baggrund af ønsker, men hvordan ønskerne vurderes i forhold til hinanden er kalibreret ind i
skemalægningen afhænger af en kombination af tilfældigheder, skemalæggerens intuition,
programmellets særheder m.m.
Men så længe ønskerne er udmøntet i soft constraints og der er foretaget en passsende kali-
brering af programmellet, er det datalogiske problem blot at finde en optimal løsning baseret
på de data der er givet. Det vil ofte ske ved at opstille en funktion som giver en værdi for
hvor god løsningen er (ud fra hvor mange constraints der er overholdt) og finde den løsning
med højest værdi. I praksis er skemalægning et alt for komplekst problem til at man kan fin-
de frem til præcis den løsning der har den højeste værdi, så der anvendes i stedet mere eller
mindre avancerede heurestikker.
2.3.3 Kompleksitet og eksistens af løsning
Kompleksitet af datalogiske problemer klassificeres ofte efter hvor hurtigt man kan finde en
løsning på dem, dvs. hvor hurtigt den bedste algoritme der kan løse problemet kan fuldføres.
En speciel klasse af særligt svære problemer er NP-komplette problemer. Her vil tiden det
kræver at finde en løsning på problemet som funktion af problem-størrelsen ikke kunne be-
skrives som et polynominum (dvs. f.eks. som kvadratet på problem-størrelsen), men værre
end det. (Se f.eks. Russel og Norvig s. 978). Skemalægning vil ofte være et NP-komplet pro-
blem. Cooper og Kingston demonstrerer dette ved konstruere et sprog der beskriver skema-
lægning (C og S s. 284), og herefter vise at forskellige delproblemer, der opstår ved skema-
lægning, er ækvivalente med kendte NP-komplette problemer. Helt generelt kan man dog
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
9
ikke sige at skemalægning er NP-komplet, men i praksis er det næppe muligt at udnytte at
der kan forekomme mindre komplekse skemalægningsproblemer.
Da soft constraints ikke nødvendigvis skal overholdes, vil et skemalægningsproblem have en
løsning, såfremt alle hard constraints kan overholdes.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
10
3 Metoder til automatisk skemalægning
Maskinel skemalægning anvendtes allerede for over 30 år siden, men især indenfor de sene-
ste 10-15 år er der sket meget forskning på området. Blandt andet afholdes der ca. hvert an-
det år en ”International Conference on the Practice and Theory of Automated Timetabling”,
senest i 2008.
Der er grundlæggende to typer heurestikker som bruges til at søge løsninger på et problem
som skemalægning:
1. Global søgning, hvor man søger bredt blandt alle mulige løsninger.
2. Lokal søgning, hvor man søger stadig bedre løsninger nær en allerede fundet løsning.
Ulempen ved lokal søgning er at man risikerer at ende med et lokalt maksimum, som er en
løsning der er god blandt de løsninger der er undersøgt, men globalt set er dårlig. Ulempen
ved global søgning er den ofte er ret usystematisk og tidskrævende. En af årsagerne til at
man ofte ser kombinationer af de to typer heurestikker er et ønske om at begrænse disse
ulemper.
3.1 Simple heurestikker
De første forsøg på at lave automatisk skemalægning anvendte heurestikker man kendte fra
de manuelle metoder. (Schaerf s. 7). Som for eksempel at man fandt frem til de fag, lærere
eller klasser der var sværest at placere, og lagde dem i skemaet først, dernæst de næstsvæ-
reste o.s.v.
3.2 Tabu search
Tabu søgning er en udvidet form af simpel lokal søgning efter maksimum. (Boufflet og
Nègre s. 335). Udvidelsen består i at tilføje en tabu-liste over løsninger der allerede har væ-
ret prøvet og som er ”tabu” for søgningen indtil nogle andre løsninger har været prøvet. Al-
goritmen kører således:
1. Find en løsnings-kandidat
2. Find en nabo-løsning, der ikke er på tabu-listen, til den bedste løsning der haves.
3. Beregn (ved hjælp af en funktion) hvor god den nye løsning er.
4. Hvis den nye løsning er dårligere end den gamle, hoppes tilbage til 2.
5. Hvis den nye løsning er bedre end den gamle, vælges denne løsning som den nye bedste
og den gamle bedste løsning smides på tabu-listen. Såfremt kriteriet for at stoppe
(konvergens eller antal gennemløb) ikke er opnået, hoppes tilbage til 2.
Ved at have en tabu-liste udgås det hele tiden at støde på de samme løsninger og derved kan
algoritmen springe væk fra et eventuelt lokalt maksimum.
3.3 Simulated annealing
Simulated annealing (”simuleret udglødning”) er en metode baseret på hvordan stoffer køler
af i naturen (Thompson og Dowsland s. 346). Hvis man køler stof ned meget hurtigt, kan der
opstå spændinger og uhensigtsmæssige strukturer i det, mens en langsom nedkøling kan ud-
jævne spændinger og give et mere homogent materiale. Som analogi for søgningsalgoritmer,
svarer en høj temperatur til store spring for hver søgning, mens lave temperaturer svarer til
små spring. Ideen er da at man starter med at søge efter løsninger der ligger i et bredt område
og efterhånden ”sænker temperaturen” og koncentrerer sig om at forbedre de lokale løsnin-
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
11
ger der er fundet. Ved at man starter med en ”høj temperatur” og søger løsninger bredt,
mindskes chancen for at havne i et lokalt maksimum.
3.4 Constraint logic programming
Denne metode (Cheng m.fl. s. 116) går ud på at fylde skemaet op, en lektion ad gangen, ind-
til der haves et færdigt skema. For hver lektion der søges placeret, gennemgås samtlige
contraints. Hvis det ikke er muligt at opfylde alle constraints, fjernes de i en bestemt række-
følge, indtil det er muligt at placere lektionen. Hvis det ikke er muligt at placere lektionen
uden at overtræde en hard constraint, aktiveres en anden algoritme, som forsøger at omplace-
re de lektioner der allerede er placeret. Resultatet, såfremt algoritmerne kan finde en løsning,
er et skema hvor alle hard constraints er opfyldt, mens soft constraints er opfyldt i større eller
mindre grad.
Fordelen ved denne metode er at nye constraints blot skal formuleres og ikke kræver en stør-
re mængde ekstra programmering. Den tilsvarende ulempe er at det kræver et meget kom-
plekst logisk sprog at formulere alle tænkelige constraints, så arbejdet i stedet består i at im-
plementere et sådant sprog.
3.5 Genetiske algoritmer
Genetiske algoritmer er heurestikker der bruger global søgning . Ligesom f.eks. kunstige
neurale netværk er genetiske algoritmer grundlæggede en statistisk metode til at få et system
af tal og beregninger til at konvergere mod en løsning på et givet problem.
Inspirationen til genetiske algoritmer kommer fra Charles Darwins teori om evolution: De
forskellige biologiske arter udvikler sig over tid, fordi de tilpasser sig deres omgivelserne og
bliver bedre til at leve i dem. Det sker ved et ganske enkelt princip: Der opstår små ændrin-
ger i individerne, og de ting som fører til bedre tilpasning overlever på lang sigt, ved at disse
individer bedre er i stand til at overleve og forplante sig. Mange små ændringer bliver over
tid til store ændringer. Det på Darwins tid meget kontroversielle var at det var tilfældigt op-
ståede ændringer som var basis for evolutionen. Med genetiske algoritmer som datalogisk
metode er der ikke den slags problemer, da det er ganske meget nemmere at demonstrere en
algoritme end en biologisk evolution der forløber over lange tidsrum.
En genetisk algoritme består af følgende dele:
• Genomer, som er en løsnings-kandidater til det problem man ønsker at løse.
• Fitness, som er en egenskab ved genomet, udregnet efter hvor god en løsning det er.
• Gener, som er dele af genomer – et genom består af et antal gener.
• En population af genomer.
Algoritmen forløber således:
1. Populationen ældes. Nogle genomer overlever, nogle genomer parres med andre, således
at deres gener flettes sammen (rekombineres) med andre, resten dør ud. Fitness styrer
chancen for at et genom overlever eller formerer sig.
2. Populationen udsættes for mutation, tilfældige ændringer i genomerne, der indtræffer
med en vis sandsynlighed.
3. Ny fitness beregnes.
4. Algoritmen kører videre et bestemt antal gange (generationer) eller til et andet kriterium
for at stoppe er opfyldt.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
12
Når algoritmen er færdig, kan en passende løsning udvælges ud fra den overlevende popula-
tion, som regel løsningen med højest fitness.
Genetiske algoritmer afsøger meget store søgerum, da de opererer med store grader af tilfæl-
dighed i udvælgelsen af løsnings-kandidater. Af samme årsag er de ikke særligt effektive
med hensyn til tidsforbrug, men da skemalægning er en aktivitet der foregår ret sjældent, er
det ikke af afgørende betydning.
3.5.1 Hollands skemateorem og byggeklodshypotesen
J.H. Holland, der opfandt genetiske algoritmer, fandt på begrebet skema til at forklare gene-
tiske algoritmers virkemåde. Ideen er at ethvert gen er repræsenteret binært som en streng,
hvor ”*” angiver at både 0 og 1 er mulige værdier. For eksempel:
0 1 * * 0* * 1 1
Til ethvert skema hører der da en gennemsnitlig fitness for alle løsninger som dette skema
indgår i. Ovenstående eksempel har for eksempel 16 forskellige mulige værdier. I en given
population er det usandsynligt at alle disse er repræsenteret, så der er tale om et estimeret
gennemsnit. Men givet at skemaet er repræsenteret, kan det beregnes hvordan antallet af in-
stanser af skemaet i populationen vokser (eller falder) ud fra dette gennemsnit og den gen-
nemsnitlige fitness i hele populationen. Når effekten af rekombination og mutation tages i
betragtning, fås der en formel på denne form (efter M. Mitchell s. 29):
Hvor I er antal instanser af skemaet, E(I) estimeret antal instanser, f estimeret gennemsnitlig
fitness, og de to P’er hhv. chancen for at instanser af skemaet kan overleve rekombination og
mutation. Formlen (Skemateoremet) siger noget om at skemaer med høj estimeret gennem-
snitlig fitness vil have et ekspotentielt stigende antal instanser i populationen.
I Hollands skemateorem optræder rekombination kun som noget der ødelægger overlevelses-
chancen. Men rekombination er formentlig også det der gør genetiske algoritmer så velegne-
de til at finde løsninger. Byggeklodshypotesen forsøger at beskrive dette teoretisk, som at
gode løsninger til dele af et problem kombineres og skaber en god løsning til hele problemet.
Men det teoretiske fundament for denne hypotese er meget omdiskuteret. Der findes en lang
række andre forsøg på at beskrive genetiske algoritmers virkemåde teoretisk. (Se f.eks. M.
Mitchell s. 117-152).
3.6 Memetiske algoritmer
Indenfor evolutionære algoritmer, en betegnelse der omfatter både genetiske algoritmer og
andre beslægtede teknologier, har flere forskellige biologiske evolutionsprincipper været for-
søgt omsat til datalogiske metoder. Her er man ikke så bundet af om en given teori kan for-
klare observationer i naturen. Det gælder følgende (T.Mitchell, s. 266):
• Darwin. Naturlig udvælgelse. Individer i en ny generation varierer en smule. De bedst
tilpassede overlever.
• Lamarck. Videreførsel af et individs personlige udvikling til næste generation. Den i
fiktion ofte sete (men i biologien for længst forkastede) ide om at gener kan videre-
( )( )
( )( )mrtt PPIpopulationf
skemafIE −−≥+ 11
)(1
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
13
bringe erfaring. De bedste overlever og er biologisk tilpassede til at nyde godt af hvad
en tidligere generation har lært.
• Baldwin. De individer som bedst er i stand til at lære at tilpasse sig omgivelserne over-
lever. Det er ikke selve tilpasningen men evnen til at tilpasse sig der forbedres. Det er
naturligvis et princip som er mest velegnet til der hvor omgivelserne forandrer sig ofte.
Man kan se mennesket som den art der bedst efterlever Baldwins evolutionsprincip.
De mere avancerede algoritmer baseret på evolutionsprincippet kaldes som nævnt ofte me-
metiske algoritmer. Det kan være algoritmer baseret på Lamarcksk evolution eller Baldwin-
princippet. Udtrykket stammer fra bologen Richard Dawkins (W.E. Hart s. 13), som forslog
en udvidelse af Darwins princip, hvor højerestående arter (mennesker) ikke så meget udvik-
ler deres ”hardware” (gener) som deres ”software” (tanker, ideer) ved hjælp af naturlig ud-
vælgelse. De bedste ideer, eller bedste metoder til at løse et problem på, overlever.
Memetiske algortimer bruges også som generel betegnelse for metoder der kombinerer gene-
tiske algoritmer med andre metoder. Ideen er at den genetiske algoritme står for at lave en
global søgning, mens den eller de andre metoder man kombinerer med laver en lokal søg-
ning. Man udnytter her at den genetiske algoritme har lavet en hel population at mulige løs-
ninger, der kan forbedres på, hvilket kan hindre at man blot finder et lokalt maksimum. An-
dre betegnelser for det der nu kaldes memetiske algoritmer er blandt andet hybride genetiske
algoritmer, genetiske lokal søgnings algoritmer eller Lamarckske eller Baldwinske evolutio-
nære algoritmer. (Se Burke og Landa Silva for en oversigt over brug af memetiske algorit-
mer til skemalægning).
3.7 Andre metoder
Andre metoder, der ofte er set brugt, er at transformere skemalægningsproblemer til andre
problemer der allerede er udviklet mange løsningsmetoder og heurestikker til. Det gælder for
eksempel graffarvning. Desuden ses andre metoder fra kunstig intelligens-forskningen , som
for eksempel fuzzy logik og sværmintelligens, anvendt i nyere artikler om skemalægning.
(Se f.eks. SATATs hjemmeside for oversigter over præsentationer ved konferencerne).
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
14
4 GenetiskSkema - en genetisk algoritme til skemalægning
GenetiskSkema er en simpel genetisk algoritme der ved hjælp af nogle generelle constraints
kan finde brugbare løsninger på skemalægningsproblemer i skoler.
Det valgte programmeringssprog er java, da et objektorienteret programmeringssprog skøn-
nes at være nemmere at læse for mennesker og java er stort set platformsuafhængigt.
4.1 Designovervejelser
Der er lagt væk på enkelhed og overskuelighed og knap så meget på effektivitet.
4.1.1 Genom og gener
Der er mange mulige repræsentationer af skemaer. Et gen kan for eksempel sættes til at være
en enkelt aktivitet på et bestemt tidspunkt. Genomet består da af alle de aktiviteter der skal
afholdes (lektioner i klasser), hvor de enkelte gener adskiller sig ved at have valgt forskellige
tidspunkter at afholde aktiviteten på. Her er valgt en repræsentation, som lader et gen være
en større enhed, nemlig skemaet for en enkelt klasse. Genomer er da samlingen af skemaerne
for alle klasser. Gener adskiller sig her fra hinanden ved en række aktiviteter, som er anbragt
forskelligt. Der er således mere information i hvert gen end hvis genet blot var en enkelt ak-
tivitet. Det gør det sværere at frembringe nye brugbare gener ved mutation, men giver mulig-
vis bedre muligheder på at bevare information om gode skemaer for enkeltklasser.
Et vigtigt design-problem for genetiske algoritmer er hvordan man sørger for at algoritmen
konvergerer frem mod stadigt bedre løsninger, i stedet for blot at levere en endeløs række af
mere eller mindre brugbare løsninger. Her er det vigtigt at vælge generne således at man ved
rekombination af to gode genomer vil nå frem til et nyt godt genom. Ved at vælge genet som
et skema for en klasse opnås det at skemaer der er gode for klasserne også vil være gode for
klasserne ved en rekombination. Men samtidig risikerer man at miste andre gode egenska-
ber, som gode skemaer for lærere og overholdelse af hard constraints. Det er dog normalt
sådan at skemaet for elever er langt mere udfyldt end skemaet for lærere, så chancen for at
en tilfældig rekombination af skemaer for klasser giver overtrædelser af hard constraints er
langt mindre end hvis noget tilsvarende blev gjort med lærernes skemaer. Det at genet er et
skema for en klasse, gør at hard constraints mht. at en klasse ikke kan have aktiviteter i sam-
me tidsrum automatisk bliver overholdt, såfremt generne initialiseres således og mutationer
ikke kan ændre på det (hvilket er tilfældet med GenetiskSkema).
Ved rekombination kan der vælges mellem flere forskellige strategier (T. Mitchell s. 253).
For eksempel kan hvert genom deles i to stykker som hver indeholder et antal gener. Disse
stykker — svarende til kromosomer i biologien, kombineres da. (Metoden kaldes single-
point crossover). Her er i stedet valgt at foretage tilfældig udvælgelse af enten ”fader” eller
”moder” for hvert enkelt gen, svarende til at biologiske individer havde kromosomer som
hver bestod af kun et gen. Et tredje alternativ er at skære genomet i et antal stykker udvalgt
således at vigtige egenskaber som overholdelse af hard constraints bevares ved en rekombi-
nation. (Se for eksempel Erben og Keppler s. 204 for en måde dette kan gøres på).
4.1.2. Hard constraints
Håndtering af hard constraints i genetiske algoritmer kan ske enten ved helt at udelukke ge-
nomer der ikke overholder hard constraints eller ved at give den en meget lav fitness-værdi
som sørger for at sortere dem fra efterhånden. Her er valgt sidstnævnte metode. Det giver et
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
15
problem med at kalibrere soft constraints i forhold til hard constraints. Hvis vægten af hard
constraints sættes for lavt, vil der måske ikke opstå brugbare løsninger i populationen (dvs.
løsninger som overholder alle hard constraints), men ved for høj vægtning kan man risikere
at der kun optimeres i forhold til hard constraints, så soft constraints ignoreres.
Ulempen ved automatisk at sortere alle genomer der overtræder hard constraints fra er imid-
lertid at man begrænser søgerummet, og kan risikere aldrig at finde de gode løsninger der
ligger i et område hvor hard constraints ofte overtrædes.
For at minimere ovennævnte risiko for at man ved rekombination laver løsninger med mange
overtrædelser af hard constraints er følgende mekaniske blevet implementeret i GenetiskSke-
ma: Ved rekombination undersøges det gen for gen hvor godt genet fra det ene genom passer
sammen med det andet genom. Hvis antallet af hard constraints ville øges ved at dette gen
(og kun det) indsættes, reduceres chancen for at genet kommer med i det rekombinerede ge-
nom. Eller med fader/moder-analogien: Som udgangspunkt overtager barnet moderens ge-
ner, mens chancen for at et givet af faderens gener tages med i stedet afhænger af hvor godt
det passer sammen med moderens gener (mht. hard constraints).
4.1.3 Fitness
Fitness som en sum af fitness for hver constraint har den ulempe at enkelte bidrag kan
”forsvinde i mængden”: Chancen for at et gen med x + y fitness, x >> y, udvælges er kun en
anelse større end chancen for at et gen med fitness x udvælges, hvilket gør at udvælgelses-
mekanismen stort set ikke skelner mellem de to. Der er dog måder at løse det problem på.
Udvælgelsen kan foregå på forskellige måder, for eksempel (T.Mitchell s. 255):
1. ”Roulette”-metoden. Chancen for at blive udvalgt er direkte proportional med fitness.
2. ”Turnerings”-metoden. Der udvælges to helt tilfældige genomer, dvs. uafhængigt af
deres fitness. Der trækkes lod mellem de to. Således at genomet med højest fitness har
størst chance for at vinde, men ikke proportionalt med den relative fitness. For eksem-
pel at genomet med højest fitness har en fast 75% chance for at vinde.
3. ”Rang”-metoden: Genomerne ordnes efter rang i forhold til deres fitness. Chancen fro
at blive udvalgt er da proportional med rangen, ikke fitness.
Her er valgt metode ”roulette”-metoden, men for at undgå ovennævnte problem, er fitness et
produkt af fitness for hvert enkelt constraint, i stedet for en sum. Det kan give nogle meget
høje værdier for fitness og muligvis sortere gener fra for hurtigt, så antallet af forskellige ge-
ner bliver for lille til at rekombinationen fungerer effektivt. Dvs. det tidligere nævnte pro-
blem kaldet crowding. Men det gør også at dårlige gener hurtigt forsvinder.
4.2 Implementerede hard constraints
Den eneste hard constraint der testes eksplicit for er om en lærer er to steder på en gang. Im-
plicit testes der for om en klasse er tildelt flere aktiviteter i samme tidsrum ved at initialise-
ring, rekombination og mutation ikke overtræder denne constraint.
4.3 Implementerede Soft constraints
I stedet for individuelle skemaønsker er der indsat en række generelle regler:
1. Elever skal have så få mellemtimer som muligt.
2. Fag på samme dag skal helst ligge i rækkefølge.
3. Forskellige tidspunkter på ugeskemaet vægtes forskelligt, f.eks. kan en meget sen lektion
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
16
sættes til ikke at være særlig ønskeværdig og en tidlig lektion til at være ønskværdig.
4. Antal lektioner en lærer kan have på en dag kan vægtes forskelligt, f.eks, kan det vægtes
højt ikke at have timer, dvs. have en fridag.
4.4 Beskrivelse af programmel
Kodet i java – kompileret med javac 1.5.0_01 til Windows.
Den komplette programkode findes i appendiks A.
Vigtige globale variable:
• fitnessIntervaller: Intervallet [0:1] delt op så størrelsen på del n er proportional med fit-
ness af genom n i forhold til summen af alle genomers fitness.
• StartHCTest: Variabel til styring af hvornår rekombination af genomer skal tage hensyn
til overholdelse af hard constraints.
main
Et antal inddatafiler indlæses:
Parameterfil (se parameterbeskrivelse i appendiks B)
En population oprettes.
Den genetiske algoritme forløber herefter således:
1. Beregn fitness for genomerne i populationen
2. Foretag formering og udvælg overlevende genomer
3. Muter populationen
4. Såfremt max antal generationer ikke er nået: gå til 1.
Udskriv resultatet
4.4.1 java klasser
Population
Array genom: Et antal instanser af Genom svarende til populationsstørrelsen.
Metode beregnFitness: Beregn fitness for alle genomer og summer dem.
Metode formering: Lav nye genomer til en ny generation, bestående af overlevere og rekom-
binationer af de gamle genomer, udvalgt på baggrund af fitness.
Metode mutation: Udfør mutation på parameterbestemt procentdel af genomer.
Metode printSkema: Udskriv populationen på læsbar form (som skoleskemaer).
Metode printFagfordeling: Udskriv liste over hvilke fag og klasser lærerne har
Metode dumpGenom: Gem genomerne i populationen på kompakt form i outputfil.
Genom
Array gen: Et antal instanser af Gen svarende til størrelsen af genomet (dvs. antal skoleklas-
ser)
Variabel fitness: Genomets fitness (fra senest det blev beregnet).
Variabel antalHC: Antal overtrædelser af hard constraints genomet har (som kan være 0).
Variabel antalMellemtimer: Totalt antal mellemtimer for et genom.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
17
Metode reKombiner: Sammensæt et nyt genom af to gamle ved rekombination af gener.
Metode muter: Lav mutation i tilfældigt udvalgt gen.
Metode beregnFitness: Beregn fitness af genomet og om det overtræder hard constraints.
Metode mellemTimer: Beregn antal mellemtimer for genomet.
Metode samleTimer: Beregn antal nabolektioner med samme fag.
Metode arbejdsDag: Beregn fitness-bidrag fra længden på lærernes arbejdsdage.
Metode printLaererSkema: Udskriv skemaer for lærere.
Metode hardConstraints: Beregn antal overtrædelser af hard constraints.
Metode printSkema: Udskriv genomet på læsbar form (som skoleskemaer).
Metode genStreng: Dan genomet som en streng af bogstaver.
Gen
Array skema: Skema for en skoleklasse.
Metode muterSkema: Byt om på aktiviteten for to tilfældige tidspunkter i skemaet.
Metode startSkema: Initialiser skema ved først at lægge aktiviteterne på de tidligst mulige
tidspunkter og dernæst lave ”mutation” (med ovenstående metode) på alle tidspunkter.
Metode printSkema: Print skemaet for en enkelt skoleklasse.
Metode genTilStreng: Lav genet som en streng af bogstaver (og evt. andre tegn).
4.5 Kalibrering
Det krævede en del kalibrering at få algoritmen til at konvergere tilfredsstillende. For eksem-
pel viste vægtning af hard constraints i forhold til soft constraints sig at fungere bedst hvis
hard constraints kun vægtes ganske lidt mere end soft constraints.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
18
4.6 En praktisk test
Som en test af programmellet er valgt et praktisk skemalægningsproblem fra en virkelig sko-
le, således at løsningerne kan sammenlignes med det skema der faktisk blev anvendt. Der er
dog et par ting som ikke er implementeret i GenetiskSkema, således at det ikke kunne lade
sig gøre at lave et skema eksakt som ønsket. Der vil blive redegjort for dette i konklusionen.
4.6.1 Præsentation af test-problem
Skemalægningsproblemet er et skema for en skole med 8 klasser der tilsammen har 20 for-
skellige fag og 19 lærere. Det skal gælde for et halvt år. (Baseret på skemaet for Kalundborg
Handelsgymnasium og HG, forår 2009).
4.6.2 Vurdering af programmellets praktiske anvendelighed
Her ses skemaet for en klasse, til venstre lavet med GenetiskSkema, til højre det anvendte.
Begge ses at have en rimelig spredning af fag mht. fordeling over ugen og lektioner i række-
følge. Der var naturligvis ingen overtrædelser af hard constraints i nogen af skemaerne. Vir-
kelighedens skema har knap så stor spredning i antal lektioner pr. dag og har ingen mellem-
time, men det kan skyldes at der var en begrænsning på 8 lektioner pr. dag der. Klassen (dvs.
genet) var tilfældigt udvalgt. I andre af klasserne var der større forskel, specielt for de klasser
som havde relativt få lektioner pr. uge. Det ekstreme tilfælde var nok dette:
Her er der både meget større spredning i antal timer pr. uge flere mellemtimer i Genetisk-
Skemas version. Så her er en forbedring ønskelig.
multimed. dansk afsaetn. fransk engelsk afsaetn. psykologi engelsk virk.oek. matematik
multimed. virk.oek. dansk samtidsh. psykologi afsaetn. psykologi engelsk virk.oek. matematik
afsaetn. virk.oek. lektiecaf samtidsh. matematik int.oek psykologi int.oek engelsk fransk
afsaetn. matematik afsaetn. int.oek. matematik dansk tysk int.oek engelsk fransk
psykologi fransk engelsk int.oek. int.oek. samtidsh. dansk afsaetn. virk.oek. lektiecaf
psykologi virk.oek. engelsk fransk matematik samtidsh. dansk afsaetn. mate-matik
multimed.
multimed. engelsk fransk matematik virk.oek. matematik fransk mate-matik
multimed.
dansk tysk virk.oek. matematik virk.oek. matematik fransk multimed.
virk.oek.
salg og s laeringk.
erhv.oek. laeringk. inf.tekn. erhv.oek.
engelsk inf.tekn. laeringk. samfundsf salg og s erhv.oek. laeringk. dansk inf.tekn.
engelsk inf.tekn. livsstil laeringk. dansk salg og s lektiecaf laeringk. dansk inf.tekn.
salg og s laeringk. dansk dansk dansk lektiecaf laeringk. inf.tekn.
erhv.oek. lektiecaf erhv.oek. livsstil engelsk laeringk. samfundsf
livsstil erhv.oek. inf.tekn. livsstil engelsk laeringk.
laeringk. lektiecaf inf.tekn.
laeringk.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
19
6.6.3 Analyse af testdata
Der blev kørt en række test med forskelligt valg af parametre. De føromtalte skemaer svarer
til denne kørsel med en population på 100 og 2000 generationer:
De tre serier af tal er hhv. et mål for fitness, antal overtrædelser af hard constraints og antal
mellemtimer som et eksempel på overtrædelse af soft constraints.
Det ses at antal overtrædelser af hard constraints meget hurtigt daler, overtrædelse af soft
constraints udviser en faldende tendens over det meste af forløbet, mens fitness af løsninger-
ne (som følge heraf) er stigende helt frem til generation 2000. At fortsætte til efter generati-
on ca. 1500-2000, så imidlertidig ikke ud til at have nogen entydig effekt.
Mutationer er en vigtig forudsætning for at algoritmen fungerer, som det ses her af en kørsel
med samme parametre som ovenfor, men med mutationer koblet fra:
-40
-20
0
20
40
60
80
100
120
140
0 300 600 900 1200 1500 1800 2100
Generationer
Hard constraints Mellemtimer LOG ( FITNESS )
-20
0
20
40
60
80
100
120
140
0 300 600 900 1200 1500 1800 2100
Generationer
Hard constraints LOG (FITNESS) Mellemtimer
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
20
Uden mutationer bliver antallet af gener hurtigt reduceret, mens der ikke vil komme nye til.
Det vil sige, at når først den optimale kombination af gener er fundet, kan der ikke ske yder-
ligere forbedringer af fitness.
For ikke at risikere en for hurtig udtynding i generne, tilkobles den mekanisme der favorise-
rer gener som skaber få overtrædelser af hard constraints først omkring midtvejs i forløbet.
Men som det ses i ovenstående diagram, har det i denne test ikke den store betydning hvor-
når det sker. Parametre her er igen som i den første kørsel, på nær at ovennævnte mekanisme
er koblet ind fra start.
Reduceres størrelsen af populationen, fungerer algoritmen stadig, om end det går betydeligt
langsommere. Igen er det samme parametre, men med en population på kun 10:
-40
-20
0
20
40
60
80
100
120
140
160
0 300 600 900 1200 1500 1800 2100
Hard constraints Mellemtimer LOG (FITNESS)
-20
0
20
40
60
80
100
120
140
0 5000 10000 15000 20000
Hard constraints Mellemtimer LOG (FITNESS)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
21
4.6.4 Sammenligning med færdigudviklet skemalægningsprogram: Lantiv Timetabler
Lantiv Timetabler er et program til skemalægning der kan hentes gratis på internettet. Det
har både mulighed for at lægge et skema manuelt og for at få programmet til at gøre det.
Data til Lantiv tastes ind i en database via et brugerinterface. Der er følgende tabeller:
• Days: De ugedage der er undervisning.
• Lessons: De tidsintervaller en dag er delt op i.
• Subjects: Fag.
• Groups: Klasser
• Students: De enkelte studerende*
• Teachers: Lærere
• Rooms: De lokaler der er til rådighed*
• Equipment: De begrænsede ressourcer der er til rådighed*
• Activities: Sammenknytning af group, subject, teacher, room og equipment.
Programmet kan køre uden man bruger felterne mærket ”*”. Skærmbillederne ser således ud:
Når data er tastes ind, går man videre til et selve skemalægningsdelen af programmet. Her
skal man først indlægge constraints. Det foregår ved at man for de fleste tabeller i databasen
kan indsætte forskellige minimum og maksimum værdier – svarende til hard constraints – og
nogle ”desirable” værdier – svarende til soft constraints:
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
22
Programmet holder da øje med om constraints bliver overholdt, hvad enten man lægger ske-
maet manuelt eller automatisk. Ved automatisk skemalægning søges efter en løsning der
overholder alle constrants, og hvis ikke dette er muligt, overholder alle hard constraints og så
mange som muligt af soft constraints. Herefter kan skemaet kigges igennem og evt. rettes til
og man kan bruge forskellige rapporterings-funktioner.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
23
I forhold til GenetiskSkema er der ingen generelle constraints for hvad der er et godt skema,
så alt skal tastes ind som constraints på specifikke data. For eksempel at en bestemt klasse
skal have et vist minimum antal lektioner pr dag og højest må have et bestemt antal mellem-
timer eller at en bestemt lærer foretrækker et bestemt antal lektioner pr. dag. I modsat fald
fyldes de enkelte klassers skemaer blot ud med fagene i tilfældig orden fra første lektion
mandag til alt er fordelt.
Det er af denne årsag ikke nemt at sammenligne Lantiv og GenetiskSkema direkte. Ved ind-
tastning af nogle værdier for antal timer pr. dag pr. klasse samt et fortrukket antal timer for
lærere, opnås følgende (virkelighedens skema til højre, samme eksempel som før):
Som det fremgår er der ingen problemer med at få et kompakt skema, men fagene er spredt
ud ret tilfældigt. Det er muligt at undgå dette på forskellig vis med Lantiv, ved at taste fag
ind som dækkende mere end en lektion i træk. Fordeling af timer over en uge for lærere er
også svær at styre. I forhold til med GenetiskSkema er de meget tilfældigt fordelt ud over
ugen, selv efter forsøg på at samle dem med soft constraints. Det er dog muligt at disse pro-
blemer kan løses, men det vil kræve meget individuel tilpasning.
Ved en kombination af GenetiskSkema og Lantiv, kunne det tænkes at der kunne opnås et
bedre resultat end med hvert enkelt program. Det blev afprøvet med samme eksempel som
før, ved først at indtaste GenetiskSkemas skema i Lantiv og dernæst køre Lantivs automati-
ske skemalægning. Det gav som forventet nogle mere kompakte skemaer, men der var igen
problemer med lærernes skemaer. Det samlede resultat blev:
Tallene er hhv. gennemsnitlige antal mellemtimer i klassernes skemaer og gennemsnitlige
antal dage uden undervisning lærerne har. Tallene i parentes for GenetiskSkema er for en
kørsel hvor soft constraint for lærernes arbejdsdage var fjernet ved at stille på vægtene. Det
ses at virkelighedens skema (lagt med et kommercielt skemalægningsprogram) er klar bedre
på de her målte egenskaber, mens valget mellem GenetiskSkema og Lantis (med de her valg-
te constraints og parametre) afhænger af om man foretrækker nogle færre mellemtimer for
eleverne eller nogle flere undervisningsfrie dage for lærerne. Der er dog det forbehold at ik-
ke alt i virkelighedens skema kunne implementeres i testen, herunder nogle fag som samlæ-
ses mellem flere klasser, så resultaterne betyder ikke nødvendigvis at det anvendte skema-
lægningsprogram (Untis) er så klart bedre end det umiddelbart ser ud her.
matematik matematik virk.oek. dansk engelsk
afsaetn. psykologi engelsk virk.oek. matematik
virk.oek. afsaetn. multimed. psykologi matematik afsaetn. psykologi engelsk virk.oek. matematik
matematik fransk matematik multimed. int.oek. int.oek psykologi int.oek engelsk fransk
engelsk fransk afsaetn. fransk virk.oek. dansk tysk int.oek engelsk fransk
virk.oek. engelsk int.oek. dansk psykologi samtidsh. dansk afsaetn. virk.oek. lektiecaf
afsaetn. dansk samtidsh. virk.oek. lektiecaf samtidsh. dansk afsaetn. matematik multimed.
samtidsh. multimed. psykologi afsaetn. fransk virk.oek. matematik fransk matematik multimed.
engelsk matematik tysk int.oek. virk.oek. matematik fransk multimed.
GenetiskSkema Lantiv GS + Lantiv Virkelighedens skema
mellemtimer 2,1 (0,5) 0,1 1,5 0
fridage/lærer 1,8 (0,7) 0,3 0,8 1,6
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
24
Af faciliteter som Lantiv har, som ikke findes i GenetiskSkema er først og fremmest mulig-
heder for at lægge constraints ind for f.eks. hver enkelt lærer eller hver enkelt klasse. Også
muligheden for at arbejde skiftevis manuelt og automatisk gør formentlig Lantiv til et bedre
skemalægningsprogram end GenetiskSkema i sin nuværende form. Af funktioner der ikke er
brug for til løsning af det konkrete problem er blandt andet at Lantiv kan håndtere lokalefor-
deling, fordeling af knappe ressourcer og fordeling af elever på klasser. Klasser – kaldet
groups – er desuden lavet således at en klasse kan deles op i undergrupper og man kan sætte
aktiviteter op der involverer flere klasser.
At rette manuelt i skemaet er ganske nemt i Lantiv, som det ses herunder. Man tager blot fat
i et fag på skemaet og flytter det med musen. Lantiv viser endda hvor læreren har ledige ti-
mer, så man kan holde øje med hvordan lærernes skemaer forandres.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
25
4.7 Test af den genetiske algoritme
Til at teste programmellet yderligere, blev følgende skemalægningsproblem præsenteret for
GenetiskSkema:
6 klasser skal have totalt 6 fag (men en bestemt lærer pr. fag) fordelt med et forskelligt antal
timer af hvert fag i hver klasse og sådan at alle 12 tidspunkter, der er på en uge, er fyldt op
for alle klasser og alle lærere. (Se også appendiks D).
Af soft constraints vil det kun være samling af fagene som vil kunne komme i spil, ellers vil
problemet bestå i at få opfyldt hard constraints, i et skema hvor det er (urealistisk) svært at få
opfyldt dem alle.
Ligesom i den første test blev der kørt med en population på 100. Det viste sig at tage mange
generationer at finde en løsning (dvs. skema hvor alle hard constraints er opfyldt), typisk op
mod et par hundrede, men i nogle tilfælde lykkedes det efter for eksempel 26 generationer.
Dette tilfælde bruges i det følgende.
En given population indeholder et antal genomer, som hver især indeholder nogle gener.
Uden mutationer øges det samlede udvalg af forskellige gener ikke, da de blot kombineres
på forskellige måder i nye generationer. Der vil derimod ske en udtynding i generne efter-
hånden, så nogle gener forsvinder og ikke kommer igen. Men ved hjælp af mutation skabes
der nye gener. Det skulle derfor være muligt at følge et bestemt genoms historie mht. hvor-
når de gener, det består af, opstod. Resultatet af det ses herunder. Da gener svarer til de en-
kelte skoleklasser, har de fået betegnelser som 1A og 1B:
Diagrammet følger historien for det genom der opstår efter 26 generationer. (Genomet, som
viser sig at være en løsning til hele skemalægningsproblemet, opstår samtidig med dets sid-
ste gen, men det behøvede ikke at have været tilfældet). Genomet består af en række gener,
som enten var med fra starten (1A og 1B) eller opstod senere som mutationer.
Som det fremgår, udkonkurrerer de nye gener i løbet af et par generationer resten af generne
i populationen, uden dog helt at fjerne dem. Det må formodes at det skyldes at stort set kun
hard constraints bidrager til forskel i fitness. Så snart et gen der muliggør overholdelse af
endnu en hard constraint opstår, udkonkurrerer dette gen hurtigt de øvrige. Dette bekræftes
ved nærstudier af output. Man kan måske også ane på diagrammet at der faktisk opstod et af
generne i generation 9, men det døde ud før det kunne formeres, hvorefter det opstod igen
ved en mutation i generation 11.
Slut-geners andel af samlet population
0
20
40
60
80
100
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Generation
%
1A 1B 2A 2B 3A 3B
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
26
4.8 Konklusion på test
I den praktiske test var der nogle ting som ikke kunne implementeres i GenetiskSkema. Det
var:
1. Visse tidspunkter er øremærket til bestemte fag. Det drejer sig for eksempel om faget
”læringskompetencer” som normalt ligger om onsdagen og på hele dagen, for de klasser
der har faget.
2. Visse tidspunkter kan ikke bruges til undervisning. Det drejer sig i dette tilfælde om tids-
punkter efter 7. lektion om torsdagen.
3. Klasser der deles op i to og undervises samtidig af to forskellige lærere, enten i det sam-
me fag på forskelligt niveau eller i to forskellige (ofte sprog-) fag, kan ikke implemente-
res. I stedet var timerne delt mellem de to fag.
4. Samundervisning mellem to eller flere klasser i det samme fag er kun delvist implemente-
ret, ved at det ved visse fag er tilladt at en lærer har flere klasser samtidig. Men at dele
flere klasser ud på flere fag kan ikke håndteres.
Punkt 1-2 kan løses ved at indføre flere justerbare hard constraints. Punkt 3-4 kan f.eks. Lø-
ses ved som i Lantiv at erstatte (skole-)klasser med fleksible grupper som kan slås sammen
og deles op efter behov.
Der er desuden nogle ting et program som Lantiv kan håndtere, som der ikke var brug for i
det praktiske eksempel, men som kunne forbedre anvendeligheden af GenetiskSkema:
1. Et brugerinterface. I sin nuværende form er GenetiskSkema ikke anvendeligt uden en
længere instruktion i brugen og stor omhyggelighed med indtastninger. Der er for eksem-
pel ikke tilstrækkelig kontrol af om inddata er korrekt, og der er ikke gjort forsøg på at
teste dette.
2. En grundigere kalibrering, så parametre får værdier som er optimale for de fleste praktisk
forekommende problemer. Derved undgår man at skulle bruge tid på at stille på parametre
hver gang programmet bruges.
3. Mulighed for indtastning af yderligere constraints i et generelt format. For eksempel som
det gøres i Lantiv.
4. Bedre muligheder for at gemme både inddata og uddata. Optimalt set med en mulighed
for at arbejde videre med et allerede lagt skema.
5. Implementering af lokaler og andre knappe ressourcer som hard conmstraints.
Såfremt GenetiskSkema skulle udvikles til kommercielt eller open source-software, ville alle
disse forbedringer være nødvendige.
At GenetiskSkema er skrevet i java lægger op til at man kunne lave det om til en java-applet
der køres fra en standard-browser på en maskine med java installeret. Data vil da kunne
gemmes i en tilknyttet database. Det vil for eksempel gøre det nemt at lægge en version af
programmet med begrænset funktionalitet ud på nettet til fri afprøvning for mulige brugere.
Det vil også gøre programmet helt platformuafhængigt.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
27
5 Konklusion
Genetiske algoritmer — enten som rene genetiske algoritmer eller i forskellige udvidede el-
ler hybride former — er i litteraturen meget ofte anvendt til løsning af skemalægningsproble-
mer. Med det her konstruerede programmel viser en genetisk algoritme sig endnu en gang
ganske velegnet til at løse en konkret praktisk opgave.
Det er rimeligt klart at med den hastigt voksende regnekraft og lagerplads i computere vil
genetiske algoritmer anvendelighed vokse, da det vil betyde mindre om der skal bruges
mange generationer med store populationer. Men selvfølgelig kræver det at problemet hører
til de problemer som kan løses med en metode som genetiske algoritmer. Det vil sige at løs-
ningen til problemet kan ses som en tilpasning til nogle omgivelser, der hvor mere eller min-
dre tilfældig søgning i hvert fald i første omgang er tilstrækkelig. Men naturens egen
”genetiske algoritme” har været i stand til at frembringe ting som man med mere determini-
stiske metoder ofte har svært ved at kopiere, så hvor præcis grænsen går, er svært at spå om.
Nogen revolutionerende nye skemaer skal man nok ikke forvente. Skemalægning er i datalo-
gisk forstand et komplekst problem, hvor der til stadighed udvikles mere effektive løsnings-
metoder, men for en bruger er der næppe særlig meget rum for forbedring i forhold til hvad
de førende skemalægningsprogrammer kan i dag, hvad angår selve beregningen af skemaet.
5.1 Forskningsfeltet skemalægning nu og i fremtiden
Der har været forskellige tilløb til at konstruere et sprog til eksakt beskrivelse af skemalæg-
ning som vil kunne samle forskningsindsatsen. Det vil være en klar fordel i betragtning af de
ofte meget lidt sammenlignelige tilgange til skemalægningsproblemet og de mange gange
man har opfundet den samme ting (som her). Men for den praktiske anvendelighed af ske-
malægnings-programmel savner jeg måske mere studier af hvordan man omsætter ønsker til
et skema til parametre i et program. At sætte det op som hard constraints og soft constraints
er ofte ikke specielt intuitivt: En lærer eller en elev vil have en ide om hvad et godt skema er,
men kan ikke nødvendigvis omsætte det til nogle logiske udsagn. Om det tager et par minut-
ter længere eller man skal sætte lidt mere ram i sin maskine betyder ikke så meget for en
skemalægger, men at få computeren til at forstå hvad man vil have for et skema, er straks
sværere.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
28
6 Litteratur
Bardadym, V.A.: ”Computer-Aided School and University Timetabling: The New Wave” i
Practice and Theory of Automated Timetabling, E. Burke & p. Ross (eds.), Springer 1996.
Boufflet, J.P og S. Nègre: ”Three Methods used to solve an Examination Timetable
Porblem” i Practice and Theory of Automated Timetabling, E. Burke & p. Ross (eds.),
Springer 1996.
Burke, E.K og J.D. Landa Silva: ”The Design of Memetic Algorithms for Scheduling and
Timetabling Problems” i Recent Advances in Memetic Algorthms, Hart, Krasnogor, Smith
(eds.), Springer 2005.
Cheng, C. m.fl.: ”Investigations of a Constraint Logic Programming Approach to University
Timetabling” i Practice and Theory of Automated Timetabling, E. Burke & p. Ross (eds.),
Springer 1996.
Cooper, T.B. og J.H. Kingston: ”The Complexity of Timetable Construction Problems” i
Practice and Theory of Automated Timetabling, E. Burke & p. Ross (eds.), Springer 1996.
Erben, W. og J.Keppler: ”A Genetic Algorithm Solving a Weekly Course-Timetabling Pro-
blem” i Practice and Theory of Automated Timetabling, E. Burke & p. Ross (eds.), Springer
1996.
Hart, W.E m.fl: ”Memetic Evolutionary Algortims” i Recent Advances in Memetic Al-
gorthms, Hart, Krasnogor, Smith (eds.), Springer 2005.
Mitchell, Melanie: An Introduction to Genetic Algorithms, MIT press 1998.
Mitchell, Tom M.: Machine Learning, McGraw-Hill 1997.
Negnevitsky, Michael: Artificial Intelligence, Pearson Education 2002.
Russell, Stuart og Peter Norvig: Artificial Intelligence 2nd ed, Pearson Education 2003.
Schaerf, Andrea : A Survey of Automated Timetabling. Artif. Intell. Rev. 13(2): 87-127
(1999)
Thompson, J og K.A. Dowsland: ”General Cooling Schedules for a Simulated Annealing
Based Timetabling System” i Practice and Theory of Automated Timetabling, E. Burke & p.
Ross (eds.), Springer 1996.
6.1 Internet:
Lantiv Timetabler:
http://www.lantiv.com/
Working Group on Automated Timetabling (WATT):
http://www.asap.cs.nott.ac.uk/watt/
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
29
Practice and Theory of Automated Timetabling (PATAT)
http://www.asap.cs.nott.ac.uk/patat/patat-index.shtml
ITC2007 - International Timetabling Competition
http://www.cs.qub.ac.uk/itc2007/index.htm
FET – open source timetabling software (c++)
http://www.lalescu.ro/liviu/fet/
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
30
Appendiks A: Programkode
import java.io.*;
import java.util.*;
public class GenetiskSkema {
// Variable til inputdata og parametre
static int antalKlasser = 3;
static int antalFag = 3;
static int antalLaerere = 2;
static int antalDage = 5;
static int maxLektioner = 8;
static int popSize = 200;
static int overlevere = 5;
static int maxGenerationer = 200;
static int startHC = 100;
static double hardVaegt = 10.0;
static double mellemVaegt = 2.0;
static double samleVaegt = 2.0;
static double faellesVaegt = 2.0;
static double mutationProcent = (double)5.0;
static int dumpFrekvens = 100;
static int [][] timeFordeling = new int [antalKlasser] [antalFag];
static int [][] fagFordeling = new int [antalKlasser] [antalFag];
static int [] faellesFag = new int [antalFag];
static double [][] skemaVaegt = new double [antalDage] [maxLektioner];
static double [] arbejdsdagVaegt = new double [maxLektioner+1];
static double [] fitnessIntervaller = new double [popSize];
static String [] fagNavne = new String [antalFag];
static String [] klasseNavne = new String [antalKlasser];
static String [] laererNavne = new String [antalLaerere];
static int startHCTest = 0;
public static void main(String arguments[]) {
// Inlaesning af input-filer start
FileReader parameterInput;
FileReader timerInput;
FileReader fagInput;
FileReader skemaVaegtInput;
FileReader arbejdsdagVaegtInput;
FileReader fagNavneInput;
FileReader klasseNavneInput;
FileReader laererNavneInput;
FileReader faellesFagInput;
try
{
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
31
parameterInput = new FileReader ("parametre.txt");
Scanner scn = new Scanner(parameterInput);
antalKlasser = scn.nextInt();
antalFag = scn.nextInt();
antalLaerere = scn.nextInt();
antalDage = scn.nextInt();
maxLektioner = scn.nextInt();
popSize = scn.nextInt();
overlevere = scn.nextInt();
maxGenerationer = scn.nextInt();
startHC = scn.nextInt();
hardVaegt = scn.nextDouble();
mellemVaegt = scn.nextDouble();
samleVaegt = scn.nextDouble();
faellesVaegt = scn.nextDouble();
mutationProcent = scn.nextDouble();
dumpFrekvens = scn.nextInt();
parameterInput.close();
timeFordeling = new int [antalKlasser] [antalFag];
fagFordeling = new int [antalKlasser] [antalFag];
faellesFag = new int [antalFag];
skemaVaegt = new double [antalDage] [maxLektioner];
arbejdsdagVaegt = new double [maxLektioner+1];
fagNavne = new String [antalFag];
klasseNavne = new String [antalKlasser];
laererNavne = new String [antalLaerere];
System.out.println(antalKlasser);
System.out.println(antalFag);
System.out.println(antalLaerere);
System.out.println( antalDage);
System.out.println(maxLektioner);
System.out.println(popSize);
System.out.println(overlevere);
System.out.println(maxGenerationer);
System.out.println(startHC);
System.out.println(hardVaegt);
System.out.println(mellemVaegt);
System.out.println(samleVaegt);
System.out.println(faellesVaegt);
System.out.println(mutationProcent);
System.out.println(dumpFrekvens);
}
catch (IOException e)
{
System.err.println(e.getMessage()+" Bruger standardværdier.");
}
if (
(antalKlasser < 1) ||
(antalFag < 1) ||
(antalLaerere < 1) ||
(antalDage < 1) ||
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
32
(maxLektioner < 1) ||
(popSize < 1) ||
(overlevere > popSize) ||
(maxGenerationer < 0) ||
(maxGenerationer < startHC) ||
(hardVaegt < 0) ||
(mellemVaegt < 0) ||
(samleVaegt < 0) ||
(faellesVaegt < 0) ||
(mutationProcent < 0) ||
(dumpFrekvens < 0) )
{
System.err.println ("Check parametre!");
System.exit(-1);
};
try
{
timerInput = new FileReader ("timefordeling.txt");
Scanner scn = new Scanner(timerInput);
for(int i=0;i<antalKlasser;i++)
for(int j=0;j<antalFag;j++)
timeFordeling[i][j] = scn.nextInt();
timerInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
{
fagInput = new FileReader ("fagfordeling.txt");
Scanner scn = new Scanner(fagInput);
for(int i=0;i<antalKlasser;i++)
for(int j=0;j<antalFag;j++)
fagFordeling[i][j] = scn.nextInt();
fagInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
33
{
skemaVaegtInput = new FileReader ("skemavaegt.txt");
Scanner scn = new Scanner(skemaVaegtInput);
for(int i=0;i<antalDage;i++)
for(int j=0;j<maxLektioner;j++)
skemaVaegt[i][j] = scn.nextDouble();
skemaVaegtInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
{
arbejdsdagVaegtInput = new FileReader ("arbejdsdagvaegt.txt");
Scanner scn = new Scanner(arbejdsdagVaegtInput);
for(int i=0;i<(maxLektioner+1);i++)
arbejdsdagVaegt[i] = scn.nextDouble();
arbejdsdagVaegtInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
{
fagNavneInput = new FileReader ("fagnavne.txt");
Scanner scn = new Scanner(fagNavneInput);
for(int i=0;i<antalFag;i++)
fagNavne[i] = scn.nextLine();
fagNavneInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
{
klasseNavneInput = new FileReader ("klassenavne.txt");
Scanner scn = new Scanner(klasseNavneInput);
for(int i=0;i<antalKlasser;i++)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
34
klasseNavne[i] = scn.nextLine();
klasseNavneInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
{
laererNavneInput = new FileReader ("laerernavne.txt");
Scanner scn = new Scanner(laererNavneInput);
for(int i=0;i<antalLaerere;i++)
laererNavne[i] = scn.nextLine();
laererNavneInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
try
{
faellesFagInput = new FileReader ("faellesfag.txt");
Scanner scn = new Scanner(faellesFagInput);
for(int i=0;i<antalFag;i++)
faellesFag[i] = scn.nextInt();
faellesFagInput.close();
}
catch (IOException e)
{
System.err.println (e.getMessage());
System.exit(-1);
}
// Indlaesning af inputfiler slut
Population population = new Population();
// Den genetiske algoritme loop
for(int i=0;i<maxGenerationer;i++)
{
if (i>=startHC) startHCTest = 1;
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
35
population.beregnFitness();
if ( (dumpFrekvens > 0) && (i%dumpFrekvens == 0) ) population.dumpGenom(i);
population.formering();
population.mutation();
};
population.beregnFitness();
if (dumpFrekvens > 0) population.dumpGenom(maxGenerationer);
// Slut paa loop
// Udskriv resultat paa skaerm (som evt. kan omdirigeres til en fil)
population.printSkema();
population.printFagfordeling();
};
}
// Population start
class Population
{
Genom [] genom = new Genom [GenetiskSkema.popSize];
public Population()
{
for(int i=0;i<GenetiskSkema.popSize;i++) genom[i] = new Genom();
};
public void beregnFitness()
{
double sumFitness = (double)0.0;
for(int i=0;i<GenetiskSkema.popSize;i++)
{
sumFitness += genom[i].beregnFitness();
};
for(int i=0;i<GenetiskSkema.popSize;i++)
{
GenetiskSkema.fitnessIntervaller[i] = genom[i].fitness/sumFitness;
};
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
36
};
public void formering()
{
int overlever;
int fader;
int moder;
double udvaelg;
double fitSum;
Genom [] nytGenom = new Genom [GenetiskSkema.popSize];
for(int i=0;i<(GenetiskSkema.popSize-GenetiskSkema.overlevere);i++)
{
nytGenom[i] = new Genom();
udvaelg = (double)Math.random();
fitSum=GenetiskSkema.fitnessIntervaller[0];
fader=0;
while(fitSum<udvaelg)
{
fader++;
fitSum += GenetiskSkema.fitnessIntervaller[fader];
};
udvaelg = (double)Math.random();
fitSum=GenetiskSkema.fitnessIntervaller[0];
moder=0;
while(fitSum<udvaelg)
{
moder++;
fitSum += GenetiskSkema.fitnessIntervaller[moder];
};
nytGenom[i].reKombiner(genom[fader],genom[moder]);
};
for(int i=(GenetiskSkema.popSize-
GenetiskSkema.overlevere);i<GenetiskSkema.popSize;i++)
{
nytGenom[i] = new Genom();
udvaelg = (double)Math.random();
fitSum=GenetiskSkema.fitnessIntervaller[0];
overlever=0;
while(fitSum<udvaelg)
{
overlever++;
fitSum += GenetiskSkema.fitnessIntervaller[overlever];
};
nytGenom[i] = genom[overlever];
};
for(int i=0;i<GenetiskSkema.popSize;i++)
{
genom[i] = nytGenom[i];
};
};
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
37
public void mutation()
{
for (int i=0;i<GenetiskSkema.popSize;i++)
{
if (Math.random()*100 < GenetiskSkema.mutationProcent) genom[i].muter();
};
};
public void printSkema()
{
double highFitness =0;
int bedste = -1;
for (int i=0;i<GenetiskSkema.popSize;i++)
{
System.out.println("Genom nummer "+i+":");
genom[i].printSkema();
};
for (int i=0;i<GenetiskSkema.popSize;i++)
{
if (genom[i].fitness > highFitness)
{
if (genom[i].antalHC == 0)
{
bedste = i;
highFitness = genom[i].fitness;
};
}
};
if (bedste == -1) for (int i=0;i<GenetiskSkema.popSize;i++)
{
if (genom[i].fitness > highFitness)
{
highFitness = genom[i].fitness;
bedste = i;
}
};
System.out.println("Bedste genom (nummer "+bedste+"):");
genom[bedste].printLaererSkema();
genom[bedste].printSkema();
};
public void printFagfordeling()
{
System.out.println("Laererfordeling paa klasser og fag:");
for (int i=0;i<GenetiskSkema.antalLaerere;i++)
{
System.out.println(GenetiskSkema.laererNavne[i]+":");
for (int j=0;j<GenetiskSkema.antalKlasser;j++)
for (int k=0;k<GenetiskSkema.antalFag;k++)
if (GenetiskSkema.fagFordeling[j][k]==i)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
38
System.out.println(" "+GenetiskSkema.klasseNavne[j]+" : "+
GenetiskSkema.fagNavne[k]) ;
};
};
public void dumpGenom(int generation)
{
try{
FileWriter fstream;
if (generation ==0) fstream = new FileWriter("out.txt");
else fstream = new FileWriter("out.txt", true );
BufferedWriter out = new BufferedWriter(fstream);
for (int i=0;i<GenetiskSkema.popSize;i++)
out.write(generation+" , "+i+" , "+genom[i].genStreng()+" , "
+genom[i].fitness+" , "+genom[i].antalHC+" , "+genom
[i].antalMellemtimer+"\n");
out.close();
}catch (Exception e){System.err.println("Fejl: " + e.getMessage()); }
};
};
// Population slut
// Genom start
class Genom
{
Gen [] gen = new Gen [GenetiskSkema.antalKlasser];
double fitness = 0.0;
int antalHC = 0;
int antalMellemtimer =0;
public Genom()
{
for(int i=0;i<(GenetiskSkema.antalKlasser);i++)
{
gen[i] = new Gen(i) ;
};
};
public void reKombiner(Genom fader, Genom moder)
{
int mixHC, moderHC;
Genom testHC = new Genom();
double udvaelg;
double faderChance = 0.5;
for(int i=0;i<(GenetiskSkema.antalKlasser);i++)
{
if (GenetiskSkema.startHCTest == 1)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
39
{
testHC = new Genom();
for(int l=0;l<(GenetiskSkema.antalKlasser);l++)
for(int j=0;j<(GenetiskSkema.antalDage);j++)
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
if (l==i) testHC.gen[l].skema[j][k] = moder.gen[l].skema[j][k];
else testHC.gen[l].skema[j][k] = fader.gen[l].skema[j][k];
};
moderHC = hardConstraints(moder);
mixHC = hardConstraints(testHC);
if (mixHC > moderHC) faderChance = 0.5 / Math.pow
(GenetiskSkema.hardVaegt, (mixHC-moderHC));
};
udvaelg = Math.random();
fitness = 0;
if (udvaelg < faderChance)
{
this.gen[i].klasseNummer = i;
for(int j=0;j<(GenetiskSkema.antalDage);j++)
{
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
this.gen[i].skema[j][k] = fader.gen[i].skema[j][k];
};
}
}
else
{
this.gen[i].klasseNummer = i;
for(int j=0;j<(GenetiskSkema.antalDage);j++)
{
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
this.gen[i].skema[j][k] = moder.gen[i].skema[j][k];
};
};
};
};
};
public Genom (Genom gamleGenom)
{
for(int i=0;i<(GenetiskSkema.antalKlasser);i++)
{
fitness = 0;
this.gen[i].klasseNummer = i;
for(int j=0;j<(GenetiskSkema.antalDage);j++)
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
this.gen[i].skema[j][k] = gamleGenom.gen[i].skema[j][k];
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
40
};
};
};
public void muter()
{
int udpegKlasse;
int udpegDag;
int udpegLektion;
udpegKlasse = (int)(Math.random()* GenetiskSkema.antalKlasser);
udpegDag = (int)(Math.random()* GenetiskSkema.antalDage);
udpegLektion = (int)(Math.random()* GenetiskSkema.maxLektioner);
gen[udpegKlasse].muterSkema(udpegDag,udpegLektion);
};
public double beregnFitness()
{
fitness=1;
antalHC = 0 ;
antalMellemtimer = 0;
int samleTimer = 0;
int antalFaelles = 0;
for (int i=0;i<GenetiskSkema.antalKlasser;i++)
for(int j=0;j<(GenetiskSkema.antalDage);j++)
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
if (this.gen[i].skema[j][k] >= 0)
{
fitness = fitness * GenetiskSkema.skemaVaegt[j][k];
if ( (k>0) && (this.gen[i].skema[j][k] == this.gen[i].skema[j][k-1]) )
samleTimer++;
for (int l=0;l<GenetiskSkema.antalKlasser;l++)
{
if ( (l != i) && (this.gen[l].skema[j][k] >= 0)
&& (GenetiskSkema.faellesFag[this.gen[i].skema[j][k]]==1)
&& (GenetiskSkema.faellesFag[this.gen[l].skema[j][k]]==1) )
antalFaelles++;
};
};
antalHC = hardConstraints(this);
antalMellemtimer = mellemTimer(this);
if (antalHC > 0) fitness = fitness / Math.pow(GenetiskSkema.hardVaegt,antalHC);
if (antalMellemtimer > 0) fitness = fitness / Math.pow
(GenetiskSkema.mellemVaegt,antalMellemtimer);
if (samleTimer > 0) fitness = fitness * Math.pow
(GenetiskSkema.samleVaegt,samleTimer);
if (antalFaelles > 0) fitness = fitness * Math.pow
(GenetiskSkema.faellesVaegt,antalFaelles);
fitness = fitness * arbejdsDag(this);
return fitness;
};
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
41
public int mellemTimer (Genom testGenom)
{
int antalMellemtimer =0;
int lektionPointer = -1;
for (int i=0;i<GenetiskSkema.antalKlasser;i++)
for(int j=0;j<(GenetiskSkema.antalDage);j++)
{
lektionPointer = -1;
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
if (testGenom.gen[i].skema[j][k] >= 0)
{
if ( (lektionPointer >= 0) && ((k-lektionPointer)>1) )
antalMellemtimer += k-lektionPointer-1;
lektionPointer = k;
};
};
};
return antalMellemtimer;
};
public int samleTimer (Genom testGenom)
{
int antal =0;
int lektionPointer = -1;
for (int i=0;i<GenetiskSkema.antalKlasser;i++)
for(int j=0;j<(GenetiskSkema.antalDage);j++)
{
lektionPointer = -1;
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
if (testGenom.gen[i].skema[j][k] >= 0)
{
if ( (lektionPointer >= 0) && ((k-lektionPointer)>1) )
antalMellemtimer += k-lektionPointer-1;
lektionPointer = k;
};
};
};
return antalMellemtimer;
};
public double arbejdsDag (Genom testGenom)
{
int antalLektioner =0;
double vaegt = 1;
for (int i=0;i<GenetiskSkema.antalLaerere;i++)
for(int j=0;j<(GenetiskSkema.antalDage);j++)
{
antalLektioner = 0;
for (int k=0;k<GenetiskSkema.antalKlasser;k++)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
42
for(int l=0;l<(GenetiskSkema.maxLektioner);l++)
if (testGenom.gen[k].skema[j][l] >= 0 &&
GenetiskSkema.fagFordeling[k][testGenom.gen[k].skema[j][l]] == i )
antalLektioner++;
if (antalLektioner > GenetiskSkema.maxLektioner) antalLektioner =
GenetiskSkema.maxLektioner;
vaegt = vaegt * GenetiskSkema.arbejdsdagVaegt[antalLektioner];
};
return vaegt;
};
public void printLaererSkema()
{
int [][] laererSkema = new int [GenetiskSkema.antalDage]
[GenetiskSkema.maxLektioner];
for (int i=0;i<GenetiskSkema.antalLaerere;i++)
{
for(int j=0;j<(GenetiskSkema.antalDage);j++)
for (int k=0;k<GenetiskSkema.maxLektioner;k++)
laererSkema[j][k] = -1;
for(int j=0;j<(GenetiskSkema.antalDage);j++)
for (int k=0;k<GenetiskSkema.antalKlasser;k++)
for(int l=0;l<(GenetiskSkema.maxLektioner);l++)
{
if (this.gen[k].skema[j][l] >= 0 &&
GenetiskSkema.fagFordeling[k][this.gen[k].skema[j][l]] == i )
laererSkema[j][l] = this.gen[k].skema[j][l];
};
System.out.println("Skema for "+GenetiskSkema.laererNavne[i]+":");
for(int j=0;j<(GenetiskSkema.maxLektioner);j++)
{
for (int k=0;k<GenetiskSkema.antalDage;k++)
{
if (laererSkema[k][j] >= 0) System.out.print(GenetiskSkema.fagNavne
[laererSkema[k][j]]+" ");
else System.out.print(" - ");
};
System.out.println();
};
System.out.println();
};
};
public int hardConstraints (Genom testGenom)
{
int laerer;
int antalSamtidige = 0;
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
43
int hcTaeller = 0;
for (int i=0;i<GenetiskSkema.antalKlasser;i++)
for(int j=0;j<(GenetiskSkema.antalDage);j++)
for(int k=0;k<(GenetiskSkema.maxLektioner);k++)
{
if (testGenom.gen[i].skema[j][k] >= 0)
{
laerer = GenetiskSkema.fagFordeling[i][testGenom.gen[i].skema[j][k]];
antalSamtidige = 0;
for (int l=0;l<GenetiskSkema.antalKlasser;l++)
if (testGenom.gen[l].skema[j][k] >= 0)
if ( (GenetiskSkema.fagFordeling[l][testGenom.gen[l].skema[j][k]] ==
laerer)
&& (GenetiskSkema.faellesFag[testGenom.gen[l].skema[j][k]] != 1) )
antalSamtidige++;
if (antalSamtidige > 1) hcTaeller += antalSamtidige -1;
};
};
return hcTaeller / 2;
};
public void printSkema()
{
System.out.println("Fitness ="+fitness+" antal HC="+antalHC+" antal
mellemtimer="+antalMellemtimer);
for (int i=0;i<GenetiskSkema.antalKlasser;i++)
{
gen[i].printSkema();
};
};
public String genStreng()
{
String gStreng = "";
for(int i=0;i<(GenetiskSkema.antalKlasser);i++)
gStreng = gStreng + gen[i].genTilStreng();
return gStreng;
};
}
// Genom slut
// Gen start
class Gen
{
int klasseNummer;
public int [][] skema = new int [GenetiskSkema.antalDage]
[GenetiskSkema.maxLektioner] ;
public Gen(int nr)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
44
{
klasseNummer = nr;
for(int i=0;i<(GenetiskSkema.antalDage);i++)
for(int j=0;j<(GenetiskSkema.maxLektioner);j++)
{
skema[i][j] = -1;
};
startSkema();
}
void muterSkema (int dag, int lektion)
{
int fag;
int nyFag;
int nyDag, nyLektion;
nyDag = (int)(Math.random()* GenetiskSkema.antalDage);
nyLektion = (int)(Math.random()* GenetiskSkema.maxLektioner);
fag = skema[dag][lektion];
nyFag = skema[nyDag][nyLektion];
skema[dag][lektion] = nyFag;
skema[nyDag][nyLektion] = fag;
}
void startSkema ()
{
int dagTaeller = 0;
int lektionTaeller = 0;
for(int j=0;j<GenetiskSkema.antalFag;j++)
for(int k=0;k<GenetiskSkema.timeFordeling[klasseNummer][j];k++)
{
skema[dagTaeller][lektionTaeller] = j;
dagTaeller++;
if (dagTaeller == GenetiskSkema.antalDage)
{
dagTaeller = 0;
lektionTaeller++;
};
if (lektionTaeller > GenetiskSkema.maxLektioner)
{
System.err.println("For mange timer i skemaet");
lektionTaeller = 0;
};
};
for(int i=0;i<GenetiskSkema.antalDage;i++)
for(int j=0;j<GenetiskSkema.maxLektioner;j++)
muterSkema(i,j);
};
public void printSkema ()
{
System.out.println("Skema for "+GenetiskSkema.klasseNavne[klasseNummer]+":");
for (int i=0;i<GenetiskSkema.maxLektioner;i++)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
45
{
for (int j=0;j<GenetiskSkema.antalDage;j++)
if (skema[j][i] >= 0) System.out.print(GenetiskSkema.fagNavne[skema[j][i]]+" ");
else System.out.print(" - ");
System.out.println();
};
System.out.println();
};
public String genTilStreng()
{
int tegn;
String tilStreng = "";
for (int i=0;i<GenetiskSkema.antalDage;i++)
for (int j=0;j<GenetiskSkema.maxLektioner;j++)
tilStreng = tilStreng + (char)(skema[i][j]+(int)'A');
return tilStreng;
};
}
// Gen slut
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
46
Appendiks B: Parametre og inddata
Filen parametre.txt skal indeholde følgende tal:
int antalKlasser: antal klasser / gener pr. genom
int antalFag: antal fag i alt
int antalLaerere: antal lærere i alt
int antalDage: antal skoledage pr. uge
int maxLektioner: antal lektioner pr. dag
int popSize: populationens størrelse (antal genomer)
int overlevere: antal genomer som går uændret videre til næste generation
int maxGenerationer: antal genrationer (hvor mange gange algoritmen køres)
int startHC: Fra hvilken genration rekombination bliver vægtet efter hard constraints
double hardVaegt: relativ vægt af hard constraints (neutral = 1)
double mellemVaegt: relativ vægt af mellemtimer (neutral = 1)
double samleVaegt: relativ vægt af samling af lektioner med samme fag (neutral =1)
double faellesVaegt: relativ vægt af at samle timer der kan ligge samtidigt
double mutationProcent: procent chance (0-100) for at et genom muteres
int dumpFrekvens: hvor ofte data skal dumpes i out.txt
Filen timefordeling.txt skal indeholde data for antal timer pr. fag på dette format:
fag0 i klasse 0 fag1 i klasse 0 fag2 i klasse0 …
fag0 i klasse 0 fag1 i klasse 0 fag2 i klasse0 …
…
For eksempel:
3 1 4 3 2 4 4 4 0 0 0 4 0 0 0 0 0 0 0 1
3 1 4 3 2 4 4 4 0 0 0 4 0 0 0 0 0 0 0 1
Som kan betyde at 1A har 3 dansktimer, 1 tysktime, 4 samfundsfagstimer o.s.v.
Filen fagfordeling.txt skal indeholde data for hvilke fag lærerne underviser i:
fag0 i klasse 0 fag1 i klasse 0 fag2 i klasse0 …
fag0 i klasse 0 fag1 i klasse 0 fag2 i klasse0 …
…
(som ovenfor, men tallet angiver lærerens nummer)
For eksempel:
9 7 6 15 16 11 13 14 -1 -1 -1 5 -1 -1 -1 -1 -1 -1 -1 7
16 7 6 15 16 0 3 18 -1 -1 -1 17 -1 -1 -1 -1 -1 -1 -1 7
Lærer nummer 9 har 1A til dansk, lærer nummer 7 har 1A til tysk o.s.v.
-1 angiver at klassen ikke har faget (svarende til 0 timer i timefordeling).
Filen skemavaegt.txt skal indeholde vægtene for forskellige tidspunkter på dagen:
mandag lektion 0 mandag lektion 1 mandag lektion 2 …
tirsdag lektion 0 tirsdag lektion 1 tirsdag lektion 2 …
…
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
47
For eksempel
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
mandag 0. og 1. lektion vægtes 1,5, mandag 2. og 3. lektion vægtes 1,2 o.s.v.
(dvs. de tidlige timer foretrækkes generelt)
Filen arbejdsdagsvaegt.txt skal indeholde vægten af lærernes lektioner pr. dag:
Vægt af 0 timer (fri) vægt af 1 time vægt af 2 timer …
For eksempel
4 0,5 0,75 1 1,5 2 1,5 1 0,75 0,5 0,25
Ingen timer (fridag) vægtes 4, en enkelt time 0,5 o.s.v.
(ved at vægte 0 timer højt og lavt antal timer lavt opnås flere fridage)
Filerne fagnavne.txt, klassenavne.txt og laerernavne.txt skal indeholde hhv. navne på fag,
navne på klasser og navne på lærere (til brug ved udskrifter):
fag0
fag1
fag2
…
(eller tilsvarende for de andre navne)
For eksempel
dansk
tysk
samfundsf
Fag0 skal printes ud som dansk, fag1 som tysk o.s.v.
Filen faellesfag.txt skal indeholde flag for om fag skal forsøges lagt i samme tidsrum for alle
klasser der har faget (hvor det er tilladt at have den samme lærer):
fag0 (0=nej, 1= ja) fag1 (0=nej, 1=ja) ...
For eksempel
0
0
1
fag0 og fag1 følger normale regler for hard constraints, fag2 er et fællesfag
Vær opmærksom på at komma i decimaltal kan være maskinafhængigt (, eller .)
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
48
Appendiks C: Inddata og uddata for praktisk test
Inddata for den kørsel hvor skemaerne er brugt som eksempler var :
(Af hensyn til læsbarheden er der fjernet linjeskift i nogle af filerne).
parametre.txt
8 20 19 5 10 100 50 2001 1001 4.0 1.2 1.2 4.0 20.0 50
timefordeling.txt
3 1 4 3 2 4 4 4 0 0 0 4 0 0 0 0 0 0 0 1
3 1 4 3 2 4 4 4 0 0 0 4 0 0 0 0 0 0 0 1
3 1 0 2 4 3 5 4 2 0 3 6 0 3 0 0 0 0 0 1
3 1 0 3 4 4 5 4 2 0 3 6 0 3 0 0 0 0 0 1
3 1 0 0 2 6 5 5 2 3 3 0 0 0 3 0 0 0 0 1
3 0 1 0 0 2 0 0 0 0 0 0 3 0 0 2 4 2 6 2
3 0 1 0 0 2 0 0 0 0 0 0 3 0 0 2 4 2 6 2
0 3 2 0 2 2 0 0 0 0 2 0 2 0 0 1 3 2 6 2
fagfordeling.txt
9 7 6 15 16 11 13 14 -1 -1 -1 5 -1 -1 -1 -1 -1 -1 -1 7
16 7 6 15 16 0 3 18 -1 -1 -1 17 -1 -1 -1 -1 -1 -1 -1 7
9 0 -1 15 16 11 3 14 6 -1 2 17 -1 4 -1 -1 -1 -1 -1 7
9 0 -1 14 16 12 13 18 6 -1 2 5 -1 4 -1 -1 -1 -1 -1 7
16 0 -1 -1 7 12 3 18 6 15 2 -1 -1 -1 14 -1 -1 -1 -1 7
9 -1 4 -1 -1 12 -1 -1 -1 -1 -1 -1 10 -1 -1 10 17 1 9 8
8 -1 4 -1 -1 11 -1 -1 -1 -1 -1 -1 10 -1 -1 15 4 1 11 8
-1 0 9 -1 7 12 -1 -1 -1 -1 2 -1 10 -1 -1 10 4 1 10 8
skemavaegt.txt
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
1,5 1,5 1,2 1,2 1 1 0,75 0,75 0,5 0,5
arbejdsdagsvaegt.txt
4 0,5 0,75 1 1,5 2 1,5 1 0,75 0,5 0,25
fagnavne.txt
dansk tysk samfundsf int. oek. fransk
engelsk virk.oek. afsaetn. samtidsh. markedsk.
psykologi matematik erhv.oek. multimed. erhv.ret
salg og s inf.tekn. livsstil laeringk. lektiecaf
klassenavne.txt
1A 1B 2A 2B 3A 1C 1D 2C
laerernavne.txt
ANH BOW CAH FHN FRR FSH HES JUA JYM KIR
LER LOK LRC MAU MOG PRO RHA SID VVE
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
49
faellesfag
4 0,5 0,75 1 1,5 2 1,5 1 0,75 0,5 0,25
Uddata blev (kun det af programmet udvalgte bedste genom vises):
Bedste genom (nummer 0):
Skema for ANH:
engelsk - tysk - -
tysk - tysk - -
tysk - - tysk -
- - engelsk tysk -
- - engelsk - -
engelsk - - - -
- - - - -
- - - - -
- - - - -
- - - - -
Skema for BOW:
- - - - -
- - - - -
- - - - -
- - - - -
- - - - livsstil
- - - - -
- - - - -
- - - - -
- - - - livsstil
- - - - -
Skema for CAH:
psykologi psykologi - psykologi -
- psykologi - psykologi -
- psykologi - psykologi -
psykologi - - psykologi -
psykologi - - - -
psykologi - - - -
- - - - -
- - - - -
- - - - -
- - - - -
Skema for FHN:
virk.oek. - - - -
virk.oek. - - - -
virk.oek. - virk.oek. - virk.oek.
virk.oek. - virk.oek. - virk.oek.
virk.oek. - virk.oek. - -
- - virk.oek. - virk.oek.
- - virk.oek. - virk.oek.
- - - - -
- - - - -
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
50
- - - - -
Skema for FRR:
- - - inf.tekn. -
- samfundsf multimed. inf.tekn. -
- inf.tekn. multimed. inf.tekn. -
- - inf.tekn. inf.tekn. -
- - inf.tekn. - -
- multimed. samfundsf multimed. -
- multimed. - - -
- multimed. - - -
- - - - -
- - - - -
Skema for FSH:
- matematik - - matematik
- matematik matematik - matematik
- - matematik - matematik
- - matematik - matematik
- - matematik - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
Skema for HES:
- - - samfundsf samfundsf
- - samtidsh. samtidsh. samfundsf
- - samtidsh. samtidsh. samfundsf
- samfundsf - samtidsh. -
- samfundsf - samfundsf samtidsh.
- samfundsf - - -
- - - - -
- - - - -
- - - - -
- - - - -
Skema for JUA:
- tysk - - fransk
- - - - fransk
- - - - -
- - - - fransk
- fransk - - tysk
- - - - -
- - - - -
- - lektiecaf - -
- - - - -
- - - - -
Skema for JYM:
- - lektiecaf - -
- - - - -
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
51
- dansk - - -
- lektiecaf - - -
- - dansk - -
- lektiecaf dansk - -
- - - - -
- lektiecaf - - -
- - - - -
- - - - -
Skema for KIR:
- samfundsf laeringk. dansk dansk
- samfundsf - dansk dansk
dansk - - dansk dansk
laeringk. laeringk. - dansk dansk
laeringk. - - dansk -
- - - - -
- - laeringk. - -
- - laeringk. - -
- - - - -
- - - - -
Skema for LER:
erhv.oek. salg og s - - erhv.oek.
salg og s salg og s - - erhv.oek.
erhv.oek. - erhv.oek. - erhv.oek.
laeringk. - erhv.oek. - -
laeringk. - - - -
- laeringk. - - erhv.oek.
- - laeringk. - -
- laeringk. laeringk. - -
- - - - -
- - - - -
Skema for LOK:
- engelsk - - -
engelsk engelsk engelsk - -
engelsk engelsk - - -
laeringk. laeringk. - - -
laeringk. - - - -
- laeringk. engelsk - -
- - laeringk. - -
- - laeringk. - -
- - - - -
- - - - -
Skema for LRC:
engelsk engelsk - - -
engelsk engelsk engelsk - -
- engelsk engelsk - -
- engelsk - - -
- - - engelsk -
- - engelsk engelsk -
engelsk - engelsk - -
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
52
engelsk - - - -
- - - - -
- - - - -
Skema for MAU:
virk.oek. - - - -
virk.oek. - - - -
virk.oek. - - - -
- - - virk.oek. -
virk.oek. - - virk.oek. -
- - - virk.oek. -
- - - virk.oek. -
- - - virk.oek. -
- - - - -
- - - - -
Skema for MOG:
- - erhv.ret int. oek. -
- - - afsaetn. -
erhv.ret - - afsaetn. -
erhv.ret - int. oek. - -
afsaetn. - int. oek. - -
afsaetn. - afsaetn. afsaetn. -
- - afsaetn. afsaetn. -
- - - - -
- - - - -
- - - - -
Skema for PRO:
int. oek. salg og s - - int. oek.
int. oek. int. oek. - - -
salg og s int. oek. - - -
- - - - int. oek.
markedsk. markedsk. - - int. oek.
- markedsk. - - -
int. oek. - - - -
- - - - -
- - - - -
- - - - -
Skema for RHA:
- - dansk dansk -
- - dansk dansk fransk
- - dansk - fransk
- fransk fransk - -
- fransk - fransk -
- - fransk fransk fransk
- fransk - dansk fransk
- fransk - - -
- - - - -
- - - - -
Skema for SID:
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
53
- - matematik - -
- - inf.tekn. - matematik
- inf.tekn. inf.tekn. - matematik
- matematik inf.tekn. - matematik
- matematik matematik - matematik
- matematik - - matematik
- - - - -
- - - - -
- - - - -
- - - - -
Skema for VVE:
- - - afsaetn. -
- - - afsaetn. -
- afsaetn. - afsaetn. -
- afsaetn. - afsaetn. afsaetn.
- afsaetn. - - afsaetn.
- afsaetn. - - afsaetn.
- - - - afsaetn.
- - - - afsaetn.
- - - - -
- - - - -
Fitness =2.830166129945104E119 antal HC=0 antal mellemtimer=17
Skema for 1A:
int. oek. engelsk dansk samfundsf dansk
int. oek. engelsk matematik afsaetn. fransk
engelsk engelsk matematik afsaetn. fransk
dansk samfundsf matematik virk.oek. int. oek.
virk.oek. samfundsf matematik virk.oek. tysk
- samfundsf afsaetn. virk.oek. -
- - afsaetn. - -
- - lektiecaf - -
- - - - -
- - - - -
Skema for 1B:
engelsk tysk dansk afsaetn. samfundsf
- int. oek. dansk afsaetn. samfundsf
virk.oek. int. oek. dansk afsaetn. samfundsf
virk.oek. matematik engelsk afsaetn. virk.oek.
virk.oek. matematik engelsk samfundsf int. oek.
engelsk matematik fransk fransk matematik
- - - - -
- - lektiecaf - -
- - - - -
- - - - -
Skema for 2A:
virk.oek. psykologi matematik dansk int. oek.
virk.oek. psykologi tysk dansk matematik
dansk psykologi virk.oek. samtidsh. matematik
engelsk fransk fransk samtidsh. matematik
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
54
afsaetn. fransk matematik fransk matematik
afsaetn. multimed. engelsk afsaetn. virk.oek.
int. oek. multimed. engelsk afsaetn. virk.oek.
- multimed. lektiecaf - -
- - - - -
- - - - -
Skema for 2B:
virk.oek. matematik tysk int. oek. matematik
virk.oek. matematik multimed. samtidsh. matematik
virk.oek. afsaetn. multimed. dansk matematik
psykologi afsaetn. int. oek. dansk matematik
psykologi afsaetn. int. oek. dansk samtidsh.
psykologi afsaetn. engelsk multimed. fransk
engelsk fransk engelsk virk.oek. fransk
engelsk fransk lektiecaf virk.oek. -
- - - - -
- - - - -
Skema for 3A:
psykologi engelsk erhv.ret dansk fransk
tysk engelsk samtidsh. dansk fransk
erhv.ret engelsk samtidsh. psykologi virk.oek.
erhv.ret engelsk virk.oek. psykologi afsaetn.
markedsk. markedsk. virk.oek. engelsk afsaetn.
- markedsk. virk.oek. engelsk afsaetn.
- - virk.oek. dansk afsaetn.
- - lektiecaf - afsaetn.
- - - - -
- - - - -
Skema for 1C:
engelsk salg og s laeringk. - erhv.oek.
engelsk salg og s inf.tekn. - dansk
erhv.oek. inf.tekn. inf.tekn. - dansk
laeringk. laeringk. inf.tekn. - dansk
laeringk. - - - livsstil
- lektiecaf samfundsf - erhv.oek.
- - laeringk. - -
- lektiecaf laeringk. - -
- - - - livsstil
- - - - -
Skema for 1D:
erhv.oek. salg og s lektiecaf inf.tekn. -
engelsk samfundsf engelsk inf.tekn. -
salg og s dansk erhv.oek. inf.tekn. -
laeringk. laeringk. erhv.oek. inf.tekn. -
laeringk. - dansk - livsstil
- laeringk. dansk - -
- - laeringk. - -
- lektiecaf laeringk. - -
- - - - livsstil
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
55
- - - - -
Skema for 2C:
- samfundsf lektiecaf psykologi -
salg og s samfundsf engelsk psykologi erhv.oek.
tysk inf.tekn. engelsk tysk erhv.oek.
laeringk. lektiecaf inf.tekn. tysk fransk
laeringk. fransk inf.tekn. - livsstil
- laeringk. - - -
- - laeringk. - -
- laeringk. laeringk. - -
- - - - livsstil
- - - - -
Laererfordeling paa klasser og fag:
ANH:
1B : engelsk
2A : tysk
2B : tysk
3A : tysk
2C : tysk
BOW:
1C : livsstil
1D : livsstil
2C : livsstil
CAH:
2A : psykologi
2B : psykologi
3A : psykologi
2C : psykologi
FHN:
1B : virk.oek.
2A : virk.oek.
3A : virk.oek.
FRR:
2A : multimed.
2B : multimed.
1C : samfundsf
1D : samfundsf
1D : inf.tekn.
2C : inf.tekn.
FSH:
1A : matematik
2B : matematik
HES:
1A : samfundsf
1B : samfundsf
2A : samtidsh.
2B : samtidsh.
3A : samtidsh.
JUA:
1A : tysk
1A : lektiecaf
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
56
1B : tysk
1B : lektiecaf
2A : lektiecaf
2B : lektiecaf
3A : fransk
3A : lektiecaf
2C : fransk
JYM:
1C : lektiecaf
1D : dansk
1D : lektiecaf
2C : lektiecaf
KIR:
1A : dansk
2A : dansk
2B : dansk
1C : dansk
1C : laeringk.
2C : samfundsf
LER:
1C : erhv.oek.
1C : salg og s
1D : erhv.oek.
2C : erhv.oek.
2C : salg og s
2C : laeringk.
LOK:
1A : engelsk
2A : engelsk
1D : engelsk
1D : laeringk.
LRC:
2B : engelsk
3A : engelsk
1C : engelsk
2C : engelsk
MAU:
1A : virk.oek.
2B : virk.oek.
MOG:
1A : afsaetn.
2A : afsaetn.
2B : int. oek.
3A : erhv.ret
PRO:
1A : int. oek.
1B : int. oek.
2A : int. oek.
3A : markedsk.
1D : salg og s
RHA:
1A : fransk
1B : dansk
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
57
1B : fransk
2A : fransk
2B : fransk
3A : dansk
SID:
1B : matematik
2A : matematik
1C : inf.tekn.
VVE:
1B : afsaetn.
2B : afsaetn.
3A : afsaetn.
Programmet kørte i 296 sekunder på en 1.2 ghz Windows 2000-computer med 750 mb ram.
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
58
Appendiks D: Inddata og uddata for test af den genetiske algoritme
Inddata for den kørsel som er nærmere analyseret var :
(Af hensyn til læsbarheden er der fjernet linjeskift i nogle af filerne).
parametre.txt
6 6 6 3 4 100 50 41 1 4 1,2 1,2 4 50 1
timefordeling.txt
5 2 2 3 0 0
4 1 6 1 0 0
2 1 1 4 1 3
1 1 2 4 3 1
0 4 0 0 0 8
0 3 1 0 8 0
fagfordeling.txt
0 1 2 3 -1 -1
0 1 2 3 -1 -1
0 1 2 3 4 5
0 1 2 3 4 5
-1 1 -1 -1 -1 5
-1 1 2 -1 4 -1
skemavaegt.txt
1,5 1,2 1 0,75
1,5 1,2 1 0,75
1,5 1,2 1 0,75
arbejdsdagsvaegt.txt
4 0,5 0,75 1 1,5 2 1,5 1 0,75 0,5 0,25
fagnavne.txt
dansk tysk engelsk fransk russisk kinesisk
klassenavne.txt
1A 1B 2A 2B 3A 3B
laerernavne.txt
Arne
Bodil
Carsten
Dorte
Erik
Freja
faellesfag
0 0 0 0 0 0
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
59
Uddata blev (kun det af programmet udvalgte bedste genom vises):
Bedste genom (nummer 1):
Skema for Arne:
dansk dansk dansk
dansk dansk dansk
dansk dansk dansk
dansk dansk dansk
Skema for Bodil:
tysk tysk tysk
tysk tysk tysk
tysk tysk tysk
tysk tysk tysk
Skema for Carsten:
engelsk engelsk engelsk
engelsk engelsk engelsk
engelsk engelsk engelsk
engelsk engelsk engelsk
Skema for Dorte:
fransk fransk fransk
fransk fransk fransk
fransk fransk fransk
fransk fransk fransk
Skema for Erik:
russisk russisk russisk
russisk russisk russisk
russisk russisk russisk
russisk russisk russisk
Skema for Freja:
kinesisk kinesisk kinesisk
kinesisk kinesisk kinesisk
kinesisk kinesisk kinesisk
kinesisk kinesisk kinesisk
Fitness =7273302.973406416 antal HC=0 antal mellemtimer=0
Skema for 1A:
dansk engelsk dansk
tysk fransk fransk
engelsk dansk fransk
dansk dansk tysk
Skema for 1B:
fransk dansk engelsk
dansk dansk engelsk
dansk engelsk engelsk
engelsk tysk engelsk
Skema for 2A:
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
60
kinesisk fransk fransk
engelsk tysk dansk
kinesisk fransk kinesisk
russisk fransk dansk
Skema for 2B:
engelsk russisk tysk
fransk russisk russisk
fransk kinesisk dansk
fransk engelsk fransk
Skema for 3A:
tysk kinesisk kinesisk
kinesisk kinesisk kinesisk
tysk tysk tysk
kinesisk kinesisk kinesisk
Skema for 3B:
russisk tysk russisk
russisk engelsk tysk
russisk russisk russisk
tysk russisk russisk
Laererfordeling paa klasser og fag:
Arne:
1A : dansk
1B : dansk
2A : dansk
2B : dansk
Bodil:
1A : tysk
1B : tysk
2A : tysk
2B : tysk
3A : tysk
3B : tysk
Carsten:
1A : engelsk
1B : engelsk
2A : engelsk
2B : engelsk
3B : engelsk
Dorte:
1A : fransk
1B : fransk
2A : fransk
2B : fransk
Erik:
2A : russisk
2B : russisk
3B : russisk
Freja:
2A : kinesisk
Speciale i datalogi, Flemming Rasch, Institut for Kommunikation, Virksomhed og Informationsteknologier, Roskilde Universitet 2009.
61
2B : kinesisk
3A : kinesisk
Programmet kørte i 5 sekunder på en 1.2 ghz Windows 2000-computer med 750 mb ram.