2024电工杯数学建模B题思路模型代码
完整内容更新见文末名片
B****题:大学生平衡膳食食谱的优化设计及评价
大学时代是学习知识和发育成长的重要阶段,同时也是养成良好饮食习惯的重要时期。
大学时代是学习知识和发育成长的重要阶段,并且也是养成良好饮食习惯的关键时期。
针对特定年龄段的年轻人群体,在提供足够的能量之外,还应确保饮食中包含丰富的营养元素;同时,在脑力劳动强度高的情况下。
较大量的体育锻炼也需要消耗大量的能源物质。
大学生中饮食结构存在不合理现象以及不健康的饮食习惯问题相对明显,并且主要体现在不吃早餐的情况
饮食习惯欠佳的学生通常会长期依赖外卖和快餐作为日常饮食的主要来源,并通过节制饮食以降低体脂堆积的风险。
而造成营养不良等问题。在大学阶段学习基本的营养知识,并养成健康的饮食习惯有助于身体的正常发育。
发育、保证身体健康有重要的意义。
一名男生和一名女生分别对各自的三餐进行了食物摄入的详细记录。详见附件1的内容。
附件 2 ,他们对于膳食营养摄入是否恰当适量以及还需要进行哪些优化调整感兴趣。
该高校的学生食堂为大学生提供了每日三餐的膳食营养摄入的主要来源。附件3为某高校学生食堂
一日三餐主要食物信息统计表 。
对于给定膳食食谱中各营养素的分析评价以及合理搭配膳食结构的优化设计方面,必须满足基本要求。
详见附件****4 。
依据文件第四部分中的平衡膳食标准以及能量和各类营养成分建议摄入量等数据点,请同学们完成以下任务
要求:根据"膳食食谱营养评价流程"以及"平衡膳食食谱优化准则"对以下问题进行分析与设计。
问题1.膳食食谱的营养分析评价及调整
1)对附件1、附件****2 两份食谱做出全面的膳食营养评价;
2)基于文件索引3的情况下,请对文件索引1和2中的两份食谱进行轻微的修改以实现优化,并同时进一步制定一份完整的餐谱。
食营养评价。
问题2.基于附件3****的日平衡膳食食谱的优化设计
基于蛋白质氨基酸评价值最大的目标构建优化模型,并分别为男生和女生设计日食谱方案,在此基础上根据个体差异制定个性化的饮食计划
对日食谱进行膳食营养评价;
以最低消费水平为目标构建优化模型,并分别制定针对男生和女生的每日饮食安排方案,在此基础上对日食进行科学规划
谱进行膳食营养评价;
3)在蛋白质氨基酸评分和经济性之间进行综合考量,并基于这些因素构建优化模型。为了满足不同性别的需求,在设计日食谱时会根据性别需求设计相应的饮食方案。
并对日食谱进行膳食营养评价;
4)对 1)—3)得到的日食谱进行比较分析。
问题3.基于附件3****的周平衡膳食食谱的优化设计
基于问题二的结果,在此分别从蛋白质氨基酸指数最高、最低消费水平以及综合考虑蛋白质的氨基酸含量三个方面进行安排
采用酸评分体系与经济性作为评价指标,在此基础上建立相应的优化模型,并分别制定针对男生和女生的每日饮食计划(周一至周日),进而对其进行规划与实施
评价及比较分析。
问题4.针对大学生饮食结构及习惯,写一份健康饮食、平衡膳食的倡议书。
1论文撰写要求:
1.所有源程序以附录形式 放在论文最后;
2.所有基础数据、求解过程数据以及最终数据均放在正文中 。
问题分析:
问题 1:膳食食谱的营养分析评价及调整
1.1 对附件1、附件2两份食谱的全面膳食营养评价
步骤:
分类整理食材 :将厨师按照食材类别对菜品进行分门别类排列,并详细标注各类食材的具体数量分布情况。
获取主要养分数据 :通过查阅《中国食品成分表》,确定每百克可食用部分各主要养分的具体含量数值。
评估热量搭配与比例 :依据每日推荐摄入热量标准以及膳食指南建议的比例基准,对菜品提供的热量总量及其构成比例进行系统性评估。
分析热源构成差异 :对比分析该菜品中碳水化合物、脂肪和蛋白质在总热量中的占比与其在膳食结构中的比例分布情况。
测定蛋白构成指标 :采用蛋白质多肽键断裂反应生成氨基酸(PRA)法测定该混合膳食中各组分的具体组成参数。
数据处理与分析:
为了更好地从附件1和附件2中收集每种食物的种类及其包含的营养成分数据,并且接下来将按照如下步骤进行计算:
- 每种食物的营养成分含量。
- 在每餐及全天中分别达到的能量总值(千卡)、蛋白质水平(克)、脂肪含量(克)、碳水化合物量(克)。
- 在每餐及全天中摄入的主要非生物活性营养元素(钙、铁、锌等矿物质;维生素A、B族等)总量。
1. import pandas as pd
2.
3. # 读取食谱数据
4. male_diet = pd.read_excel('/mnt/data/附件1:1名男大学生的一日食谱.xlsx')
5. female_diet = pd.read_excel('/mnt/data/附件2:1名女大学生的一日食谱.xlsx')
6.
7. # 读取食物成分表数据
8. food_composition = pd.read_excel('path_to_food_composition_table.xlsx')
9.
10. # 计算营养素含量
11. def calculate_nutrients(diet, food_composition):
12. nutrients = diet.merge(food_composition, on='食物名称', how='left')
13. nutrients['能量'] = nutrients['食物重量'] * nutrients['能量(kcal)'] / 100
14. nutrients['蛋白质'] = nutrients['食物重量'] * nutrients['蛋白质(g)'] / 100
15. nutrients['脂肪'] = nutrients['食物重量'] * nutrients['脂肪(g)'] / 100
16. nutrients['碳水化合物'] = nutrients['食物重量'] * nutrients['碳水化合物(g)'] / 100
17. nutrients['钙'] = nutrients['食物重量'] * nutrients['钙(mg)'] / 100
18. nutrients['铁'] = nutrients['食物重量'] * nutrients['铁(mg)'] / 100
19. nutrients['锌'] = nutrients['食物重量'] * nutrients['锌(mg)'] / 100
20. nutrients['维生素A'] = nutrients['食物重量'] * nutrients['维生素A(μg)'] / 100
21. nutrients['维生素B1'] = nutrients['食物重量'] * nutrients['维生素B1(mg)'] / 100
22. nutrients['维生素B2'] = nutrients['食物重量'] * nutrients['维生素B2(mg)'] / 100
23. nutrients['维生素C'] = nutrients['食物重量'] * nutrients['维生素C(mg)'] / 100
24. return nutrients
25.
26. male_nutrients = calculate_nutrients(male_diet, food_composition)
27. female_nutrients = calculate_nutrients(female_diet, food_composition)
28.
29. # 聚合每日营养素总量
30. daily_male_nutrients = male_nutrients.sum()
31. daily_female_nutrients = female_nutrients.sum()
32.
33. print(daily_male_nutrients)
34. print(daily_female_nutrients)
python

