this repo has no description
1% Simplificación de la lista de enfermeras.
2include "regular.mzn";
3
4enum NURSE;
5enum DAY;
6int: req_day;
7int: req_night;
8int: min_night;
9
10enum SHIFT = { d, n, o };
11int: S = card(SHIFT);
12
13int: Q = 6; int: q0 = 1; set of int: STATE = 1..Q;
14array[STATE,SHIFT] of int: t =
15 [| 2, 3, 1 % Estado 1
16 | 4, 4, 1 % Estado 2
17 | 4, 5, 1 % Estado 3
18 | 6, 6, 1 % Estado 4
19 | 6, 0, 1 % Estado 5
20 | 0, 0, 1|]; % Estado 6
21
22array[NURSE,DAY] of var SHIFT: roster;
23
24constraint forall(j in DAY)(
25 sum(i in NURSE)(roster[i,j] == d) == req_day /\
26 sum(i in NURSE)(roster[i,j] == n) == req_night
27 );
28constraint forall(i in NURSE)(
29 regular([roster[i,j] | j in DAY], Q, S, t, q0, STATE) /\
30 sum(j in DAY)(roster[i,j] == n) >= min_night
31 );
32
33solve satisfy;
34
35output [ show(roster[i,j]) ++ if j==card(DAY) then "\n" else " " endif
36 | i in NURSE, j in DAY ];