完整內容更新見文末名片
B 題:大學生平衡膳食食譜的優化設計及評價
大學時代是學知識長身體的重要階段,同時也是良好飲食習慣形成的重要時期。這一特
定年齡段的年輕人,不僅身體發育需要有充足的能量和各種營養素,而且繁重的腦力勞動和
較大量的體育鍛煉也需要消耗大量的能源物質。
大學生中飲食結構不合理以及不良的飲食習慣問題比較突出,主要表現在不吃早餐或者
早餐吃的馬虎、經常性食用外賣及快餐食品、個別學生通過控制進食來減少皮下脂肪的積存
而造成營養不良等等。大學階段掌握一定的營養知識,形成良好的飲食習慣,對于促進生長
發育、保證身體健康有重要的意義。
1 名男大學生和 1 名女大學生分別記錄了各自一日三餐的食物攝入情況, 詳見附件 1、
附件 2 ,他們想知道自己的膳食營養攝入是否科學合理、還需要做出哪些調整改進。
高校食堂提供的一日三餐是大學生膳食營養攝入的主要來源, 附件 3 為某高校學生食堂
一日三餐主要食物信息統計表 。
對給定膳食食譜各種營養素的分析評價、平衡膳食食譜的優化設計有明確的基本要求,
詳見附件 4 。
請同學們根據 附件 4 中的平衡膳食基本準則、能量及各種營養素參考攝入量等各項指標
要求,按照“膳食食譜營養評價過程”以及“平衡膳食食譜優化設計原則”,解決以下問題。
問題 1 .膳食食譜的營養分析評價及調整
1 )對 附件 1 、附件 2 兩份食譜做出全面的膳食營養評價;
2 ) 基于附件 3 ,對 附件 1 、附件 2 兩份食譜進行較少的調整改進,并且再做出全面的膳
食營養評價。
問題 2 . 基于附件 3 的日平衡膳食食譜的優化設計
1 )以蛋白質氨基酸評分最大為目標建立優化模型,分別設計男生和女生的日食譜,并
對日食譜進行膳食營養評價;
2 )以用餐費用最經濟為目標建立優化模型,分別設計男生和女生的日食譜,并對日食
譜進行膳食營養評價;
3 )兼顧蛋白質氨基酸評分及經濟性,建立優化模型,分別設計男生和女生的日食譜,
并對日食譜進行膳食營養評價;
4 )對 1 )— 3 )得到的日食譜進行比較分析。
問題 3 . 基于附件 3 的周平衡膳食食譜的優化設計
在問題 2 的基礎上,分別以蛋白質氨基酸評分最大、用餐費用最經濟、兼顧蛋白質氨基
酸評分及經濟性為目標,建立優化模型,設計男生和女生的周食譜(周一—周日),并進行
評價及比較分析。
問題 4 .針對大學生飲食結構及習慣,寫一份健康飲食、平衡膳食的倡議書。
1 論文撰寫要求:
1 .所有源程序以 附錄形式 放在論文最后;
2 .所有基礎數據、求解過程數據以及最終數據均放在 正文中 。
問題分析:
問題 1:膳食食譜的營養分析評價及調整
1.1 對附件1、附件2兩份食譜的全面膳食營養評價
步驟:
- 分析食物結構:按類別將食譜中食物歸類排序,列出每種食物的數量,分析五大類別食物是否齊全。
- 計算食譜的主要營養素含量:從《中國食物成分表》中查出每100克可食部食物所含主要營養素的數量,從而算出食譜中各種主要營養素的含量。
- 評價食譜提供的能量、餐次比及非產能主要營養素含量:根據每日能量攝入目標、餐次比參考值及非產能主要營養素的參考攝入量,對食譜進行評價。
- 評價食譜的能量來源:將食譜中碳水化合物、脂肪、蛋白質供能占總能量的百分比與宏量營養素供能占總能量百分比的參考值比較。
- 評價每餐的蛋白質氨基酸評分:計算每餐混合食物的蛋白質氨基酸評分,依此評價每餐食物蛋白質氨基酸組成是否合理。
數據處理與分析:
我們需要從附件1、附件2中的一日食譜數據提取每種食物的種類及其對應的營養成分數據,然后進行以下計算:
- 每種食物的營養素含量。
- 每餐以及全天的能量總量、蛋白質、脂肪、碳水化合物等宏量營養素總量。
- 每餐以及全天的非產能營養素(如鈣、鐵、鋅、維生素等)總量。
import pandas as pd# 讀取食譜數據 male_diet = pd.read_excel('/mnt/data/附件1:1名男大學生的一日食譜.xlsx') female_diet = pd.read_excel('/mnt/data/附件2:1名女大學生的一日食譜.xlsx')# 讀取食物成分表數據 food_composition = pd.read_excel('path_to_food_composition_table.xlsx')# 計算營養素含量 def calculate_nutrients(diet, food_composition):nutrients = diet.merge(food_composition, on='食物名稱', how='left')nutrients['能量'] = nutrients['食物重量'] * nutrients['能量(kcal)'] / 100nutrients['蛋白質'] = nutrients['食物重量'] * nutrients['蛋白質(g)'] / 100nutrients['脂肪'] = nutrients['食物重量'] * nutrients['脂肪(g)'] / 100nutrients['碳水化合物'] = nutrients['食物重量'] * nutrients['碳水化合物(g)'] / 100nutrients['鈣'] = nutrients['食物重量'] * nutrients['鈣(mg)'] / 100nutrients['鐵'] = nutrients['食物重量'] * nutrients['鐵(mg)'] / 100nutrients['鋅'] = nutrients['食物重量'] * nutrients['鋅(mg)'] / 100nutrients['維生素A'] = nutrients['食物重量'] * nutrients['維生素A(μg)'] / 100nutrients['維生素B1'] = nutrients['食物重量'] * nutrients['維生素B1(mg)'] / 100nutrients['維生素B2'] = nutrients['食物重量'] * nutrients['維生素B2(mg)'] / 100nutrients['維生素C'] = nutrients['食物重量'] * nutrients['維生素C(mg)'] / 100return nutrientsmale_nutrients = calculate_nutrients(male_diet, food_composition) female_nutrients = calculate_nutrients(female_diet, food_composition)# 聚合每日營養素總量 daily_male_nutrients = male_nutrients.sum() daily_female_nutrients = female_nutrients.sum()print(daily_male_nutrients) print(daily_female_nutrients)
1.2 基于附件3,對附件1、附件2兩份食譜進行調整改進
步驟:
- 根據附件3中的高校食堂一日三餐主要食物信息統計表,選擇營養更均衡的食物。
- 調整附件1、附件2中的食譜,使其更加符合平衡膳食的基本準則。
-
canteen_foods = pd.read_excel('/mnt/data/附件3:某高校學生食堂一日三餐主要食物信息統計表.xlsx')# 根據需要調整男、女大學生的食譜 # 例如,增加蔬菜和水果的比例,減少高脂肪和高糖食物的比例def adjust_diet(diet, canteen_foods):# 這里可以添加具體的調整邏輯,如選擇新的食物替換不合理的食物adjusted_diet = diet.copy()# 假設我們增加一種蔬菜new_food = canteen_foods[canteen_foods['食物類別'] == '蔬菜'].sample(1)adjusted_diet = pd.concat([adjusted_diet, new_food])return adjusted_dietadjusted_male_diet = adjust_diet(male_diet, canteen_foods) adjusted_female_diet = adjust_diet(female_diet, canteen_foods)# 重新計算調整后的營養素含量 adjusted_male_nutrients = calculate_nutrients(adjusted_male_diet, food_composition) adjusted_female_nutrients = calculate_nutrients(adjusted_female_diet, food_composition)daily_adjusted_male_nutrients = adjusted_male_nutrients.sum() daily_adjusted_female_nutrients = adjusted_female_nutrients.sum()print(daily_adjusted_male_nutrients) print(daily_adjusted_female_nutrients)
問題 2:基于附件3的日平衡膳食食譜的優化設計
2.1 以蛋白質氨基酸評分最大為目標建立優化模型
步驟:
- 定義優化目標函數:最大化蛋白質氨基酸評分。
- 建立線性規劃模型,定義約束條件。
- 使用優化算法求解模型。
-
from scipy.optimize import linprog# 假設有N種食物,每種食物有不同的蛋白質氨基酸評分和成本 N = len(canteen_foods) protein_scores = canteen_foods['蛋白質氨基酸評分'].values costs = canteen_foods['價格'].values# 目標函數:最大化蛋白質氨基酸評分 c = -protein_scores # 因為linprog是求解最小化問題,所以取負# 約束條件:保證總能量攝入、營養素攝入達到標準 # 例如,能量攝入要求2400 kcal A_eq = [canteen_foods['能量(kcal)'].values] b_eq = [2400]# 變量范圍:每種食物的攝入量應為非負 bounds = [(0, None) for _ in range(N)]# 求解線性規劃問題 result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')print(result.x) # 最優食物組合
2.2 以用餐費用最經濟為目標建立優化模型
步驟:
- 定義優化目標函數:最小化用餐費用。
- 建立線性規劃模型,定義約束條件。
- 使用優化算法求解模型。
-
# 目標函數:最小化用餐費用 c = costs# 約束條件:保證總能量攝入、營養素攝入達到標準 A_eq = [canteen_foods['能量(kcal)'].values] b_eq = [2400]# 變量范圍:每種食物的攝入量應為非負 bounds = [(0, None) for _ in range(N)]# 求解線性規劃問題 result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')print(result.x) # 最優食物組合
2.3 兼顧蛋白質氨基酸評分及經濟性,建立優化模型
步驟:
- 定義綜合優化目標函數,考慮蛋白質氨基酸評分和用餐費用。
- 建立線性規劃模型,定義約束條件。
- 使用優化算法求解模型。
-
# 假設我們用加權和的方法來綜合考慮蛋白質氨基酸評分和用餐費用 alpha = 0.5 # 權重,可以根據實際需求調整# 綜合目標函數:最小化(alpha * 用餐費用 - (1 - alpha) * 蛋白質氨基酸評分) c = alpha * costs - (1 - alpha) * protein_scores# 約束條件:保證總能量攝入、營養素攝入達到標準 A_eq = [canteen_foods['能量(kcal)'].values] b_eq = [2400] # 男生每日能量目標,可以根據女生的能量目標調整# 變量范圍:每種食物的攝入量應為非負 bounds = [(0, None) for _ in range(N)]# 求解線性規劃問題 result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')# 最優食物組合 optimal_combination = result.x# 打印結果 print(optimal_combination)
可視化:
-
import matplotlib.pyplot as plt# 準備數據 labels = ['能量(kcal)', '蛋白質(g)', '脂肪(g)', '碳水化合物(g)', '鈣(mg)', '鐵(mg)', '鋅(mg)', '維生素A(μg)', '維生素B1(mg)', '維生素B2(mg)', '維生素C(mg)', '費用(元)']optimal_diet1_values = optimal_diet1.values optimal_diet2_values = optimal_diet2.values optimal_diet3_values = optimal_diet3.valuesx = range(len(labels))# 繪制條形圖 plt.figure(figsize=(12, 8)) plt.bar(x, optimal_diet1_values, width=0.2, label='蛋白質氨基酸評分最大', align='center') plt.bar([i + 0.2 for i in x], optimal_diet2_values, width=0.2, label='費用最經濟', align='center') plt.bar([i + 0.4 for i in x], optimal_diet3_values, width=0.2, label='綜合模型', align='center')plt.xlabel('營養素及費用') plt.ylabel('數值') plt.title('不同優化模型的營養素及費用比較') plt.xticks([i + 0.2 for i in x], labels, rotation=45) plt.legend()plt.tight_layout() plt.show()