现分享2024年电工杯数学建模竞赛B题,供大家学习
第一个问题是膳食食谱的营养分析评价及调整。
设男生和女生的一日食谱分别为 X m 和 X f ,其中 X m =( x m 1 , x m 2 ,..., x m n ) , X f =( x f 1 , x f 2 ,..., x f n ) , n 为食物种类数目。
1)对两份食谱做出全面的膳食营养评价:
假设每一种食物中含有的各种营养素的含量已知,分别为 N m 1 , N m 2 ,..., N m n 和 N f 1 , N f 2 ,..., N f n ,其中 N m i 和
N f i 表示男生和女生食谱中第 i 种食物中含有的营养素总量。则男生和女生食谱的总营养素含量分别为:
$$N_m=\sum_{i=1}^n N_{mi}x_{mi}$$
$$N_f=\sum_{i=1}^n N_{fi}x_{fi}$$
根据平衡膳食基本准则,男生和女生每日能量的实际摄入量应与目标相差在±10%之内,即:
0.9 N 0 ≤ N m ≤1.1 N 0
0.9 N 0 ≤ N f ≤1.1 N 0
其中 N 0 为每日能量目标。
同时,根据营养素参考摄入量的要求,男生和女生每日各种营养素的摄入量应满足以下条件:
R m 1 ≤ N m ≤ R m 2
R f 1 ≤ N f ≤ R f 2
其中 R m i 和 R f i 分别为男生和女生各种营养素的参考摄入量。
综上所述,对两份食谱进行全面的膳食营养评价,需要求解以下优化问题:
max X m N m
max X f N f
满足以下约束条件:
0.9 N 0 ≤ N m ≤1.1 N 0
0.9 N 0 ≤ N f ≤1.1 N 0
R m 1 ≤ N m ≤ R m 2
R f 1 ≤ N f ≤ R f 2
x m i , x f i ≥0,( i =1,2,..., n )
2)对两份食谱进行较少的调整改进,并且再做出全面的膳食营养评价:
在第一个问题的基础上,假设现在要对男生和女生的食谱进行少量调整改进,即分别增加或减少某些食物的摄入量,记为 X
′ m 和 X ′ f ,其中 X ′ m =( x ′ m 1 , x ′ m 2 ,..., x ′ m n ) , X ′ f =( x ′ f 1 , x ′ f 2 ,..., x ′ f n ) 。
则对食谱进行少量调整改进的优化问题为:
满足以下约束条件:
max X ′ m N ′ m
max X ′ f N ′ f
0.9 N 0 ≤ N ′ m ≤1.1 N 0
0.9 N 0 ≤ N ′ f ≤1.1 N 0
R m 1 ≤ N ′ m ≤ R m 2
R f 1 ≤ N ′ f ≤ R f 2
x ′ m i , x ′ f i ≥0,( i =1,2,..., n )
再对调整后的食谱进行全面的膳食营养评价即可。
对于两份食谱,我们可以分别计算出其能量及各种营养素的实际摄入量,与参考摄入量进行比较,以此评价其营养结构的合 理性。同时,可以根据每餐的能量分配比例,评价餐次比是否符合要求。若发现营养素摄入不足或超标,可以对食谱进行适 当调整,例如增加或减少某些食物的摄入量,或者选择其他食物替代。调整后再次对食谱进行营养评价,直到符合营养需求 标准为止。
此外,除了营养结构的评价,还需要注意食谱中是否存在不良的饮食习惯,例如早餐不吃或吃得不够充分、经常食用外卖 等。针对这些问题,可以提出相应的建议,例如增加早餐的摄入量,减少外卖的消费频率等。
总的来说,膳食食谱的营养分析评价需要综合考虑能量及各种营养素的摄入量、餐次比、饮食习惯等因素,通过适当调整来 达到营养平衡的目标。同时,也需要提供个性化的建议,帮助个人形成健康的饮食习惯。
1)对两份食谱做出全面的膳食营养评价:
首先,根据男生和女生的食谱记录,计算出每种食物的营养成分(如能量、蛋白质、脂肪、碳水化合物等)和每餐的总能量 摄入量。然后,根据每日能量摄入量和每餐的能量摄入量目标,计算出实际摄入量与目标摄入量的差值,判断是否符合“男、女生每日能量实际摄入量与摄入量目标相差在±10%之内”的基本要求。
接下来,根据男生和女生的食谱,计算出蛋白质、脂肪、碳水化合物等营养素的摄入量占总能量的百分比,判断是否符合 “产能营养素占总能量百分比尽量满足蛋白质10%-15%、脂肪20%-30%、碳水化合物50%-65%”的基本要求。
然后,根据男生和女生的食谱,计算出钙、铁、锌、维生素A、维生素B1、维生素B2、维生素C的实际摄入量,与参考摄入 量进行比较,判断是否符合“非产能主要营养素钙、铁、锌、维生素A、维生素B1、维生素B2、维生素C的实际摄入量尽可 能接近参考摄入量”的基本要求。
最后,根据每餐的能量摄入量,计算出早餐、午餐、晚餐的比例,判断是否符合“餐次比尽可能满足早餐25%-35%,中 餐、晚餐各30%-40%”的基本要求。
2)对两份食谱进行较少的调整改进,并且再做出全面的膳食营养评价:
首先,根据前面的评价结果,确定哪些营养素摄入不足或超过目标。然后,根据食物的营养成分,进行调整改进,使得每餐 的营养素摄入量符合目标要求。
例如,如果发现男生的蛋白质摄入量偏低,可以增加一些高蛋白的食物,如鸡蛋、牛奶等;如果女生的脂肪摄入量偏高,可 以减少一些含脂肪较多的食物,如肉类、油炸食品等。
调整后,再次进行全面的膳食营养评价,判断是否符合各项指标要求。
3)数学公式:
(1)男生和女生每餐的能量摄入量目标:
男生:早餐:270 375千卡;午餐:270 375千卡;晚餐:300~400千卡。女生:早餐:200 280千卡;午餐:200 280千卡;晚餐:225~300千卡。
(2)蛋白质、脂肪、碳水化合物等营养素摄入量占总能量的百分比目标: 蛋白质:男生:10%-15%;女生:10%-15%。
脂肪:男生:20%-30%;女生:20%-30%。
碳水化合物:男生:50%-65%;女生:50%-65%。
(3)非产能主要营养素参考摄入量:
钙:男生:1000毫克;女生:800毫克。铁:男生:8毫克;女生:18毫克。
锌:男生:11毫克;女生:8毫克。
维生素A:男生:900微克;女生:700微克。维生素B1:男生:1.2毫克;女生:1.1毫克。维生素B2:男生:1.3毫克;女生:1.1毫克。维生素C:男生:100毫克;女生:100毫克。
import pandas as pd import numpy as np
def nutrient_calculation(meal):
energy = meal['可食部(克/份)'].mul(meal['食用份数']).sum()
protein = meal['主要成分'].loc[meal['主要成分'].isin(['鸡蛋', '鸡肉', '猪肉', '豆腐', '火腿肠', '鸡排面'])].mul(meal['可食部(克/份)']).mul(m
fat = meal['主要成分'].loc[meal['主要成分'].isin(['豆油', '芝麻油', '葡萄', '油菜', '沙丁鱼'])].mul(meal['可食部(克/份)']).mul(meal['食用份
carbohydrate = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '油条', '米饭', '面', '土豆', '酸菜', '苹果'])].mul(meal['可食部(克/份)']).
calcium = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '豆浆', '鸡蛋饼', '米饭', '油菜', '茄子', '沙丁鱼'])].mul(meal['可食部(克/份)']).
iron = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '鸡排面', '木耳', '茄子', '苹果'])].mul(meal['可食部(克/份)']).mul(meal['食用份数
zinc = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '茄子', '土豆', '沙丁鱼'])].mul(meal['可食部(克/份)']).mul(meal['食用份数']).sum
vitamin_a = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '火腿肠', '油菜', '沙丁鱼'])].mul(meal['可食部(克/份)']).mul(meal['食用份
vitamin_b1 = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '鸡肉', '火腿肠', '红烧肉', '葡萄'])].mul(meal['可食部(克/份)']).mul(meal
vitamin_b2 = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '鸡蛋', '茄子', '沙丁鱼'])].mul(meal['可食部(克/份)']).mul(meal['食用份
vitamin_c = meal['主要成分'].loc[meal['主要成分'].isin(['小米', '火腿肠', '苹果'])].mul(meal['可食部(克/份)']).mul(meal['食用份数']).sum
# 计算每餐的各项营养素百分比protein_percentage = protein / energy fat_percentage = fat / energy
carbohydrate_percentage = carbohydrate / energy calcium_percentage = calcium / energy iron_percentage = iron / energy
zinc_percentage = zinc / energy vitamin_a_percentage = vitamin_a / energy vitamin_b1_percentage = vitamin_b1 / energy vitamin_b2_percentage = vitamin_b2 / energy vitamin_c_percentage = vitamin_c / energy
nutrient_dict = {'能量': energy, '蛋白质': protein, '脂肪': fat, '碳水化合物': carbohydrate, '钙': calcium, '铁': iron, '锌': zinc, '维生素A': vitamin_a,
'维生素B1': vitamin_b1, '维生素B2': vitamin_b2, '维生素C': vitamin_c, '蛋白质百分比': protein_percentage, '脂肪百分比': fat_percentage, '碳水化合物百分比': carbohydrate_percentage, '钙百分比': calcium_percentage, '铁百分比': iron_percentage, '锌百分比': zinc_percentage,
'维生素A百分比': vitamin_a_percentage, '维生素B1百分比': vitamin_b1_percentage, '维生素B2百分比': vitamin_b2_percentage, '维生素C百分比': vitamin_c_percentage}
nutrient_df = pd.DataFrame(nutrient_dict, index=[0]).T
nutrient_df.columns = ['营养素总量', '营养素百分比']
# 读取男生和女生的食谱数据
male_meals = pd.read_excel('male_meals.xlsx', sheet_name=None) female_meals = pd.read_excel('female_meals.xlsx', sheet_name=None)
# 创建空的DataFrame,用于存储男生和女生各餐的营养素总量和百分比
male_nutrients = pd.DataFrame() female_nutrients = pd.DataFrame()
# 循环遍历男生和女生的食谱,计算每餐的营养素总量和百分比,并存储到相应的DataFrame
for meal in male_meals.values():
male_nutrients = pd.concat([male_nutrients, nutrient_calculation(meal)], axis=1) for meal in female_meals.values():
female_nutrients = pd.concat([female_nutrients, nutrient_calculation(meal)], axis=1)
# 将DataFrame转置,并修改列名
male_nutrients = male_nutrients.T
male_nutrients.columns = ['能量', '蛋白质', '脂肪', '碳水化合物', '钙', '铁', '锌', '维生素A', '维生素B1', '维生素B2', '维生素C', '蛋白质百分比', '脂肪百分比', '碳水化合物百分比', '钙百分比', '铁百分比', '锌百分比', '维生素A百分比', '维生素B1百分比', '维生素B2百分比', '维生素C百分比']
female_nutrients = female_nutrients.T
female_nutrients.columns = ['能量', '蛋白质', '脂肪', '碳水化合物', '钙', '铁', '锌', '维生素A', '维生素B1', '维生素B2', '维生素C', '蛋白质百分比', '脂肪百分比', '碳水化合物百分比', '钙百分比', '铁百分比', '锌百分比', '维生素A百分比', '维生素B1百分比', '维生素B2百分比', '维生素
第二个问题是如何基于男女大学生的膳食摄入情况和营养需求,设计出符合平衡膳食基本准则的日食谱。
假设男女大学生的每日能量需求分别为 E m 和 E f ,每日蛋白质、脂肪、碳水化合物需求分别为 P m , P f 、 F m , F f 、 C
m , C f 。根据平衡膳食基本准则,可得到以下约束条件:
- 蛋白质的摄入量应在总能量的10%~15%之间,即
0.1 E m ≤ P m ≤0.15 E m
-
- E f ≤ P f ≤0.15 E f
- 脂肪的摄入量应在总能量的20%~30%之间,即
- E m ≤ F m ≤0.3 E m
0.2 E f ≤ F f ≤0.3 E f
- 碳水化合物的摄入量应在总能量的50%~65%之间,即
0.5 E m ≤ C m ≤0.65 E m
0.5 E f ≤ C f ≤0.65 E f
- 非产能主要营养素的摄入量应接近参考摄入量,即
| C a m − C a r e f |≤ ϵ
| C a f − C a r e f |≤ ϵ
| F e m − F e r e f |≤ ϵ
| F e f − F e r e f |≤ ϵ
| Z n m − Z n r e f |≤ ϵ
| Z n f − Z n r e f |≤ ϵ