Title: | Reduce the Number of Holes in the School Timetable |
Version: | 0.1.2 |
Description: | Reallocating the respective lessons by hours (respecting the constraints induced by the existence of coupled lessons) so that the total number of gaps is as small as possible. |
License: | MIT + file LICENSE |
Encoding: | UTF-8 |
Language: | ro |
RoxygenNote: | 7.3.2 |
Imports: | dplyr, magrittr, purrr, rlang, stats, stringr, tibble |
Depends: | R (≥ 3.5.0) |
LazyData: | true |
Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0) |
VignetteBuilder: | knitr |
Config/testthat/edition: | 3 |
NeedsCompilation: | no |
Packaged: | 2025-05-23 02:57:29 UTC; vb |
Author: | Vlad Bazon [aut, cre] |
Maintainer: | Vlad Bazon <vlad.bazon@gmail.com> |
Repository: | CRAN |
Date/Publication: | 2025-05-23 03:20:02 UTC |
refitgaps: Reduce the Number of Holes in the School Timetable
Description
Reallocating the respective lessons by hours (respecting the constraints induced by the existence of coupled lessons) so that the total number of gaps is as small as possible.
Author(s)
Maintainer: Vlad Bazon vlad.bazon@gmail.com
Pipe operator
Description
See magrittr::%>%
for details.
Usage
lhs %>% rhs
Arguments
lhs |
A value or the magrittr placeholder. |
rhs |
A function call using the magrittr semantics. |
Value
The result of calling rhs(lhs)
.
A simple example (from a Romanian school) of a daily schedule
Description
Matrice-orar cu 59 linii și 7 coloane. Numele de linie reprezintă profesorii (pe câte 3 caractere) sau cuplajele (pe câte 6 caractere); pe fiecare linie sunt înregistrate clasele (sau '-' dacă este liber în acea oră) la care are de intrat profesorul sau cuplajul respectiv, în orele 1:7 ale zilei. Fiecare clasă apare câte o singură dată, pe fiecare dintre coloanele de rang mai mic sau egal cu numărul de ore/zi (cel mult 7) ale clasei respective.
Usage
MOZ
Format
An object of class matrix
(inherits from array
) with 59 rows and 7 columns.
Details
A matrix with 59 rows and 7 columns
The rownames are the teachers ('prof')
The columns are the 1:7 hours of the day
The values are the classes of the 'prof' in each hour, or '-' if the 'prof' is free in that hour
Tupled lessons for 'MOZ'
Description
6 tuplaje asociate matricei-orar 'MOZ'. Lecțiile dintr-un același tuplaj au fost alocate într-o aceeași oră.
Usage
TPL
Format
- prof
Vectorul profesorilor sau cuplajelor din tuplaj
- cls
Vectorul claselor din tuplaj, de aceeași lungime cu 'prof'; pentru fiecare tuplaj asocierea 'prof/cls' (în cadrul matricei-orar) respectă ordinea profesorilor și claselor din acel tuplaj
- ora
Ora alocată în matricea-orar lecțiilor din tuplaj
Numărul de ferestre dintr-o matrice-orar dată
Description
Aplicație imediată a funcției 'have_gaps()'; servește de exemplu, pentru a afla câte ferestre sunt pe matricea-orar inițială (pe care ar urma să se aplice 'recast()', pentru a reduce numărul de ferestre).
Usage
gaps_count(OZ)
Arguments
OZ |
Matrice-orar |
Value
Numărul de ferestre, considerând cuplajele și profesorii externi
Evidențiază orarele profesorilor care au ferestre
Description
Se șablonează orarele individuale, înlocuind clasele cu câte un asterisc; fereastră înseamnă atunci orice '-' aflat între două asteriscuri; iar pentru cei angajați în cuplaje, se cumulează șabloanele membrilor.
Usage
have_gaps(OZ)
Arguments
OZ |
Matrice-orar; liniile sunt numite după profesori/cuplaje; pe fiecare linie sunt înregistrate pe ore clasele la care intră profesorul (sau '-' dacă este liber); fiecare clasă apare o singură dată, pe fiecare coloană de rang cel mult egal cu numărul de ore/zi al clasei. |
Value
Subsetul liniilor cu ferestre; pentru cazul ferestrelor "ascunse" (induse de angajarea în cuplaje), este anexat șablonul tuturor orelor în care este implicat profesorul respectiv.
Examples
HG <- have_gaps(MOZ)
Rearanjează clasele indicate oră de oră pe liniile profesorilor (și cuplajelor) într-o matrice-orar (păstrând unicitatea claselor pe coloanele orare și când este cazul, respectând alocarea pe ore existentă pentru lecțiile tuplate), astfel încât numărul total de ferestre (incluzând pe cele induse de cuplaje) să devină după un anumit număr de iterații, cât se poate de mic.
Description
"programul principal" (exportat) este 'recast()', dar acesta are în interior 6 funcții care, folosind variabilele definite în programul principal (precum și o listă internă de "mutări corectoare"), acționează pe matricea-orar corespunzătoare iterației curente, pe parcursul căutării unui orar "mai bun" (cu mai puține ferestre).
Usage
recast(matPr, TPL = NULL, Niter = 3000, GD = 2)
Arguments
matPr |
Matricea-orar furnizată de către utilizator; liniile sunt numite după profesori/cuplaje; pe fiecare linie sunt înregistrate pe ore clasele la care intră profesorul (sau '-' dacă este liber); fiecare clasă apare o singură dată, pe fiecare coloană de rang mai mic sau egal cu numărul de ore/zi al acelei clase. |
TPL |
setul tuplajelor (dacă este cazul); în matricea-orar lecțiile dintr-un același tuplaj apar în câte o aceeași coloană orară (iar 'recast()' va păstra alocările existente pentru lecțiile tuplate). |
Niter |
numărul de iterații pentru căutarea unui orar "mai bun". |
GD |
un număr ideal de ferestre, pentru a stopa căutarea. |
Value
o matrice-orar cu aceleași lecții ca în orarul inițial, dar realocate pe orele 1:7 astfel încât numărul total de ferestre este de regulă mai mic ca inițial (cât de mic, depinde și de cât de mare este 'Niter' și mai depinde și de structura tuplajelor).
Examples
# Alegem 'Niter' mic, pentru o execuție rapidă
ORR <- recast(MOZ, TPL, Niter=100)
HG <- have_gaps(ORR[[1]])