You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							411 lines
						
					
					
						
							20 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							411 lines
						
					
					
						
							20 KiB
						
					
					
				| /* STIGLER, original Stigler's 1939 diet problem */ | |
| 
 | |
| /* The Stigler Diet is an optimization problem named for George Stigler, | |
|    a 1982 Nobel Laureate in economics, who posed the following problem: | |
|    For a moderately active man weighing 154 pounds, how much of each of | |
|    77 foods should be eaten on a daily basis so that the man's intake of | |
|    nine nutrients will be at least equal to the recommended dietary | |
|    allowances (RDSs) suggested by the National Research Council in 1943, | |
|    with the cost of the diet being minimal? | |
| 
 | |
|    The nutrient RDAs required to be met in Stigler's experiment were | |
|    calories, protein, calcium, iron, vitamin A, thiamine, riboflavin, | |
|    niacin, and ascorbic acid. The result was an annual budget allocated | |
|    to foods such as evaporated milk, cabbage, dried navy beans, and beef | |
|    liver at a cost of approximately $0.11 a day in 1939 U.S. dollars. | |
| 
 | |
|    While the name "Stigler Diet" was applied after the experiment by | |
|    outsiders, according to Stigler, "No one recommends these diets for | |
|    anyone, let alone everyone." The Stigler diet has been much ridiculed | |
|    for its lack of variety and palatability, however his methodology has | |
|    received praise and is considered to be some of the earliest work in | |
|    linear programming. | |
| 
 | |
|    The Stigler diet question is a linear programming problem. Lacking | |
|    any sophisticated method of solving such a problem, Stigler was | |
|    forced to utilize heuristic methods in order to find a solution. The | |
|    diet question originally asked in which quantities a 154 pound male | |
|    would have to consume 77 different foods in order to fulfill the | |
|    recommended intake of 9 different nutrients while keeping expense at | |
|    a minimum. Through "trial and error, mathematical insight and | |
|    agility," Stigler was able to eliminate 62 of the foods from the | |
|    original 77 (these foods were removed based because they lacked | |
|    nutrients in comparison to the remaining 15). From the reduced list, | |
|    Stigler calculated the required amounts of each of the remaining 15 | |
|    foods to arrive at a cost-minimizing solution to his question. | |
|    According to Stigler's calculations, the annual cost of his solution | |
|    was $39.93 in 1939 dollars. When corrected for inflation using the | |
|    consumer price index, the cost of the diet in 2005 dollars is | |
|    $561.43. The specific combination of foods and quantities is as | |
|    follows: | |
| 
 | |
|    Stigler's 1939 Diet | |
| 
 | |
|    Food             Annual Quantities Annual Cost | |
|    ---------------- ----------------- ----------- | |
|    Wheat Flour           370 lb.         $13.33 | |
|    Evaporated Milk        57 cans          3.84 | |
|    Cabbage               111 lb.           4.11 | |
|    Spinach                23 lb.           1.85 | |
|    Dried Navy Beans      285 lb.          16.80 | |
|    ---------------------------------------------- | |
|    Total Annual Cost                     $39.93 | |
| 
 | |
|    The 9 nutrients that Stigler's diet took into consideration and their | |
|    respective recommended daily amounts were: | |
| 
 | |
|    Table of nutrients considered in Stigler's diet | |
| 
 | |
|    Nutrient                  Daily Recommended Intake | |
|    ------------------------- ------------------------ | |
|    Calories                       3,000 Calories | |
|    Protein                           70 grams | |
|    Calcium                           .8 grams | |
|    Iron                              12 milligrams | |
|    Vitamin A                      5,000 IU | |
|    Thiamine (Vitamin B1)            1.8 milligrams | |
|    Riboflavin (Vitamin B2)          2.7 milligrams | |
|    Niacin                            18 milligrams | |
|    Ascorbic Acid (Vitamin C)         75 milligrams | |
| 
 | |
|    Seven years after Stigler made his initial estimates, the development | |
|    of George Dantzig's Simplex algorithm made it possible to solve the | |
|    problem without relying on heuristic methods. The exact value was | |
|    determined to be $39.69 (using the original 1939 data). Dantzig's | |
|    algorithm describes a method of traversing the vertices of a polytope | |
|    of N+1 dimensions in order to find the optimal solution to a specific | |
|    situation. | |
| 
 | |
|    (From Wikipedia, the free encyclopedia.) */ | |
| 
 | |
