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


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]])