2023 年全国大学生数学建模竞赛题D 题 圈养湖羊的空间利用率思路详解+Python源码
昨天已经将E题第一二问的详解和思路源码都写了出来,大家如果想从E题下手的话推荐参考本人文章,个人认为E题在建模上是优于D题的,毕竟有给出数据而且有明确的建模思路,E题我直接提供了Python源码直接可以运行即可:
2023全国大学生数学建模竞赛-E 题思路详解+Python代码源码解析
D题明显是运筹规划类题目,此类题目回答多样竞争还是比较大的,E题更好完善建模和问题细节处理方面。
简单介绍一下我自己:博主专注建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。参与过十余次数学建模大赛,三次美赛获得过二次M奖一次H奖,国赛二等奖。希望各位以后遇到建模比赛可以艾特一下我,我可以提供免费的思路和部分源码,以后的数模比赛只要我还有时间肯定会第一时间写出免费开源思路。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码且完全免费。
一文速学-数学建模常用模型
希望有需求的小伙伴不要错过笔者精心打造的文章。这里重述一遍:本人不出售任何建模资料和资源,建模仅为个人爱好!
那么废话不多说开始进行D题的思路详解。
题目背景
养殖场的经营管理者为保障效益,需要通过制定生产计划来优化养殖场的空间利用率。这 里的生产计划,主要是决定什么时间开始对多少可配种的基础母羊进行配种,控制羊只的繁育 期,进而调节对羊栏的需求量,以确保有足够多的羊栏,同时尽量减少羊栏闲置。当羊栏不够 时,可以租用其他场地。
湖羊养殖的生产过程主要包括繁殖和育肥两大环节。人工授精技术要求高,因此湖羊繁殖 大多采用种公羊和基础母羊自然交配的方式。怀孕母羊分娩后给羔羊哺乳,羔羊断奶后独立喂 饲,育肥长成后出栏。自然交配时将若干基础母羊与一只种公羊关在一个羊栏中,自然交配期 约为 3 周,然后将种公羊移出。受孕母羊的孕期约为 5 个月,每胎通常产羔 2 只。母羊分娩后 哺乳期通常控制在 6 周左右,断奶后将羔羊移至育肥羊栏喂饲。一般情况下,羔羊断奶后经过 7 个月左右育肥就可以出栏。母羊停止哺乳后,经过约 3 周的空怀休整期,一般会很快发情, 可以再次配种。按上述周期,正常情况下,每只基础母羊每 2 年可生产 3 胎。在不考虑种公羊 配种能力差异的情况下,种公羊与基础母羊一般按不低于 1:50 的比例配置。种公羊和母羊在非 交配期原则上不关在同一栏中。 某湖羊养殖场设置标准羊栏,规格是:空怀休整期每栏基础母羊不超过 14 只;非交配期的 种公羊每栏不超过 4 只;自然交配期每栏 1 只种公羊及不超过 14 只基础母羊;怀孕期每栏不超 过 8 只待产母羊;分娩后的哺乳期,每栏不超过 6 只母羊及它们的羔羊;育肥期每栏不超过 14 只羔羊。原则上不同阶段的羊只不能同栏。
我们需要梳理题目给的关键信息:
- 湖羊的生长周期和不同阶段所需的空间要求。
- 不同阶段的羊只的数量和比例,例如基础母羊、种公羊等。
- 每个阶段的羊只栏的规格和容量。
我们可以建立一个数学模型,通过对不同阶段的羊只数量和状态进行动态调整,来达到最优的空间利用率。
问题一
不考虑不确定因素和种羊的淘汰更新,假定自然交配期 20 天,母羊都能受孕,孕 期 149 天,每胎产羔 2 只,哺乳期 40 天,羔羊育肥期 210 天,母羊空怀休整期 20 天。该湖羊 养殖场现有 112 个标准羊栏,在实现连续生产的条件下,试确定养殖场种公羊与基础母羊的合 理数量,并估算年化出栏羊只数量的范围。若该养殖场希望每年出栏不少于 1500 只羊,试估算 现有标准羊栏数量的缺口。
题解
首先我们要明确一只年出栏羊的流程:
整理一下给定的信息:
- 自然交配期:20天
- 孕期:149天
- 每胎产羔:2只
- 哺乳期:40天
- 羔羊育肥期:210天
- 母羊空怀休整期:20天
- 现有标准羊栏数量:112个
- 希望每年出栏不少于1500只羊
限定条件:
- 种公羊与基础母羊一般按不低于 1:50 的比例配置
- 空怀休整期每栏基础母羊不超过 14 只
- 非交配期的 种公羊每栏不超过 4 只
- 自然交配期每栏 1 只种公羊及不超过 14 只基础母羊
- 怀孕期每栏不超 过 8 只待产母羊
- 分娩后的哺乳期,每栏不超过 6 只母羊及它们的羔羊
- 育肥期每栏不超过 14 只羔羊
- 不同阶段的羊只不能同栏
接下来我们来进行程序模拟,最终我们的期望的结果希望出栏羊达到1500只。Python的模拟应该包括:
- 定义初始的羊只数量和羊栏容量。
- 使用循环模拟多个时间步骤(比如模拟一年的时间)。
- 在每个时间步骤中,计算每个阶段的羊只数量和羊栏利用情况。
- 根据规则移动羊只到适当的羊栏,确保不超过容量限制。
- 考虑季节性因素,如生育季节、交配、分娩等。
- 更新羊只的状态,包括怀孕、产羔、哺乳、育肥等状态。
- 记录每个时间步骤的羊只数量、羊栏利用情况以及出栏的羊只数量。
- 继续模拟直到满足出栏数量的要求或者达到一定的时间步骤。
由于题目并没有给我们明确初始我们有多少母羊和种公羊的数量,我们可以先模拟假设有600只基础母羊数量,12只种公羊数量。
# 初始条件
basic_ewes = 300 # 基础母羊数量
ram = 6 # 种公羊数量
加入阶段参数:
# 阶段参数
natural_mating_period = 20
gestation_period = 149
lactation_period = 40
fattening_period = 210
rest_period = 20
需要我们加入标准羊栏的规格去限制模拟状况:
# 羊栏规格
pen_capacity = {
"natural_mating": {"ram": 1, "ewes": 14},
"pregnancy": {"ewes": 8},
"lactation": {"ewes": 6, "lambs": 6},
"fattening": {"lambs": 14}
}
之后输入参数,设定为一年时间模拟湖羊出栏过程即可:
# 记录出栏羊只数量
slaughtered_lambs = 0
# 输出结果
print(f"出栏羊只数量:{slaughtered_lambs:.2f} 只")
结合养殖场的期望空值初始羊群公母羊配置即可,控制到1500只后计算标注羊栏的数量缺口,将所需羊栏数量与现有的112个标准羊栏进行比较,以计算出差额。
# 所需羊栏数量
required_pens = max(used_pens.values())
# 现有羊栏数量
existing_pens = 112
# 计算羊栏缺口
pen_shortage = required_pens - existing_pens
**只希望各位以后遇到建模比赛可以艾特认识一下我,我可以提供免费的思路和部分源码,以后的数模比赛只要我还有时间肯定会第一时间写出免费开源思路,你们的关注和点赞就是我写作的动力!!!**想要了解更多的欢迎联系博主~~~~另外再向大家推荐一下笔者精心打造的专栏。此专栏的目的就是为了让零基础快速使用各类数学模型以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码:
博主~~~~另外再向大家推荐一下笔者精心打造的专栏。此专栏的目的就是为了让零基础快速使用各类数学模型以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码:
好了那么我们抓紧时间开始做问题二!!待会更新~~