2024年高教社杯全国大学生数学建模C题
2024年高教社杯全国大学生数学建模C题
前言
大家好,我是fanstuck。数学建模不仅是解决复杂现实问题的一种有效工具,也是许多学科和行业中的关键技能。从工程、经济到生物、环境等多个领域,数学建模为我们提供了将实际问题转化为数学形式,并利用数学理论和方法进行求解的强大能力。然而,对于许多初学者而言,如何快速准备数学建模,掌握并运用各种建模技巧,仍然是一个亟待解决的挑战。
作为一名从事数学建模多年的博主,专注数学建模已有五年时间,期间参与了数十场不同规模的建模比赛,积累了丰富的经验。无论是模型原理、建模流程,还是各类题目分析方法,我都有深入的理解。为了帮助更多的建模爱好者,我都会在这个专栏中免费分享我的建模思路、技巧以及部分源码。每一场数模比赛,只要我有时间,我都会第一时间提供免费的开源思路和详细解答,力求让每位小伙伴都能快速掌握并应用数学建模的方法。无论你是刚入门的新手,还是经验丰富的选手,相信这里的内容都能为你带来启发。在此专栏中,你将到最新的比赛思路、详细的分析过程、完整的代码实现!希望大家能够持续关注,不错过任何一个精彩的建模干货。
赛题2
根据经验,小麦和玉米未来的预期销售量有增长的趋势,平均年增长率介于5%~10%之间,其他农作物未来每年的预期销售量相对于 202 年大约有±5%的变化。农作物的亩产量往往会受气候等因素的影响,每年会有±10%的变化。因受市场条件影响,农作物的种植成本平均每年增长5%左右。粮食类作物的销售价格基本稳定;蔬菜类作物的销售价格有增长的趋势,平均每年增长5%左右。食用菌的销售价格稳中有降,大约每年可下降1%~5%,特别是羊肚菌的销售价格每年下降幅度为5%。 请综合考虑各种农作物的预期销售量、亩产量、种植成本和销售价格的不确定性以及潜在的种植风险,给出该乡村 2024~200 年农作物的最优种植方案,将结果填入 result2.xlsx 中(模板文件见附件 )
赛题解析
2024年高教社杯全国大学生数学建模C题-农作物的种植策略详解+思路+Python源码(一)。
主要思路
1.针对不确定的参数(销售量、亩产量、种植成本、销售价格)设定合理的波动范围或增长率区间,构造多个情景 (Scenario);
2.在每个情景下,参数取不同的组合值,从而获得若干个可能的未来情形;
.通过情景优化或鲁棒优化方法,得到对所有情景都具有较好表现的种植方案,从而降低决策对单一预测的依赖,规避种植风险。
1.不确定参数及其波动规律
根据题意,未来 2024~200 年各项参数大致有以下变化趋势(对比 202 年或上一年):
1.预期销售量D_{j,s,t}
- 小麦、玉米:年增长率 5% ~ 10%;
- 其他农作物:±5% 以内波动。
2.亩产量Y_{j,i,s,t}
- 受气候等因素影响,每年可能有 ±10% 的变化。
.种植成本C_{j,i,s,t}
- 每年平均增长 5% 左右(可能是个区间,如 % ~ 7%)。
4.销售价格P_{j,t}
- 粮食类:价格基本稳定(可视为 0% ~ 2% 小幅波动)。
- 蔬菜类:平均每年增长 5% 左右(可设 % ~ 7% 的区间)。
- 食用菌:价格每年下降 1% ~ 5%,其中羊肚菌为 5% 稳定下降。
2.建立情景 (Scenario) 集合
要在一个模型中综合考虑不确定性,常用做法之一是“场景分析 (Scenario Analysis)”。可令:
表示一组可能的未来情景(ω∈Ω)。在每个情景下,对上面提到的参数做不同组合的增减或增速设置。例如:
- 根据最乐观、最悲观以及若干中间情况,构造 ~5 个或者更多情景。
- 也可以按拉丁超立方采样 (Latin Hypercube) 或蒙特卡洛随机抽样方式从增幅区间中采样若干组数值,构造场景集合。
这样,就能在模型中对每个情景下的参数
分别赋值。
示例:
- ω=1:“乐观”场景,小麦玉米销售量增速取 10%,亩产量正向波动 +10%,蔬菜价格增长 +7%,食用菌价格仅 -1% 等。
- ω=2:“悲观”场景,小麦玉米销售量增速取 5%,亩产量 -10%,蔬菜价格仅 +%,食用菌价格 -5% 等。
- ω=,4...:更多中间场景。
在每个场景下,时间序列 (2024~200) 的逐年累积变化率也可按照各自假设进行编排。
1. 决策变量
如同问题 1 中的决策变量x_{i,j,s,t}(第 t 年第 s 季地块 i 种作物 j 的面积)仍保持不变。区别在于,若要在所有情景中使用同一套种植方案,可称之为先验型 (Here-and-ow) 决策;如果允许每个情景下种植决策随之调整,则是事后型 (Wait-and-See) 决策。农业中通常要先选好种植方案再面对不确定的市场与气候,因此更多情况下我们考虑“同一套方案”在不同情景下的表现。
2. 情景目标的常见处理方式
期望收益最大化 (Stochastic Optimization)
其中 Z^{ω}为在情景 ω 下的收益。这种做法力图让平均收益最高,但可能在某些悲观情景下收益很差。
最小后悔值 (Minimax Regret) 或 极小化最差收益 (Maximin)
- Maximin:maxmin_{ω∈Ω}Z^ω,即让最差情景下的收益最高,注重稳健性。
- Minimax Regret:需定义“后悔值 (Regret)”为“对该情景最优解与本解在该情景下收益的差”。然后最小化最大后悔值。
加权综合 (混合方法)
- 设置一个风险系数 λ,在最大期望收益与最大化最差收益之间做加权或分层多目标。
在实践中,期望收益和风险稳健性往往都需要考量,可使用多目标或在目标函数中增加惩罚项。
其中 α∈[0,1] 控制对“平均收益”和“最差收益”的重视程度。
. 整合到数学模型
若采用单一解对所有情景生效,即对x_{i,j,s,t}不增加场景索引,而参数随情景变化,则模型主体可写为:
集合增加:ω∈Ω
产量:
超产/不足定义(参考问题 1),但要在情景 ω下分别定义U_{j,s,t}^{ω},W_{j,s,t}^{ω}
情景收益:
或 maximin、minimax regret 等不同形式。
- 其余约束(例如豆类轮作、不连续重茬等)在所有情景下均相同,无需增加情景下标,因为轮作与重茬是对种植方案本身的要求,独立于外部市场波动。
题中还提到“潜在的种植风险”,通常可在模型中引入风险度量:
- 若产量或市场价格低时,收益会受损;
- 或者因为投入成本逐年攀升导致利润下降等。
常见做法是在模型中加入VaR(价值-at-风险)、CVaR(条件价值-at-风险)等风险约束,也需要场景分析来估计在高损失场景下的概率与期望损失。
其中 α 是置信水平,η 是可接受的损失阈值。也可以在目标函数中加入惩罚项。这些方法实现起来较复杂,需要在每个情景下计算收益或损失,然后通过额外的变量与约束来表达 VaR / CVaR。对于简单的竞赛建模,也可通过控制“最差收益”*或*多目标权衡平均收益与最差收益的方式来替代。
1.数据准备
对每个t∈{2024,…,200} 和每个情景 ω,生成不确定参数:
可以将这些数据存于表格或字典结构中(如 Python 里 dict[(j,s,t,omega)]
形式)。
2.模型构建
- 引入场景索引 ω,并根据选定的鲁棒优化目标(最大期望收益,或 maximin,或带风险惩罚) 构建对应的目标函数。
- 其他约束(土地、轮作、不连续重茬等)同问题1,保持对所有情景通用。
.求解与输出
- 求得的最优解
不带情景下标,表示对所有情景都使用相同种植方案。
- 将结果输出到
result2.xlsx
。在报告中可附上各情景下的收益或风险指标对比,展示该方案的稳健性。
Python + Pyomo 情景建模思路
代码语言:javascript代码运行次数:0运行复制import as pyo
# ---- 1. 定义基本集合 ----
T = [2024, 2025, 2026, 2027, 2028, 2029, 200]
S = [1, 2]
I = [...] # 地块
J = [...] # 作物
Omega = [...] # 情景集合, e.g. [1,2,,4,5]
# ---- 2. 数据读入或预先生成 ----
# 例如 D[(j,s,t,omega)], Y[(j,i,s,t,omega)], etc.
# 需要将每个omega下的参数都准备好
D = {}
Y = {}
C = {}
P = {}
# ...
# ---- . 建立模型 ----
model = pyo.ConcreteModel("Scenario_Model")
# 决策变量 x_{i,j,s,t} 不含omega下标 (先验决策)
model.x = pyo.Var(I, J, S, T, domain=)
# 对于超产/不足, 在每个场景下都要定义 U_{j,s,t,omega}, W_{j,s,t,omega}
model.U = pyo.Var(J, S, T, Omega, domain=)
model.W = pyo.Var(J, S, T, Omega, domain=)
# y_{i,j,s,t} 同理, 不含omega索引, 因为轮作/重茬对所有情景同一要求
model.y = pyo.Var(I, J, S, T, domain=pyo.Binary)
# ---- 4. 约束 ----
# 与问题1类似, 这里省略重复, 只展示其中的情景相关部分.
# (a) 产量 = sum_i (Y_{j,i,s,t,omega} * x_{i,j,s,t})
def Q_expr(model, j, s, t, omega):
return sum(Y[(j,i,s,t,omega)] * model.x[i,j,s,t] for i in I)
model.Q = pyo.Expression(J, S, T, Omega, rule=Q_expr)
# (b) U, W 定义
def U_rule(model, j, s, t, omega):
return model.U[j,s,t,omega] >= model.Q[j,s,t,omega] - D[(j,s,t,omega)]
model.UCtraint = pyo.Ctraint(J, S, T, Omega, rule=U_rule)
def W_rule(model, j, s, t, omega):
return model.W[j,s,t,omega] >= D[(j,s,t,omega)] - model.Q[j,s,t,omega]
model.WCtraint = pyo.Ctraint(J, S, T, Omega, rule=W_rule)
# 其余: 土地约束, y与x关联, 不连续重茬, 豆类轮作等, 与问题1一致(不含omega索引)。
# ---- 5. 目标函数: 以期望收益为例 ----
def obj_rule(model):
# 先计算每个omega下的收益
# 示例使用"情形(1) 超产无收益"写法, 也可改成情形(2)
revenue_omega = []
for omega in Omega:
# Revenue in scenario omega
rev_omega = 0
cost_omega = 0
for t in T:
for s in S:
for j in J:
rev_omega += P[(j,t,omega)] * (D[(j,s,t,omega)] - model.U[j,s,t,omega])
for i in I:
for j in J:
cost_omega += C[(j,i,s,t,omega)] * model.x[i,j,s,t]
revenue_omega.append(rev_omega - cost_omega)
# 期望收益(简单平均)
return sum(revenue_omega)/len(Omega)
model.OBJ = pyo.Objective(rule=obj_rule, sense=)
# ---- 6. 求解 ----
solver = pyo.SolverFactory('gurobi')
results = solver.solve(model, tee=True)
# ---- 7. 输出结果到 result2.xlsx ----
# 同前类似, 将 x_{i,j,s,t} 写入Excel
数据层面:根据题意,需要对 202 年基准值进行逐年“增减”或“增速”设定,构造多情景(omega),并在 (j,s,t,omega) 维度下记录 {D,Y,C,P} 的具体数值。
模型层面:在问题 1 的基础上,添加情景索引,对产量、销售量、价格、成本等做情景化表达;在目标函数中使用期望型、极小最大损失型或其他鲁棒型目标。
求解输出:将得到一个在未来 7 年 (2024~200) 针对不同不确定情景都比较稳健的种植方案;在 result2.xlsx
中记录最终的 x_{i,j,s,t} 分配即可。
风险控制:如需更深入的风险约束,可考虑 CVaR 等模型;竞赛中常用多场景平均 + 最差情景加权的方式即可基本满足需求。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 中国春节 | 10分钟前 发表 |
玉米:年增长率 5% ~ 10%;其他农作物:±5% 以内波动 | |
本站网友 病退的条件 | 20分钟前 发表 |
即对x_{i | |
本站网友 沈阳万达公馆 | 21分钟前 发表 |
即对x_{i | |
本站网友 crm系统是什么 | 6分钟前 发表 |
数学建模为我们提供了将实际问题转化为数学形式 | |
本站网友 麦道夫诈骗案 | 14分钟前 发表 |
omega)] | |
本站网友 豆浆的营养价值 | 23分钟前 发表 |
即对x_{i | |
本站网友 抵牾 | 24分钟前 发表 |
i | |
本站网友 武林英雄外挂 | 1分钟前 发表 |
for j in J | |
本站网友 fck | 16分钟前 发表 |
ω=2:“悲观”场景 | |
本站网友 练功十八法 | 8分钟前 发表 |
可考虑 CVaR 等模型;竞赛中常用多场景平均 + 最差情景加权的方式即可基本满足需求 | |
本站网友 高护学校 | 6分钟前 发表 |
omega) 维度下记录 {D | |
本站网友 高礼泽 | 10分钟前 发表 |
Minimax Regret:需定义“后悔值 (Regret)”为“对该情景最优解与本解在该情景下收益的差” | |
本站网友 长春健身房 | 20分钟前 发表 |
在此专栏中 | |
本站网友 权亚 | 1分钟前 发表 |
参数取不同的组合值 | |
本站网友 程海湖 | 21分钟前 发表 |
技巧以及部分源码 | |
本站网友 互联星空 | 18分钟前 发表 |
. 整合到数学模型若采用单一解对所有情景生效 | |
本站网友 我勒个去 | 25分钟前 发表 |
经济到生物 | |
本站网友 最后的诊断 | 12分钟前 发表 |
domain=) # y_{i |