尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

研赛D题全流程解析:从数学建模到代码实现与论文写作

研赛D题全流程解析:从数学建模到代码实现与论文写作 1. 项目概述从“看热闹”到“做门道”的研赛突围战又到了一年一度的“华为杯”中国研究生数学建模竞赛简称“研赛”备赛季。对于广大理工科研究生尤其是计算机、自动化、经管、数学等专业的学生来说这个比赛的分量不言而喻。它不仅是科研能力、创新思维和团队协作的试金石更是评奖评优、求职深造时一份极具说服力的“硬通货”。然而每年看着题目发下来从D题通常是数据量大、背景复杂的实际问题到最终提交一篇逻辑严谨、模型创新、求解有效的论文中间仿佛隔着一道天堑。很多队伍止步于“有思路没代码有模型没求解有结果没论文”的尴尬境地。我参加过也指导过多次研赛深知其中痛点。2023年研赛D题以其典型的“大数据复杂系统”特征再次成为众多队伍的“拦路虎”。它不像纯理论推导题那样有标准答案也不像简单优化题那样有现成套路。它考验的是你如何将一个模糊的实际问题转化为清晰的数学语言并利用编程工具将其求解、可视化和分析的全链条能力。网上流传的所谓“思路”往往点到为止而完整的、可复现的代码与模型构建过程才是真正的稀缺资源。本文将围绕2023年华为杯研赛D题进行一次彻底的“外科手术式”拆解。我不会只给你一个空洞的“一等奖思路”而是会结合我多年的实战和评审经验带你一步步走完从题目理解、数据预处理、模型选择、算法实现、到论文写作的完整闭环。你会看到每个决策背后的“为什么”会拿到可以直接运行或修改的Python代码框架更会收获那些只有踩过坑才能知道的实操心得与避坑指南。无论你是初次参赛的新手还是希望突破瓶颈的老兵这篇文章都将是你备赛路上的一盏明灯目标就是带你直通研赛大奖。2. 赛题深度剖析与破题关键点2.1 2023年D题核心问题还原与抽象注由于竞赛题目版权保护此处不直接引用原题全文而是基于其公开的问题类型和典型特征进行原理性重构与解析确保方法论完全通用且可移植。2023年D题通常涉及一个具有明确工程或社会背景的复杂系统优化或预测问题。例如可能是“区域物流枢纽的智能调度与路径规划”、“新能源电网的负荷预测与稳定性分析”、“社交媒体信息传播的动态建模与干预”等类型。这类题目的共同特点是数据驱动提供大规模、多源、可能带有噪声的实测或仿真数据集如CSV文件、时序数据、网络关系数据。多目标交织问题往往不是单一的最小化成本或最大化收益而是涉及效率、成本、可靠性、公平性等多个有时相互冲突的目标。动态性与不确定性系统状态随时间变化且存在随机扰动如需求波动、设备故障、信息噪声。约束复杂存在大量线性/非线性约束、逻辑约束if-then、资源上限等。破题第一步将自然语言描述转化为数学定义。这是最关键也最容易被忽视的一步。很多队伍一上来就想着用什么算法却连决策变量、目标函数、约束条件都没定义清楚。决策变量 (Decision Variables)你要控制的是什么是调度方案0-1变量、路径顺序排列变量、资源分配量连续变量还是模型参数待估变量用数学符号如 $x_{ij}, y_t, \theta_k$明确表示。目标函数 (Objective Function)你要优化的是什么是总成本最小、总时间最短、总收益最大还是多个目标的综合如果是多目标必须明确是采用加权求和法、$\epsilon$-约束法还是准备求Pareto前沿。约束条件 (Constraints)系统必须遵守的规则是什么如流量守恒、容量限制、时间窗口、逻辑关系。用等式或不等式清晰地写出来。一个实用的技巧在审题时就拿一张白纸画出系统的概念模型图。标出实体如仓库、车辆、节点、流如货物、信息、能量、以及它们之间的交互关系。这个可视化过程能极大帮助你发现隐含的约束和关联。2.2 从“解题”到“建模”思维模式的跃迁研究生数学建模与本科阶段最大的区别在于对“模型”的理解深度。本科赛题可能套用一个现成的模型如灰色预测、TOPSIS就能取得不错效果但研赛更看重“模型构建”的能力。这意味着你可能需要混合模型没有哪个现实问题能用单一模型完美刻画。D题往往需要你将优化模型如整数规划、动态规划与预测/分类模型如时间序列预测、机器学习分类器或仿真模型如基于智能体的仿真、离散事件仿真结合起来。例如先利用LSTM预测未来24小时各站点的需求预测模型再将预测结果作为输入构建一个混合整数规划模型来制定最优的调度方案优化模型最后用仿真模型评估该方案在随机扰动下的鲁棒性。分层建模将复杂问题分解为多个层次。高层模型做战略决策如设施选址其输出作为低层模型如车辆路径规划的输入或约束。考虑不确定性使用随机规划或鲁棒优化来处理数据中的随机性。例如不是假设需求是固定值而是假设它服从某个概率分布然后优化“期望成本”或“在最坏情况下的成本”。核心心法你的模型不是对题目的“回答”而是你对这个现实世界复杂系统的“一种数学描述和实验平台”。论文的价值在于清晰地阐述这个“平台”是如何构建的以及通过这个“平台”你发现了什么规律、得到了什么启示。3. 全流程技术栈与工具选型实战工欲善其事必先利其器。一个高效、稳定、可协作的技术栈是成功的一半。3.1 编程语言与核心库Python为主MATLAB为辅首选Python生态无敌。针对D题常见任务库的选择至关重要数据处理与分析Pandas(数据清洗、转换)、NumPy(数值计算基础)。这是你的数据手术刀。科学计算与优化SciPy包含大量优化算法线性规划、非线性规划、整数规划需搭配其他求解器、数值积分、插值等。scipy.optimize模块是入门首选。PuLP/CVXPY建模神器。它们允许你用近乎数学公式的语法来描述优化问题然后调用后端求解器如CBC, GLPK, Gurobi, CPLEX求解。对于包含大量变量和约束的规划问题比手写算法高效、可靠得多。# 使用PuLP构建一个简单的生产计划模型示例 import pulp # 初始化问题 prob pulp.LpProblem(Production_Planning, pulp.LpMaximize) # 定义决策变量生产产品A和B的数量 x_A pulp.LpVariable(x_A, lowBound0, catInteger) x_B pulp.LpVariable(x_B, lowBound0, catInteger) # 定义目标函数最大化利润 prob 40*x_A 30*x_B, Total_Profit # 定义约束资源限制 prob 2*x_A 1*x_B 100, Labor_Hours prob 1*x_A 1*x_B 80, Material_Units # 求解 prob.solve(pulp.PULP_CBC_CMD(msgFalse)) print(f状态: {pulp.LpStatus[prob.status]}) print(f生产A: {x_A.varValue}, 生产B: {x_B.varValue}) print(f最大利润: {pulp.value(prob.objective)})机器学习与预测scikit-learn(通用机器学习)、statsmodels(传统统计与时序分析)、TensorFlow/PyTorch(深度学习如果问题需要且队伍有相关能力)。网络分析与图算法NetworkX。如果题目涉及路径、网络流、节点关系分析这是不二之选。可视化Matplotlib(基础且强大)、Seaborn(统计图形美观)、Plotly(交互式图表能让论文增色不少)。MATLAB在控制系统、信号处理、仿真Simulink方面仍有优势。如果问题背景强烈偏向这些领域且队伍熟悉MATLAB可以选用。但其在处理大规模数据、复杂优化和集成现代机器学习库方面不如Python灵活。注意切忌炫技。选择团队最熟悉、最能快速上手的工具。比赛时间有限稳定性压倒一切。不要用比赛来学习一个全新的、复杂的框架。3.2 论文写作与协作LaTeX是唯一正解Word在公式排版、交叉引用、版本管理上是灾难。LaTeX是学术写作的标准工具对于数模论文更是如此。模板使用竞赛官方模板或成熟的数模论文模板如mathmodel包。这能帮你解决90%的格式烦恼。协作使用Overleaf在线平台。它支持实时协作、历史版本管理、自动编译是团队写作的利器。确保赛前所有队员都注册并熟悉基本操作。图表管理将生成的图表.png或.pdf格式保存在项目文件夹的固定子目录如/figures/在LaTeX中用\includegraphics引用。保持代码输出图表和论文插入的图表路径一致。参考文献使用BibTeX管理。赛前可以提前准备好可能用到的经典文献的Bib条目。3.3 版本控制与项目管理Git的基本功三天比赛代码和论文会迭代无数次。没有版本控制一旦改错回溯极其困难。基础操作在项目根目录初始化Git仓库 (git init)。每天结束时进行提交 (git add .-git commit -m “完成模型初步构建”)。分支策略可以创建一个main分支存放稳定版本每个队员在各自的feature/xxx分支上开发如feature/data-processing,feature/optimization-model最后合并。这能有效避免冲突。远程备份在GitHub或Gitee上创建私有仓库定期推送 (git push)。这既是备份也方便在不同电脑间同步。实操心得赛前花2小时让全队一起过一遍Git最基础的5个命令init,add,commit,pull,push和解决合并冲突的简单流程这三天的协作效率会提升一个数量级。4. 核心模型构建与算法实现详解本节以一个虚构但高度典型的D题场景为例贯穿讲解模型构建与求解的全过程。假设题目背景是“基于多源数据的城市共享单车供需失衡区域动态识别与调度优化”。4.1 数据预处理质量决定模型上限拿到的数据通常包括单车订单数据时间、起点、终点、站点静态数据容量、位置、天气数据、时序数据等。缺失值处理探索原因是随机缺失还是系统缺失如某个传感器整天故障随机缺失可用均值、中位数或插值法填充。对于系统缺失可能需要考虑删除该时间段或使用前后时段数据估算。使用Pandasdf.isnull().sum()查看缺失情况。df.fillna(methodffill)前向填充df.interpolate()插值填充。异常值检测与处理可视化绘制箱线图seaborn.boxplot快速定位异常点。统计方法使用3σ原则或IQR四分位距法识别。处理根据业务逻辑判断。如果是明显的记录错误如经纬度超出城市范围、骑行时间负数直接删除或修正。如果是特殊事件如大型活动导致的真实极端值可能需要单独建模或使用鲁棒性更强的模型。特征工程时间特征从时间戳中提取“小时”、“是否周末”、“是否节假日”、“一天中的时段早高峰、晚高峰等”。空间特征计算站点间的欧氏距离或道路网络距离。对站点进行聚类如使用K-Means生成“区域”标签。聚合特征以站点和小时为单位聚合历史订单数生成“历史同期平均需求”、“前一小时需求”等滞后特征。外部特征融合天气数据温度、降水、风力将其量化为可能影响骑行的特征。import pandas as pd import numpy as np from sklearn.cluster import KMeans # 假设df_orders包含订单数据 df_orders[start_hour] pd.to_datetime(df_orders[start_time]).dt.hour df_orders[is_weekend] pd.to_datetime(df_orders[start_time]).dt.dayofweek 5 # 站点聚类 station_coords df_stations[[lon, lat]].values kmeans KMeans(n_clusters20, random_state42) # 假设将城市分为20个区域 df_stations[cluster_id] kmeans.fit_predict(station_coords) # 将聚类结果合并到订单数据中 df_orders df_orders.merge(df_stations[[station_id, cluster_id]], left_onstart_station_id, right_onstation_id)4.2 混合模型构建预测优化仿真第一步需求预测模型LSTM时序预测目标预测未来24小时内每个站点/区域每小时的共享单车借车和还车需求量。为什么用LSTM单车需求具有明显的时序依赖性早高峰、晚高峰、周末模式且可能受长期趋势和短期波动共同影响。LSTM是处理这类时序预测问题的强大工具。数据准备将历史订单数据按站点小时聚合为时序序列。构建监督学习数据集例如用过去72小时的数据预测未来24小时的数据。模型构建import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout model Sequential([ LSTM(units50, return_sequencesTrue, input_shape(72, num_features)), # 72个时间步长 Dropout(0.2), LSTM(units50), Dropout(0.2), Dense(units24) # 输出未来24小时的预测值 ]) model.compile(optimizeradam, lossmse) # 假设X_train, y_train已准备好 # model.fit(X_train, y_train, epochs50, batch_size32, validation_split0.1)输出得到一个预测函数demand_forecast f(historical_data)。第二步动态调度优化模型混合整数规划目标基于预测的需求制定成本最低的调度方案从富余站点派车到短缺站点。模型抽象集合站点集合 $I$时间周期集合 $T$如24小时以小时为单位。参数$d_{it}^, d_{it}^-$时刻 $t$站点 $i$ 的预测借车、还车需求。$cap_i$站点 $i$ 的容量。$c_{ij}$从站点 $i$ 到 $j$ 的调度单位成本可与距离成正比。$Q$调度车的容量。决策变量$x_{ijt}$在时刻 $t$从站点 $i$ 调度到站点 $j$ 的车辆数整数。$s_{it}$在时刻 $t$ 开始时站点 $i$ 的库存车辆数。目标函数最小化总调度成本。$\min \sum_{t \in T} \sum_{i \in I} \sum_{j \in I} c_{ij} \cdot x_{ijt}$约束条件库存平衡约束$s_{i,t1} s_{it} - d_{it}^ d_{it}^- \sum_{j \in I} (x_{jit} - x_{ijt}), \quad \forall i, t$。即下一时刻库存等于当前库存减去借出、加上还入、加上净调入。容量约束$0 \le s_{it} \le cap_i, \quad \forall i, t$。调度车容量约束$\sum_{j \in I} x_{ijt} \le Q, \quad \forall i, t$假设每辆车一次调度一条路线。非负与整数约束$x_{ijt} \in \mathbb{Z}^, s_{it} \ge 0$。使用PuLP建模与求解import pulp # 假设站点、时间、成本等参数已定义 prob pulp.LpProblem(Bike_Relocation, pulp.LpMinimize) # 定义变量 x pulp.LpVariable.dicts(x, ((i, j, t) for i in stations for j in stations for t in time_periods), lowBound0, catInteger) s pulp.LpVariable.dicts(s, ((i, t) for i in stations for t in time_periods), lowBound0, upBoundcapacities[i], catContinuous) # 目标函数 prob pulp.lpSum(cost[i][j] * x[i, j, t] for i in stations for j in stations for t in time_periods) # 约束条件 for i in stations: for t in time_periods: if t 0: prob s[i, t] initial_inventory[i] - demand_pickup[i, t] demand_return[i, t] \ pulp.lpSum(x[j, i, t] for j in stations) - pulp.lpSum(x[i, j, t] for j in stations) else: prob s[i, t] s[i, t-1] - demand_pickup[i, t] demand_return[i, t] \ pulp.lpSum(x[j, i, t] for j in stations) - pulp.lpSum(x[i, j, t] for j in stations) # 求解这里以开源求解器CBC为例 solver pulp.PULP_CBC_CMD(msgTrue, timeLimit300) # 设置5分钟求解时间限制 prob.solve(solver)第三步仿真验证模型离散事件仿真目标在随机环境下如需求预测有误差、调度车延误评估优化方案的鲁棒性。为什么需要仿真优化模型通常在确定性假设下求解但现实充满随机性。仿真可以模拟随机过程评估方案在实际中的表现如服务拒绝率、平均等待时间。工具选择可以使用SimPy(Python) 或Simulink(MATLAB) 构建一个简单的离散事件仿真模型。仿真要素实体单车、用户、调度车。事件用户借车、用户还车、调度车出发、调度车到达。资源站点车位。随机过程用预测值加上一个随机噪声如正态分布来模拟实际需求调度车的行驶时间也可以设为随机变量。评估指标运行多次仿真计算“因站点无车可借导致的用户流失率”、“因站点满桩无法还车导致的用户不便率”、“调度方案总成本的平均值与方差”。4.3 算法选择与求解策略对于MIP模型直接调用商业求解器Gurobi, CPLEX或高效开源求解器如CBC, SCIP是首选。PuLP和CVXPY是连接你和求解器的优秀桥梁。对于大规模或非线性问题当问题规模太大精确求解器在时限内无法得到最优解时需要考虑启发式或元启发式算法遗传算法 (GA)适用于解空间是组合优化如路径顺序的问题。DEAP库是一个强大的Python进化算法框架。模拟退火 (SA)适用于寻找近似最优解对初始解不敏感。禁忌搜索 (TS)对于某些调度问题非常有效。强化学习 (RL)如果问题可以自然地建模为序贯决策过程如动态调度RL是一个前沿且有力的工具但实现复杂对算力和时间要求高需谨慎选择。关键提醒在论文中如果你使用了启发式算法必须详细说明算法设计编码方式、适应度函数、交叉变异操作、邻域结构等并报告算法的收敛情况如迭代曲线以及与其他基准算法或下界的对比以证明其有效性。5. 论文写作高分解构与表达技巧论文是你们三天工作的唯一呈现。评委没有时间看你的代码只能通过论文评判。5.1 摘要浓缩的精华决胜的关键摘要单独一页是评委最先看也是看得最仔细的部分。必须做到结构完整、逻辑清晰、亮点突出。经典四段式结构问题重述与背景用1-2句话说明研究了什么问题有什么意义。模型与方法核心段落。说明针对问题的不同部分或不同阶段分别建立了什么模型如“首先构建了基于LSTM的时空需求预测模型其次建立了以调度成本最小化为目标的混合整数规划模型最后设计了离散事件仿真模型评估方案的鲁棒性”。提及关键算法或求解器。主要结果与结论给出最重要的量化结果如“将调度成本降低了XX%”、“预测精度达到MAEYY”并得出核心结论。创新与特色简要点出模型的创新点如“考虑了需求的不确定性采用了随机规划框架”、“结合了预测-优化-仿真的混合建模方法”。避坑指南摘要里不要出现公式、图表引用、参考文献引用。务必使用精炼、专业的语言避免口语化。写完摘要后让队友或同学快速阅读看是否能准确理解你们做了什么、得到了什么结果。5.2 模型建立部分展现数学功底与逻辑思维这是论文的技术核心。符号说明在模型描述前用三线表清晰列出所有集合、下标、参数、决策变量的符号及其含义。这是专业性的体现。模型假设合理且必要的假设是建模的基础。说明假设的内容及其合理性如“假设调度车辆在各站点间的行驶时间为固定值忽略交通拥堵的影响该简化有助于模型求解且可通过仿真环节评估其影响”。模型推导一步一步来。问题一分析→定义变量→建立目标函数→列出约束条件。对于复杂的约束先用文字描述其物理或逻辑意义再给出数学公式。问题二/三如果是问题一的延伸或另一种情景可以着重描述与问题一模型的差异部分避免重复。模型求解说明你用了什么方法或算法来求解上述模型。如果是调用求解器写明求解器名称和关键参数设置如“使用Gurobi 10.0求解器设置MIPGap0.01作为终止条件”。如果是自编算法给出算法流程图和伪代码。5.3 结果分析与可视化用数据讲故事表格与图表表格用于呈现精确的数值结果、参数对比、敏感性分析数据。确保表格有清晰的标题和表头。图表用于展示趋势、分布、对比和空间模式。折线图趋势、柱状图对比、热力图空间分布、散点图相关性都是常用工具。所有图表必须清晰、美观、信息量大。坐标轴标签、图例、单位要完整。分析深度不要仅仅陈述“从图X可以看出成本下降了”。要深入分析为什么下降。是某个约束放松了是算法找到了更优的解结构将结果与模型机理联系起来。敏感性分析这是加分项。改变模型中的关键参数如需求波动幅度、调度车成本、站点容量观察结果如总成本、服务率如何变化。这能体现你对模型鲁棒性的理解并可能给出管理启示如“当需求波动超过XX%时当前调度策略失效建议采用更灵活的弹性调度方案”。5.4 模型评价与推广体现思考的深度优点总结客观总结模型的优点如“模型综合考虑了预测与优化贴合实际决策流程”、“采用了混合整数规划能获得精确的最优解或高质量可行解”、“通过仿真验证证明了方案在随机环境下的有效性”。缺点与改进这一点至关重要体现学术严谨性。诚实地指出模型的局限性例如“模型假设需求预测是准确的忽略了突发事件的影-响”、“调度模型是静态的未考虑实时动态调整”、“求解大规模实例时计算时间较长”。然后提出可行的改进方向如“未来可引入鲁棒优化或随机规划处理不确定性”、“可研究在线学习与动态调度算法”、“可尝试更高效的分解算法或启发式算法”。推广简要说明模型和方法稍作修改后可以应用于哪些其他类似问题如“本模型框架也可用于共享充电宝、网约车等共享经济资源的调度问题”。6. 团队协作、时间管理与常见陷阱6.1 三天时间轴黄金节奏把控第一天上午选题与破题3小时内必须确定选题。全体成员共同精读所有题目每人负责一题快速查找背景资料评估数据复杂度、模型可行性和自身优势。通过投票或讨论确定最终题目。一旦选定不再犹豫。第一天下午至晚上模型构建与数据预处理队长牵头完成问题分析、模型初步构建写出数学公式、确定技术路线。编程手开始数据清洗和探索性分析。写作手开始撰写“问题重述”、“模型假设”、“符号说明”等前期内容。第二天全天模型求解与初步结果编程手全力实现模型求解产出初步结果。建模手和编程手紧密配合调试模型和代码。写作手根据初步结果开始撰写“模型建立”和部分“结果分析”。当天结束前必须有一个可以运行并输出基本结果的完整代码框架。第三天白天结果深化与论文撰写优化模型进行深入的敏感性分析、对比实验等。写作手整合所有内容完成论文初稿。全体成员共同检查结果的一致性、图表的正确性。第三天晚上整合、修改、定稿这是最紧张的阶段。全体成员一起通读论文检查逻辑、语法、格式错误。摘要最后写但必须反复打磨。最终完成PDF生成检查排版按时提交。6.2 角色分工与高效协作建模手1人核心大脑。负责问题分析、模型构建、算法设计。需要深厚的数学功底和逻辑思维能力。编程手1-2人核心执行者。负责数据预处理、模型实现、算法编程、结果计算与可视化。需要熟练的编程能力和调试能力。写作手1人核心呈现者。负责论文撰写、图表美化、排版。需要良好的文字表达能力、逻辑组织能力和审美。写作手不是“打字员”必须深刻理解模型和结果才能写出好文章。队长通常由建模手或经验最丰富者担任。负责进度把控、决策拍板、沟通协调。队长需要有大局观和抗压能力。协作关键每日至少三次短会早、中、晚同步进度、解决问题、调整计划。使用在线文档如腾讯文档、语雀共享思路、记录模型公式、撰写论文片段。编程手要及时将关键结果图表、数据更新到共享文件夹供写作手使用。6.3 十大常见陷阱与避坑指南选题失误盲目选择看似简单或热门的题。避坑选择与团队知识结构最匹配、最有思路的题而不是最简单的题。模型贪大求全试图建立一个包罗万象的复杂模型导致无法求解或漏洞百出。避坑从简单核心模型入手先建立一个可工作的基线模型再逐步增加复杂性。忽略数据预处理拿到的数据直接丢进模型结果荒谬。避坑至少花费20%的时间在数据探索、清洗和特征工程上。代码调试黑洞陷入代码细节调试浪费大量时间。避坑模块化编程分函数测试。先用小规模数据或简化模型验证逻辑正确性。论文虎头蛇尾前面模型写得很详细后面结果分析草草了事。避坑结果分析部分的分量应与模型部分相当甚至更重。用图表和文字讲好“数据故事”。摘要平淡无奇摘要只是目录的罗列没有突出亮点和量化结果。避坑摘要反复修改确保任何评委看完摘要就能知道你们的核心贡献。图表质量低下截图模糊、坐标轴无标签、图例不清。避坑使用矢量图如PDF, SVG或高DPI的PNG。统一图表风格颜色、字体。时间管理失控前两天过于松懈最后一天通宵赶工。避坑严格执行时间轴设定里程碑队长督促。不检查就提交提交前未检查PDF是否排版错乱、公式显示不全、图片缺失。避坑留出至少1小时做最终检查在不同电脑上打开PDF查看。团队内耗争论不休无法达成一致。避坑明确队长权威尊重分工。遇到分歧快速评估利弊后决策不要纠结。比赛结果是一个团队的结果。最后记住数学建模竞赛的本质是用数学工具和编程能力解决一个实际问题的完整过程。它考察的是你们发现问题、定义问题、分析问题、解决问题、以及呈现方案的综合能力。把每一次比赛都当成一次真实的科研项目来对待享受这个从无到有、将想法变为现实的过程这份经历和成长远比奖项本身更为珍贵。祝大家在研赛的舞台上都能展现出最好的自己取得理想的成绩
返回列表