1.2 基于附件3,对附件1、附件2两份食谱进行调整改进
步骤:
- 基于附件3提供的高校食堂一日三餐主要食物信息统计表,请对食堂的日常运营进行优化指导。
- 请重新编排并优化调整附件1及附件2中的食谱安排,并确保其更加贴近科学合理的膳食结构要求。
1. canteen_foods = pd.read_excel('/mnt/data/附件3:某高校学生食堂一日三餐主要食物信息统计表.xlsx')
2.
3. # 根据需要调整男、女大学生的食谱
4. # 例如,增加蔬菜和水果的比例,减少高脂肪和高糖食物的比例
5.
6. def adjust_diet(diet, canteen_foods):
7. # 这里可以添加具体的调整逻辑,如选择新的食物替换不合理的食物
8. adjusted_diet = diet.copy()
9. # 假设我们增加一种蔬菜
10. new_food = canteen_foods[canteen_foods['食物类别'] == '蔬菜'].sample(1)
11. adjusted_diet = pd.concat([adjusted_diet, new_food])
12. return adjusted_diet
13.
14. adjusted_male_diet = adjust_diet(male_diet, canteen_foods)
15. adjusted_female_diet = adjust_diet(female_diet, canteen_foods)
16.
17. # 重新计算调整后的营养素含量
18. adjusted_male_nutrients = calculate_nutrients(adjusted_male_diet, food_composition)
19. adjusted_female_nutrients = calculate_nutrients(adjusted_female_diet, food_composition)
20.
21. daily_adjusted_male_nutrients = adjusted_male_nutrients.sum()
22. daily_adjusted_female_nutrients = adjusted_female_nutrients.sum()
23.
24. print(daily_adjusted_male_nutrients)
25. print(daily_adjusted_female_nutrients)
python

