2024电工杯数学建模B题思路模型代码

完整内容更新见文末名片

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两份食谱的全面膳食营养评价

步骤:

  1. 分析食物结构:按类别将食谱中食物归类排序,列出每种食物的数量,分析五大类别食物是否齐全。
  2. 计算食谱的主要营养素含量:从《中国食物成分表》中查出每100克可食部食物所含主要营养素的数量,从而算出食谱中各种主要营养素的含量。
  3. 评价食谱提供的能量、餐次比及非产能主要营养素含量:根据每日能量摄入目标、餐次比参考值及非产能主要营养素的参考摄入量,对食谱进行评价。
  4. 评价食谱的能量来源:将食谱中碳水化合物、脂肪、蛋白质供能占总能量的百分比与宏量营养素供能占总能量百分比的参考值比较。
  5. 评价每餐的蛋白质氨基酸评分:计算每餐混合食物的蛋白质氨基酸评分,依此评价每餐食物蛋白质氨基酸组成是否合理。

数据处理与分析:

我们需要从附件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)'] / 100
        nutrients['蛋白质'] = nutrients['食物重量'] * nutrients['蛋白质(g)'] / 100
        nutrients['脂肪'] = nutrients['食物重量'] * nutrients['脂肪(g)'] / 100
        nutrients['碳水化合物'] = nutrients['食物重量'] * nutrients['碳水化合物(g)'] / 100
        nutrients['钙'] = nutrients['食物重量'] * nutrients['钙(mg)'] / 100
        nutrients['铁'] = nutrients['食物重量'] * nutrients['铁(mg)'] / 100
        nutrients['锌'] = nutrients['食物重量'] * nutrients['锌(mg)'] / 100
        nutrients['维生素A'] = nutrients['食物重量'] * nutrients['维生素A(μg)'] / 100
        nutrients['维生素B1'] = nutrients['食物重量'] * nutrients['维生素B1(mg)'] / 100
        nutrients['维生素B2'] = nutrients['食物重量'] * nutrients['维生素B2(mg)'] / 100
        nutrients['维生素C'] = nutrients['食物重量'] * nutrients['维生素C(mg)'] / 100
        return nutrients
    
    male_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_diet
    
    adjusted_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.values
    
    x = 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()
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值