一度の大学生活にNo.1の選択を与えるサイト

【Pythonでできること】風邪に効く献立を考えてみた!

プログラミング言語・Pythonを使って風邪に効く献立を考えました。
プログラミングってむずかしそう
なんの役に立つのかわからない
この記事を読めば、そんなもやもやもスッキリ晴れて、日常生活に役立つプログラミングの姿を知ることができます!

体調管理のために手洗いうがい、早く寝るといった方法もありますが、毎日の食事でも対策をしたいですよね。

今日の晩御飯の献立に、風邪対策・回復に役に立つどんなメニューを作ろうかなと考え、たどり着いた栄養素は

ビタミンCと共に風邪対策に役に立つとされるビタミンA

ビタミンAの供給源になるのは、レバーや卵などに代表される動物性食品と人参やトマトなどの緑黄色野菜を中心とする植物性食品です。

このビタミンAを摂取できる献立の中で、最も低カロリーかつ短時間で作れるレシピはどれなのか検証してみました。

味の素のレシピサイトから7つの献立を選んでみました。

最適化問題を解くプログラム(プログラミング言語・Pythonで実装)

忙しい毎日に正月太りも考慮して献立を考えるとします。

例:調理時間は15分以下で250kcal以下の、ビタミンAを最も多く含む献立を探す

import numpy as np, pandas as pd
from pulp import *
menu = ['かぼちゃのひき肉あんかけ', 'パプリカのポテトグラタン', '緑茶チャーハン', 'じゃがいものガレット', 'ピリ辛トマト鍋', 'かぶの豚そぼろ', '緑茶のつくねバーグ']
n = len(menu)
time =[15, 20, 10, 15, 15, 10, 15]
calorie =[308, 236, 520, 196, 249, 232, 199]
VA =[338, 160, 114, 126, 137, 101, 93]
a = pd.DataFrame({'料理名': menu, '時間': time, 'カロリー': calorie,'ビタミンA': VA})
print(a)
m = LpProblem(sense=LpMaximize) # 最大化問題
a['x'] = [LpVariable('x%d'%i, cat=LpBinary) for i in range(n)]
m += lpDot(VA, a.x) # ビタミンAを最大化
m += lpDot(time, a.x) <= 15 #調理時間は15分以下
m += lpDot(calorie, a.x) <= 250 #カロリーは250kcal以下
m.solve()

if m.status == 1: # Optimal
   a['val'] = a.x.apply(lambda v: value(v)) # 結果
print(a[a.val == 1].料理名)

上記のプログラムを実行した結果、この制約下では ピリ辛トマト鍋が7つの候補の中で最も最適な献立だということがわかりました。

park.ajinomoto.co.jp

ちなみに、データの元のサイトでビタミンAの含有量10,698μgというぶっちぎりの数字を叩き出したレシピは、「鶏レバーとかぼちゃの煮物干しぶどう風味」でした

最適化問題を解くにあたってはこの料理を含めると、プログラムで計算する前に答えがわかってしまう可能性が高かったので、データに含めませんでした。

park.ajinomoto.co.jp

「最適化」は話題の人工知能(AI)とも深い関係のある分野です。

日常生活に応用できると、親近感を持ってプログラミングや人工知能など、テクノロジーの世界を知ることができるのではないでしょうか。

 忙しい毎日でも、ビタミンAを多く含む食事で元気に冬を乗り越えましょう!

データ引用元

風邪 食事・献立・レシピ | 風邪特集【AJINOMOTO PARK】

 参考にさせていただいたコード

献立を組合せ最適化で考える – Qiita