[1] | 1 | /* Data Envelopment Analysis (DEA) |
---|
| 2 | * |
---|
| 3 | * DEA quantifies the relative efficiency of decision making units (DMUs) by |
---|
| 4 | * finding the efficient frontier in multiple input multiple output data. The |
---|
| 5 | * inputs are resources (eg. number of employees, available machines, ...), |
---|
| 6 | * the outputs are productive outputs (eg. contracts made, total sales, ...). |
---|
| 7 | * The method is non-parametric. More details are available in the paper |
---|
| 8 | * below. |
---|
| 9 | * |
---|
| 10 | * Models according to: Seiford, Threall, "Recent developments in DEA", 1990. |
---|
| 11 | * |
---|
| 12 | * Implementation: Sebastian Nowozin <nowozin@gmail.com> |
---|
| 13 | */ |
---|
| 14 | |
---|
| 15 | ### SETS ### |
---|
| 16 | |
---|
| 17 | set dmus; # Decision Making Units (DMU) |
---|
| 18 | set inputs; # Input parameters |
---|
| 19 | set outputs; # Output parameters |
---|
| 20 | |
---|
| 21 | |
---|
| 22 | ### PARAMETERS ### |
---|
| 23 | |
---|
| 24 | param input_data{dmus,inputs} >= 0; |
---|
| 25 | param output_data{dmus,outputs} >= 0; |
---|
| 26 | |
---|
| 27 | |
---|
| 28 | ### PROGRAM ### |
---|
| 29 | |
---|
| 30 | var theta{dmus} >= 0; |
---|
| 31 | var lambda{dmus,dmus} >= 0; |
---|
| 32 | |
---|
| 33 | minimize inefficiency: sum{td in dmus} theta[td]; |
---|
| 34 | |
---|
| 35 | s.t. output_lower_limit{o in outputs, td in dmus}: |
---|
| 36 | sum{d in dmus} lambda[d,td]*output_data[d,o] >= output_data[td,o]; |
---|
| 37 | s.t. input_upper_limit{i in inputs, td in dmus}: |
---|
| 38 | sum{d in dmus} lambda[d,td]*input_data[d,i] <= theta[td]*input_data[td,i]; |
---|
| 39 | |
---|
| 40 | s.t. PI1{td in dmus}: |
---|
| 41 | sum{d in dmus} lambda[d,td] = 1; |
---|
| 42 | /* |
---|
| 43 | possibilities: |
---|
| 44 | i) (no constraint) |
---|
| 45 | ii) s.t. PI1{td in dmus}: |
---|
| 46 | sum{d in dmus} lambda[d,td] <= 1; |
---|
| 47 | iii) s.t. PI1{td in dmus}: |
---|
| 48 | sum{d in dmus} lambda[d,td] >= 1; |
---|
| 49 | */ |
---|
| 50 | |
---|
| 51 | |
---|
| 52 | ### SOLVE AND PRINT SOLUTION ### |
---|
| 53 | |
---|
| 54 | solve; |
---|
| 55 | |
---|
| 56 | printf "DMU\tEfficiency\n"; |
---|
| 57 | for {td in dmus} { |
---|
| 58 | printf "%s\t%1.4f\n", td, theta[td]; |
---|
| 59 | } |
---|
| 60 | |
---|
| 61 | ### DATA ### |
---|
| 62 | |
---|
| 63 | data; |
---|
| 64 | |
---|
| 65 | set dmus := 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
---|
| 66 | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
---|
| 67 | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
---|
| 68 | 61 62 63 64 65 66 67 68 69 ; |
---|
| 69 | set inputs := AvgInventory LaborCost OperatingCost Population ; |
---|
| 70 | set outputs := PrescrVol kDollarValue ; |
---|
| 71 | |
---|
| 72 | param input_data default 0.0 : |
---|
| 73 | |
---|
| 74 | AvgInventory LaborCost OperatingCost Population := |
---|
| 75 | |
---|
| 76 | 1 8000 17030 1280 1410 |
---|
| 77 | 2 9000 25890 2779 1523 |
---|
| 78 | 3 13694 29076 2372 1354 |
---|
| 79 | 4 4250 17506 1385 822 |
---|
| 80 | 5 6500 23208 639 746 |
---|
| 81 | 6 7000 12946 802 1281 |
---|
| 82 | 7 4500 18001 1130 1016 |
---|
| 83 | 8 5000 14473 1097 1070 |
---|
| 84 | 9 27000 31760 5559 1694 |
---|
| 85 | 10 21560 50972 15010 1910 |
---|
| 86 | 11 15000 39523 4799 1745 |
---|
| 87 | 12 8500 13076 3489 1353 |
---|
| 88 | 13 35000 35427 1704 500 |
---|
| 89 | 14 18000 27554 2882 1016 |
---|
| 90 | 15 59750 53848 14208 2500 |
---|
| 91 | 16 19200 38253 1480 2293 |
---|
| 92 | 17 40000 109404 83016 2718 |
---|
| 93 | 18 8466 18198 1278 2877 |
---|
| 94 | 19 16000 40891 7599 4150 |
---|
| 95 | 20 10000 45444 5556 4421 |
---|
| 96 | 21 25000 35623 2121 3883 |
---|
| 97 | 22 14000 20192 5515 3519 |
---|
| 98 | 23 12500 34973 10475 32366 |
---|
| 99 | 24 17260 32284 14498 3393 |
---|
| 100 | 25 7000 17920 7585 4489 |
---|
| 101 | 26 14000 42094 3742 2217 |
---|
| 102 | 27 16400 35422 14236 4641 |
---|
| 103 | 28 13000 19100 3529 5968 |
---|
| 104 | 29 30000 72167 8656 8715 |
---|
| 105 | 30 12530 19970 1714 5968 |
---|
| 106 | 31 31500 39183 4919 5607 |
---|
| 107 | 32 10000 32048 3483 7324 |
---|
| 108 | 33 22000 68877 12279 8685 |
---|
| 109 | 34 10000 29812 3332 8685 |
---|
| 110 | 35 16000 47686 2507 5420 |
---|
| 111 | 36 10000 33415 4738 7703 |
---|
| 112 | 37 9000 12359 4603 4665 |
---|
| 113 | 38 16439 23614 2989 6317 |
---|
| 114 | 39 14500 36069 1793 31839 |
---|
| 115 | 40 39000 76307 9539 15619 |
---|
| 116 | 41 24927 40706 12661 30213 |
---|
| 117 | 42 13858 39267 4609 34719 |
---|
| 118 | 43 33375 29509 11323 31839 |
---|
| 119 | 44 29044 44482 5542 34719 |
---|
| 120 | 45 32257 61365 20550 32366 |
---|
| 121 | 46 8800 49671 3306 43561 |
---|
| 122 | 47 47000 40425 10396 31263 |
---|
| 123 | 48 12000 33034 4915 31263 |
---|
| 124 | 49 28000 69163 4688 15173 |
---|
| 125 | 50 13300 28931 16735 73064 |
---|
| 126 | 51 13500 29758 4260 62309 |
---|
| 127 | 52 24000 40927 8285 23166 |
---|
| 128 | 53 16000 40403 2131 99836 |
---|
| 129 | 54 17000 38730 2539 60348 |
---|
| 130 | 55 25000 35978 2502 99836 |
---|
| 131 | 56 16000 37509 6278 99836 |
---|
| 132 | 57 20000 46950 10715 85925 |
---|
| 133 | 58 14000 35966 3144 85925 |
---|
| 134 | 59 22000 68318 8015 108987 |
---|
| 135 | 60 21879 69537 7778 108987 |
---|
| 136 | 61 15000 25425 2812 201404 |
---|
| 137 | 62 10000 19508 2454 201404 |
---|
| 138 | 63 20000 28191 3367 201404 |
---|
| 139 | 64 18000 37073 8624 108987 |
---|
| 140 | 65 19051 23763 3496 201404 |
---|
| 141 | 66 15000 28642 3366 201404 |
---|
| 142 | 67 10000 35919 3868 201404 |
---|
| 143 | 68 24000 54653 26494 108987 |
---|
| 144 | 69 1800 6276 3413 60348 |
---|
| 145 | ; |
---|
| 146 | |
---|
| 147 | param output_data default 0.0 : |
---|
| 148 | |
---|
| 149 | PrescrVol kDollarValue := |
---|
| 150 | |
---|
| 151 | 1 12293 61.00 |
---|
| 152 | 2 18400 92.00 |
---|
| 153 | 3 16789 92.65 |
---|
| 154 | 4 10700 45.00 |
---|
| 155 | 5 9800 50.00 |
---|
| 156 | 6 6500 29.00 |
---|
| 157 | 7 8200 56.00 |
---|
| 158 | 8 8680 45.00 |
---|
| 159 | 9 33800 183.00 |
---|
| 160 | 10 23710 156.00 |
---|
| 161 | 11 24000 120.00 |
---|
| 162 | 12 17500 75.00 |
---|
| 163 | 13 25000 130.00 |
---|
| 164 | 14 26000 122.00 |
---|
| 165 | 15 26830 178.513 |
---|
| 166 | 16 16600 106.00 |
---|
| 167 | 17 90000 450.00 |
---|
| 168 | 18 11140 73.624 |
---|
| 169 | 19 25868 136.00 |
---|
| 170 | 20 32700 191.295 |
---|
| 171 | 21 29117 152.864 |
---|
| 172 | 22 18000 100.00 |
---|
| 173 | 23 11100 60.00 |
---|
| 174 | 24 23030 137.778 |
---|
| 175 | 25 10656 58.00 |
---|
| 176 | 26 24682 152.095 |
---|
| 177 | 27 26908 120.00 |
---|
| 178 | 28 16464 80.00 |
---|
| 179 | 29 57000 321.00 |
---|
| 180 | 30 17532 94.747 |
---|
| 181 | 31 30035 168.00 |
---|
| 182 | 32 16000 100.00 |
---|
| 183 | 33 63700 277.00 |
---|
| 184 | 34 18000 90.00 |
---|
| 185 | 35 27339 139.134 |
---|
| 186 | 36 19500 116.00 |
---|
| 187 | 37 13000 80.00 |
---|
| 188 | 38 15370 102.00 |
---|
| 189 | 39 18446 90.00 |
---|
| 190 | 40 56000 260.00 |
---|
| 191 | 41 73845 364.951 |
---|
| 192 | 42 28600 145.00 |
---|
| 193 | 43 27000 243.00 |
---|
| 194 | 44 52423 279.816 |
---|
| 195 | 45 73759 363.388 |
---|
| 196 | 46 20500 80.00 |
---|
| 197 | 47 27100 115.00 |
---|
| 198 | 48 15000 110.00 |
---|
| 199 | 49 50895 277.852 |
---|
| 200 | 50 19707 128.00 |
---|
| 201 | 51 17994 78.80 |
---|
| 202 | 52 36135 167.222 |
---|
| 203 | 53 30000 153.00 |
---|
| 204 | 54 26195 125.00 |
---|
| 205 | 55 28000 216.00 |
---|
| 206 | 56 24658 152.551 |
---|
| 207 | 57 36850 190.00 |
---|
| 208 | 58 29250 183.69 |
---|
| 209 | 59 50000 250.00 |
---|
| 210 | 60 40078 265.443 |
---|
| 211 | 61 20200 110.00 |
---|
| 212 | 62 12500 75.00 |
---|
| 213 | 63 30890 195.00 |
---|
| 214 | 64 31000 175.00 |
---|
| 215 | 65 31277 192.992 |
---|
| 216 | 66 11500 75.00 |
---|
| 217 | 67 30000 175.668 |
---|
| 218 | 68 38383 190.00 |
---|
| 219 | 69 2075 8.650 |
---|
| 220 | ; |
---|
| 221 | |
---|
| 222 | end; |
---|