lemon-project-template-glpk

annotate deps/glpk/examples/dea.mod @ 11:4fc6ad2fb8a6

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