| /* Translated from GAMS by Andrew Makhorin <mao@gnu.org>. | |
| 
 | |
|    For the original GAMS model stigler1939.gms see [3]. | |
| 
 | |
|    References: | |
| 
 | |
|    1. George J. Stigler, "The Cost of Subsistence," J. Farm Econ. 27, | |
|       1945, pp. 303-14. | |
| 
 | |
|    2. National Research Council, "Recommended Daily Allowances," Reprint | |
|       and Circular Series No. 115, January, 1943. | |
| 
 | |
|    3. Erwin Kalvelagen, "Model building with GAMS," Chapter 2, "Building | |
|       linear programming models," pp. 128-34. */ | |
| 
 | |
| set C; | |
| /* commodities */ | |
| 
 | |
| check card(C) = 77; | |
| /* there must be 77 commodities */ | |
| 
 | |
| set N; | |
| /* nutrients */ | |
| 
 | |
| param data{c in C, {"price", "weight"} union N}; | |
| /* nutritive values per dollar of expenditure */ | |
| 
 | |
| param allowance{n in N}; | |
| /* recommended daily allowance for a moderately active man */ | |
| 
 | |
| var x{c in C}, >= 0; | |
| /* dollars of food to be purchased daily */ | |
| 
 | |
| s.t. nb{n in N}: sum{c in C} data[c,n] * x[c] >= allowance[n]; | |
| /* nutrient balance */ | |
| 
 | |
| minimize cost: sum{c in C} x[c]; | |
| /* total food bill */ | |
| 
 | |
| solve; | |
| 
 | |
| param days := 365.25; | |
| /* days in a year */ | |
| 
 | |
| param commodity{c in C}, symbolic; | |
| 
 | |
| param unit{c in C}, symbolic; | |
| 
 | |
| printf "\n"; | |
| printf "MINIMUM COST ANNUAL DIET\n"; | |
| printf "\n"; | |
| printf "        Commodity            Unit     Quantity     Cost   \n"; | |
| printf "------------------------- ---------- ---------- ----------\n"; | |
| printf{c in C: x[c] != 0} "%-25s %10s %10.2f   $%7.2f\n", commodity[c], | |
|    unit[c], 100 * days * x[c] / data[c,"price"], days * x[c]; | |
| printf "                                         -----------------\n"; | |
| printf "                                         Total:   $%7.2f\n", | |
|    days * sum{c in C} x[c]; | |
| printf "\n"; | |
| 
 | |
| data; | |
| 
 | |
