The source code and dockerfile for the GSW2024 AI Lab.
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

411 lines
20 KiB

2 months ago
  1. /* STIGLER, original Stigler's 1939 diet problem */
  2. /* The Stigler Diet is an optimization problem named for George Stigler,
  3. a 1982 Nobel Laureate in economics, who posed the following problem:
  4. For a moderately active man weighing 154 pounds, how much of each of
  5. 77 foods should be eaten on a daily basis so that the man's intake of
  6. nine nutrients will be at least equal to the recommended dietary
  7. allowances (RDSs) suggested by the National Research Council in 1943,
  8. with the cost of the diet being minimal?
  9. The nutrient RDAs required to be met in Stigler's experiment were
  10. calories, protein, calcium, iron, vitamin A, thiamine, riboflavin,
  11. niacin, and ascorbic acid. The result was an annual budget allocated
  12. to foods such as evaporated milk, cabbage, dried navy beans, and beef
  13. liver at a cost of approximately $0.11 a day in 1939 U.S. dollars.
  14. While the name "Stigler Diet" was applied after the experiment by
  15. outsiders, according to Stigler, "No one recommends these diets for
  16. anyone, let alone everyone." The Stigler diet has been much ridiculed
  17. for its lack of variety and palatability, however his methodology has
  18. received praise and is considered to be some of the earliest work in
  19. linear programming.
  20. The Stigler diet question is a linear programming problem. Lacking
  21. any sophisticated method of solving such a problem, Stigler was
  22. forced to utilize heuristic methods in order to find a solution. The
  23. diet question originally asked in which quantities a 154 pound male
  24. would have to consume 77 different foods in order to fulfill the
  25. recommended intake of 9 different nutrients while keeping expense at
  26. a minimum. Through "trial and error, mathematical insight and
  27. agility," Stigler was able to eliminate 62 of the foods from the
  28. original 77 (these foods were removed based because they lacked
  29. nutrients in comparison to the remaining 15). From the reduced list,
  30. Stigler calculated the required amounts of each of the remaining 15
  31. foods to arrive at a cost-minimizing solution to his question.
  32. According to Stigler's calculations, the annual cost of his solution
  33. was $39.93 in 1939 dollars. When corrected for inflation using the
  34. consumer price index, the cost of the diet in 2005 dollars is
  35. $561.43. The specific combination of foods and quantities is as
  36. follows:
  37. Stigler's 1939 Diet
  38. Food Annual Quantities Annual Cost
  39. ---------------- ----------------- -----------
  40. Wheat Flour 370 lb. $13.33
  41. Evaporated Milk 57 cans 3.84
  42. Cabbage 111 lb. 4.11
  43. Spinach 23 lb. 1.85
  44. Dried Navy Beans 285 lb. 16.80
  45. ----------------------------------------------
  46. Total Annual Cost $39.93
  47. The 9 nutrients that Stigler's diet took into consideration and their
  48. respective recommended daily amounts were:
  49. Table of nutrients considered in Stigler's diet
  50. Nutrient Daily Recommended Intake
  51. ------------------------- ------------------------
  52. Calories 3,000 Calories
  53. Protein 70 grams
  54. Calcium .8 grams
  55. Iron 12 milligrams
  56. Vitamin A 5,000 IU
  57. Thiamine (Vitamin B1) 1.8 milligrams
  58. Riboflavin (Vitamin B2) 2.7 milligrams
  59. Niacin 18 milligrams
  60. Ascorbic Acid (Vitamin C) 75 milligrams
  61. Seven years after Stigler made his initial estimates, the development
  62. of George Dantzig's Simplex algorithm made it possible to solve the
  63. problem without relying on heuristic methods. The exact value was
  64. determined to be $39.69 (using the original 1939 data). Dantzig's
  65. algorithm describes a method of traversing the vertices of a polytope
  66. of N+1 dimensions in order to find the optimal solution to a specific
  67. situation.
  68. (From Wikipedia, the free encyclopedia.) */
  69. /* Translated from GAMS by Andrew Makhorin <mao@gnu.org>.
  70. For the original GAMS model stigler1939.gms see [3].
  71. References:
  72. 1. George J. Stigler, "The Cost of Subsistence," J. Farm Econ. 27,
  73. 1945, pp. 303-14.
  74. 2. National Research Council, "Recommended Daily Allowances," Reprint
  75. and Circular Series No. 115, January, 1943.
  76. 3. Erwin Kalvelagen, "Model building with GAMS," Chapter 2, "Building
  77. linear programming models," pp. 128-34. */
  78. set C;
  79. /* commodities */
  80. check card(C) = 77;
  81. /* there must be 77 commodities */
  82. set N;
  83. /* nutrients */
  84. param data{c in C, {"price", "weight"} union N};
  85. /* nutritive values per dollar of expenditure */
  86. param allowance{n in N};
  87. /* recommended daily allowance for a moderately active man */
  88. var x{c in C}, >= 0;
  89. /* dollars of food to be purchased daily */
  90. s.t. nb{n in N}: sum{c in C} data[c,n] * x[c] >= allowance[n];
  91. /* nutrient balance */
  92. minimize cost: sum{c in C} x[c];
  93. /* total food bill */
  94. solve;
  95. param days := 365.25;
  96. /* days in a year */
  97. param commodity{c in C}, symbolic;
  98. param unit{c in C}, symbolic;
  99. printf "\n";
  100. printf "MINIMUM COST ANNUAL DIET\n";
  101. printf "\n";
  102. printf " Commodity Unit Quantity Cost \n";
  103. printf "------------------------- ---------- ---------- ----------\n";
  104. printf{c in C: x[c] != 0} "%-25s %10s %10.2f $%7.2f\n", commodity[c],
  105. unit[c], 100 * days * x[c] / data[c,"price"], days * x[c];
  106. printf " -----------------\n";
  107. printf " Total: $%7.2f\n",
  108. days * sum{c in C} x[c];
  109. printf "\n";
  110. data;
  111. param : C : commodity unit :=
  112. flour "Wheat Flour (Enriched)" "10 lb."
  113. macaroni "Macaroni" "1 lb."
  114. cereal "Wheat Cereal (Enriched)" "28 oz."
  115. cornflakes "Corn Flakes" "8 oz."
  116. cornmeal "Corn Meal" "1 lb."
  117. grits "Hominy Grits" "24 oz."
  118. rice "Rice" "1 lb."
  119. oats "Rolled Oats" "1 lb."
  120. whitebread "White Bread (Enriched)" "1 lb."
  121. wheatbread "Whole Wheat Bread" "1 lb."
  122. ryebread "Rye Bread" "1 lb."
  123. poundcake "Pound Cake" "1 lb."
  124. crackers "Soda Crackers" "1 lb."
  125. milk "Milk" "1 qt."
  126. evapmild "Evaporated Milk (can)" "14.5 oz."
  127. butter "Butter" "1 lb."
  128. margarine "Oleomargarine" "1 lb."
  129. eggs "Eggs" "1 doz."
  130. cheese "Cheese (Cheddar)" "1 lb."
  131. cream "Cream" "1/2 pt."
  132. peanutbutter "Peanut Butter" "1 lb."
  133. mayonnaise "Mayonnaise" "1/2 pt."
  134. crisco "Crisco" "1 lb."
  135. lard "Lard" "1 lb."
  136. sirloinsteak "Sirloin Steak" "1 lb."
  137. roundsteak "Round Steak" "1 lb."
  138. ribroast "Rib Roast" "1 lb."
  139. chuckroast "Chuck Roast" "1 lb."
  140. plate "Plate" "1 lb."
  141. liver "Liver (Beef)" "1 lb."
  142. lambleg "Leg of Lamb" "1 lb."
  143. lambchops "Lamb Chops (Rib)" "1 lb."
  144. porkchops "Pork Chops" "1 lb."
  145. porkroast "Pork Loin Roast" "1 lb."
  146. bacon "Bacon" "1 lb."
  147. ham "Ham - smoked" "1 lb."
  148. saltpork "Salt Pork" "1 lb."
  149. chicken "Roasting Chicken" "1 lb."
  150. veal "Veal Cutlets" "1 lb."
  151. salmon "Salmon, Pink (can)" "16 oz."
  152. apples "Apples" "1 lb."
  153. bananas "Bananas" "1 lb."
  154. lemons "Lemons" "1 doz."
  155. oranges "Oranges" "1 doz."
  156. greenbeans "Green Beans" "1 lb."
  157. cabbage "Cabbage" "1 lb."
  158. carrots "Carrots" "1 bunch"
  159. celery "Celery" "1 stalk"
  160. lettuce "Lettuce" "1 head"
  161. onions "Onions" "1 lb."
  162. potatoes "Potatoes" "15 lb."
  163. spinach "Spinach" "1 lb."
  164. sweetpotato "Sweet Potatoes" "1 lb."
  165. peaches "Peaches (can)" "No. 2 1/2"
  166. pears "Pears (can)" "No. 2 1/2"
  167. pineapple "Pineapple (can)" "No. 2 1/2"
  168. asparagus "Asparagus (can)" "No. 2"
  169. cannedgrbn "Grean Beans (can)" "No. 2"
  170. porkbeans "Pork and Beans (can)" "16 oz."
  171. corn "Corn (can)" "No. 2"
  172. peas "Peas (can)" "No. 2"
  173. tomatoes "Tomatoes (can)" "No. 2"
  174. tomatosoup "Tomato Soup (can)" "10 1/2 oz."
  175. driedpeach "Peaches, Dried" "1 lb."
  176. prunes "Prunes, Dried" "1 lb."
  177. raisins "Raisins, Dried" "15 oz."
  178. driedpeas "Peas, Dried" "1 lb."
  179. limabeans "Lima Beans, Dried" "1 lb."
  180. navybeans "Navy Beans, Dried" "1 lb."
  181. coffee "Coffee" "1 lb."
  182. tea "Tea" "1/4 lb."
  183. cocoa "Cocoa" "8 oz."
  184. chocolate "Chocolate" "8 oz."
  185. sugar "Sugar" "10 lb."
  186. cornsirup "Corn Sirup" "24 oz."
  187. molasses "Molasses" "18 oz."
  188. strawberry "Strawberry Preserve" "1 lb."
  189. ;
  190. set N :=
  191. calories /* Calories, unit = 1000 */
  192. protein /* Protein, unit = grams */
  193. calcium /* Calcium, unit = grams */
  194. iron /* Iron, unit = milligrams */
  195. vitaminA /* Vitamin A, unit = 1000 International Units */
  196. thiamine /* Thiamine, Vit. B1, unit = milligrams */
  197. riboflavin /* Riboflavin, Vit. B2, unit = milligrams */
  198. niacin /* Niacin (Nicotinic Acid), unit = milligrams */
  199. ascorbicAcid /* Ascorbic Acid, Vit. C, unit = milligrams */
  200. ;
  201. param data
  202. : price weight calories protein calcium iron :=
  203. # aug. 15 edible
  204. # 1939 per $1
  205. # (cents) (grams) (1000) (grams) (grams) (mg.)
  206. flour 36.0 12600 44.7 1411 2.0 365
  207. macaroni 14.1 3217 11.6 418 .7 54
  208. cereal 24.2 3280 11.8 377 14.4 175
  209. cornflakes 7.1 3194 11.4 252 .1 56
  210. cornmeal 4.6 9861 36.0 897 1.7 99
  211. grits 8.5 8005 28.6 680 .8 80
  212. rice 7.5 6048 21.2 460 .6 41
  213. oats 7.1 6389 25.3 907 5.1 341
  214. whitebread 7.9 5742 15.6 488 2.5 115
  215. wheatbread 9.1 4985 12.2 484 2.7 125
  216. ryebread 9.2 4930 12.4 439 1.1 82
  217. poundcake 24.8 1829 8.0 130 .4 31
  218. crackers 15.1 3004 12.5 288 .5 50
  219. milk 11.0 8867 6.1 310 10.5 18
  220. evapmild 6.7 6035 8.4 422 15.1 9
  221. butter 20.8 1473 10.8 9 .2 3
  222. margarine 16.1 2817 20.6 17 .6 6
  223. eggs 32.6 1857 2.9 238 1.0 52
  224. cheese 24.2 1874 7.4 448 16.4 19
  225. cream 14.1 1689 3.5 49 1.7 3
  226. peanutbutter 17.9 2534 15.7 661 1.0 48
  227. mayonnaise 16.7 1198 8.6 18 .2 8
  228. crisco 20.3 2234 20.1 0 .0 0
  229. lard 9.8 4628 41.7 0 .0 0
  230. sirloinsteak 39.6 1145 2.9 166 .1 34
  231. roundsteak 36.4 1246 2.2 214 .1 32
  232. ribroast 29.2 1553 3.4 213 .1 33
  233. chuckroast 22.6 2007 3.6 309 .2 46
  234. plate 14.6 3107 8.5 404 .2 62
  235. liver 26.8 1692 2.2 333 .2 139
  236. lambleg 27.6 1643 3.1 245 .1 20
  237. lambchops 36.6 1239 3.3 140 .1 15
  238. porkchops 30.7 1477 3.5 196 .2 80
  239. porkroast 24.2 1874 4.4 249 .3 37
  240. bacon 25.6 1772 10.4 152 .2 23
  241. ham 27.4 1655 6.7 212 .2 31
  242. saltpork 16.0 2835 18.8 164 .1 26
  243. chicken 30.3 1497 1.8 184 .1 30
  244. veal 42.3 1072 1.7 156 .1 24
  245. salmon 13.0 3489 5.8 705 6.8 45
  246. apples 4.4 9072 5.8 27 .5 36
  247. bananas 6.1 4982 4.9 60 .4 30
  248. lemons 26.0 2380 1.0 21 .5 14
  249. oranges 30.9 4439 2.2 40 1.1 18
  250. greenbeans 7.1 5750 2.4 138 3.7 80
  251. cabbage 3.7 8949 2.6 125 4.0 36
  252. carrots 4.7 6080 2.7 73 2.8 43
  253. celery 7.3 3915 .9 51 3.0 23
  254. lettuce 8.2 2247 .4 27 1.1 22
  255. onions 3.6 11844 5.8 166 3.8 59
  256. potatoes 34.0 16810 14.3 336 1.8 118
  257. spinach 8.1 4592 1.1 106 .0 138
  258. sweetpotato 5.1 7649 9.6 138 2.7 54
  259. peaches 16.8 4894 3.7 20 .4 10
  260. pears 20.4 4030 3.0 8 .3 8
  261. pineapple 21.3 3993 2.4 16 .4 8
  262. asparagus 27.7 1945 .4 33 .3 12
  263. cannedgrbn 10.0 5386 1.0 54 2.0 65
  264. porkbeans 7.1 6389 7.5 364 4.0 134
  265. corn 10.4 5452 5.2 136 .2 16
  266. peas 13.8 4109 2.3 136 .6 45
  267. tomatoes 8.6 6263 1.3 63 .7 38
  268. tomatosoup 7.6 3917 1.6 71 .6 43
  269. driedpeach 15.7 2889 8.5 87 1.7 173
  270. prunes 9.0 4284 12.8 99 2.5 154
  271. raisins 9.4 4524 13.5 104 2.5 136
  272. driedpeas 7.9 5742 20.0 1367 4.2 345
  273. limabeans 8.9 5097 17.4 1055 3.7 459
  274. navybeans 5.9 7688 26.9 1691 11.4 792
  275. coffee 22.4 2025 .0 0 .0 0
  276. tea 17.4 652 .0 0 .0 0
  277. cocoa 8.6 2637 8.7 237 3.0 72
  278. chocolate 16.2 1400 8.0 77 1.3 39
  279. sugar 51.7 8773 34.9 0 .0 0
  280. cornsirup 13.7 4996 14.7 0 .5 74
  281. molasses 13.6 3752 9.0 0 10.3 244
  282. strawberry 20.5 2213 6.4 11 .4 7
  283. : vitaminA thiamine riboflavin niacin ascorbicAcid :=
  284. # (1000 IU) (mg.) (mg.) (mg.) (mg.)
  285. flour .0 55.4 33.3 441 0
  286. macaroni .0 3.2 1.9 68 0
  287. cereal .0 14.4 8.8 114 0
  288. cornflakes .0 13.5 2.3 68 0
  289. cornmeal 30.9 17.4 7.9 106 0
  290. grits .0 10.6 1.6 110 0
  291. rice .0 2.0 4.8 60 0
  292. oats .0 37.1 8.9 64 0
  293. whitebread .0 13.8 8.5 126 0
  294. wheatbread .0 13.9 6.4 160 0
  295. ryebread .0 9.9 3.0 66 0
  296. poundcake 18.9 2.8 3.0 17 0
  297. crackers .0 .0 .0 0 0
  298. milk 16.8 4.0 16.0 7 177
  299. evapmild 26.0 3.0 23.5 11 60
  300. butter 44.2 .0 .2 2 0
  301. margarine 55.8 .2 .0 0 0
  302. eggs 18.6 2.8 6.5 1 0
  303. cheese 28.1 .8 10.3 4 0
  304. cream 16.9 .6 2.5 0 17
  305. peanutbutter .0 9.6 8.1 471 0
  306. mayonnaise 2.7 .4 .5 0 0
  307. crisco .0 .0 .0 0 0
  308. lard .2 .0 .5 5 0
  309. sirloinsteak .2 2.1 2.9 69 0
  310. roundsteak .4 2.5 2.4 87 0
  311. ribroast .0 .0 2.0 0 0
  312. chuckroast .4 1.0 4.0 120 0
  313. plate .0 .9 .0 0 0
  314. liver 169.2 6.4 50.8 316 525
  315. lambleg .0 2.8 3.0 86 0
  316. lambchops .0 1.7 2.7 54 0
  317. porkchops .0 17.4 2.7 60 0
  318. porkroast .0 18.2 3.6 79 0
  319. bacon .0 1.8 1.8 71 0
  320. ham .0 9.9 3.3 50 0
  321. saltpork .0 1.4 1.8 0 0
  322. chicken .1 .9 1.8 68 46
  323. veal .0 1.4 2.4 57 0
  324. salmon 3.5 1.0 4.9 209 0
  325. apples 7.3 3.6 2.7 5 544
  326. bananas 17.4 2.5 3.5 28 498
  327. lemons .0 .5 .0 4 952
  328. oranges 11.1 3.6 1.3 10 1993
  329. greenbeans 69.0 4.3 5.8 37 862
  330. cabbage 7.2 9.0 4.5 26 5369
  331. carrots 188.5 6.1 4.3 89 608
  332. celery .9 1.4 1.4 9 313
  333. lettuce 112.4 1.8 3.4 11 449
  334. onions 16.6 4.7 5.9 21 1184
  335. potatoes 6.7 29.4 7.1 198 2522
  336. spinach 918.4 5.7 13.8 33 2755
  337. sweetpotato 290.7 8.4 5.4 83 1912
  338. peaches 21.5 .5 1.0 31 196
  339. pears .8 .8 .8 5 81
  340. pineapple 2.0 2.8 .8 7 399
  341. asparagus 16.3 1.4 2.1 17 272
  342. cannedgrbn 53.9 1.6 4.3 32 431
  343. porkbeans 3.5 8.3 7.7 56 0
  344. corn 12.0 1.6 2.7 42 218
  345. peas 34.9 4.9 2.5 37 370
  346. tomatoes 53.2 3.4 2.5 36 1253
  347. tomatosoup 57.9 3.5 2.4 67 862
  348. driedpeach 86.8 1.2 4.3 55 57
  349. prunes 85.7 3.9 4.3 65 257
  350. raisins 4.5 6.3 1.4 24 136
  351. driedpeas 2.9 28.7 18.4 162 0
  352. limabeans 5.1 26.9 38.2 93 0
  353. navybeans .0 38.4 24.6 217 0
  354. coffee .0 4.0 5.1 50 0
  355. tea .0 .0 2.3 42 0
  356. cocoa .0 2.0 11.9 40 0
  357. chocolate .0 .9 3.4 14 0
  358. sugar .0 .0 .0 0 0
  359. cornsirup .0 .0 .0 5 0
  360. molasses .0 1.9 7.5 146 0
  361. strawberry .2 .2 .4 3 0
  362. ;
  363. param allowance :=
  364. calories 3
  365. protein 70
  366. calcium .8
  367. iron 12
  368. vitaminA 5
  369. thiamine 1.8
  370. riboflavin 2.7
  371. niacin 18
  372. ascorbicAcid 75
  373. ;
  374. end;