LoginSignup
64
29

ケンタッキーで一日分の栄養を取れる組み合わせを計算したら衝撃的な結果が!

Posted at

ケンタッキーで一日分の栄養を取りたい!

ケンタッキーフライドチキン(以下KFC)はマクドナルド、モスバーガーに次いで日本で店舗数の多いファーストチェーン店です。マクドナルドが2,909店、モスバーガーが1,293店に対して、KFCは1,131店とモスバーガーに肉薄している巨大チェーン店です。

揚げ物中心のKFCで一日分の栄養を取ることはできるのでしょうか?マクドナルドの記事と同様に、KFCで一日に必要な栄養素を取るための商品の組み合わせを調べてみます。さて、どんな結果が出るでしょうか。

式を立てる

KFCは全商品の栄養素を公開しているので、それを利用します。マクドナルドの記事と同様にドリンク類は食べ物ではないので対象外とします。

1.jpg

日本人が一日必要な栄養素も以下の通りマクドナルドの記事と同条件にします。

栄養素 下限 上限
カロリー (kcal) 2,700
たんぱく質 (g) 88 135
脂質 (g) 75 90
炭水化物 (g) 337.5 438.75
ナトリウム (mg) 2,300
カリウム (mg) 3,000
カルシウム (mg) 738
リン (mg) 600
鉄 (mg) 6.3
レチノール活性当量 (μg) 650
ビタミンB1 (mg) 1.4
ビタミンB2 (mg) 1.6
ナイアシン (mg) 15
ビタミンC (mg) 100
コレステロール (mg) 0
食物繊維 (g) 21
食塩相当量 (g) 6.0

そして目的関数も同様に、一日必要な栄養素を満たす最もカロリーの低い商品の組み合わせとします。金に糸目もつけません。健康第一!

マクドナルドの記事と同様に、PuLPというPythonで無料で利用できるソルバーがあるので、これで計算します。

kenta1.py
import pandas as pd
import pulp

nutrition_df = pd.read_csv('nutrition.csv')
limit_lower_df = pd.read_csv('limit_lower.csv')
limit_higher_df = pd.read_csv('limit_higher.csv')
of_coeff_df = pd.read_csv('OFcoeff.csv')

Prob = of_coeff_df['p'].tolist()
Nut_lowerlimt = limit_lower_df['n'].tolist()
Nut_higherlimt = limit_higher_df['n'].tolist()

limit_lower = {row.n:row.limit for row in limit_lower_df.itertuples()}
limit_higher = {row.n:row.limit for row in limit_higher_df.itertuples()}
of_coeff = {row.p:row.coeff for row in of_coeff_df.itertuples()}
nutrition = {(row.p,row.n):row.require for row in nutrition_df.itertuples()}

problem = pulp.LpProblem('kentucky1', pulp.LpMinimize)

x = pulp.LpVariable.dicts('x', Prob, lowBound = 0, cat='Integer')

problem += pulp.lpSum([of_coeff[p] * x[p] for p in Prob])

for n in Nut_lowerlimt:
    problem += pulp.lpSum([nutrition[p,n] * x[p] for p in Prob]) >= limit_lower[n]
for n in Nut_higherlimt:
    problem += pulp.lpSum([nutrition[p,n] * x[p] for p in Prob]) <= limit_higher[n]

status = problem.solve()
print('Status:', pulp.LpStatus[status])

for p in Prob:
    if x[p].value()>0:
        print(p, x[p].value())

print('objective value=', problem.objective.value())

結果

さて計算開始!結果は・・・

2_2.jpg

なんと実行不可能となりました!先ほどの表で示した「日本人が一日必要な栄養素」の制約内では解がないことになります。そっかー・・・・。マクドナルドの商品数が全95商品あるのに対し、KFCは25商品とバリエーションが少ないので、うまくやりくりできなかったのでしょう。

でもこれで終わりではつまらいないので、参考までに制約を少し緩和してみます。

制約を緩和する

