2024 电工杯高校数学建模竞赛(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路!

作为经验丰富的数学建模团队,我们将为你带来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。则优化目标为:

更多内容具体可以看看我的主页!
和 《小天数模》 团队,同名公众号 一起拿奖!里面包含本次竞赛全部思路与分析!

包含本次比赛全部题目和单题思路与代码,代码和文章会不断更新

关注小天数模,你们的支持是我更新的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/639047.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设置 sticky 不生效?会不会是你还是没懂 sticky?

官方描述 基本上可以看懂的就会知道。sticky 是相对于存在滚动条的内容的,啥意思? 就是不论你被谁包着,你只会往上找有 overflow 属性的盒子进行定位,包括:overflow:hidden; overflow:scroll; overflow:auto; overflo…

PMP 学习笔记(增量更新中)

PMP 作为最流行的项目管理方法论,是项目管理领域的对话基础,了解它能帮助我理解术语和规范的管理过程,也许后面会考一个认证。感谢 B 站视频《 PMP 认证考试课程最新完整免费课程零基础一次通过项目管理 PMP 考试》的作者,我通过它…

山脉数组的峰顶索引 ---- 二分查找

题目链接 题目: 分析: 我们很明显, 可以从峰值位置将数组分成两段, 具有"二段性", 所以可以用二分查找因为arr是山峰数组, 不存在相等的情况如果arr[mid] > arr[mid 1], 说明mid的位置可能是峰值, 移动right mid如果arr[mid] < arr[mid 1], 说明mid的位置…

【ZYNQ】GPIO 与 AXI GPIO

在嵌入式开发中&#xff0c;GPIO 是最常见的外设。GPIO 是 General Purpose I/O 的缩写&#xff0c;译为通用输入/输出。GPIO 用于连接外部设备&#xff0c;例如按键、传感器等&#xff0c;实现数字信号的输入或输出功能。本文主要介绍 Zynq GPIO 的基本概念&#xff0c;并对比…

物理服务器介绍

物理服务器介绍 概述分类按服务器应用分类按服务器结构分类塔式服务器机架式服务器刀片式服务器机架式服务器与刀片式服务器的对比按处理器个数分类按处理器架构分类 主板概述工作原理物理结构技术参数 CPU概述工作原理指令集相关技术技术参数主流产品 内存概述类型相关技术技术…

Python中文件操作和异常处理

文章目录 一、文件操作1.概念2.文件3.二进制 二、基本文件操作三、乱码产生四、with open() as f五、代码实现文件复制粘贴六、try ... except ...七、代码比较 一、文件操作 1.概念 帮助我们把爬虫抓下来的数据&#xff0c;进行保存。 2.文件 在计算机中&#xff0c;没有p…

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高&#xff0c;越来越多的人在面临心理压力、情感困扰或生活困境时&#xff0c;需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题&#xff0c;比如担心被他人知晓自己的隐私等&#xff0c;这就导致了人…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…

Leaflet【三】图层组 geoJson 热力图

图层组 LayerGroup 用于将几个图层分组并作为一个整体处理。如果你把它添加到地图上&#xff0c;任何从该组中添加或删除的图层也会在地图上添加/删除。 L.layerGroup([marker1, marker2]).addTo(map);使用图层组有什么好处呢&#xff1f;这个在后面有说到&#xff0c;这里的…

Unity射击游戏开发教程:(19)控制生命进度条

在这篇文章中,我们将讨论如何添加一个不是条形而是心形的生命条。这种方法不使用 UI 滑块,而是使用 UI 图像。 第一步是创建要填充的栏的轮廓。我使用 Aseprite 制作像素艺术,并慢慢地将我的太空射击游戏转变为经典的像素街机游戏。

网络安全、信息安全、数据安全的定义与区别

信息安全 信息安全是指信息的保密性、完整性、可用性和真实性的保持。从定义角度来说&#xff0c;信息安全没有严格标准定义&#xff0c;但从信息安全涉及的内容出发&#xff0c;信息安全确保信息存储或传输中的信息&#xff0c;不被他人有意或无意的窃取与破坏。这里的“信息”…

Leetcode刷题笔记3

18. 四数之和 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&…

vue期末复习选择题1

1. 下面哪一项描述是错误的&#xff1f;&#xff08;B&#xff09; A.$("ul li:gt(5):not(:last)")选取ul标记里面索引值大于5且不是最后一个的li元素B.$("div").find("span")选取div元素的子元素spanC.$("div.showmore > a")选取…

合约开发的基本结构剖析及前置知识梳理

前置知识点 上下文变量初步 合约函数的背后是transaction&#xff0c;上下文变量访问的是transaction中的信息两个上下文变量&#xff1a;tx和msg ERC20 规范代码实现Metamask测试 ganache-cli的安装 安装 npm install -g ganache-cli启动 ganache-cli如果出现以下这种…

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨 一、引言 在工业自动化领域中&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;作为核心控制设备&#xff0c;其性能的稳定性和可靠性直接关系到整个生产线的运行效率。本特利&#xff08;Bentley&#xff09;…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接&#xff1a;1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

获取日期区间的所有日期

借助moment.js 转换指定格式&#xff0c;首先安装npm install moment --save methods:{enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate&#xff0c;且二者不相等let daysList [];let SDate this.$moment(startDate);let EDate …

计算机系统基础 8 循环程序

概要 两种实现方法——分支指令实现和专门的循环语句实现以及有关循环的优化。 分支指令实现 倒计数 …… MOV ECX&#xff0c;循环次数 LOOPA&#xff1a;…… …… DEC ECX JNE LOOPA 正计数 …… MOV ECX&#xff0c;0 LOOPA&#xff1a; …… INC ECX CMP …

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中&#xff0c;在进入它的U-Boot后&#xff0c;会自动弹出一个菜单页面&#xff0c;输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等&#xff1a; 目标 本…

ESP8266实现获取天气情况

利用太极创客提供的ESP8266 心知天气库获取天气情况并显示 心知天气库地址&#xff1a; ESP8266-心知天气: 本库主要功能为使用ESP8266物联网开发板通过心知天气 API 获取天气等信息。 clone到本地: git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git 安装该…