GTx1 у ведучому · olivierzachGTx1 · GitHub
У GitHub проживає понад 50 мільйонів розробників, які спільно працюють над розміщенням та переглядом коду, управління проектами та спільним створенням програмного забезпечення.

GitHub - це місце, де світ розробляє програмне забезпечення
Мільйони розробників та компаній створюють, постачають та підтримують своє програмне забезпечення на GitHub - найбільшій та найдосконалішій платформі розробки у світі.
GTx_6501/Домашнє завдання 7/diet_optimization_part2.py /
Визначень у цьому файлі не знайдено.
- Перейдіть до файлу T
- Перейдіть до рядка L
- Перейдіть до визначення R
- Копіювати шлях
| " " |
| ISYE6501 - Розширене моделювання аналітики |
| Питання 15.2 |
| На відео ми побачили "проблему дієти". |
| (Проблема дієти є однією з перших масштабних проблем оптимізації, яка буде |
| вивчається на практиці. Ще в 30-40-х роках армія хотіла зустрітися з |
| харчові потреби своїх солдатів при мінімізації витрат.) |
| У цьому домашньому завданні ви вирішуєте проблему дієти за допомогою реальних даних. |
| Дані наводяться у файлі diet.xls. |
| 1. Сформулюйте модель оптимізації (лінійна програма) для пошуку |
| найдешевша дієта, яка задовольняє максимум і мінімум щоденного харчування |
| і вирішити це за допомогою PuLP. Введіть свій код і рішення. |
| (Оптимальним рішенням повинна бути дієта з попкорну, що виходить з повітря, яєць-пашот, |
| апельсини, сирий салат айсберг, сирий селера та заморожена брокколі. UGH!) |
| 2. Будь ласка, додайте до своєї моделі такі обмеження |
| (що може зажадати додавання більше змінних) і вирішити нову модель: |
| a. Якщо обрана їжа, то потрібно вибрати мінімум 1/10 порції. |
| (Підказка: тепер вам знадобляться дві змінні для кожної їжі i: |
| чи обраний він, і скільки є частиною раціону. |
| Вам також потрібно буде написати обмеження, щоб зв’язати їх.) |
| b. Багато людей не люблять селеру та заморожену брокколі. |
| Отже, можна вибрати не більше одного, але не обох. |
| c. Щоб отримати повсякденну різноманітність білка, |
| необхідно відібрати щонайменше 3 види м’яса/птиці/риби/яєць. |
| [Якщо щось неоднозначне (наприклад, чи слід розглядати суп із квасолі та бекону |
| Створено пн лип 2 19:29:56 2018 |
| @author: zacholivier |
| Частина 2 |
| " " |
| # завантажити потрібні бібліотеки |
| #! pip встановити пульпу |
| від імпорту целюлози * |
| імпортувати панд як pd |
| # завантажте дані про дієту |
| df = pd. read_excel ( |
| відчинено ( |
| '/ Users/zacholivier/Desktop/GTX/Homework 7/dietSummer2018.xls', |
| 'rb' |
| ), |
| sheet_name = 'Аркуш1' |
| ) |
| # подивіться на дані |
| df. керівник () |
| # чисті дані - беруть перші 64 рядки, не включаючи дані внизу |
| дані = df [0: 64] |
| # перетворити в список "список у списку" |
| дані = дані. значення. tolist () |
| # створити головний словник харчових продуктів |
| харчові продукти = [x [0] для x у даних] |
| калорії = dict ([(x [0], float (x [3])) для x у даних]) |
| холестерин = dict ([(x [0], float (x [4])) для x у даних]) |
| totalFat = dict ([(x [0], float (x [5])) для x у даних]) |
| натрій = dict ([(x [0], float (x [6])) для x у даних]) |
| carbs = dict ([(x [0], float (x [7])) для x у даних]) |
| fiber = dict ([(x [0], float (x [8])) для x у даних]) |
| protien = dict ([(x [0], float (x [9])) для x у даних]) |
| vitaminA = dict ([(x [0], float (x [10])) для x у даних]) |
| vitaminC = dict ([(x [0], float (x [11])) для x у даних]) |
| кальцій = dict ([(x [0], float (x [12])) для x у даних]) |
| залізо = dict ([(x [0], float (x [13])) для x у даних]) |
| # створити список для хвилин і максимумів (всі продукти харчування) |
| амін = [1500, 30, 20, 800, 130, 125, 60, 1000, 400, 700, 10] |
| amax = [2500, 240, 70, 2000, 450, 250, 100, 10000, 5000, 1500, 40] |
| # додати колекцію контрантів для кожного стовпця |
| B = [] |
| для j в діапазоні (0, 11): |
| B. додати (dict ([(x [0], float (x [j + 3])) для x у даних])) |
| # визначити словник витрат |
| вартість = dict ([(x [0], float (x [1])) для x у даних]) |
| # створити структуру проблеми оптимізації - проблема мінімізації |
| problem2 = LpProblem ('PuLPTutorial', LpMinimize) |
| # визначити змінні - безперервні |
| foodVars = LpЗмінна. дикти ("продукти", продукти, 0) |
| # визначити змінні - двійкові |
| selectedVars = LpЗмінна. дикти ("Обраний", продукти харчування, 0, 1, "Бінарний") |
| # словник змінних lp |
| x = LpЗмінна. дикти ("х", продукти харчування, 0) |
| # визначити цільову функцію |
| problem2 + = lpSum ([вартість [f] * foodVars [f] для f у продуктах]) |
| # додайте кількість контрантів, більшу за .1 або меншу за велику, якщо вибрано |
| для f у продуктах харчування: |
| problem2 + = foodVars [f] 10000 * вибранийVars [f] |
| problem2 + = foodVars [f]> = .1 * вибранийVars [f] |
| # додайте обмеження для всіх продуктів |
| для i в діапазоні (0, 11): |
| dot_B_x = целюлоза. lpSum ([B [i] [j] * foodVars [j] для j у продуктах харчування]) |
| умова1 = амін [i] + точка_B_x |
| задача2 + = умова1 |
| для i в діапазоні (0, 11): |
| dot_B_x = целюлоза. lpSum ([B [i] [j] * foodVars [j] для j у продуктах харчування]) |
| умова2 = amax [i]> = + крапка_B_x |
| задача2 + = умова2 |
| # додайте протипоказання, щоб їсти щонайбільше одну з групи продуктів |
| problem2 + = selectedVars ['Заморожена брокколі'] + \ |
| selectedVars ['Селера, сире'] 1, 'Найбільше одна брокколі/селера' |
| # додайте протипоказання, в яких говориться, що нам потрібно їсти як мінімум 1 з групи продуктів |
| problem2 + = selectedVars ['Смажена курка'] + selectedVars ['Яйця-пашот'] + \ |
| selectedVars ['Яєчня'] + selectedVars ['Сосиски, яловичина'] + \ |
| selectedVars ['Kielbasa, Prk'] + selectedVars ['Hamburger W/Toppings'] + \ |
| selectedVars ['Хот-дог, рівнина'] + selectedVars ['Свинина'] + \ |
| selectedVars ['Болонья, Туреччина'] + selectedVars ['Шинка, Нарізаний, Екстралейн'] + \ |
| selectedVars ['Білий тунець у воді'] \ |
| > = 3, "Принаймні три білки" |
| # вирішити проблему оптимізації! |
| проблема2. вирішити () |
| # роздруковуйте продукти оптимальної дієти |
| print ('Рішення для оптимізації:') |
| для var у задачі2. змінні (): |
| якщо var. varValue> 0: |
| якщо str (var). find ('Обраний'): |
| print (str (var. varValue) + "одиниці" + str (var)) |
| # роздрукувати витрати на оптимальну дієту |
| print ("Загальна вартість харчування = $%. 2f"% значення (проблема2. мета)) |
- Копіювати рядки
- Копіювати постійне посилання
- Переглянути git вину
- Довідка в новому випуску
Зараз ви не можете виконати цю дію.
Ви ввійшли з іншої вкладки чи вікна. Оновіть, щоб оновити сеанс. Ви вийшли з іншої вкладки чи вікна. Оновіть, щоб оновити сеанс.