Перша задача про дієту

Борошно, молоко, капуста, квасоля,... На перший погляд – звичайний список покупок для походу в магазин. Здавалося б, яка складна математика може тут бути? Треба лишень написати ціну навпроти кожного продукту, підвести риску внизу й порахувати витрати.

Та саме під цією рискою й починається історія. Історія, яка б так і залишилася відкритою проблемою і не стала би прикладом застосування математики для вирішення нагальної проблеми, якби не цілеспрямованість та професіоналізм науковців, які взялися за її розв’язання.

Джордж Стіглер
Джордж Стіглер
(1911–1991)

У 1940-их роках всесвітньо відомий економіст Джордж Стіглер задався питанням: як спланувати харчування, яке повністю забезпечує потреби людини, найдешевшим чином [1]? У роки Другої світової війни подібне завдання мало цілком практичне значення. Якщо до початку найбільшої війни минулого століття Збройні сили Сполучених Штатів Америки налічували трохи менше 400 тисяч осіб, то зі вступом США у Другу світову війну всі гілки ЗС США були кратно розширені і на піку війни загальний особовий склад сягав 16 мільйонів осіб. Тому забезпечення солдатів поживною їжею за якнайменшу ціну стало дуже важливим – навіть декілька центів економії на кожній порції дали б значний ефект.

Над відповідними розрахунками задачі економного харчування працювали багато дослідників, зокрема Джером Корнфілд та “батько лінійного програмування” Джордж Данціг [2, с. 44]. Та Джорджа Стіглера насамперед цікавила точна відповідь на просте запитання: скільки коштує найдешевший раціон, який задовольняє визначеним вимогам харчування? Хоча дієтологи вже пропонували економні меню, Стіглер прагнув математично знайти справжній розв’язок цієї задачі мінімізації ціни раціону та порівняти його з відомими на той час рекомендаціями.

У 1945 році він опублікував свої результати у статті “The Cost of Subsistence” [1, с. 303]. Для дослідження він обрав конкретний випадок: харчування помірно активного дорослого чоловіка вагою близько 70 кілограмів. Добові потреби в нутрієнтах були взяті з рекомендацій Національної дослідницької ради США 1943 року, в розрахунках увага була зосереджена на енергії та наступних восьми поживних речовина [1, с. 305], навединих у таблиці 1.

Таблиця 1. Добові потреби, використані в задачі Стіглера

ПоказникНайменша добова кількість
Енергія 3000 ккал
Білок 70 г
Кальцій 0,8 г
Залізо 12 мг
Вітамін A 5000 МО
Вітамін 1,8 мг
Вітамін 2,7 мг
Ніацин 18 мг
Вітамін C 75 мг

Джерело: [1, с. 305, табл. 1]. Значення відповідають історичним нормам,  обраним для цього дослідження.

Ця таблиця задавала правила пошуку оптимального раціону – він мав щодня забезпечувати виконання зазначених вимог: містити щонайменше 3000 кілокалорій, 70 грамів білка та зазначені кількості інших речовин. Кожна така вимога додавала новий рядок у таблицю – та нову умову до задачі.

Наступним кроком став великий список продуктів. Для розрахунку за цінами 1939 року Стіглер використав 77 найменувань, дані про роздрібні ціни яких надало Бюро статистики праці США, а відомості про поживність дослідник узяв із таблиць харчового складу [1, с. 309]. Оскільки різні продукти продавалися в різних одиницях (борошно – на вагу, яйця – десятками, молоко – квартами, консервовані продукти – банками і т.д.), Стіглер знайшов зручну спільну основу для порівняння: один долар витрат. А саме, він обчислив скільки енергії, білка, кальцію та вітамінів дає один долар, витрачений на кожен продукт із списку [1, с. 306–309].

Уявімо, що ми складаємо такий список покупок. Частину грошей спрямовуємо на борошно, частину – на молоко, ще частину – на овочі і так далі. Кожна покупка одночасно змінює кілька показників раціону – і нам потрібно узгодити всі ці внески й знайти найдешевше поєднання. Позначимо через I множину продуктів, а через J –множину показників харчування. У задачі Стіглера вони містять відповідно 77 і 9 елементів.

Нехай xi – це кількість доларів, витрачених на продукт  протягом одного дня. Коефіцієнт aji показує, скільки речовини j дає один долар, витрачений на продукт i. Через bj позначимо найменшу добову потребу в цій речовині. Збережемо нормування Стіглера та запишемо цю задачу сучасною математичною мовою:

(1)

(1)

за обмежень:

∑iєI ajixi ≥ bj, jєJ,

(2)

xi  ≥ 0,  iєI.

(3)

