GTx1 a mesternél · olivierzachGTx1 · GitHub

A GitHub több mint 50 millió fejlesztőnek ad otthont, amelyek együttesen működnek együtt kódok befogadásában és felülvizsgálatában, projektek kezelésében és szoftverek építésében.

gtx1

A GitHub az, ahol a világ szoftvereket épít

Fejlesztők és vállalatok milliói építik, szállítják és tartják karban szoftverüket a GitHubon - a világ legnagyobb és legfejlettebb fejlesztői platformján.

GTx_6501/Házi feladat 7/diet_optimization_part2.py /

Nem található definíció ebben a fájlban.

  • Ugrás a T fájlra
  • Menj az L sorra
  • Menj az R definícióhoz
  • Útvonal másolása
" "
ISYE6501 - Haladó elemzési modellezés
15.2. Kérdés
A videókban láttuk a „diétás problémát”.
(A diétás probléma az egyik első nagyszabású optimalizálási probléma
a gyakorlatban tanult. Még az 1930-as és 40-es években a hadsereg találkozni akart a
a katonák táplálkozási szükségletei a költségek minimalizálása mellett.)
Ebben a házi feladatban valós adatokkal oldhatja meg a diéta problémáját.
Az adatokat a diet.xls fájl tartalmazza.
1. Készítsen egy optimalizálási modellt (egy lineáris programot) a
legolcsóbb étrend, amely kielégíti a napi maximális és minimális táplálkozást
korlátokat, és oldja meg a PuLP használatával. Írja be a kódot és a megoldást.
(Az optimális megoldás a levegőben pattogatott pattogatott kukorica, buggyantott tojás étrendje lehet,
narancs, nyers jégsaláta, nyers zeller és fagyasztott brokkoli. UGH!)
2. Kérjük, adja hozzá modelljéhez a következő korlátozásokat
(ami további változók hozzáadását igényelheti), és oldja meg az új modellt:
a. Ha ételt választanak, akkor legalább 1/10 adagot kell választani.
(Tipp: most két változóra lesz szükséged minden egyes ételhez:
hogy ezt választják-e, és mennyi része az étrendnek.
Az összekapcsoláshoz meg kell írnia egy korlátozást is.)
b. Sokan nem szeretik a zellert és a fagyasztott brokkolit.
Tehát legfeljebb egy választható ki, de nem mindkettő.
c. A fehérje mindennapos változatosságához,
legalább 3 féle húst/baromfit/halat/tojást kell kiválasztani.
[Ha valami kétértelmű (pl. Figyelembe kell venni a bab- és szalonnalevest?
Létrehozva: 2018. július 2., hétfő 19:29:56
@author: zacholivier
2. rész
" "
# töltse be a szükséges könyvtárakat
#! pip install cellulóz
cellulózimportból *
import pandák, mint pd
# töltse be az étrend adatait
df = pd. read_excel (
nyisd ki (
'/ Felhasználók/zacholivier/Asztal/GTX/Házi feladat 7/dietSummer2018.xls',
„rb”
),
sheet_name = 'Sheet1'
)
# nézze meg az adatokat
df. fej ()
# tiszta adat - vegye az első 64 sort az alsó adatok nélkül
adatok = df [0: 64]
# konvertálás listára "lista a listán belül"
adatok = adatok. értékek. tolist ()
# fő ételek szótár létrehozása
ételek = [x [0] x adatokhoz]
kalória = dict ([(x [0], float (x [3])) x-re az adatokban])
koleszterin = dict ([(x [0], float (x [4])) x-re az adatokban])
totalFat = dict ([(x [0], float (x [5])) x adatokhoz])
nátrium = dict ([(x [0], float (x [6])) x adatokhoz])
szénhidrát = dict ([(x [0], float (x [7])) x adatokhoz])
rost = dict ([(x [0], float (x [8])) x-re az adatokban])
protien = dict ([(x [0], float (x [9])) x adatokhoz])
A-vitamin = dict ([(x [0], float (x [10])) x-re az adatokban])
C-vitamin = dict ([(x [0], float (x [11])) x-re az adatokban])
kalcium = dict ([(x [0], float (x [12])) x adatokhoz])
vas = dict ([(x [0], float (x [13])) x adatokhoz])
# lista létrehozása a percekhez és a maximumokhoz (minden étel)
amin = [1500, 30, 20, 800, 130, 125, 60, 1000, 400, 700, 10]
amax = [2500, 240, 70, 2000, 450, 250, 100, 10000, 5000, 1500, 40]
# hozzáfűzi az összes oszlopra vonatkozó korlátozások gyűjteményét
B = []
j esetén a (0, 11) tartományban:
B. függelék (dict ([(x [0], float (x [j + 3])) x adatokhoz]))
# határozza meg a költségszótárat
költség = dict ([(x [0], float (x [1])) x adatokhoz])
# hozza létre az optimalizálási probléma keretrendszerét - minimalizálási probléma
problem2 = LpProblem ('PuLPTutorial', LpMinimize)
# definiálja a változókat - folytonos
foodVars = LpVariable. dict ("ételek", ételek, 0)
# definiálja a bináris változókat
selectedVars = LpVariable. dikciók ("Kiválasztott", ételek, 0, 1, "Bináris")
# lp változók szótára
x = LpVáltozó. dikciók ("x", ételek, 0)
# definiálja a célfüggvényt
probléma2 + = lpSum ([költség [f] * foodVars [f] az élelmiszerekben szereplő f)]
# add a korlátozások összege nagyobb, mint 0,1 vagy kisebb, mint a nagy összeg - ha kiválasztják
f élelmiszerekben:
probléma2 + = foodVars [f] 10000 * választottVars [f]
probléma2 + = foodVars [f]> = .1 * választottVars [f]
# korlátozások hozzáadása az összes ételhez
i-re a (0, 11) tartományban:
dot_B_x = pép. lpSum ([B [i] [j] * foodVars [j] az j ételekben]]
feltétel1 = amin [i] + pont_B_x
probléma2 + = feltétel1
i-re a (0, 11) tartományban:
dot_B_x = pép. lpSum ([B [i] [j] * foodVars [j] az j ételekben]]
feltétel2 = amax [i]> = + pont_B_x
probléma2 + = feltétel2
# adjon hozzá olyan korlátozásokat, amelyek legfeljebb egy ételcsoport egyikét fogyasztják
probléma2 + = választott változatok ['Fagyasztott brokkoli'] + \
selectedVars ['Zeller, Nyers'] 1, 'Legfeljebb egy brokkoli/Zeller'
# adjon hozzá olyan korlátozásokat, amelyek szerint legalább 1 ételt kell megennünk az ételcsoportból
probléma2 + = selectedVars ['Sült csirke'] + selectedVars ['Buggyantott tojás'] + \
selectedVars ['Rántották'] + selectedVars ['Frankfurter, marhahús'] + \
selectedVars ['Kielbasa, Prk'] + selectedVars ['Hamburger W/Toppings'] + \
selectedVars ['Hotdog, Plain'] + selectedVars ['Pork'] + \
selectedVars ['Bologna, Turkey'] + selectedVars ['Sonka, szeletelt, Extralean'] + \
selectedVars ['Fehér tonhal a vízben'] \
> = 3, "Legalább három fehérje"
# megoldja az optimalizálási problémát!
probléma2. megoldani ()
# nyomtassa ki az optimális étrendet tartalmazó ételeket
print ('Optimalizálási megoldás:')
a var problémára2. változók ():
ha var. varValue> 0:
ha str (var). find ('Kiválasztott'):
print (str (var. varValue) + "egységek" + str (var))
# nyomtassa ki az optimális étrend költségeit
print ("Az élelmiszer teljes költsége = $%. 2f"% érték (2. probléma. cél))

  • Sorok másolása
  • Másolja a permalinket
  • Tekintse meg a hibát
  • Hivatkozás az új számban

Jelenleg nem hajthatja végre ezt a műveletet.

Egy másik füllel vagy ablakkal jelentkezett be. Töltse be újra a munkamenet frissítéséhez. Kijelentkezett egy másik fülön vagy ablakban. Töltse be újra a munkamenet frissítéséhez.