揚げ物が中心の飲食店ですので、脂質と食塩相当量の上限を外し、以下の通りにします。

栄養素 下限 上限
カロリー (kcal) 2,700
たんぱく質 (g) 88 135
脂質 (g) 75 なし
炭水化物 (g) 337.5 438.75
ナトリウム (mg) 2,300
カリウム (mg) 3,000
カルシウム (mg) 738
リン (mg) 600
鉄 (mg) 6.3
レチノール活性当量 (μg) 650
ビタミンB1 (mg) 1.4
ビタミンB2 (mg) 1.6
ナイアシン (mg) 15
ビタミンC (mg) 100
コレステロール (mg) 0
食物繊維 (g) 21
食塩相当量 (g) なし

そして目的関数は、最も塩分の低い商品の組み合わせとします。

結果2

再び計算開始!
3.jpg
最適解が見つかったとのこと!よかった!

コンピューターがはじき出した商品の種類は6種類。マクドナルドの時のように衝撃の組み合わせとなるでしょうか!?見ていきましょう。

オリジナルチキン(3個)

お、ちゃんとチキンを食べさせてくれるのですね。それも3個。

1original_chiken.jpg

カーネルクリスピー(2個)

これも定番メニューを食べさせてくれるそうです。

2kernel_crispy.jpg

フライドポテト L(2個)

ポテトなんて食べちゃって大丈夫なんでしょうか?しかもL。

3potato_l.jpg

コールスローS(1個)

野菜らしきものが出てきました。

5coleslawS.jpg

コールスローM(11個)

11個も!でもまあそうなりますよね。

4coleslawM.jpg

そして最後は・・・

ハニーメイプル(16個)

6honey_maple.jpg

出た、おなじみの調味料をちゅうちゅうするやつ!wwwやっぱり来ましたね。これで炭水化物が基準値内になるように摂っているようです。ちなみに1つ30円で注文できるそうです。

この組み合わせで摂取できる栄養素は以下のようになります。

栄養素 摂取量
エネルギー (kcal) 3,744
たんぱく質 (g) 92.3
脂質 (g) 201.1
炭水化物 (g) 390.1
灰分 (g) 33.8
ナトリウム (mg) 8,372
カリウム (mg) 4,920
カルシウム (mg) 742
リン (mg) 1,484
鉄 (mg) 8.6
レチ ノール (μg) 221
β-カロ テン当量 (μg) 5,253
レチノール活性当量 (μg) 663
B1 (mg) 1.42
B2 (mg) 2
ナイアシン (mg) 34.6
C(mg) 507
食物繊維総量 (g) 33.5
食塩 相当量 (g) 21

カロリー、脂質、塩分を取りすぎですね。でもKFCのメニューだけという縛りではこれが制約条件を満たす最も小さい目的関数となるので、受け入れてください!

ちなみに塩分の上限だけはずすのと、脂質の上限だけはずすのも試しましたが、やはり実行不可能になりました。

KFCで一日分の栄養をちょうど良く取る組み合わせは存在しない!

いかがでしたか?フライドチキン屋さんならではの限界が表出したような気がします。もともと無理があるのは予想していましたが、マクドナルドやモスと違って商品バリエーションの少なさが仇になる結果となりました。

でもおいしいんですよね、KFC。

皆さんも健康に気を付けて、無理なき栄養ライフを送ってください!

参考リンク

元記事:https://www.transrecog.com/diary/2023/06/11/post-3032/(プログラミングを主題とするように著者自身がQiita向けに加筆)

モスバーガーで一日分の栄養を取れる組み合わせを計算したら衝撃的な結果が!

マクドナルドで一日分の栄養を取れる組み合わせを計算したら衝撃の結果が!
続・マクドナルドで一日分の栄養を取れる組み合わせを計算したらさらに衝撃の結果に
【完結編】マクドナルドで一日分の栄養を取れる組み合わせを計算したら衝撃の結果が!

64
29
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
29