栄養の取り方はデータが教えてくれる
- 2. 2016年9月4日 夏の自由研究発表会2016 Matz 2
#
Agenda
●
栄養について
●
最適化について
– 手法:線形計画法
– Solver:GLPK (GNU Linear Programming Kit)
– 実行ソフト:Gusek
– データ形式:MathProg
– 計算結果
●
参考サイト
- 5. 2016年9月4日 夏の自由研究発表会2016 Matz 5
#
栄養をバランスよく取るには?
●
農林水産省が「食事バランスガイド」を策定
栄養について
「食事バランスガイド」(http://www.maff.go.jp/j/balance_guide/)
ざっくりしすぎていて栄養バランスがいいのかきになる。
- 6. 2016年9月4日 夏の自由研究発表会2016 Matz 6
#
どの食品にどんな栄養素が含まれるのか?
●
文部科学省が「日本食品標準成分表」を作成
●
さらに、データベース化して提供
栄養について
「食品成分データベース」(http://fooddb.mext.go.jp)
食品は検索できるが、栄養バラ
ンスを満たすかどうかについて
の情報は得られない
- 8. 2016年9月4日 夏の自由研究発表会2016 Matz 8
#
栄養バランスのとれた食事を考えてみよう
とすると・・・難しかった
●
栄養素iについて、食品jに含まれる量をnij、摂取目
標値をai
食品jの摂取量をxjとすると、栄養素iの摂取量は
Σj nij * xj >=ai
これがすべてのiについて成り立つ必要がある。
●
さらに、最安で組み合わせたいので、食品jの価格
をpjとして、上記を満たす組み合わせのうち、
Σj pj * xj を最小化するものを探す
最適化について
- 9. 2016年9月4日 夏の自由研究発表会2016 Matz 9
#
連立不等式の最適化=線形計画法
●
連立不等式の解放は最適組み合わせを探す、
繰り返し計算となる
●
変数が多くなるほど、計算時間がかかる
●
整数に限定するとさらに時間がかかる
→手計算では無理なのでソフトを使う
最適化について
- 10. 2016年9月4日 夏の自由研究発表会2016 Matz 10
#
線形計画問題のソルバー選定
最適化について
1 thr CBC CPLEX GUROBI SCIPC SCIPS XPRESS MATLAB MIPCL
-------------------------------------------------------------------------
unscal 1639 86 74 418 517 93 3416 870
scaled 22 1.16 1 5.65 6.99 1.25 46.2 11.8
solved 53 86 86 75 70 86 26 65
-------------------------------------------------------------------------
●
ソルバーで代表的なものはエクセルのもの
→変数の少ないシンプルなものに対応
●
線形計画問題専用のソルバーも多数存在
http://plato.asu.edu/ftp/milpc.html
Mixed Integer Linear Programming Benchmark (MIPLIB2010)
↓有料 ↓有料 ↓有料 ↓有料 ↓有料 ↓有料 ↓有料 ↓有料
●
比較に登らないほど性能は劣るようだが、無料の
Solverとして広く知られているGLPKを選定
- 11. 2016年9月4日 夏の自由研究発表会2016 Matz 11
#
ソルバー(GLPK)を使うための環境
●
ソフト:GUSEK (for Windows) ←無料
もともとGLPKが使えるということで選定
(GLPKR用やPythonもあります)
●
Macで使うために
Wineをインストール ←無料
→Windowsのexeファイルが使える
最適化について
- 12. 2016年9月4日 夏の自由研究発表会2016 Matz 12
#
問題を作る〜MathProg
●
GLPKで問題を解くためには
問題を定義するファイルを準備する必要がある
●
読み込めるファイル形式はMPS_fixed, MPS_free,
CPLEX_LP, MathProg
●
参考PDFを見つけたので今回はMathProgという言
語を利用
→ 数式をプログラムで定義
→ csv ファイルを読み込み
最適化について
- 13. 2016年9月4日 夏の自由研究発表会2016 Matz 13
#
問題を作る〜MathProg
●
厚生労働省の「日本人の食事摂取基準」
●
文部科学省の「日本食品標準成分表」
●
スーパーの商品価格
をテーブル化
最適化について
NUTRIENT INTAKE_MAX INTAKE_MIN
Energy 2530 2070
Proteins 127 60
Fats 84 46
Saturated_fatty_acid 0.07 0
n-6_fatty_acid 20 10
n-3_fatty_acid 4.2 2.1
データテーブ
ルの例
- 14. 2016年9月4日 夏の自由研究発表会2016 Matz 14
#
問題を作る〜MathProg
食品には下記を選定(2013年の主食)
●
納豆
●
豆腐
●
米
●
低脂肪牛乳
●
野菜ジュース
●
卵
最適化について
●
レトルトカレー
●
そば
●
コーヒー
●
プロテインパウダー
●
フルグラ
●
レモン
- 15. 2016年9月4日 夏の自由研究発表会2016 Matz 15
#
結果
Preprocessing...
PROBLEM HAS NO PRIMAL FEASIBLE
SOLUTION
Time used: 0.0 secs
Memory used: 0.4 Mb (449365 bytes)
Writing MIP solution to
'NutrientOptmizedMeal.out'...
>Exit code: 0 Time: 0.362
●
解けませんでした→もっと品目を増やさねば。。。
最適化について
- 16. 2016年9月4日 夏の自由研究発表会2016 Matz 16
#
(参考)世の中の商品例
「ソイレント(英: soylent)は、Rosa
Labs, LLC. が販売している栄養機能食品の
飲み物。生存に必要な栄養素がすべて含ま
れ、従来の食事が不要となるという[1][2]。
味はほんのり甘く、この粉末を水などに溶
かして飲む[1][2]。」
(Wikipediaより抜粋)
https://ja.wikipedia.org/wiki/ソイレント
ソイレント(Soylent)
- 17. 2016年9月4日 夏の自由研究発表会2016 Matz 17
#
参考サイト
https://www.ibm.com/developerworks/jp/linux/library/l-glpk1/
http://www.campus.ouj.ac.jp/~maps13/software/GLPK.html
’問題解決の数理( 13)
GNU Linear Programming KitGNU Linear Programming Kit 第第 11 回回:: 線形最適化の紹介線形最適化の紹介
https://www3.nd.edu/~jeff/mathprog/glpk-4.47/doc/gmpl.pdf
Modeling Language GNU
MathProghttp://cs.pwr.edu.pl/zielinski/lectures/om_en/glpk/gmpl.html
MathProg Manual
GLPKの簡易マニュアル
http://pse.web.nitech.ac.jp/doc/easymanual.pdf