问题 2:基于附件3的日平衡膳食食谱的优化设计
2.1 以蛋白质氨基酸评分最大为目标建立优化模型
步骤:
- 定义优化目标函数为最大化蛋白质氨基酸分数
- 构建线性规划模型并明确约束条件
- 采用优化算法进行模型求解
1. from scipy.optimize import linprog
2.
3. # 假设有N种食物,每种食物有不同的蛋白质氨基酸评分和成本
4. N = len(canteen_foods)
5. protein_scores = canteen_foods['蛋白质氨基酸评分'].values
6. costs = canteen_foods['价格'].values
7.
8. # 目标函数:最大化蛋白质氨基酸评分
9. c = -protein_scores # 因为linprog是求解最小化问题,所以取负
10.
11. # 约束条件:保证总能量摄入、营养素摄入达到标准
12. # 例如,能量摄入要求2400 kcal
13. A_eq = [canteen_foods['能量(kcal)'].values]
14. b_eq = [2400]
15.
16. # 变量范围:每种食物的摄入量应为非负
17. bounds = [(0, None) for _ in range(N)]
18.
19. # 求解线性规划问题
20. result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
21.
22. print(result.x) # 最优食物组合
python

2.2 以用餐费用最经济为目标建立优化模型
步骤:
- 设定优化目标函数为最小化用餐费用。
- 构建线性规划模型框架,并明确约束条件的限制。
- 采用优化算法对模型进行求解以获得最优解。
1. # 目标函数:最小化用餐费用
2. c = costs
3.
4. # 约束条件:保证总能量摄入、营养素摄入达到标准
5. A_eq = [canteen_foods['能量(kcal)'].values]
6. b_eq = [2400]
7.
8. # 变量范围:每种食物的摄入量应为非负
9. bounds = [(0, None) for _ in range(N)]
10.
11. # 求解线性规划问题
12. result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
13.
14. print(result.x) # 最优食物组合
python

2.3 兼顾蛋白质氨基酸评分及经济性,建立优化模型
步骤:
- 设定复合优化目标函数,并综合考虑蛋白质氨基酸评分及用餐费用。
- 构建线性规划模型,并设定相应的约束条件。
- 采用特定的优化算法以解决上述模型。
1. # 假设我们用加权和的方法来综合考虑蛋白质氨基酸评分和用餐费用
2. alpha = 0.5 # 权重,可以根据实际需求调整
3.
4. # 综合目标函数:最小化(alpha * 用餐费用 - (1 - alpha) * 蛋白质氨基酸评分)
5. c = alpha * costs - (1 - alpha) * protein_scores
6.
7. # 约束条件:保证总能量摄入、营养素摄入达到标准
8. A_eq = [canteen_foods['能量(kcal)'].values]
9. b_eq = [2400] # 男生每日能量目标,可以根据女生的能量目标调整
10.
11. # 变量范围:每种食物的摄入量应为非负
12. bounds = [(0, None) for _ in range(N)]
13.
14. # 求解线性规划问题
15. result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
16.
17. # 最优食物组合
18. optimal_combination = result.x
19.
20. # 打印结果
21. print(optimal_combination)
python

可视化:
1. import matplotlib.pyplot as plt
2.
3. # 准备数据
4. labels = ['能量(kcal)', '蛋白质(g)', '脂肪(g)', '碳水化合物(g)',
5. '钙(mg)', '铁(mg)', '锌(mg)', '维生素A(μg)',
6. '维生素B1(mg)', '维生素B2(mg)', '维生素C(mg)', '费用(元)']
7.
8. optimal_diet1_values = optimal_diet1.values
9. optimal_diet2_values = optimal_diet2.values
10. optimal_diet3_values = optimal_diet3.values
11.
12. x = range(len(labels))
13.
14. # 绘制条形图
15. plt.figure(figsize=(12, 8))
16. plt.bar(x, optimal_diet1_values, width=0.2, label='蛋白质氨基酸评分最大', align='center')
17. plt.bar([i + 0.2 for i in x], optimal_diet2_values, width=0.2, label='费用最经济', align='center')
18. plt.bar([i + 0.4 for i in x], optimal_diet3_values, width=0.2, label='综合模型', align='center')
19.
20. plt.xlabel('营养素及费用')
21. plt.ylabel('数值')
22. plt.title('不同优化模型的营养素及费用比较')
23. plt.xticks([i + 0.2 for i in x], labels, rotation=45)
24. plt.legend()
25.
26. plt.tight_layout()
27. plt.show()
python