| param : C :    commodity                   unit := | |
| flour          "Wheat Flour (Enriched)"    "10 lb." | |
| macaroni       "Macaroni"                  "1 lb." | |
| cereal         "Wheat Cereal (Enriched)"   "28 oz." | |
| cornflakes     "Corn Flakes"               "8 oz." | |
| cornmeal       "Corn Meal"                 "1 lb." | |
| grits          "Hominy Grits"              "24 oz." | |
| rice           "Rice"                      "1 lb." | |
| oats           "Rolled Oats"               "1 lb." | |
| whitebread     "White Bread (Enriched)"    "1 lb." | |
| wheatbread     "Whole Wheat Bread"         "1 lb." | |
| ryebread       "Rye Bread"                 "1 lb." | |
| poundcake      "Pound Cake"                "1 lb." | |
| crackers       "Soda Crackers"             "1 lb." | |
| milk           "Milk"                      "1 qt." | |
| evapmild       "Evaporated Milk (can)"     "14.5 oz." | |
| butter         "Butter"                    "1 lb." | |
| margarine      "Oleomargarine"             "1 lb." | |
| eggs           "Eggs"                      "1 doz." | |
| cheese         "Cheese (Cheddar)"          "1 lb." | |
| cream          "Cream"                     "1/2 pt." | |
| peanutbutter   "Peanut Butter"             "1 lb." | |
| mayonnaise     "Mayonnaise"                "1/2 pt." | |
| crisco         "Crisco"                    "1 lb." | |
| lard           "Lard"                      "1 lb." | |
| sirloinsteak   "Sirloin Steak"             "1 lb." | |
| roundsteak     "Round Steak"               "1 lb." | |
| ribroast       "Rib Roast"                 "1 lb." | |
| chuckroast     "Chuck Roast"               "1 lb." | |
| plate          "Plate"                     "1 lb." | |
| liver          "Liver (Beef)"              "1 lb." | |
| lambleg        "Leg of Lamb"               "1 lb." | |
| lambchops      "Lamb Chops (Rib)"          "1 lb." | |
| porkchops      "Pork Chops"                "1 lb." | |
| porkroast      "Pork Loin Roast"           "1 lb." | |
| bacon          "Bacon"                     "1 lb." | |
| ham            "Ham - smoked"              "1 lb." | |
| saltpork       "Salt Pork"                 "1 lb." | |
| chicken        "Roasting Chicken"          "1 lb." | |
| veal           "Veal Cutlets"              "1 lb." | |
| salmon         "Salmon, Pink (can)"        "16 oz." | |
| apples         "Apples"                    "1 lb." | |
| bananas        "Bananas"                   "1 lb." | |
| lemons         "Lemons"                    "1 doz." | |
| oranges        "Oranges"                   "1 doz." | |
| greenbeans     "Green Beans"               "1 lb." | |
| cabbage        "Cabbage"                   "1 lb." | |
| carrots        "Carrots"                   "1 bunch" | |
| celery         "Celery"                    "1 stalk" | |
| lettuce        "Lettuce"                   "1 head" | |
| onions         "Onions"                    "1 lb." | |
| potatoes       "Potatoes"                  "15 lb." | |
| spinach        "Spinach"                   "1 lb." | |
| sweetpotato    "Sweet Potatoes"            "1 lb." | |
| peaches        "Peaches (can)"             "No. 2 1/2" | |
| pears          "Pears (can)"               "No. 2 1/2" | |
| pineapple      "Pineapple (can)"           "No. 2 1/2" | |
| asparagus      "Asparagus (can)"           "No. 2" | |
| cannedgrbn     "Grean Beans (can)"         "No. 2" | |
| porkbeans      "Pork and Beans (can)"      "16 oz." | |
| corn           "Corn (can)"                "No. 2" | |
| peas           "Peas (can)"                "No. 2" | |
| tomatoes       "Tomatoes (can)"            "No. 2" | |
| tomatosoup     "Tomato Soup (can)"         "10 1/2 oz." | |
| driedpeach     "Peaches, Dried"            "1 lb." | |
| prunes         "Prunes, Dried"             "1 lb." | |
| raisins        "Raisins, Dried"            "15 oz." | |
| driedpeas      "Peas, Dried"               "1 lb." | |
| limabeans      "Lima Beans, Dried"         "1 lb." | |
| navybeans      "Navy Beans, Dried"         "1 lb." | |
| coffee         "Coffee"                    "1 lb." | |
| tea            "Tea"                       "1/4 lb." | |
| cocoa          "Cocoa"                     "8 oz." | |
| chocolate      "Chocolate"                 "8 oz." | |
| sugar          "Sugar"                     "10 lb." | |
| cornsirup      "Corn Sirup"                "24 oz." | |
| molasses       "Molasses"                  "18 oz." | |
| strawberry     "Strawberry Preserve"       "1 lb." | |
| ; | |
| 
 | |
| set N := | |
| calories       /* Calories, unit = 1000 */ | |
| protein        /* Protein, unit = grams */ | |
| calcium        /* Calcium, unit = grams */ | |
| iron           /* Iron, unit = milligrams */ | |
| vitaminA       /* Vitamin A, unit = 1000 International Units */ | |
| thiamine       /* Thiamine, Vit. B1, unit = milligrams */ | |
| riboflavin     /* Riboflavin, Vit. B2, unit = milligrams */ | |
| niacin         /* Niacin (Nicotinic Acid), unit = milligrams */ | |
| ascorbicAcid   /* Ascorbic Acid, Vit. C, unit = milligrams */ | |
| ; | |
| 
 | |
