# source:glpk-cmake/examples/shiftcover.mod@1:c445c931472f

Last change on this file since 1:c445c931472f was 1:c445c931472f, checked in by Alpar Juttner <alpar@…>, 10 years ago

Import glpk-4.45

• Generated files and doc/notes are removed
File size: 10.4 KB
Line
1/* File: shiftcover.mod */
2
3/* WORKFORCE SHIFT COVERAGE assignment problem */
4
5/* Written by Larry D'Agostino <larrydag -at- sbcglobal -dot- com>
6
7     Maximize Productivity with Industrial Engineer and Operations Research Tools
8     http://industrialengineertools.blogspot.com
9
10
11/* The WORKFORCE SHIFT COVERAGE is an assigment problem that determines
12   the schedule of crew given available time and shifts.
13
14   The objective is to cover the available time given hourly demand with the minimum
15    number of crew members.
16
17    This is a set covering problem that is very common among finding crew
18     and shift allocations.  Notice in the data section the workforce shift allocation
19     per day of the week.*/
20
21
22/* ----- Model PARAMTERS and SETS -----*/
23
24param numhrs;
25/* number of hours of operations in a given day */
26
27param dys;
28/* number of days in a week */
29
30set S;
31/* set of crew shifts */
32
33set H := 1..numhrs;
34/* set of hours of a day*/
35
36set D;
37/* set of days of a week*/
38
39param dmnd{h in H, d in D};
40/* demand for crew members given h hour and d day */
41
42param shifts{d in D, h in H, s in S};
43/* shifts to assign to crew members given d day, h hour, and s shift schedule
44
45/*----- Model VARIABLES -----*/
46
47var crew{s in S}, integer, >=0;
48/*  number of crew assigned to shift S */
49
50
51/*----- Model CONSTRAINTS -----*/
52
53s.t. Coverage{h in H, d in D}: sum{s in S} crew[s]*shifts[d,h,s] >= dmnd[h,d];
54/* number of crew to cover with a shift  given hourly demand and day */
55
56
57/*----- Model OBJECTIVE -----*/
58
59minimize obj: sum{s in S} crew[s];
60/* minimize number of crew to cover demand*/
61
62solve;
63display crew;
64
65printf "\n";
66printf "Total Crew: %3d\n\n", sum{s in S} crew[s];
67
68
69
70printf "\n\n";
71printf "Weekly Crew Schedule\n\n";
72printf "Hour ";
73printf{d in D} "  %s  ", d;
74printf "\n";
75for {h in H} {
76  printf " %2s  ",h;
77  printf{d in D} " %3d   ", sum{s in S} crew[s]*shifts[d,h,s];
78  printf "\n";
79}
80printf"\n";
81
82
83
84data;
85
86param numhrs := 16;
87
88set D := SUN, MON, TUE, WED, THU, FRI, SAT;
89
90set S := Sh1, Sh2, Sh3, Sh4, Sh5, Sh6, Sh7, Sh8, Sh9;
91
92param dmnd :   SUN  MON     TUE     WED     THU     FRI     SAT :=
931               0   3       3       4       3       2       0
942               0   14      14      16      14      12      12
953               0   24      24      27      24      20      15
964               0   28      28      32      28      23      15
975               0   33      33      37      33      24      16
986               0   34      34      38      34      24      15
997               0   35      35      39      35      25      11
1008               0   35      35      40      35      27      0
1019               0   34      34      39      34      25      0
10210              0   31      31      35      31      24      0
10311              2   24      24      27      24      25      0
10412              3   19      19      21      19      21      0
10513              2   24      24      27      24      13      0
10614              2   16      16      18      16      0       0
10715              0   7       7       7       7       0       0
10816              0   5       5       5       5       0       0;
109
110
111param shifts :=
112['SUN',*,*]:
113                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
1141                   0    0    0    0    0    0    0    0    0
1152                   0    0    0    0    0    0    0    0    0
1163                   0    0    0    0    0    0    0    0    0
1174                   0    0    0    0    0    0    0    0    0
1185                   0    0    0    0    0    0    0    0    0
1196                   0    0    0    0    0    0    0    0    0
1207                   0    0    0    0    0    0    0    0    0
1218                   0    0    0    0    0    0    0    0    0
1229                   0    0    0    0    0    0    0    0    0
12310                  0    0    0    0    0    0    0    0    0
12411                  0    0    0    0    0    0    0    0    1
12512                  0    0    0    0    0    0    0    0    1
12613                  0    0    0    0    0    0    0    0    1
12714                  0    0    0    0    0    0    0    0    1
12815                  0    0    0    0    0    0    0    0    0
12916                  0    0    0    0    0    0    0    0    0
130
131
132['MON',*,*]:
133                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
1341                   1    0    0    0    0    0    0    0    0
1352                   1    1    0    0    0    0    0    0    0
1363                   1    1    1    0    0    0    0    0    0
1374                   1    1    1    1    0    0    0    0    0
1385                   0    1    1    1    1    0    0    0    0
1396                   1    0    1    1    1    1    0    0    1
1407                   1    1    0    1    1    1    1    0    1
1418                   1    1    1    0    1    1    1    1    1
1429                   1    1    1    1    0    1    1    1    1
14310                  0    1    1    1    1    0    1    1    1
14411                  0    0    1    1    1    1    0    1    0
14512                  0    0    0    1    1    1    1    0    1
14613                  0    0    0    0    1    1    1    1    1
14714                  0    0    0    0    0    1    1    1    1
14815                  0    0    0    0    0    0    1    1    1
14916                  0    0    0    0    0    0    0    1    1
150
151['TUE',*,*]:
152                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
1531                   1    0    0    0    0    0    0    0    0
1542                   1    1    0    0    0    0    0    0    0
1553                   1    1    1    0    0    0    0    0    0
1564                   1    1    1    1    0    0    0    0    0
1575                   0    1    1    1    1    0    0    0    0
1586                   1    0    1    1    1    1    0    0    1
1597                   1    1    0    1    1    1    1    0    1
1608                   1    1    1    0    1    1    1    1    1
1619                   1    1    1    1    0    1    1    1    1
16210                  0    1    1    1    1    0    1    1    1
16311                  0    0    1    1    1    1    0    1    0
16412                  0    0    0    1    1    1    1    0    1
16513                  0    0    0    0    1    1    1    1    1
16614                  0    0    0    0    0    1    1    1    1
16715                  0    0    0    0    0    0    1    1    1
16816                  0    0    0    0    0    0    0    1    1
169
170['WED',*,*]:
171                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
1721                   1    0    0    0    0    0    0    0    0
1732                   1    1    0    0    0    0    0    0    0
1743                   1    1    1    0    0    0    0    0    0
1754                   1    1    1    1    0    0    0    0    0
1765                   0    1    1    1    1    0    0    0    0
1776                   1    0    1    1    1    1    0    0    1
1787                   1    1    0    1    1    1    1    0    1
1798                   1    1    1    0    1    1    1    1    1
1809                   1    1    1    1    0    1    1    1    1
18110                  0    1    1    1    1    0    1    1    1
18211                  0    0    1    1    1    1    0    1    0
18312                  0    0    0    1    1    1    1    0    1
18413                  0    0    0    0    1    1    1    1    1
18514                  0    0    0    0    0    1    1    1    1
18615                  0    0    0    0    0    0    1    1    1
18716                  0    0    0    0    0    0    0    1    1
188
189['THU',*,*]:
190                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
1911                   1    0    0    0    0    0    0    0    0
1922                   1    1    0    0    0    0    0    0    0
1933                   1    1    1    0    0    0    0    0    0
1944                   1    1    1    1    0    0    0    0    0
1955                   0    1    1    1    1    0    0    0    0
1966                   1    0    1    1    1    1    0    0    0
1977                   1    1    0    1    1    1    1    0    0
1988                   1    1    1    0    1    1    1    1    0
1999                   1    1    1    1    0    1    1    1    0
20010                  0    1    1    1    1    0    1    1    0
20111                  0    0    1    1    1    1    0    1    0
20212                  0    0    0    1    1    1    1    0    0
20313                  0    0    0    0    1    1    1    1    0
20414                  0    0    0    0    0    1    1    1    0
20515                  0    0    0    0    0    0    1    1    0
20616                  0    0    0    0    0    0    0    1    0
207
208['FRI',*,*]:
209                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
2101                   1    0    0    0    0    0    0    0    0
2112                   1    1    0    0    0    0    0    0    0
2123                   1    1    1    0    0    0    0    0    0
2134                   1    1    1    1    0    0    0    0    0
2145                   0    1    1    1    1    0    0    0    0
2156                   1    0    1    1    1    1    0    0    0
2167                   1    1    0    1    1    1    1    0    0
2178                   1    1    1    0    1    1    1    1    0
2189                   1    1    1    1    0    1    1    1    0
21910                  0    1    1    1    1    0    1    1    0
22011                  0    0    1    1    1    1    0    1    0
22112                  0    0    0    1    1    1    1    0    0
22213                  0    0    0    0    1    1    1    1    0
22314                  0    0    0    0    0    1    1    1    0
22415                  0    0    0    0    0    0    1    1    0
22516                  0    0    0    0    0    0    0    1    0
226
227['SAT',*,*]:
228                   Sh1  Sh2  Sh3  Sh4  Sh5  Sh6  Sh7  Sh8  Sh9 :=
2291                   0    0    0    0    0    0    0    0    0
2302                   0    0    0    0    0    0    0    0    1
2313                   0    0    0    0    0    0    0    0    1
2324                   0    0    0    0    0    0    0    0    1
2335                   0    0    0    0    0    0    0    0    1
2346                   0    0    0    0    0    0    0    0    1
2357                   0    0    0    0    0    0    0    0    1
2368                   0    0    0    0    0    0    0    0    0
2379                   0    0    0    0    0    0    0    0    0
23810                  0    0    0    0    0    0    0    0    0
23911                  0    0    0    0    0    0    0    0    0
24012                  0    0    0    0    0    0    0    0    0
24113                  0    0    0    0    0    0    0    0    0
24214                  0    0    0    0    0    0    0    0    0
24315                  0    0    0    0    0    0    0    0    0
24416                  0    0    0    0    0    0    0    0    0;
Note: See TracBrowser for help on using the repository browser.