examples/dea.mod
changeset 1 c445c931472f
equal deleted inserted replaced
-1:000000000000 0:5ea068fcee33
       
     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;