みなさん,こんにちは。
シンノユウキ(shinno1993)です。
前回まで,Excelのソルバー機能を使って線形計画問題や整数計画問題を解いてきました。
今回はもう少し実践的な内容として,現在の食事からできるだけ乖離せずに栄養素摂取基準を満たす食事を模索する食事最適化法をExcelのソルバー機能を使って実行する方法を紹介したいと思います。
では行きましょう!
概要
最適な食事を導き出すための方法はたくさんあるかと思いますが,今回は現在の食事からできるだけ離れずに栄養素基準値を満たすための食事最適化法について紹介します。
具体的な方法は,下記記事を参考にしていますので,あわせてご覧ください:
食品成分表として,平成29年 国民健康・栄養調査の食品群別栄養素摂取量から独自に作成した荷重平均栄養成分表を,実際の摂取量として,同調査の食品群別摂取量の平均値を利用しています。国民健康・栄養調査の結果から荷重平均栄養成分表を作成する方法については下記を参照してください:
なお,今回使っている実際のExcelシートは下記から利用できますので,ぜひDLしてみてください:
シートの構成
成分表
国民健康・栄養調査の結果から作成した荷重平均栄養成分表です。この成分表の値を参照し,栄養素摂取量を算出します。
栄養素摂取量
先の成分表と,操作シートにある食品群別摂取量(変数セル)との値をかけ合わせたものを表示しています。最下行には集計行も設けています。
操作シート
制約条件と変数セル,目的関数を入力するシートです。詳細は後ほど紹介していきます。
食事最適化法について
制約条件
制約条件としては,国民健康栄養調査で栄養素摂取量が示されている栄養素について,栄養素等表示基準値を満たすように基準値を設定しています。さらに,栄養素の基準値に加え,穀類エネルギー比率および動物性たんぱく質比率も条件として加えてみました。上記をまとめると以下のようになります:
- エネルギー = 2200
- たんぱく質 >= 81
- 脂質 >= 62
- 飽和脂肪酸 <= 16
- n-3系脂肪酸 >= 2
- n-6系脂肪酸 >= 9
- 炭水化物 >= 320
- 食物繊維総量 >= 19
- カルシウム >= 680
- 鉄 >= 6.8
- 銅 >= 0.9
- マグネシウム >= 320
- リン >= 900
- ナイアシン >= 13
- パントテン酸 >= 4.8
- ビタミンA >= 770
- ビタミンB1 >= 1.2
- ビタミンB2 >= 1.4
- 亜鉛 >= 8.8
- カリウム >= 2800
- ビタミンB6 >= 1.3
- ビタミンB12 >= 2.4
- ビタミンC >= 100
- ビタミンD >= 5.5
- ビタミンE >= 6.3
- ビタミンK >= 150
- 葉酸 >= 240
- 食塩相当量 <= 7.5
- 穀類E比率 = 0.55
- 動物性たんぱく質比 = 0.45
変数セル
- 最適:変数セルとして設定する箇所です。ここの摂取量で栄養素摂取量を計算しています。
- 観察:参照したい実際の摂取量を入力しています。今回は国民健康栄養調査の平均値を入力しています。
目的関数
観察値の方が大きければPに,小さければNに値が入ります。
これらの合計が最も小さくなることを目指します。
実際に使ってみる
ExcelファイルをDLし,基準値などシートでソルバーを実行します。すでにパラメーターの設定は済ませていますので,すぐに実行できます。
下記のように,各種制限条件を満たしながら,実際の摂取量と乖離しないような最適な摂取量が算出されます。
改善点等
今回の制限条件では,食品群の摂取量について下限値や上限値を設けませんでした。そのため,淡色野菜や緑黄色野菜等のエネルギーが低い食品の摂取量が通常摂取する量から著しく離れてしまう結果となりました。可能であれば,実際の食事調査の結果などを加味しつつ,下限や上限を設定するのが望ましいかと思います。
まとめ
今回は,Excelのソルバーを利用した食事最適化法について試してみました。
今回設定した制限条件では,とても実用に耐えるようなものではありませんでした。
しかし,食品群別摂取量の下限と上限を設けることで,改善できる可能性もあると思います。これらを調整できる方はぜひ試してみてください。
連載目次
- Excelに「ソルバー」アドインを追加しよう!
- Excelでソルバーを使って線形計画問題(栄養問題)を解く
- Excelでソルバーを使って整数計画問題(献立問題)を解く
- Excelでソルバーを使って食事最適化法を試してみる現在のページ
- ExcelのソルバーをVBAで自動化する方法