GitHub е дом на над 50 милиона разработчици, които работят заедно за хостване и преглед на код, управление на проекти и изграждане на софтуер заедно.

olivierzachgtx1

GitHub е мястото, където светът създава софтуер

Милиони разработчици и компании изграждат, доставят и поддържат своя софтуер на GitHub - най-голямата и най-модерна платформа за развитие в света.

GTx_6501/Домашна работа 7/diet_optimization_part2.py /

Няма дефиниции в този файл.

  • Отидете на файл T
  • Отидете на ред L
  • Отидете на определение R
  • Копирайте пътя
"
ISYE6501 - Разширено моделиране на Google Анализ
Въпрос 15.2
Във видеоклиповете видяхме „проблема с диетата“.
(Проблемът с диетата е един от първите мащабни проблеми с оптимизацията, които ще бъдат
учи на практика. Още през 30-те и 40-те армията искаше да се срещне с
хранителни нужди на своите войници, като същевременно минимизират разходите.)
В тази домашна работа можете да решите диетичен проблем с реални данни.
Данните са дадени във файла diet.xls.
1. Формулирайте оптимизационен модел (линейна програма), за да намерите
най-евтината диета, която задоволява максималното и минималното ежедневно хранене
ограничения и го разрешете с помощта на PuLP. Включете кода и решението.
(Оптималното решение трябва да бъде диета от пуканки с въздух, пукани яйца,
портокали, сурова маруля айсберг, сурова целина и замразени броколи. UGH!)
2. Моля, добавете към вашия модел следните ограничения
(което може да изисква добавяне на повече променливи) и решаване на новия модел:
а. Ако е избрана храна, тогава трябва да бъде избрана минимум 1/10 порция.
(Съвет: сега ще ви трябват две променливи за всяка храна i:
дали е избран и колко е част от диетата.
Също така ще трябва да напишете ограничение, за да ги свържете.)
б. Много хора не харесват целина и замразени броколи.
Така че може да бъде избран най-много един, но не и двете.
° С. За да получите ежедневно разнообразие от протеини,
трябва да бъдат избрани поне 3 вида месо/птици/риба/яйца.
[Ако нещо е двусмислено (например, трябва ли да се обмисли супа от боб и бекон
Създадено на понеделник 2 юли 19:29:56 2018
@author: zacholivier
Част 2
"
# заредете необходимите библиотеки
#! pip инсталирайте целулоза
от внос на целулоза *
импортирайте панди като pd
# заредете данните за диетата
df = pd. read_excel (
отворен (
'/ Users/zacholivier/Desktop/GTX/Домашна работа 7/dietSummer2018.xls',
'rb'
),
sheet_name = 'Sheet1'
)
# вижте данните
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 в данни])
въглехидрати = 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):
Б. добавяне (dict ([(x [0], float (x [j + 3])) за x в данни]))
# дефинирайте речника на разходите
разходи = dict ([(x [0], float (x [1])) за x в данни])
# създайте рамката на проблема за оптимизация - проблем за минимизиране
problem2 = LpProblem ('PuLPTutorial', LpMinimize)
# дефинирайте променливите - непрекъснато
foodVars = LpVariable. диктовки ("храни", храни, 0)
# дефинирайте променливите - двоични
selectedVars = LpVariable. диктовки („Избрано“, храни, 0, 1, „Двоично“)
# речник на lp променливи
x = Lp Променлива. диктовки ("x", храни, 0)
# дефинирайте целевата функция
problem2 + = lpSum ([цена [f] * foodVars [f] за f в храни])
# добавете количество контранти, по-голямо от .1 или по-малко от голямо количество - ако е избрано
за f в храните:
problem2 + = foodVars [f] 10000 * избранVars [f]
problem2 + = foodVars [f]> = .1 * избранVars [f]
# добавете ограничения за всички храни
за i в обхват (0, 11):
точка_B_x = целулоза. lpSum ([B [i] [j] * foodVars [j] за j в храни])
условие1 = амин [i] + точка_B_x
проблем2 + = условие1
за i в обхват (0, 11):
точка_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 ['Frankfurter, Beef'] + \
selectedVars ['Kielbasa, Prk'] + selectedVars ['Hamburger W/Toppings'] + \
selectedVars ['Hotdog, Plain'] + selectedVars ['Pork'] + \
selectedVars ['Болоня, Турция'] + selectedVars ['Шунка, нарязани, Екстралеан'] + \
selectedVars ['Бял тон във вода'] \
> = 3, „Най-малко три протеина“
# решаване на проблема с оптимизацията!
проблем2. решаване ()
# отпечатайте храните от оптималната диета
print ('Решение за оптимизация:')
за var в problem2. променливи ():
ако вар. varValue> 0:
ако str (var). find ('Избран'):
print (str (var. varValue) + "единици от" + str (var))
# отпечатайте разходите за оптималната диета
print ("Общи разходи за храна = $%. 2f"% стойност (проблем2. цел))

  • Копиране на редове
  • Копирайте постоянната връзка
  • Вижте git вината
  • Справка в нов брой

Понастоящем не можете да извършите това действие.

Влезли сте с друг раздел или прозорец. Презаредете, за да опресните сесията си. Излязохте от друг раздел или прозорец. Презаредете, за да опресните сесията си.