Формула (1) описує мету: знайти найменшу суму витрат C(x) = ∑iєI  xi. Позначення x* означає оптимальний план покупок, а C* = C(x*) – його вартість. Умови (2) відповідають рядкам таблиці добових потреб: добуток ajixi показує внесок одного з продуктів i у виконання добової норми по елементу j, а сума таких внесків — загальну кількість речовини j в раціоні. Наприклад, для білка нервіність ≥ означає вимогу отримати щонайменше 70 грамів на день. Умови (3) задають додатні або нульові витрати на кожен з продуктів. Додатне значення xi включає продукт i до списку покупок, натомість нульове – залишає його поза раціоном.

Для кожного показника одиниці вимірювання узгоджують між собою. Якщо вміст білка в коефіцієнтах задано у грамах, добову потребу також записують у грамах. У початковій таблиці Стіглера енергію наведено в тисячах кілокалорій, а вітамін A – у тисячах міжнародних одиниць; відповідні добові межі в такому записі дорівнюють 3 і 5.

Стіглер шукав відповідь цієї задачі шляхом послідовного відбору та перевірки варіантів. Він порівнював продукти за поживною цінністю на один долар і залишав найперспективніші. Після першого етапу список скоротився із 77 продуктів до 15. Далі дослідник порівнював їхні поєднання та продовжував скорочувати коло пошуку [1, с. 310]. Зрештою Стіглер отримав раціон із п’яти продуктів: пшеничного борошна, концентрованого молока, капусти, шпинату та сушеної білої квасолі. Його річна вартість за цінами серпня 1939 року становила 39,93 долара. Сам дослідник оцінював результат як близький до оптимального й припускав, що подальший пошук дасть економію в межах кількох доларів на рік [1, с. 310–311].

Окремо він виконав розрахунок за цінами серпня 1944 року. Зміна цін привела до іншого складу раціону, обидва розв’язки наведені у таблиці 2.

Таблиця 2. Річні раціони, отримані Стіглером

ПродуктСерпень 1939Серпень 1944
КількістьВартість, дол.КількістьВартість, дол.
Пшеничне борошно 370 фунтів 13,33 535 фунтів 34,53
Концентроване молоко 57 банок 3,84 – –
Капуста 111 фунтів 4,11 107 фунтів 5,23
Шпинат 23 фунти 1,85 13 фунтів 1,56
Сушена біла квасоля 285 фунтів 16,80 – –
Борошно для млинців – – 134 фунти 13,08
Свиняча печінка – – 25 фунтів 5,48
Разом   39,93   59,88

Джерело: [1, с. 311, табл. 2]. Один фунт становить приблизно 454 г. Риска позначає нульову кількість продукту. Концентроване молоко відповідає назві “evaporated milk” в оригіналі.

Джордж Данціг
Джордж Данціг
(1914–2005)

Через два роки історія отримала продовження. У 1946–1947 роках Джордж Данціг працював над механізацією планування для американської військової авіації. Він розробив математичний підхід до вибору найкращого плану та запропонував спосіб розв’язування таких задач – симплекс-метод [2, с. 43–44].

Коли прийшов час практичного випробування запропонованого методу, то під час обговорення в Пентагоні Марвін Гоффенберг запропонував звернутися до задачі про харчування, якою займався Корнфілд. Пошуки даних для розрахунків привели Данціга до статті Стіглера. Вона містила таблиці продуктів, вимоги до раціону та готовий наближений результат – усе потрібне для перевірки нового методу [2, с. 44–45].

Восени 1947 року Джек Ладерман із проєкту “Mathematical Tables Project” Національного бюро стандартів США організував обчислення. Над задачею працювала команда з дев’яти людей-обчислювачів [2, с. 45]. Велика таблиця містила 77 стовпців, Ладерман розподілив їх між учасниками: кожен отримав по вісім або дев’ять стовпців. Для арифметичних операцій використовували ручні настільні рахувальні машини, результати кожного кроку симплекс-методу записували на окремих аркушах [2, с. 45].

Таким був шлях від математичної ідеї до конкретного числа: розподілена між людьми таблиця, послідовні обчислення та паперові записи. Загальний обсяг роботи становив приблизно 120 людино-днів. Ця одиниця враховує сумарну працю команди: один день роботи дев’ятьох людей дорівнює дев’яти людино-дням [2, с. 45].

Після завершення розрахунків Ладерман з’єднав окремі аркуші в один величезний, якому дали жартівливу назву “скатертина”. На ній зберігався весь обчислювальний шлях до відповіді. Математик Оскар Моргенштерн навіть висловив бажання приїхати з Принстона до Вашингтона, щоб її побачити [2, с. 45].

Підсумкова вартість раціону становила 39,69 долара на рік. Економія порівняно з результатом Стіглера дорівнювала  долара, тобто усього лиш 24 центи на рік. Обидва розв’язки задачі наведені у таблиці 3, справді дивовижно як еврестичний підхід Стіглера з послідовним відбором перспективних продуктів дозволив отримати настільки близький до оптимального результат [2, с. 45].

