Приклад оптимізації проблеми дієти в C
Проблема оптимізації, розв’язана в цьому прикладі, полягає в тому, щоб скласти дієту з набору продуктів, щоб задовольнити харчові потреби та мінімізувати загальну вартість. Приклад diet.cpp ілюструє такі процедури:
Подання проблеми
Проблема містить набір продуктів харчування, які є моделюючими змінними; набір харчових потреб, яким слід задовольнити, які є обмеженнями; і метою мінімізації загальної вартості їжі. Існує два шляхи розгляду цієї проблеми:
Концертна технологія однаково підходить для обох видів моделювання; насправді ви можете навіть поєднати обидва підходи в одній програмі. Якщо створюється новий харчовий продукт, ви можете створити для нього нову змінну незалежно від того, як модель була спочатку побудована. Подібним чином, якщо виявлено нову поживну речовину, ви можете додати нове обмеження для неї.
Створення модельного рядка за рядком
Ви заходите в магазин і складаєте список пропонованих продуктів. Для кожного продукту ви зберігаєте ціну за одиницю та кількість на складі. Для деяких продуктів, які вам особливо подобаються, ви також встановлюєте мінімальну кількість, яку хотіли б використовувати у своєму раціоні. Потім для кожного з продуктів ви створюєте модельну змінну, яка представляє кількість, яку потрібно придбати для вашого раціону.
Тепер ви отримуєте медичну книжку і шукаєте, які поживні речовини для вас відомі та актуальні. Для кожної поживної речовини ви зазначаєте мінімальну та максимальну кількість, яка повинна міститися у вашому раціоні. Крім того, ви переглядаєте список продуктів і визначаєте, скільки харчовий продукт внесе для кожної поживної речовини. Це дає вам одне обмеження на поживну речовину, яке природно може бути представлене як обмеження діапазону:
Цей спосіб створення моделі показаний у функції buildModelByRow, у прикладі ilodiet.cpp .
Створення типової колонки за колонкою
Ви починаєте з медичної книги, де складаєте список поживних речовин, які хочете переконатись, що вони правильно представлені у вашому раціоні. Для кожного з поживних речовин ви створюєте порожнє обмеження:
nutrMin [i]. nutrMax [i]
де. залишається для заповнення, коли ви заходите в магазин. Крім того, ви встановлюєте цільову функцію, щоб мінімізувати витрати. Обмеження i позначається як діапазон [i], а ціль - як вартість .
Тепер ви заходите в магазин і для кожного продукту ви перевіряєте ціну та поживний вміст. За допомогою цих даних ви створюєте змінну, що представляє суму, яку ви хочете придбати за типом їжі, і встановлюєте її в цільовій функції та обмеженнях. Тобто ви створюєте такий стовпець:
де позначення + і сума означають, що ви додаєте нову змінну j до діапазону цільових витрат та обмежень [i]. Значення в дужках - це лінійний коефіцієнт, який використовується для нової змінної. Цей запис подібний до синтаксису, який фактично використовується у Concert Technology, як продемонстровано у функції buildModelByColumn, у прикладі ilodiet.cpp .
Створення багатовимірних масивів за допомогою IloArray
Усі дані, що визначають проблему, зчитуються з файлу. Поживні речовини на одну їжу зберігаються у двовимірному масиві. Concert Technology не забезпечує заздалегідь визначений клас масиву; однак, використовуючи клас шаблону IloArray, ви можете створити власний двовимірний клас масиву. Цей клас визначається з визначенням типу:
typedef IloArray IloNumArray2;
і готовий до використання, як і будь-який попередньо визначений клас Concert Technology, наприклад IloNumArray, одновимірний клас масиву для числових даних.
- Проблема дієти та ваги - мені 22 роки, і моя вага Practo Consult
- Киньте його та їжте Киньте дієту, керуйте вагою Гіпербола збільшення ваги; Проблема з
- Дієта допомагає найбільшій проблемі дієти та способи її вирішення
- Здорове харчування батьки подають приклад - йогурт у харчуванні
- Дієта чи обман Проблема з секретами харчування