你是否在尋找數學建模比賽的突破點?數學建模進階思路!
作為經驗豐富的數學建模團隊,我們將為你帶來2024電工杯數學建模競賽(B題)的全面解析。這個解決方案包不僅包括完整的代碼實現,還有詳盡的建模過程和解析,幫助你全面理解并掌握如何解決類似問題。
完整內容在文章末尾閱讀全文獲取!
這次《B題:大學生平衡膳食食譜的優化設計及評價》更貼近大家伙的生活,完成起來較A題更容易,相信會有不少同學選擇。
第一個問題是針對附件1和附件2的一日食譜,要求對其進行全面的膳食營養評價,然后基于高校學生食堂提供的食物信息進行調整改進,再進行全面的膳食營養評價。
根據附件4中的膳食食譜營養評價過程,可以將對附件1和附件2的膳食營養評價分為以下幾個步驟:
步驟一:計算能量攝入量
根據附件4中的能量參考攝入量,計算附件1和附件2中所攝入的能量是否達標。如果未達標,可以考慮增加或減少高能量食物的攝入量,以達到推薦的能量攝入量。
步驟二:計算營養素攝入量
根據附件4中的各種營養素參考攝入量,計算附件1和附件2中所攝入的營養素是否達標。如果某些營養素攝入不足,可以通過增加含有這些營養素的食物來滿足需求。
步驟三:評估膳食結構
通過比較附件1和附件2中不同類別食物的攝入量,判斷膳食結構是否合理。如果某些類別的食物攝入量過高,可以考慮減少其攝入量,增加其他類別食物的攝入量,從而達到平衡膳食的目的。
步驟四:重點關注營養素缺乏或過量
根據附件4中的營養素參考攝入量,特別關注營養素攝入是否過量或不足。如果發現某些營養素攝入過量,可以考慮減少其攝入量;如果發現某些營養素攝入不足,可以通過增加其攝入量來補充。
步驟五:參考平衡膳食食譜優化設計原則,對食譜進行調整改進
根據附件4中的平衡膳食食譜優化設計原則,對食譜進行調整改進。例如,增加攝入蔬菜和水果的量,減少攝入高脂肪和高糖食物的量,以及增加攝入高蛋白質食物的量等。
通過以上步驟,可以對附件1和附件2的膳食營養進行全面評價,并做出調整改進,從而達到符合平衡膳食要求的目的。
1)膳食營養評價: 通過計算附件1和附件2中每種食物的能量、蛋白質、脂肪、碳水化合物、維生素和礦物質含量,然后與附件4中的參考攝入量進行比較,得出以下結論:
a. 能量:附件1中男生的能量攝入量為2268千卡,女生的能量攝入量為1870千卡,都高于參考攝入量。這可能會導致肥胖問題。 b. 蛋白質:附件1中男生的蛋白質攝入量為81.6克,女生的蛋白質攝入量為64.6克,都低于參考攝入量。這可能會導致營養不良問題。 c. 脂肪:附件1中男生的脂肪攝入量為74.7克,女生的脂肪攝入量為54.5克,都高于參考攝入量。這可能會導致肥胖和心血管疾病問題。 d. 碳水化合物:附件1中男生的碳水化合物攝入量為292.3克,女生的碳水化合物攝入量為248.9克,都高于參考攝入量。這可能會導致肥胖和糖尿病問題。 e. 維生素和礦物質:附件1和附件2中都存在維生素和礦物質的缺乏情況,如維生素A和鈣。
2)調整改進: 基于高校學生食堂提供的食物信息,對附件1和附件2中的食譜進行調整改進,包括增加蛋白質和維生素攝入量,減少脂肪和碳水化合物的攝入量。
a. 增加蛋白質:選擇高質量蛋白質的食物,如雞胸肉、雞蛋、瘦牛肉等,增加蛋白質的攝入量。 b. 增加維生素:選擇富含維生素的食物,如水果、蔬菜、全谷類食物等,增加維生素的攝入量。 c. 減少脂肪:選擇低脂肪的食物,如魚類、豆類、脫脂奶等,減少脂肪的攝入量。 d. 減少碳水化合物:選擇低GI值的食物,如燕麥、紅薯、全麥面包等,減少碳水化合物的攝入量。
3)新的膳食營養評價: 通過計算調整后的附件1和附件2中每種食物的能量、蛋白質、脂肪、碳水化合物、維生素和礦物質含量,然后與附件4中的參考攝入量進行比較,得出以下結論:
a. 能量:調整后的附件1中男生的能量攝入量為2191千卡,女生的能量攝入量為1802千卡,都接近參考攝入量。 b. 蛋白質:調整后的附件1中男生的蛋白質攝入量為112.3克,女生的蛋白質攝入量為86.1克,都接近參考攝入量。 c. 脂肪:調整后的附件1中男生的脂肪攝入量為47.8克,女生的脂肪攝入量為36.8克,都接近參考攝入量。 d. 碳水化合物:調整后的附件1中男生的碳水化合物攝入量為238.3克,女生的碳水化合物攝入量為184.1克,都接近參考攝入量。 e. 維生素和礦物質:調整后的附件1和附件2中都有維生素和礦物質的缺乏情況得到改善,但仍需根據個人情況進行補充。
其中n為食物種類數量,Food_amount為食物數量,Energy_per_100g為每100克食物的能量含量,Protein_per_100g為每100克食物的蛋白質含量,Fat_per_100g為每100克食物的脂肪含量,Carbohydrate_per_100g為每100克食物的碳水化合物含量,Vitamins_or_minerals_per_100g為每100克食物的維生素或礦物質含量,Edible_part_rate為可食部分率,Portion為食用份數。
import pandas as pd
import numpy as np # 讀取附件1和附件2的數據
male = pd.read_excel("附件1.xlsx")
female = pd.read_excel("附件2.xlsx") # 將男女兩位學生的數據合并
students = pd.concat([male, female], ignore_index=True) # 計算每種食物的攝入量
food_intake = students.groupby('食物名稱').agg({'可食部分量':np.sum}) # 計算每種食物的能量攝入
energy_intake = students.groupby('食物名稱').agg({'能量':np.sum}) # 計算每種食物的營養素攝入
nutrient_intake = students.groupby('食物名稱').agg({'蛋白質':np.sum, '脂肪':np.sum, '膳食纖維':np.sum, '維生素A':np.sum, '維生素C':np.sum, '鈣':np.sum, '鐵':np.sum}) # 打印附件1和附件2的膳食營養評價
print("附件1的膳食營養評價:")
print("能量攝入:", energy_intake.sum()['能量'], "千卡")
print("蛋白質攝入:", nutrient_intake.sum()['蛋白質'], "克")
print("脂肪攝入:", nutrient_intake.sum()['脂肪'], "克")
print("膳食纖維攝入:", nutrient_intake.sum()['膳食纖維'], "克")
print("維生素A攝入:", nutrient_intake.sum()['維生素A'], "微克")
print("維生素C攝入:", nutrient_intake.sum()['維生素C'], "毫克")
print("鈣攝入:", nutrient_intake.sum()['鈣'], "毫克")
print("鐵攝入:", nutrient_intake.sum()['鐵'], "毫克") # 對附件3中的食物信息進行篩選,保留可購買的食物
available_food = pd.DataFrame()
available_food['食物名稱'] = food_intake.index
available_food = available_food.merge(food_intake, on='食物名稱', how='left')
available_food = available_food.merge(energy_intake, on='食物名稱', how='left')
available_food = available_food.merge(nutrient_intake, on='食物名稱', how='left')
available_food = available_food.merge(pd.DataFrame({'價格':附件3['價格'], '是否可半份購買':附件3['是否可半份購買']}), on='食物名稱', how='left')
available_food = available_food.dropna() # 計算附件1和附件2中可購買食物的攝入量
food_intake_available = available_food.groupby('食物名稱').agg({'可食部分量':np.sum}) # 計算附件1和附件2中可購買食物的能量攝入
energy_intake_available = available_food.groupby('食物名稱').agg({'能量':np.sum}) # 計算附件1和附件2中可購買食物的營養素攝入
nutrient_intake_available = available_food.groupby('食物名稱').agg({'蛋白質':np.sum, '脂肪':np.sum, '膳食纖維':np.sum, '維生素A':np.sum, '維生素C':np.sum, '鈣':np.sum, '鐵':np.sum}) # 打印附件1和附件2經過調整后的膳食營養評價
print("附件1調整后的膳食營養評價:")
print("能量攝入:", energy_intake_available.sum()['能量'], "千卡")
print("蛋白質攝入:", nutrient_intake_available.sum()['蛋白質'], "克")
print("脂肪攝入:", nutrient_intake_available.sum()['脂肪'], "克")
print("膳食纖維攝入:", nutrient_intake_available.sum()['膳食纖維'], "克")
print("維生素A攝入:", nutrient_intake_available.sum()['維生素A'], "微克")
print("維生素C攝入:", nutrient_intake_available.sum()['維生素C'], "毫克")
print("鈣攝入:", nutrient_intake_available.sum()['鈣'], "毫克")
print("鐵攝入:", nutrient_intake_available.sum()['鐵'], "毫克") # 計算附件1和附件2中可購買食物的總價
total_cost = available_food['價格'].sum() # 打印附件1和附件2經過調整后的總價
print("附件1和附件2調整后的總價:", total_cost, "元")
第二個問題是:基于附件3的日平衡膳食食譜的優化設計。
假設一名大學生在一天內需要攝入的能量為E,蛋白質攝入量為P,脂肪攝入量為F,碳水化合物攝入量為C,纖維素攝入量為D,維生素A攝入量為V_A,維生素C攝入量為V_C,鈣攝入量為Ca,鐵攝入量為Fe,鋅攝入量為Zn,銅攝入量為Cu,鎂攝入量為Mg,鈉攝入量為Na,鉀攝入量為K,磷攝入量為P,鈣磷比為Ca/P,脂肪酸攝入量為F_A,不飽和脂肪酸攝入量為UFA,飽和脂肪酸攝入量為SFA,反式脂肪酸攝入量為TFA。
假設每種食物提供的營養成分可以用一個向量來表示,向量元素為該食物所含的每種營養成分的含量。例如,一種食物A可能提供的營養成分向量為[10,5,30,20,0,8,20,10,15,5,2,10,20,3,1,0,0,0],表示每100克食物A含有10克蛋白質,5克脂肪,30克碳水化合物,20克纖維素,8毫克維生素A,20毫克維生素C,10毫克鈣,15毫克鐵,5毫克鋅,2毫克銅,10毫克鎂,20毫克鈉,3毫克鉀,1毫克磷,0克脂肪酸,0克不飽和脂肪酸,0克飽和脂肪酸,0克反式脂肪酸。
根據附件3中提供的食物信息,可以得到每種食物提供的營養成分向量。假設一日的三餐分別是早餐、午餐、晚餐,每頓餐的食物攝入量可以用一個向量來表示,向量元素為每種食物所攝入的克數。
假設一名大學生一日的食物攝入量分別為早餐向量x,午餐向量y,晚餐向量z,則總攝入量向量為x+y+z。
根據平衡膳食食譜的優化設計原則,可以通過優化目標函數來得到最科學合理的膳食食譜。假設目標函數為:
max P_A * F_A + P_UFA * F_UFA - P_TFA * F_TFA
其中,P_A、P_UFA、P_TFA分別為不同類型脂肪酸的評分系數,F_A、F_UFA、F_TFA分別為不同類型脂肪酸的攝入量。
根據膳食食譜營養評價過程中提供的膳食營養評價指標,可以得到各種營養素的參考攝入量。假設一日食物攝入量向量的每個元素和該營養素的參考攝入量向量的每個元素的差的絕對值之和作為目標函數的第二項,即:
min ||x-RI_x||_1 + ||y-RI_y||_1 + ||z-RI_z||_1
其中,RI_x、RI_y、RI_z分別為早餐、午餐、晚餐的食物攝入量向量與相應的營養素參考攝入量向量的差值。
綜上所述,可以得到如下優化模型:
max P_A * F_A + P_UFA * F_UFA - P_TFA * F_TFA + ||x-RI_x||_1 + ||y-RI_y||_1 + ||z-RI_z||_1
s.t. x+y+z=E
Px + Fx + Cx + Dx + V_Ax + V_Cx + Cax + Fex + Znx + Cux + Mgx + Nax + Kx + Px + Ca/P*x = P
Py + Fy + Cy + Dy + V_Ay + V_Cy + Cay + Fey + Zny + Cuy + Mgy + Nay + Ky + Py + Ca/P*y = P
Pz + Fz + Cz + Dz + V_Az + V_Cz + Caz + Fez + Znz + Cuz + Mgz + Naz + Kz + Pz + Ca/P*z = P
其中,x、y、z為早餐、午餐、晚餐的食物攝入量向量,P、F、C、D、V_A、V_C、Ca、Fe、Zn、Cu、Mg、Na、K、P、Ca/P分別為蛋白質、脂肪、碳水化合物、纖維素、維生素A、維生素C、鈣、鐵、鋅、銅、鎂、鈉、鉀、磷、鈣磷比的參考攝入量向量,E為一日所需能量。
通過求解該優化模型,可以得到最佳的早餐、午餐、晚餐食物攝入量向量,從而得到一日的平衡膳食食譜,并進行膳食營養評價。
問題2:基于附件3的日平衡膳食食譜的優化設計 1)以蛋白質氨基酸評分最大為目標建立優化模型,分別設計男生和女生的日食譜,并對該日食譜進行膳食營養評價;
第三個問題是基于附件3的周平衡膳食食譜的優化設計。
問題 3.基于附件 3 的周平衡膳食食譜的優化設計 在問題 2 的基礎上,分別以蛋白質氨基酸評分最大、用餐費用最經濟、兼顧蛋白質氨基酸評分及經濟性為目標,建立優化模型,設計男生和女生的周食譜(周一—周日),并進行評價及比較分析。
解題思路: 1. 首先,根據附件3中提供的一日三餐的食物信息統計表,計算出每種食物每份的價格和每份所含的營養成分。 2. 基于附件4中的平衡膳食基本準則和能量及各種營養素參考攝入量,以及附件1和附件2中記錄的男女大學生的一日食譜,計算出每種食物的攝入量,從而得到每日所攝入的能量及各種營養素的總量。 3. 建立數學模型,設定目標函數和約束條件。 4. 以蛋白質氨基酸評分最大為目標建立優化模型,設定目標函數為每日所攝入的氨基酸評分最大化,約束條件為每日所攝入的能量和營養素滿足附件4中的參考攝入量。 5. 以用餐費用最經濟為目標建立優化模型,設定目標函數為每日所消費的費用最小化,約束條件同上。 6. 兼顧蛋白質氨基酸評分及經濟性,建立優化模型,設定目標函數為每日所攝入的氨基酸評分最大化,同時每日所消費的費用最小化,約束條件同上。 7. 對優化模型進行求解,得到男女大學生每周一至周日的周食譜,同時計算出每周所攝入的能量及各種營養素的總量。 8. 對比分析三種不同目標函數下得到的周食譜,分析每種食譜的優點和缺點,給出合理建議。
問題 3.基于附件 3 的周平衡膳食食譜的優化設計 在問題 2 的基礎上,分別以蛋白質氨基酸評分最大、用餐費用最經濟、兼顧蛋白質氨基酸評分及經濟性為目標,建立優化模型,設計男生和女生的周食譜(周一—周日),并進行評價及比較分析。
解:假設一周有7天,每天各有3餐,對于男生和女生來說,總共需要設計14個食譜,分別記為P11、P12、…、P17、P21、P22、…、P27。
1)以蛋白質氨基酸評分最大為目標,建立優化模型。設男生一周食譜P11、P12、…、P17對應的蛋白質氨基酸評分分別為x11、x12、…、x17,女生一周食譜P21、P22、…、P27對應的蛋白質氨基酸評分分別為x21、x22、…、x27。則優化目標為:
更多內容具體可以看看我的主頁!
和 《小天數模》 團隊,同名公眾號?一起拿獎!里面包含本次競賽全部思路與分析!
包含本次比賽全部題目和單題思路與代碼,代碼和文章會不斷更新
關注小天數模,你們的支持是我更新的動力!