Таблиця 3. Раціон Стіглера та оптимальний раціон за цінами 1939 року

ПродуктРозв’язок СтіглераТочний розв’язок
Пшеничне борошно 370 фунтів 299 фунтів
Концентроване молоко 57 банок –
Капуста 111 фунтів 111 фунтів
Шпинат 23 фунти 23 фунти
Сушена біла квасоля 285 фунтів 378 фунтів
Яловича печінка – 2,57 фунта
Річна вартість 39,93 дол. 39,69 дол.

Джерело: [3, с. 3, табл. 3]. Кількості наведено з округленням, використаним у публікації.

Заощаджені центи стали результатом великого математичного випробування. Команда отримала точний мінімум для заданих цін, продуктів і харчових вимог, а задача Стіглера посіла місце серед класичних прикладів лінійного програмування [3].

Згодом Данціг звернувся до задачі про дієту й у власному житті. На початку 1950-их років, працюючи в RAND Corporation, він вирішив скласти для себе ситний раціон з обмеженою калорійністю. Цього разу дані про понад 500 продуктів опрацьовував комп’ютер IBM 701 [2, с. 45–46].

Перший розрахунок приніс яскравий сюрприз: серед запропонованих продуктів виявилося 500 галонів оцту! Причина такої дивної рекомендації ховалася в таблиці з даними. Для оцту там був вказаний нульовий вміст води, а обрана Данцігом міра ситості залежала від маси продукту без врахування води. Через таке поєднання даних і формул оцет виявився надзвичайно “вигідним” продуктом [2, с. 46]!

Наступний отриманий варіант раціону також виявився не без дивовиж – він містив 200 бульйонних кубиків на день! Ця відповідь підказала ще одне уточнення, яке варто було врахувати – Данціг установив верхню межу споживання на продукти, зокрема не більше трьох кубиків бульйону на день. Таким чином кожний розрахунок допомагав уточнювати математичну модель, додаючи до неї все нові життєві подробиці [2, с. 46].

Важливими виявилися й інші характеристики самих продуктів, адже для математичної моделі точний опис продукту означає точніший результат. Наприклад, звичайне слово “яблуко” може охоплювати різні сорти яблук, строки їх зберігання та способи їх приготування. Зокрема у своїх дослідженнях Данціг звертав увагу на відмінності у вмісті вітаміну C в яблуках різних сортів [2, с. 44–45].

Так на прикладі звичайного списку покупок розкривається цілий процес дослідження. Спочатку з’являється практичне запитання, що потребує обґрунтованої відповіді. Потім – таблиці з даними, змінні для опису задачі та її математична модель, що враховую різні умови. Обчислення дають відповідь, а її осмислення допомагає вдосконалювати модель, щоб не забути явно врахувати важливі особливості задачі: смак, розміри порцій і їх різноманітність, поради дієтолога можна таким чином поступово включати до математичного опису раціону.

У центрі цієї історії залишаються прості речі: їжа, гроші та щоденний вибір. Саме вони стали матеріалом для задачі, над якою по черзі працювали відомий економіст, автор нового математичного методу та ціла команда обчислювачів із рахувальними машинами. Їхня робота показала, як із, здавалося б, простого повсякденного питання може розпочатися багаторічне дослідження, результати якого не лише стануть класичним прикладом математичного моделювання, а я матимуть значний вплив на розвиток математичного програмування.

У 9 номері журналу “Країна знань” у 2003 році була опублікована стаття [4], присвячена задачі про дієту. В ній описано інше формулювання даної задачі та наведено цікавий приклад того, як поступове врахування різних умов допомагає альпіністу краще спланувати своє харчування під час проходження гірського маршруту.

Література

[1] Stigler, G. J. (1945). The Cost of Subsistence. Journal of Farm Economics, 27(2), pp. 303–314. DOI: 10.2307/1231810. Повний текст статті.
[2] Dantzig, G. B. (1990). The Diet Problem. Interfaces, 20(4), pp. 43–47. DOI: 10.1287/inte.20.4.43. Повний текст статті.
[3] Garille, S. G., & Gass, S. I. (2001). Stigler’s Diet Problem Revisited. Operations Research, 49(1), pp. 1–13. DOI: 10.1287/opre.49.1.1.11187. Повний текст статті.
[4] Ржевський С. В. (2003). Проблема вибору... дієти. Науково-популярний журнал для юнацтва “Країна знань”, №9, c. 16–20.

Анастасія Степаненко, студентка магістратури Київського академічного університету,
Микола Корабльов, аспірант Інституту кібернетики ім. В.М. Глушкова НАН України,
Петро Стецюк, завідувач відділу Інституту кібернетики ім. В.М. Глушкова НАН України