| param data | |
| :             price   weight calories protein  calcium   iron := | |
| #            aug. 15  edible | |
| #             1939    per $1 | |
| #           (cents)   (grams) (1000)  (grams)  (grams)   (mg.) | |
| flour         36.0    12600    44.7     1411     2.0      365 | |
| macaroni      14.1     3217    11.6      418      .7       54 | |
| cereal        24.2     3280    11.8      377    14.4      175 | |
| cornflakes     7.1     3194    11.4      252      .1       56 | |
| cornmeal       4.6     9861    36.0      897     1.7       99 | |
| grits          8.5     8005    28.6      680      .8       80 | |
| rice           7.5     6048    21.2      460      .6       41 | |
| oats           7.1     6389    25.3      907     5.1      341 | |
| whitebread     7.9     5742    15.6      488     2.5      115 | |
| wheatbread     9.1     4985    12.2      484     2.7      125 | |
| ryebread       9.2     4930    12.4      439     1.1       82 | |
| poundcake     24.8     1829     8.0      130      .4       31 | |
| crackers      15.1     3004    12.5      288      .5       50 | |
| milk          11.0     8867     6.1      310    10.5       18 | |
| evapmild       6.7     6035     8.4      422    15.1        9 | |
| butter        20.8     1473    10.8        9      .2        3 | |
| margarine     16.1     2817    20.6       17      .6        6 | |
| eggs          32.6     1857     2.9      238     1.0       52 | |
| cheese        24.2     1874     7.4      448    16.4       19 | |
| cream         14.1     1689     3.5       49     1.7        3 | |
| peanutbutter  17.9     2534    15.7      661     1.0       48 | |
| mayonnaise    16.7     1198     8.6       18      .2        8 | |
| crisco        20.3     2234    20.1        0      .0        0 | |
| lard           9.8     4628    41.7        0      .0        0 | |
| sirloinsteak  39.6     1145     2.9      166      .1       34 | |
| roundsteak    36.4     1246     2.2      214      .1       32 | |
| ribroast      29.2     1553     3.4      213      .1       33 | |
| chuckroast    22.6     2007     3.6      309      .2       46 | |
| plate         14.6     3107     8.5      404      .2       62 | |
| liver         26.8     1692     2.2      333      .2      139 | |
| lambleg       27.6     1643     3.1      245      .1       20 | |
| lambchops     36.6     1239     3.3      140      .1       15 | |
| porkchops     30.7     1477     3.5      196      .2       80 | |
| porkroast     24.2     1874     4.4      249      .3       37 | |
| bacon         25.6     1772    10.4      152      .2       23 | |
| ham           27.4     1655     6.7      212      .2       31 | |
| saltpork      16.0     2835    18.8      164      .1       26 | |
| chicken       30.3     1497     1.8      184      .1       30 | |
| veal          42.3     1072     1.7      156      .1       24 | |
| salmon        13.0     3489     5.8      705     6.8       45 | |
| apples         4.4     9072     5.8       27      .5       36 | |
| bananas        6.1     4982     4.9       60      .4       30 | |
| lemons        26.0     2380     1.0       21      .5       14 | |
| oranges       30.9     4439     2.2       40     1.1       18 | |
| greenbeans     7.1     5750     2.4      138     3.7       80 | |
| cabbage        3.7     8949     2.6      125     4.0       36 | |
| carrots        4.7     6080     2.7       73     2.8       43 | |
| celery         7.3     3915      .9       51     3.0       23 | |
| lettuce        8.2     2247      .4       27     1.1       22 | |
| onions         3.6    11844     5.8      166     3.8       59 | |
| potatoes      34.0    16810    14.3      336     1.8      118 | |
| spinach        8.1     4592     1.1      106      .0      138 | |
| sweetpotato    5.1     7649     9.6      138     2.7       54 | |
| peaches       16.8     4894     3.7       20      .4       10 | |
| pears         20.4     4030     3.0        8      .3        8 | |
| pineapple     21.3     3993     2.4       16      .4        8 | |
| asparagus     27.7     1945      .4       33      .3       12 | |
| cannedgrbn    10.0     5386     1.0       54     2.0       65 | |
| porkbeans      7.1     6389     7.5      364     4.0      134 | |
| corn          10.4     5452     5.2      136      .2       16 | |
| peas          13.8     4109     2.3      136      .6       45 | |
| tomatoes       8.6     6263     1.3       63      .7       38 | |
| tomatosoup     7.6     3917     1.6       71      .6       43 | |
| driedpeach    15.7     2889     8.5       87     1.7      173 | |
| prunes         9.0     4284    12.8       99     2.5      154 | |
| raisins        9.4     4524    13.5      104     2.5      136 | |
| driedpeas      7.9     5742    20.0     1367     4.2      345 | |
| limabeans      8.9     5097    17.4     1055     3.7      459 | |
| navybeans      5.9     7688    26.9     1691    11.4      792 | |
| coffee        22.4     2025      .0        0      .0        0 | |
| tea           17.4      652      .0        0      .0        0 | |
| cocoa          8.6     2637     8.7      237     3.0       72 | |
| chocolate     16.2     1400     8.0       77     1.3       39 | |
| sugar         51.7     8773    34.9        0      .0        0 | |
| cornsirup     13.7     4996    14.7        0      .5       74 | |
| molasses      13.6     3752     9.0        0    10.3      244 | |
| strawberry    20.5     2213     6.4       11      .4        7 | |
| 
 | |
