Un agregator de bloguri Julia Language

Doresc să fac o postare pe blogul JuMP de ceva timp.
JuMP este o bibliotecă de programare matematică Julia.
Este într-o măsură un DSL pentru descrierea problemelor de optimizare constrânse.

optimizarea

Cu ceva timp în urmă, a venit la mine un prieten care căuta să obțină un „amator”,
ceea ce voia să facă, era să-și maximizeze aportul de proteine, menținând în același timp o dietă în general sănătoasă.
Voia să știe ce alimente ar trebui să mănânce.
Merită o dietă.

Dacă cineva se gândește la asta,
aceasta este de fapt o problemă de programare liniară - optimizare liniară constrânsă.
Variabilele sunt cantitatea din fiecare aliment de mâncat,
iar contraanturile sunt în jur, asigurându-vă că aveți suficient (dar nu prea mult) din toate vitaminele și mineralele esențiale.

Notă: este un pic distractiv, în niciun caz nu recomand utilizarea dietelor pe care le generează codul pe care urmează să-l prezint.
Nu sunt în niciun fel calificat să dau sfaturi dietetice sau medicale etc.
Dar acesta este un mod minunat de a juca cu optimizare.

Asadar, haideti sa începem:
Oamenii au nevoie de substanțe nutritive, mâncarea conține substanțe nutritive.
Am putea merge pe calea consumului de supă de nutrienți în mod direct, dar este considerat neobișnuit.
Oamenii sunt, de asemenea, îndoieli cu privire la capacitatea de a oferi o dietă completă datorită științelor cunoștințe incomplete cu privire la exact ce urme de minerale am putea avea nevoie.

Aceeași critică se întâmplă și aici.

Intrare:

Vom încărca JuMP.
Folosim GLPK ca soluție.
De fapt, avem multe opțiuni pentru rezolvator
Ultima dată când am verificat (care a fost ceva timp în urmă), GLPK a fost singurul rezolvator gratuit care a acceptat apeluri de apel cu programare Mixt Integer.
Nu cerem acest lucru, deci alegerile noastre sunt mult mai largi.
Găsesc că rezolvatorul comercial Gurobi este ordinele de mărime mai rapide decât GLPK (pentru probleme MIP); și sunt destul de drăguți pentru a oferi licență academiei, dar nu am instalat pe acest computer, așa că GLPK va face.

Deci, atunci când definim o dietă, scopul este alegerea de a mânca anumite cantități de alimente diferite,
astfel încât, atunci când sunt totalizate, toate nevoile tale de nutrienți să fie luate în considerare.

Așadar, primul lucru pe care trebuie să îl cunoaștem este care sunt conținutul de nutrienți al diverselor alimente pe care îl putem cumpăra.
Un tabel care a fost descompus a fost produs de Food Standards Australia.
Cineva ar putea dori să încerce să funcționeze
Baze de date USDA privind compoziția alimentelor,
ceea ce este probabil un pic mai cuprinzător.

Definim o dependență de date a acestui program de acea bază de date folosind DataDeps.jl:

Intrare:

Intrare:

Ieșire:

Dacă vorbiți, aruncați o privire la masa respectivă ar trebui să devină rapid evident că totul este pentru 100g din produsele alimentare respective.
Așadar, utilizarea bazelor de date ne permite să căutăm o coloană:

Intrare:

Ieșire:

Dacă aș vrea să știu câtă proteină a fost în 100g de extract de carne de vită (primul aliment din listă).