lemon-project-template-glpk
diff deps/glpk/examples/shiftcover.mod @ 9:33de93886c88
Import GLPK 4.47
author | Alpar Juttner <alpar@cs.elte.hu> |
---|---|
date | Sun, 06 Nov 2011 20:59:10 +0100 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/deps/glpk/examples/shiftcover.mod Sun Nov 06 20:59:10 2011 +0100 1.3 @@ -0,0 +1,244 @@ 1.4 +/* File: shiftcover.mod */ 1.5 + 1.6 +/* WORKFORCE SHIFT COVERAGE assignment problem */ 1.7 + 1.8 +/* Written by Larry D'Agostino <larrydag -at- sbcglobal -dot- com> 1.9 + 1.10 + Maximize Productivity with Industrial Engineer and Operations Research Tools 1.11 + http://industrialengineertools.blogspot.com 1.12 + 1.13 + 1.14 +/* The WORKFORCE SHIFT COVERAGE is an assigment problem that determines 1.15 + the schedule of crew given available time and shifts. 1.16 + 1.17 + The objective is to cover the available time given hourly demand with the minimum 1.18 + number of crew members. 1.19 + 1.20 + This is a set covering problem that is very common among finding crew 1.21 + and shift allocations. Notice in the data section the workforce shift allocation 1.22 + per day of the week.*/ 1.23 + 1.24 + 1.25 +/* ----- Model PARAMTERS and SETS -----*/ 1.26 + 1.27 +param numhrs; 1.28 +/* number of hours of operations in a given day */ 1.29 + 1.30 +param dys; 1.31 +/* number of days in a week */ 1.32 + 1.33 +set S; 1.34 +/* set of crew shifts */ 1.35 + 1.36 +set H := 1..numhrs; 1.37 +/* set of hours of a day*/ 1.38 + 1.39 +set D; 1.40 +/* set of days of a week*/ 1.41 + 1.42 +param dmnd{h in H, d in D}; 1.43 +/* demand for crew members given h hour and d day */ 1.44 + 1.45 +param shifts{d in D, h in H, s in S}; 1.46 +/* shifts to assign to crew members given d day, h hour, and s shift schedule 1.47 + 1.48 +/*----- Model VARIABLES -----*/ 1.49 + 1.50 +var crew{s in S}, integer, >=0; 1.51 +/* number of crew assigned to shift S */ 1.52 + 1.53 + 1.54 +/*----- Model CONSTRAINTS -----*/ 1.55 + 1.56 +s.t. Coverage{h in H, d in D}: sum{s in S} crew[s]*shifts[d,h,s] >= dmnd[h,d]; 1.57 +/* number of crew to cover with a shift given hourly demand and day */ 1.58 + 1.59 + 1.60 +/*----- Model OBJECTIVE -----*/ 1.61 + 1.62 +minimize obj: sum{s in S} crew[s]; 1.63 +/* minimize number of crew to cover demand*/ 1.64 + 1.65 +solve; 1.66 +display crew; 1.67 + 1.68 +printf "\n"; 1.69 +printf "Total Crew: %3d\n\n", sum{s in S} crew[s]; 1.70 + 1.71 + 1.72 + 1.73 +printf "\n\n"; 1.74 +printf "Weekly Crew Schedule\n\n"; 1.75 +printf "Hour "; 1.76 +printf{d in D} " %s ", d; 1.77 +printf "\n"; 1.78 +for {h in H} { 1.79 + printf " %2s ",h; 1.80 + printf{d in D} " %3d ", sum{s in S} crew[s]*shifts[d,h,s]; 1.81 + printf "\n"; 1.82 +} 1.83 +printf"\n"; 1.84 + 1.85 + 1.86 + 1.87 +data; 1.88 + 1.89 +param numhrs := 16; 1.90 + 1.91 +set D := SUN, MON, TUE, WED, THU, FRI, SAT; 1.92 + 1.93 +set S := Sh1, Sh2, Sh3, Sh4, Sh5, Sh6, Sh7, Sh8, Sh9; 1.94 + 1.95 +param dmnd : SUN MON TUE WED THU FRI SAT := 1.96 +1 0 3 3 4 3 2 0 1.97 +2 0 14 14 16 14 12 12 1.98 +3 0 24 24 27 24 20 15 1.99 +4 0 28 28 32 28 23 15 1.100 +5 0 33 33 37 33 24 16 1.101 +6 0 34 34 38 34 24 15 1.102 +7 0 35 35 39 35 25 11 1.103 +8 0 35 35 40 35 27 0 1.104 +9 0 34 34 39 34 25 0 1.105 +10 0 31 31 35 31 24 0 1.106 +11 2 24 24 27 24 25 0 1.107 +12 3 19 19 21 19 21 0 1.108 +13 2 24 24 27 24 13 0 1.109 +14 2 16 16 18 16 0 0 1.110 +15 0 7 7 7 7 0 0 1.111 +16 0 5 5 5 5 0 0; 1.112 + 1.113 + 1.114 +param shifts := 1.115 +['SUN',*,*]: 1.116 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.117 +1 0 0 0 0 0 0 0 0 0 1.118 +2 0 0 0 0 0 0 0 0 0 1.119 +3 0 0 0 0 0 0 0 0 0 1.120 +4 0 0 0 0 0 0 0 0 0 1.121 +5 0 0 0 0 0 0 0 0 0 1.122 +6 0 0 0 0 0 0 0 0 0 1.123 +7 0 0 0 0 0 0 0 0 0 1.124 +8 0 0 0 0 0 0 0 0 0 1.125 +9 0 0 0 0 0 0 0 0 0 1.126 +10 0 0 0 0 0 0 0 0 0 1.127 +11 0 0 0 0 0 0 0 0 1 1.128 +12 0 0 0 0 0 0 0 0 1 1.129 +13 0 0 0 0 0 0 0 0 1 1.130 +14 0 0 0 0 0 0 0 0 1 1.131 +15 0 0 0 0 0 0 0 0 0 1.132 +16 0 0 0 0 0 0 0 0 0 1.133 + 1.134 + 1.135 +['MON',*,*]: 1.136 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.137 +1 1 0 0 0 0 0 0 0 0 1.138 +2 1 1 0 0 0 0 0 0 0 1.139 +3 1 1 1 0 0 0 0 0 0 1.140 +4 1 1 1 1 0 0 0 0 0 1.141 +5 0 1 1 1 1 0 0 0 0 1.142 +6 1 0 1 1 1 1 0 0 1 1.143 +7 1 1 0 1 1 1 1 0 1 1.144 +8 1 1 1 0 1 1 1 1 1 1.145 +9 1 1 1 1 0 1 1 1 1 1.146 +10 0 1 1 1 1 0 1 1 1 1.147 +11 0 0 1 1 1 1 0 1 0 1.148 +12 0 0 0 1 1 1 1 0 1 1.149 +13 0 0 0 0 1 1 1 1 1 1.150 +14 0 0 0 0 0 1 1 1 1 1.151 +15 0 0 0 0 0 0 1 1 1 1.152 +16 0 0 0 0 0 0 0 1 1 1.153 + 1.154 +['TUE',*,*]: 1.155 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.156 +1 1 0 0 0 0 0 0 0 0 1.157 +2 1 1 0 0 0 0 0 0 0 1.158 +3 1 1 1 0 0 0 0 0 0 1.159 +4 1 1 1 1 0 0 0 0 0 1.160 +5 0 1 1 1 1 0 0 0 0 1.161 +6 1 0 1 1 1 1 0 0 1 1.162 +7 1 1 0 1 1 1 1 0 1 1.163 +8 1 1 1 0 1 1 1 1 1 1.164 +9 1 1 1 1 0 1 1 1 1 1.165 +10 0 1 1 1 1 0 1 1 1 1.166 +11 0 0 1 1 1 1 0 1 0 1.167 +12 0 0 0 1 1 1 1 0 1 1.168 +13 0 0 0 0 1 1 1 1 1 1.169 +14 0 0 0 0 0 1 1 1 1 1.170 +15 0 0 0 0 0 0 1 1 1 1.171 +16 0 0 0 0 0 0 0 1 1 1.172 + 1.173 +['WED',*,*]: 1.174 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.175 +1 1 0 0 0 0 0 0 0 0 1.176 +2 1 1 0 0 0 0 0 0 0 1.177 +3 1 1 1 0 0 0 0 0 0 1.178 +4 1 1 1 1 0 0 0 0 0 1.179 +5 0 1 1 1 1 0 0 0 0 1.180 +6 1 0 1 1 1 1 0 0 1 1.181 +7 1 1 0 1 1 1 1 0 1 1.182 +8 1 1 1 0 1 1 1 1 1 1.183 +9 1 1 1 1 0 1 1 1 1 1.184 +10 0 1 1 1 1 0 1 1 1 1.185 +11 0 0 1 1 1 1 0 1 0 1.186 +12 0 0 0 1 1 1 1 0 1 1.187 +13 0 0 0 0 1 1 1 1 1 1.188 +14 0 0 0 0 0 1 1 1 1 1.189 +15 0 0 0 0 0 0 1 1 1 1.190 +16 0 0 0 0 0 0 0 1 1 1.191 + 1.192 +['THU',*,*]: 1.193 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.194 +1 1 0 0 0 0 0 0 0 0 1.195 +2 1 1 0 0 0 0 0 0 0 1.196 +3 1 1 1 0 0 0 0 0 0 1.197 +4 1 1 1 1 0 0 0 0 0 1.198 +5 0 1 1 1 1 0 0 0 0 1.199 +6 1 0 1 1 1 1 0 0 0 1.200 +7 1 1 0 1 1 1 1 0 0 1.201 +8 1 1 1 0 1 1 1 1 0 1.202 +9 1 1 1 1 0 1 1 1 0 1.203 +10 0 1 1 1 1 0 1 1 0 1.204 +11 0 0 1 1 1 1 0 1 0 1.205 +12 0 0 0 1 1 1 1 0 0 1.206 +13 0 0 0 0 1 1 1 1 0 1.207 +14 0 0 0 0 0 1 1 1 0 1.208 +15 0 0 0 0 0 0 1 1 0 1.209 +16 0 0 0 0 0 0 0 1 0 1.210 + 1.211 +['FRI',*,*]: 1.212 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.213 +1 1 0 0 0 0 0 0 0 0 1.214 +2 1 1 0 0 0 0 0 0 0 1.215 +3 1 1 1 0 0 0 0 0 0 1.216 +4 1 1 1 1 0 0 0 0 0 1.217 +5 0 1 1 1 1 0 0 0 0 1.218 +6 1 0 1 1 1 1 0 0 0 1.219 +7 1 1 0 1 1 1 1 0 0 1.220 +8 1 1 1 0 1 1 1 1 0 1.221 +9 1 1 1 1 0 1 1 1 0 1.222 +10 0 1 1 1 1 0 1 1 0 1.223 +11 0 0 1 1 1 1 0 1 0 1.224 +12 0 0 0 1 1 1 1 0 0 1.225 +13 0 0 0 0 1 1 1 1 0 1.226 +14 0 0 0 0 0 1 1 1 0 1.227 +15 0 0 0 0 0 0 1 1 0 1.228 +16 0 0 0 0 0 0 0 1 0 1.229 + 1.230 +['SAT',*,*]: 1.231 + Sh1 Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 := 1.232 +1 0 0 0 0 0 0 0 0 0 1.233 +2 0 0 0 0 0 0 0 0 1 1.234 +3 0 0 0 0 0 0 0 0 1 1.235 +4 0 0 0 0 0 0 0 0 1 1.236 +5 0 0 0 0 0 0 0 0 1 1.237 +6 0 0 0 0 0 0 0 0 1 1.238 +7 0 0 0 0 0 0 0 0 1 1.239 +8 0 0 0 0 0 0 0 0 0 1.240 +9 0 0 0 0 0 0 0 0 0 1.241 +10 0 0 0 0 0 0 0 0 0 1.242 +11 0 0 0 0 0 0 0 0 0 1.243 +12 0 0 0 0 0 0 0 0 0 1.244 +13 0 0 0 0 0 0 0 0 0 1.245 +14 0 0 0 0 0 0 0 0 0 1.246 +15 0 0 0 0 0 0 0 0 0 1.247 +16 0 0 0 0 0 0 0 0 0;