Teoretic, distribuţia D14
evidenţiată în [1] este dintre cele destul de reuşite: 75% dintre distribuţiile individuale conţinute sunt „acceptabile” (şi aproape jumătate dintre acestea sunt chiar „perfecte”) – adică au abateri mici faţă de o distribuţie omogenă pe zile, a orelor profesorului. Numai că realitatea impune între altele, acest aspect perturbator important: mulţi profesori trebuie să-şi facă orele în două schimburi (unele clase funcţionează în prima parte a zilei, altele în a doua parte).
Să revedem D14
, de data aceasta pe schimburi (putem depista clasele dintr-un acelaşi schimb prin grepl()
, dat fiind că ştim nivelele claselor din primul schimb):
library(tidyverse) cf_omg <- function(ore_zi) { # din [1] ore <- ore_zi[ore_zi != 0] round(sd(ore)/mean(ore)*diff(range(ore)), 2) } # coeficientul de omogenitate al unei distribuţii individuale bind_omg <- function(M) cbind(M, apply(M, 1, cf_omg)) D14 <- readRDS("D14.rds") # distribuţie a orelor cu doar 14 cazuri de "respins" Z14 <- as.matrix(table(D14[c("prof", "zl")])) # numărul de ore pe zi, la profesori Z14 <- bind_omg(Z14) # adaugă coloana coeficienţilor de omogenitate D1 <- D14 %>% filter(grepl('11|12|7|8', cls)) # orele claselor din primul schimb D2 <- D14 %>% filter(grepl('5|7|9|10', cls)) # orele claselor din schimbul doi (din D14) Z1 <- as.matrix(table(D1[c('prof', 'zl')])) Z2 <- as.matrix(table(D2[c('prof', 'zl')])) Z <- cbind(Z1, Z2) # distribuţiile individuale (ore pe zi) pe schimburi # demersuri pentru formatarea tipăririi matricelor prof <- attr(Z14, "dimnames")[[1]] df_ore <- data.frame(n1 = 1:59, c1 = 1:59, sep1 = rep(" ", 59), c2 = 1:59, sep2 = rep(" ", 59), c3 = 1:59) df_ore$n1 <- prof df_ore$c1 <- Z[, 1:5] df_ore$c2 <- Z[, 6:10] df_ore$c3 <- Z14[, 6] df_ore <- df_ore %>% arrange(c3) # ordonează după coeficienţi names(df_ore) <- NULL print(df_ore, rownames=FALSE) Lu Ma Mi Jo Vi Lu Ma Mi Jo Vi P20 1 1 1 1 1 3 3 3 3 3 0.00 P48 0 0 0 0 0 1 1 1 1 1 0.00 P43 0 0 0 0 0 1 1 1 0 0 0.00 P56 0 0 0 0 0 1 1 1 0 0 0.00 P57 0 0 0 0 0 0 0 1 1 0 0.00 P01 3 4 3 4 2 2 2 3 2 3 0.10 P03 3 2 2 2 2 3 4 3 3 4 0.10 P17 3 3 3 2 2 1 2 1 2 2 0.11 P10 4 3 3 3 2 1 1 2 2 2 0.12 P11 2 2 1 1 2 3 3 3 4 2 0.12 P12 1 2 2 2 1 3 2 3 3 3 0.12 P13 2 3 3 2 3 2 1 2 2 2 0.12 P34 1 0 0 1 2 2 3 3 3 1 0.14 P36 2 2 3 2 3 1 1 0 1 1 0.14 P37 1 0 1 1 3 2 4 2 2 0 0.14 P26 2 2 2 2 1 2 2 2 1 2 0.15 P30 4 1 2 1 2 0 2 2 3 1 0.15 P31 0 0 2 2 0 4 3 1 2 4 0.15 P33 2 2 2 2 3 1 2 2 1 0 0.16 P45 1 0 1 1 1 0 0 1 1 1 0.29 P06 1 2 3 2 2 3 3 2 4 4 0.32 P04 3 4 4 3 1 2 2 2 3 3 0.33 P21 2 2 2 2 0 3 2 1 2 4 0.35 P49 0 0 1 0 0 1 2 1 0 0 0.35 P47 0 0 1 1 0 2 1 0 0 1 0.37 P09 1 3 3 3 1 3 1 3 2 3 0.39 P07 5 5 4 3 4 1 1 1 1 0 0.40 P15 1 1 2 4 3 3 4 2 1 0 0.40 P50 0 0 1 1 1 2 0 0 0 0 0.40 P51 1 0 1 1 0 0 1 0 1 0 0.40 P14 4 4 2 1 0 1 0 3 4 3 0.41 P46 0 1 0 1 0 0 1 1 0 0 0.43 P52 0 0 0 0 0 0 1 2 1 0 0.43 P53 1 0 0 1 0 1 0 0 0 1 0.43 P54 0 1 0 0 1 1 1 0 0 0 0.43 P55 1 2 1 0 0 0 0 0 0 0 0.43 P22 3 3 2 2 3 2 1 1 1 1 0.44 P23 4 2 3 3 3 1 1 1 1 0 0.44 P24 1 1 1 0 1 3 2 4 4 2 0.44 P25 4 2 1 2 2 1 2 3 1 1 0.44 P18 0 2 3 2 1 3 1 1 3 4 0.50 P27 2 3 3 1 3 2 1 1 1 1 0.50 P29 1 2 0 1 2 1 2 4 3 2 0.50 P39 1 1 1 1 1 1 2 2 3 3 0.52 P02 6 2 2 2 3 1 4 4 2 2 0.61 P40 1 0 0 1 1 3 2 2 1 2 0.69 P41 1 1 2 1 1 2 2 1 2 0 0.69 P08 3 4 2 2 3 1 2 4 3 0 0.81 P19 2 3 2 2 1 2 2 3 2 1 0.92 P32 2 1 1 1 1 3 3 3 2 1 0.95 P44 0 0 2 1 1 1 1 1 2 0 1.22 P05 5 6 5 4 2 1 1 1 0 1 1.26 P16 4 5 3 2 4 1 1 1 0 0 1.41 P42 1 1 0 0 1 3 1 1 1 2 1.78 P35 1 1 3 2 4 1 0 0 3 1 2.24 P28 1 2 3 0 0 4 4 1 2 1 2.88 P38 3 2 1 0 0 3 2 1 1 3 3.01 P58 0 0 0 0 1 0 0 0 0 0 NA P59 0 0 0 0 0 0 0 0 0 1 NA
După ce o vedem astfel pe schimburi, D14
nu ne mai pare deloc, promiţătoare; defectul major constă în faptul că avem prea multe cazuri de profesori care au o singură oră pe zi într-unul dintre cele două schimburi. Distribuţia de pe prima linie (pentru P20
) de exemplu – era una „perfectă” (câte 4 ore în fiecare zi), numai că acum vedem că deşi rămâne „perfectă” pe fiecare schimb în parte, nu corespunde deloc ideii de perfecţiune obişnuite la profesor: acesta va prefera ca în loc să aibă câte o singură oră în fiecare zi din schimbul unu, să aibă aceste 5 ore în numai două zile (dacă nu se poate cumva, într-o singură zi, ceea ce desigur, se poate: le punem să zicem în prima zi şi mutăm cele 3 ore din al doilea schimb din prima zi, în alte zile – cu îndoiala justificată că „înghesuind” astfel orele unuia, se vor afecta mai degrabă negativ, distribuţiile altora).
Ideea de distribuţie omogenă pe care am vizat-o până acum (peste tot în [1]) poate să ţină numai dacă ar fi vorba de un singur schimb (iar profesorii care au mai puţin de 10 ore pe săptămână trebuie să aibă distribuţii ne-omogene).
Acum, în loc să vedem dacă nu cumva printre cele 1455 de distribuţii rezultate în [1] am putea găsi vreuna care să fie „acceptabilă” când am separa-o pe schimburi – preferăm să recunoaştem că suntem pe un drum oarecum greşit. Condiţia (ideală) de omogenitate trebuie păstrată numai pentru profesorii care au orele într-un acelaşi schimb (şi în număr rezonabil, să zicem pe puţin 10 ore pe săptămână); pentru profesorii cu ore în ambele schimburi (iar aceştia formează majoritatea!) – avem de gândit sau de experimentat (adăugând în "distribute_by_days.R
" din [1]) alte condiţii de generare a distribuţiei orelor pe zilele de lucru.
vezi Cărţile mele (de programare)