Deze repository bevat een implementatie voor de Lectures & Lesrooster case voor de UvA en het gedocumenteerde proces dat is bijgehouden tijdens dit project.
De eindpresentatie kan je hier vinden.
- Lesrooster
- Inhoudsopgave
- Proces logboek
- Project eisen
- Installatie
- Gebruik
- Project structuur
- Constraints
- Tests
- Auteurs
Ik houd een persoonlijk proces logboek bij in deze repo waar ik mijn proces en resultaten beschrijf na elke fase te hebben afgerond.
Klik hier om het te bekijken.
Dit project vereist Python 3.9 of hoger.
git clone https://github.com/kkoomen/uva-ahs-lesrooster && cd uva-ahs-lesroosterpython3 -m venv envsource ./env/bin/activatepip3 install -r requirements.txt
De algemene structuur is: ./main.py -a <algorithm> [OPTIONS]
Waarbij <algorithm> één van de volgende waardes kan zijn:
randomgreedyrandom-greedygreedy-lsdhillclimbertabu-search
OPTIONS kan zowel globale als algoritme specifieke opties kan bevatten.
- globale opties voor elk algoritme:
-l, --log-level debug|info|warning|error|critical-q, --quiettoon geen stdout-e, --export ics|csv|jsonexporteert timetable naarics,csvofjsonformaat-i, --iterations <number>aantal iteraties dat het algoritme moet runnen-s, --plot-statsplot statistieken nadat het algoritme klaar is--plot-heatmapplot de timetable heatmap
randomalgoritme opties:--random-walkdoe een random walk en plot de resultaten (moet in combinatie met-i <number>)
Voor alle mogelijke opties, zie ./main.py --help
Random algoritme:
./main.py -a random -i 10./main.py -a random --random-walk -i 1000 --plot-heatmap./main.py -a random -e csv -e json./main.py -a random -e ics --plot-heatmap
Greedy algoritme:
./main.py -a greedy./main.py -a random-greedy -s./main.py -a greedy --plot-heatmap./main.py -a greedy -e ics --plot-heatmap
Visualisaties:
./main.py --visualization course-conflicts: Visualiseer de course vak conflicten met graph coloring./main.py --visualization hillclimber -i <iterations>: Pas hill climber toe op verschillende algoritme en plot het resultaat./main.py --visualization hillclimber-vs-tabu -i <iterations>: Vergelijk hill climber en tabu search met elkaar
.
├── main.py # hoofdbestand
├── data # bevat alle (csv) data bestanden
├── code # de codebase zelf
│ ├── visualizations # bevat visualisaties voor het genereren van statistieken
│ ├── algorithms # bevat diverse algoritme implementaties
│ ├── entities # bevat alle entiteiten
│ └── utils # utility en helper functions
├── out # alle ics/csv/json exports komen hier terecht
├── docs # bevat het gedocumenteerde proces van dit hele project
└── test # bevat unit tests
Hard constraints:
- In elk tijdslot mag elke zaal maximaal 1 keer geboekt worden
- Alleen de zaal met de grootste capaciteit mag geboekt worden van 17:00 - 19:00
- 3 of meer tussensloten per student is niet toegestaan
Soft constraints (maluspunten):
- Elke activiteit ingeboekt in het 17:00 - 19:00 tijdslot geeft 5 maluspunten
- 1 tussenslot tussen twee andere activiteiten per student geeft 1 maluspunt
- 2 tussensloten tussen twee andere activiteiten per student geeft 3 maluspunten
- Elk vak conflict per student per tijdslot geeft 1 maluspunt
- Elke student die niet meer in een zaal past geeft 1 maluspunt
- Elk dubbel ingeplande activiteit per tijdslot voor elk vak geeft 1 maluspunt (extra)
coverage run -m pytest: run alle testscoverage report: toon code coverage (kan alleen nadat jecoverage runhebt uitgevoerd)
Alle entities, utils en base algoritme class hebben tests waar nodig:
Name Stmts Miss Cover
----------------------------------------------------
code/algorithms/base.py 117 0 100%
code/algorithms/greedy.py 93 93 0%
code/algorithms/hillclimber.py 20 20 0%
code/algorithms/randomizer.py 61 61 0%
code/algorithms/tabu_search.py 24 24 0%
code/entities/course.py 45 0 100%
code/entities/event.py 38 0 100%
code/entities/room.py 15 0 100%
code/entities/student.py 14 0 100%
code/entities/timeslot.py 91 0 100%
code/entities/timetable.py 291 0 100%
code/utils/constants.py 5 0 100%
code/utils/data.py 49 0 100%
code/utils/enums.py 6 0 100%
code/utils/helpers.py 53 0 100%
----------------------------------------------------
TOTAL 922 198 79%
Kim Koomen, eerstejaars bachelorstudent KI, 2023.
