1. 项目概述从赛题到解题的实战路径又到了一年一度的高教社杯全国大学生数学建模竞赛以下简称“国赛”的备战季。对于很多参赛队伍尤其是第一次接触建模的同学来说拿到赛题后最头疼的往往不是某个具体的算法而是如何将一道抽象的、充满现实背景的题目转化为一套清晰、可执行、能出成果的解题方案。D题作为国赛中常出现的“综合性应用题”或“数据分析题”的代表其特点就是背景贴近实际、数据可能复杂、求解目标多元非常考验队伍的系统性思维和工程化实现能力。今天我就以“2023年高教社杯全国大学生数学建模思路D题思路与Python代码”这个主题为引子结合我多年指导比赛和评审论文的经验拆解一套从审题到代码落地的完整方法论。这篇文章不仅适合备战2023年及以后国赛的同学也适合任何希望提升用数学和编程解决实际问题能力的朋友。我们会聚焦于如何构建思路并辅以Python代码片段作为实现支撑让你手里的工具真正为思路服务。2. D题典型特征与破题关键点解析国赛D题通常不会涉及过于深奥的纯数学理论而是将工程、经济、社会、环境等领域的问题进行数学抽象。其核心特征可以概括为“背景强、数据杂、模型活、评价多”。这意味着题目会给你一个生动的故事场景比如城市供水调度、物流路径优化、碳排放评估等提供可能来自多源头、格式不一的数据要求你灵活组合或创新模型并且最终的评价体系往往是多指标的。2.1 核心需求拆解题目到底在问什么面对一篇长达一两页的题目描述第一步不是急于找模型而是做“阅读理解”。你需要像解构一个产品需求一样解构赛题。我通常建议队伍用半小时到一小时共同完成以下几步标出所有名词和动词用不同颜色的笔或高亮标记出题目中的关键实体如“光伏电站”、“充电桩”、“运输成本”和关键动作如“预测”、“优化”、“评估”、“分配”。这能帮你快速抓住核心要素。识别边界条件与假设题目中明确给出的“假设”、“忽略”、“视为”等词语后面的内容就是你的建模世界的基本规则。例如“假设充电桩故障率服从指数分布”这直接决定了你后续可靠性分析部分的模型选择。量化问题目标将模糊的“寻求最佳方案”、“提高效率”转化为具体的数学表达式。是求最小值如总成本最小、时间最短还是最大值如收益最大、覆盖率最高或者是多目标之间的平衡用“目标函数 min Z ...”或“max U ...”的形式写下来。梳理输入与输出明确题目给了什么数据输入要求你最终提交什么结果输出。输出可能包括一系列数值结果、一张优化后的调度图、一套评价排名、一份政策建议报告等。注意很多队伍在这里会犯“想当然”的错误。比如题目要求“预测未来五年的需求量”有的队伍直接套用线性回归却忽略了题目数据中可能存在的季节性、周期性或政策突变点。审题阶段一定要忠于题目文本所有模型和假设的出发点都应是题目描述本身。2.2 思路构建框架从问题到模型的桥梁在清晰理解需求后你需要一个框架来组织你的解题思路。我推荐使用“分层递进”式框架第一层问题界定与系统分析。将实际问题抽象为一个系统定义系统边界、内部元素变量、元素间关系约束。用框图Flowchart画出系统流程图这对理清逻辑有奇效。例如对于一个物流配送问题你的系统框图应包括仓库、配送点、车辆、道路、货物、时间、成本等元素及其连接关系。第二层模型选择与适配。根据第一层分析匹配或设计数学模型。D题常见模型组合包括预测类时间序列分析ARIMA, Holt-Winters、回归分析线性、非线性、机器学习随机森林、XGBoost用于预测。选择依据是数据特征线性/非线性、是否有时序依赖。优化类线性/非线性规划、整数规划、动态规划、网络优化最短路径、最大流、启发式算法遗传算法、模拟退火、蚁群算法。选择依据是目标函数和约束条件的性质是否线性、变量是否离散、问题规模。评价类层次分析法AHP、熵权法、TOPSIS、模糊综合评价。用于处理多指标、主观权重或模糊信息下的方案排序。模拟类蒙特卡洛模拟、系统动力学、离散事件仿真。用于评估随机因素影响或复杂系统随时间演变的过程。第三层求解策略与算法实现。确定了数学模型就要想怎么算出来。是用MATLAB的fmincon还是Python的PuLP或SciPy对于NP-Hard问题是设计精确算法的分支定界还是用启发式算法求满意解这一层直接对应到代码编写。第四层结果分析与可视化。算出的数字不是终点如何解释这些数字并用图表直观展示使其支撑你的结论和建议是获得高分的关键。相关性热力图、优化前后对比图、地理信息GIS可视化、动态演化图等都是利器。这个框架不是线性的而是迭代的。你可能在模型求解时发现约束漏了需要返回第一层补充也可能在结果分析时发现模型假设不合理需要返回第二层调整。3. 以Python为核心的建模工具箱搭建Python因其强大的科学生态库已成为数学建模的首选语言之一。但“一把梭”导入所有库并不明智。根据D题的常见需求我建议搭建一个层次化的工具栈。3.1 核心库选型与职责划分# 数据处理的基石 import pandas as pd # 表格数据操作读/写Excel/CSV数据清洗、合并、分组聚合 import numpy as np # 数值计算核心数组操作、线性代数、随机数生成 # 数据可视化 import matplotlib.pyplot as plt # 基础绘图高度自定义 import seaborn as sns # 统计图形更美观的默认样式如热力图、分布图 # 可选plotly 或 pyecharts 用于交互式图表在论文中可放静态截图 # 数学模型与求解 from scipy import optimize # 优化算法最小化、方程求根、曲线拟合 import statsmodels.api as sm # 统计模型回归、时间序列 from sklearn import linear_model, ensemble, preprocessing # 机器学习预测、分类、数据标准化 # 专门优化库按需 # import pulp # 线性/整数规划建模 # from ortools.linear_solver import pywraplp # Google OR-Tools强大的优化求解器 # 其他实用工具 import warnings warnings.filterwarnings(ignore) # 忽略烦人的警告信息保持输出整洁选型理由Pandas和NumPy是数据处理的黄金搭档缺一不可。Matplotlib是绘图基础Seaborn在其之上提供了更高级的统计图形接口。SciPy的optimize模块足以应对大多数无约束/有约束的优化问题。对于预测问题statsmodels提供严谨的统计推断而scikit-learn提供更统一的机器学习接口和强大的集成算法。专门的优化库如PuLP在描述线性规划模型时语法更直观。3.2 环境配置与项目管理实战心得很多队伍在比赛后期被环境问题搞得焦头烂额。我的建议是使用Conda管理环境在比赛开始前创建一个专门的建模环境。conda create -n math_modeling_2023 python3.9 conda activate math_modeling_2023 pip install pandas numpy matplotlib seaborn scipy statsmodels scikit-learn jupyter将环境所需的库列表pip freeze requirements.txt保存在团队共享文件夹中确保所有成员环境一致。项目目录结构标准化建立清晰的文件夹利于协作和版本管理。team_work/ ├── data/ # 存放原始数据和清洗后的数据 │ ├── raw/ # 原始数据只读不修改 │ └── processed/ # 处理后的数据 ├── src/ # 源代码 │ ├── data_preprocessing.py │ ├── model_1_forecast.py │ ├── model_2_optimization.py │ └── utils.py # 公共函数 ├── docs/ # 参考文献、题目PDF等 ├── output/ # 生成的图表、结果文件 └── main.ipynb # 主控笔记本按顺序调用各模块展示完整流程Jupyter Notebook/Lab作为主战场Notebook非常适合探索性数据分析、模型调试和结果即时展示。但要注意最终用于论文的代码和结果最好从Notebook中提取并整理成规范的.py脚本以保证可复现性。可以在Notebook中使用%run src/data_preprocessing.py的方式来调用模块化脚本。实操心得在比赛开始的第一个小时不要急着写代码。花20分钟统一团队的环境和目录结构能省去后面无数“在我电脑上好好的”这类问题的时间。另外在Notebook中多用Markdown单元格记录你的思考过程、模型假设和临时结论这本身就是论文初稿的素材。4. 典型D题场景预测与优化组合模型实战我们假设一个典型的D题场景“基于历史发电量和气象数据预测未来一周光伏电站的出力并以此为基础优化电网的储能调度策略以最小化总运行成本。”这个题目融合了预测和优化两大核心。4.1 数据预处理与特征工程假设我们拿到了历史发电功率、辐照度、温度、湿度的时序数据。import pandas as pd import numpy as np # 1. 加载数据 df pd.read_csv(./data/raw/pv_station.csv, parse_dates[timestamp]) df.set_index(timestamp, inplaceTrue) # 2. 探索性数据分析EDA print(df.info()) print(df.describe()) # 可视化初步查看 import matplotlib.pyplot as plt fig, axes plt.subplots(2, 2, figsize(12, 8)) df[power].plot(axaxes[0,0], title发电功率时序图) df[irradiance].plot(axaxes[0,1], title辐照度时序图) df[temperature].plot(axaxes[1,0], title温度时序图) df[humidity].plot(axaxes[1,1], title湿度时序图) plt.tight_layout() plt.savefig(./output/eda_timeseries.png, dpi300) plt.show() # 3. 处理缺失值与异常值 # 检查缺失 print(f缺失值统计:\n{df.isnull().sum()}) # 对于时间序列常用前后时刻均值或插值法填充 df_filled df.interpolate(methodtime) # 按时间插值 # 利用箱线图或3sigma原则识别异常值 from scipy import stats z_scores np.abs(stats.zscore(df_filled.select_dtypes(include[np.number]))) df_clean df_filled[(z_scores 3).all(axis1)] # 剔除Z-score大于3的极端值 # 4. 特征工程 df_clean[hour] df_clean.index.hour df_clean[day_of_week] df_clean.index.dayofweek df_clean[month] df_clean.index.month # 创建滞后特征对于预测下一时刻功率前几个时刻的值很重要 for lag in [1, 2, 3, 24]: # 滞后1,2,3小时和1天 df_clean[fpower_lag_{lag}] df_clean[power].shift(lag) df_clean[firradiance_lag_{lag}] df_clean[irradiance].shift(lag) # 删除因创建滞后特征产生的缺失行 df_model df_clean.dropna().copy()关键点EDA至关重要它帮你理解数据分布、发现周期性日周期、周周期、识别数据问题。特征工程是提升模型性能的核心对于时序预测滞后特征、滑动窗口统计量均值、标准差、时间戳衍生特征小时、星期几、是否节假日都非常有效。4.2 预测模型构建与评估我们尝试用两种模型做对比经典的时序模型ARIMA和机器学习模型XGBoost。from statsmodels.tsa.arima.model import ARIMA from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error import xgboost as xgb # 准备数据假设我们要预测‘power’特征包括气象因素和滞后特征 target power # 选择特征排除目标列本身和可能造成数据泄露的列如未来的气象数据实际中需注意 features [irradiance, temperature, humidity, hour, day_of_week, power_lag_1, power_lag_2, power_lag_24, irradiance_lag_1] X df_model[features] y df_model[target] # 划分训练集和测试集按时间顺序划分不能用随机划分 split_idx int(len(X) * 0.8) X_train, X_test X.iloc[:split_idx], X.iloc[split_idx:] y_train, y_test y.iloc[:split_idx], y.iloc[split_idx:] # 方法一XGBoost回归 xgb_model xgb.XGBRegressor(n_estimators100, learning_rate0.1, max_depth5, random_state42) xgb_model.fit(X_train, y_train) y_pred_xgb xgb_model.predict(X_test) # 方法二ARIMA (这里仅用单变量功率序列做示例) # ARIMA需要确定(p,d,q)参数可通过ACF/PACF图或自动定阶 from statsmodels.graphics.tsaplots import plot_acf, plot_pacf plot_acf(df_model[power].dropna(), lags40) plot_pacf(df_model[power].dropna(), lags40) plt.show() # 假设通过观察我们确定参数为(2,1,2) arima_model ARIMA(y_train, order(2,1,2)) arima_fit arima_model.fit() # ARIMA预测需要从训练集末尾开始 y_pred_arima arima_fit.forecast(stepslen(y_test)) # 评估 def evaluate_predictions(y_true, y_pred, model_name): mae mean_absolute_error(y_true, y_pred) rmse np.sqrt(mean_squared_error(y_true, y_pred)) print(f{model_name} - MAE: {mae:.2f}, RMSE: {rmse:.2f}) return mae, rmse print(预测性能评估:) evaluate_predictions(y_test, y_pred_xgb, XGBoost) # 注意y_test索引需要与arima预测结果对齐 evaluate_predictions(y_test.values, y_pred_arima, ARIMA) # 可视化对比 plt.figure(figsize(12,6)) plt.plot(y_test.index, y_test.values, labelActual, alpha0.7) plt.plot(y_test.index, y_pred_xgb, labelXGBoost Pred, alpha0.8) plt.plot(y_test.index, y_pred_arima, labelARIMA Pred, alpha0.8) plt.xlabel(Time) plt.ylabel(Power) plt.title(Actual vs Predicted Power Output) plt.legend() plt.grid(True) plt.savefig(./output/prediction_comparison.png, dpi300) plt.show()注意事项时序预测的评估必须使用时间序列交叉验证或按时间顺序划分数据集绝对不能用随机划分否则会因“未来数据泄露到过去”而导致评估结果过于乐观。选择哪个模型取决于评估指标和业务解释性。XGBoost通常能捕捉更复杂的非线性关系但ARIMA在纯线性时序关系上可能更稳健。4.3 基于预测结果的优化模型假设我们预测得到了未来24小时每小时间隔的光伏出力P_pv(t)。现在需要调度一个储能系统ESS和从电网购电以满足一个固定的负荷需求P_load(t)目标是最小化总成本电网电费 储能损耗成本。问题建模决策变量P_grid(t): t时刻从电网购入的功率kW可正可负负表示向电网售电。P_ess_ch(t),P_ess_dis(t): t时刻储能充电和放电功率kW非负。E_ess(t): t时刻储能剩余电量kWh。目标函数最小化总成本。Min Σ_t [ C_grid(t) * P_grid(t) * Δt C_ess * (P_ess_ch(t) P_ess_dis(t)) * Δt ]其中C_grid(t)是分时电价C_ess是储能的单位充放电损耗成本Δt是时间间隔如1小时。约束条件功率平衡P_pv(t) P_grid(t) P_ess_dis(t) - P_ess_ch(t) P_load(t)储能电量动态E_ess(t1) E_ess(t) η_ch * P_ess_ch(t) * Δt - (1/η_dis) * P_ess_dis(t) * Δtη_ch,η_dis为充放电效率储能功率上下限0 P_ess_ch(t) P_ch_max,0 P_ess_dis(t) P_dis_max储能电量上下限E_min E_ess(t) E_max初始和结束电量E_ess(0) E_initial通常要求E_ess(T) E_initial保证循环可持续。电网功率限制P_grid_min P_grid(t) P_grid_max这是一个典型的线性规划LP问题可以用PuLP或SciPy.optimize.linprog求解。import pulp # 假设参数 T 24 # 24小时 dt 1 # 1小时间隔 P_pv [...] # 长度为T的列表来自预测模型的结果 P_load [...] # 长度为T的列表负荷需求 C_grid [...] # 长度为T的列表分时电价 C_ess 0.05 # 元/kWh储能损耗成本系数 eta_ch, eta_dis 0.95, 0.95 # 充放电效率 P_ch_max P_dis_max 500 # kW E_max, E_min 2000, 200 # kWh E_initial 1000 # kWh P_grid_max, P_grid_min 1000, -500 # kW负值表示可向电网售电 # 创建问题 prob pulp.LpProblem(Microgrid_Optimization, pulp.LpMinimize) # 定义变量 P_grid_vars pulp.LpVariable.dicts(P_grid, range(T), lowBoundP_grid_min, upBoundP_grid_max) P_ch_vars pulp.LpVariable.dicts(P_ch, range(T), lowBound0, upBoundP_ch_max) P_dis_vars pulp.LpVariable.dicts(P_dis, range(T), lowBound0, upBoundP_dis_max) E_ess_vars pulp.LpVariable.dicts(E_ess, range(T1), lowBoundE_min, upBoundE_max) # T1个时刻 # 设置目标函数 prob pulp.lpSum([C_grid[t] * P_grid_vars[t] * dt C_ess * (P_ch_vars[t] P_dis_vars[t]) * dt for t in range(T)]) # 添加约束 # 初始电量 prob E_ess_vars[0] E_initial for t in range(T): # 功率平衡约束 prob P_pv[t] P_grid_vars[t] P_dis_vars[t] - P_ch_vars[t] P_load[t] # 储能电量动态约束 prob E_ess_vars[t1] E_ess_vars[t] eta_ch * P_ch_vars[t] * dt - (1/eta_dis) * P_dis_vars[t] * dt # 储能不能同时充放电线性化约束可通过大M法或直接添加逻辑约束这里简化处理通常优化结果会自动满足 # 可以添加 prob P_ch_vars[t] M * b[t], prob P_dis_vars[t] M * (1-b[t]), b[t]为0-1变量 # 可选约束最终电量不小于初始电量 prob E_ess_vars[T] E_initial # 求解 solver pulp.PULP_CBC_CMD(msgFalse) # 使用CBC求解器不输出日志 prob.solve(solver) # 输出结果 print(f优化状态: {pulp.LpStatus[prob.status]}) print(f总成本: {pulp.value(prob.objective):.2f} 元) if prob.status pulp.LpOptimal: # 提取结果 P_grid_opt [pulp.value(P_grid_vars[t]) for t in range(T)] P_ch_opt [pulp.value(P_ch_vars[t]) for t in range(T)] P_dis_opt [pulp.value(P_dis_vars[t]) for t in range(T)] E_ess_opt [pulp.value(E_ess_vars[t]) for t in range(T1)] # 可视化结果 import matplotlib.pyplot as plt hours list(range(T)) fig, axes plt.subplots(2, 2, figsize(14, 10)) axes[0,0].plot(hours, P_pv, labelPV Power, colororange) axes[0,0].plot(hours, P_load, labelLoad, colorblue) axes[0,0].set_xlabel(Hour) axes[0,0].set_ylabel(Power (kW)) axes[0,0].set_title(PV Generation vs Load Demand) axes[0,0].legend() axes[0,0].grid(True) axes[0,1].bar(hours, P_grid_opt, colorgreen, alpha0.6, labelGrid Power) axes[0,1].axhline(y0, colorblack, linestyle-, linewidth0.5) axes[0,1].set_xlabel(Hour) axes[0,1].set_ylabel(Power (kW)) axes[0,1].set_title(Optimized Grid Power Purchase/Sell) axes[0,1].legend() axes[0,1].grid(True) axes[1,0].plot(hours, P_ch_opt, labelCharge Power, colorred) axes[1,0].plot(hours, P_dis_opt, labelDischarge Power, colorpurple) axes[1,0].set_xlabel(Hour) axes[1,0].set_ylabel(Power (kW)) axes[1,0].set_title(ESS Charge/Discharge Power) axes[1,0].legend() axes[1,0].grid(True) axes[1,1].plot(range(T1), E_ess_opt, markero, labelESS SOC, colorbrown) axes[1,1].set_xlabel(Hour) axes[1,1].set_ylabel(Energy (kWh)) axes[1,1].set_title(State of Charge of ESS) axes[1,1].legend() axes[1,1].grid(True) plt.tight_layout() plt.savefig(./output/optimization_results.png, dpi300) plt.show()模型解读这个优化模型清晰地描述了微电网系统的运行逻辑。目标函数权衡了购电成本和储能损耗。约束条件确保了系统的物理可行性功率平衡、储能动态和运行安全功率/电量上下限。求解后我们得到了每小时的电网交互功率和储能调度策略。通过可视化可以清晰地看到储能在电价低时充电、电价高或光伏不足时放电的“削峰填谷”作用。5. 论文写作与代码整合的关键技巧模型和代码跑通了只成功了三分之一。如何将你的工作清晰、严谨、有说服力地呈现在论文中是另一个大挑战。5.1 模型描述与假设的书写在论文的“模型建立”部分切忌只扔出一个公式。要按照“问题重述 - 符号说明 - 模型假设 - 模型建立”的逻辑展开。符号说明用三线表清晰地列出所有变量、参数及其含义、单位。模型假设这是体现你思考深度的地方。假设要合理、必要且最好能论证其合理性。例如“假设光伏电站出力主要受辐照度和温度影响忽略积雪、灰尘等次要因素”这既简化了模型又符合常识。模型建立分步骤推导。先写目标函数解释每一项的经济或物理意义。再写约束条件每一条约束都要说明其来源物理定律、设备限制、运营要求等。对于复杂的约束如储能不能同时充放电可以说明在模型中是如何处理的如引入0-1变量。5.2 结果分析与可视化呈现“结果分析”部分不是简单的图表堆砌而是要说故事。描述性分析先展示优化前后的关键指标对比。例如制作一个表格对比优化前后的总成本、电网最大功率、储能利用率等。深入解读结合图表解释现象。比如“如图5所示在中午光伏出力高峰时段11:00-14:00储能系统进行充电同时将多余电力售回电网P_grid为负这是因为此时电价处于中等水平且光伏发电过剩。而在傍晚负荷高峰且电价最高的时段18:00-20:00储能系统全力放电显著降低了对高价电网电力的依赖。”敏感性分析这是加分项。探讨关键参数变化对结果的影响。例如“我们分析了光伏预测误差对总成本的影响。如图6所示当预测误差在±10%内时总成本增长不超过5%表明模型对预测误差具有一定的鲁棒性。但当误差超过20%时成本急剧上升这凸显了提高预测精度的重要性。”模型检验说明你如何验证模型的正确性。对于优化模型可以检查所有约束是否被满足对于预测模型除了在测试集上评估还可以进行残差分析检查残差是否随机分布无自相关、异方差。5.3 代码附录与可复现性将核心代码作为附录是标准做法。但要注意精简代码附录中只放最关键的函数定义、模型求解核心部分。数据清洗、可视化绘图等冗长代码可以省略用文字说明步骤即可。添加注释关键行代码必须添加中文注释解释其作用。评审老师可能不熟悉Python清晰的注释能帮助他们理解你的逻辑。提供数据接口说明说明你的代码期望输入数据的格式CSV文件包含哪些列列名是什么以及如何运行主程序。甚至可以提供一个简短的README.txt。封装关键函数将模型求解、结果评估等步骤封装成函数使主程序清晰。例如def run_optimization(pv_forecast, load_profile, price_profile, ess_params): 运行微电网优化模型。 参数: pv_forecast: 光伏预测出力序列 (list/array) ... 其他参数 ... 返回: result_dict: 包含优化后各变量结果的字典 total_cost: 总成本 # ... 优化建模和求解代码 ... return result_dict, total_cost6. 常见问题与实战避坑指南结合多年评审和指导经验我总结了一些队伍最容易踩的“坑”及应对策略。6.1 数据处理与模型选择陷阱问题现象可能原因解决方案与排查思路预测模型在训练集上表现极好在测试集上崩盘。数据泄露使用了未来信息做特征或随机划分时序数据。严格按时间顺序划分训练集和测试集。检查特征中是否包含目标变量的未来信息如用t时刻的标签作为t时刻的特征。优化模型求解时间过长甚至无法求解。模型规模太大变量/约束太多模型非凸或包含整数变量。1.简化模型考虑时间聚合如从1小时变为2小时分辨率、空间聚合。2.检查模型线性确保目标函数和约束都是线性的否则需用非线性求解器。3.使用启发式算法对于大规模整数规划考虑遗传算法、模拟退火求近似解。模型结果不符合物理常识或业务逻辑。约束条件设置错误或遗漏单位不统一。1.量纲检查确保所有公式两边的单位一致。2.边界值测试输入极端数据如零输入、最大负荷看输出是否合理。3.手动验算选取一个简单的时间点手动代入模型公式计算核对结果。可视化图表混乱信息过载。在一张图上绘制了太多曲线颜色、线型区分度不够。遵循“一图一主题”原则。多子图并列展示。使用颜色盲友好的调色板如viridis,plasma。添加清晰的图例和坐标轴标签。6.2 团队协作与时间管理第一天选题与开题切忌纠结。用2-3小时充分讨论每个题目从数据可获性、知识储备、创新空间三个维度评估果断选择一题。确定后立即按照本文第2部分的方法进行问题拆解和思路框架搭建并分配任务谁负责文献、谁负责数据处理、谁负责模型A、谁负责写作。第二天至第三天上午建模与求解这是代码攻坚期。各成员并行工作但每天至少集中讨论两次同步进度、解决卡点。一定要边做边写把模型假设、中间结果、遇到的问题随时记录到论文草稿中不要等到最后一天才动笔。第三天下午至晚上整合与写作所有代码和结果应在此前基本完成。下午开始全力整合论文绘制最终图表进行敏感性分析和模型检验。写作时摘要、问题重述、模型假设等部分可以提前写好。第四天打磨与提交留出至少半天时间用于全文润色、检查格式、核对图表编号、撰写最终摘要。摘要至关重要需独立撰写精炼地概括问题、方法、模型、算法、结论和亮点反复修改。最后一点个人体会数学建模竞赛比拼的不仅是数学和编程能力更是将复杂现实问题条理化、模型化、并清晰表达出来的综合能力。拿到题目后那种无从下手的感觉是正常的。关键是把大问题拆解成一个个小问题然后逐个击破。多和队友沟通互相解释自己的思路往往能在讨论中碰撞出火花。祝各位在比赛中都能发挥出色取得理想的成绩。