| :           vitaminA thiamine riboflavin  niacin  ascorbicAcid := | |
| #          (1000 IU)  (mg.)      (mg.)     (mg.)     (mg.) | |
| flour           .0    55.4       33.3       441         0 | |
| macaroni        .0     3.2        1.9        68         0 | |
| cereal          .0    14.4        8.8       114         0 | |
| cornflakes      .0    13.5        2.3        68         0 | |
| cornmeal      30.9    17.4        7.9       106         0 | |
| grits           .0    10.6        1.6       110         0 | |
| rice            .0     2.0        4.8        60         0 | |
| oats            .0    37.1        8.9        64         0 | |
| whitebread      .0    13.8        8.5       126         0 | |
| wheatbread      .0    13.9        6.4       160         0 | |
| ryebread        .0     9.9        3.0        66         0 | |
| poundcake     18.9     2.8        3.0        17         0 | |
| crackers        .0      .0         .0         0         0 | |
| milk          16.8     4.0       16.0         7       177 | |
| evapmild      26.0     3.0       23.5        11        60 | |
| butter        44.2      .0         .2         2         0 | |
| margarine     55.8      .2         .0         0         0 | |
| eggs          18.6     2.8        6.5         1         0 | |
| cheese        28.1      .8       10.3         4         0 | |
| cream         16.9      .6        2.5         0        17 | |
| peanutbutter    .0     9.6        8.1       471         0 | |
| mayonnaise     2.7      .4         .5         0         0 | |
| crisco          .0      .0         .0         0         0 | |
| lard            .2      .0         .5         5         0 | |
| sirloinsteak    .2     2.1        2.9        69         0 | |
| roundsteak      .4     2.5        2.4        87         0 | |
| ribroast        .0      .0        2.0         0         0 | |
| chuckroast      .4     1.0        4.0       120         0 | |
| plate           .0      .9         .0         0         0 | |
| liver        169.2     6.4       50.8       316       525 | |
| lambleg         .0     2.8        3.0        86         0 | |
| lambchops       .0     1.7        2.7        54         0 | |
| porkchops       .0    17.4        2.7        60         0 | |
| porkroast       .0    18.2        3.6        79         0 | |
| bacon           .0     1.8        1.8        71         0 | |
| ham             .0     9.9        3.3        50         0 | |
| saltpork        .0     1.4        1.8         0         0 | |
| chicken         .1      .9        1.8        68        46 | |
| veal            .0     1.4        2.4        57         0 | |
| salmon         3.5     1.0        4.9       209         0 | |
| apples         7.3     3.6        2.7         5       544 | |
| bananas       17.4     2.5        3.5        28       498 | |
| lemons          .0      .5         .0         4       952 | |
| oranges       11.1     3.6        1.3        10      1993 | |
| greenbeans    69.0     4.3        5.8        37       862 | |
| cabbage        7.2     9.0        4.5        26      5369 | |
| carrots      188.5     6.1        4.3        89       608 | |
| celery          .9     1.4        1.4         9       313 | |
| lettuce      112.4     1.8        3.4        11       449 | |
| onions        16.6     4.7        5.9        21      1184 | |
| potatoes       6.7    29.4        7.1       198      2522 | |
| spinach      918.4     5.7       13.8        33      2755 | |
| sweetpotato  290.7     8.4        5.4        83      1912 | |
| peaches       21.5      .5        1.0        31       196 | |
| pears           .8      .8         .8         5        81 | |
| pineapple      2.0     2.8         .8         7       399 | |
| asparagus     16.3     1.4        2.1        17       272 | |
| cannedgrbn    53.9     1.6        4.3        32       431 | |
| porkbeans      3.5     8.3        7.7        56         0 | |
| corn          12.0     1.6        2.7        42       218 | |
| peas          34.9     4.9        2.5        37       370 | |
| tomatoes      53.2     3.4        2.5        36      1253 | |
| tomatosoup    57.9     3.5        2.4        67       862 | |
| driedpeach    86.8     1.2        4.3        55        57 | |
| prunes        85.7     3.9        4.3        65       257 | |
| raisins        4.5     6.3        1.4        24       136 | |
| driedpeas      2.9    28.7       18.4       162         0 | |
| limabeans      5.1    26.9       38.2        93         0 | |
| navybeans       .0    38.4       24.6       217         0 | |
| coffee          .0     4.0        5.1        50         0 | |
| tea             .0      .0        2.3        42         0 | |
| cocoa           .0     2.0       11.9        40         0 | |
| chocolate       .0      .9        3.4        14         0 | |
| sugar           .0      .0         .0         0         0 | |
| cornsirup       .0      .0         .0         5         0 | |
| molasses        .0     1.9        7.5       146         0 | |
| strawberry      .2      .2         .4         3         0 | |
| ; | |
| 
 | |
| param allowance := | |
| calories       3 | |
| protein       70 | |
| calcium         .8 | |
| iron          12 | |
| vitaminA       5 | |
| thiamine       1.8 | |
| riboflavin     2.7 | |
| niacin        18 | |
| ascorbicAcid  75 | |
| ; | |
| 
 | |
| end;
 |