A team rota over one week
Three people, five days, at least two present each day, at most four days each, Alice absent on Wednesday. We look for the rota that uses the fewest days in total.
Result obtained on the server: an optimal rota of 10 person-days, two people each day, Alice absent on Wednesday.
$jours = [list "lun" "mar" "mer" "jeu" "ven"]
$equipe = [list "alice" "bob" "carol"]
[optimize:problem Roulement
[for $e $equipe [for $j $jours
[decision "w_${e}_${j}" Integer [min 0] [max 1]]]]
[for $j $jours
[assert ([sum $e $equipe "w_${e}_${j}"] >= 2)]] # au moins deux présents
[for $e $equipe
[assert ([sum $j $jours "w_${e}_${j}"] <= 4)]] # quatre jours au plus
[assert ($w_alice_mer == 0)] # Alice absente mercredi
[minimize [sum $e $equipe [sum $j $jours "w_${e}_${j}"]]]]
[optimize:solve Roulement]