尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

数学建模国赛C题实战:蔬菜定价与补货决策的协同优化模型

数学建模国赛C题实战:蔬菜定价与补货决策的协同优化模型 1. 项目概述从赛题到实战的完整复盘去年国赛C题“蔬菜类商品的自动定价与补货决策”可以说是近年来数学建模竞赛中一个非常“接地气”又极具挑战性的题目。它把我们从纯理论的象牙塔里拽出来直面一个生鲜零售行业每天都在发生的现实问题面对每天波动的销量和易腐的蔬菜到底该定什么价、补多少货才能既赚钱又减少浪费这不仅仅是数学问题更是商业智慧和工程实践的结合。很多队伍拿到题目后容易被“自动定价”和“补货决策”这两个高大上的词唬住或者一头扎进复杂的算法里出不来。实际上这道题的核心在于如何用数学语言清晰地定义问题并构建一个可计算、可解释、能落地的决策框架。我带着团队完整地走了一遍从审题、建模、求解到代码实现的全过程这篇文章就来详细拆解我们的思路、踩过的坑以及最终成型的完整解决方案。无论你是准备参加未来数模竞赛的学生还是对运筹优化、数据驱动决策感兴趣的朋友相信这篇近万字的实战复盘都能给你带来实实在在的启发。2. 核心问题拆解与建模总览面对“定价”与“补货”这两个耦合的决策第一步也是最关键的一步就是将它们拆解成清晰、可量化的子问题。很多新手容易犯的错误是试图用一个“超级模型”同时解决所有问题结果往往模型复杂、参数难求、求解困难。我们的策略是分而治之先独立分析再建立关联。2.1 定价决策在需求弹性与损耗成本间寻找平衡蔬菜定价不是拍脑袋它受到几个核心因素的制约需求价格弹性价格涨销量通常会跌。但不同蔬菜比如必需品土豆和时令菜香椿弹性不同甚至同一种蔬菜在不同日期工作日 vs 周末弹性也不同。损耗成本蔬菜会腐烂。今天没卖完的菜明天要么打折要么直接报废。定价时必须考虑如果定高了卖不完带来的潜在损耗损失。成本与利润目标进货有成本运营有费用最终需要保证一定的毛利率。市场竞争与价格天花板虽然题目未明确给出但实际中超市定价不可能远高于市场普遍水平这构成了一个隐性的价格上限。因此定价模型的核心是建立一个收益函数总收益 销售收入 - 进货成本 - 损耗成本。销售收入取决于“价格 - 销量”这个关系即需求函数。我们采用了最经典也最实用的线性需求函数进行建模销量 基础需求量 - 弹性系数 * 价格。这里的“基础需求量”可以通过历史销售数据的回归分析得到它包含了季节性、星期效应等因素而“弹性系数”则需要通过价格与销量的历史数据拟合出来。注意直接拟合弹性系数可能因数据噪声大而失败。我们的技巧是先对数据进行清洗和聚合比如按蔬菜品类、按星期几分组再使用稳健的统计方法如分位数回归来估计这比普通最小二乘更抗干扰。有了需求函数某一天针对某种蔬菜的定价问题就可以转化为一个单变量非线性优化问题寻找一个价格使得当天的预期收益最大。这里的关键是预期销量不能超过当天的库存进货量昨日剩余而预期收益的计算必须包含对未售出部分的价值折损如按成本的一定比例计算损耗。2.2 补货决策在库存成本与缺货风险间动态博弈补货决策回答“每天进多少货”。它比定价更复杂因为今天的决策会影响明天的状态库存是一个典型的动态决策问题。其核心矛盾是补多了库存持有成本增加且未来损耗风险激增。补少了错过销售机会造成缺货损失影响顾客满意度。我们将其建模为一个多周期库存控制问题。目标是在一个计划期比如一周内最小化总成本包括进货成本、库存持有成本、缺货成本或最大化总利润。这里需要引入库存状态转移方程次日初始库存 当日初始库存 当日补货量 - 当日实际销量。实际销量由定价决策和随机需求共同决定。一个强大的工具是随机动态规划或模型预测控制。但对于数模竞赛的时间限制我们采用了更实用的报童模型的扩展版本。经典报童模型解决单周期问题找到一个补货量使得边际收益等于边际损失。对于多周期、有初始库存的情况我们将其思想进行迭代应用。我们的具体做法是对于每一天我们根据当前的库存水平、对未来需求的预测考虑趋势和周期计算一个“目标库存水平”。补货量就是目标库存水平 - 当前库存如果为正。目标库存水平的设定本质上是权衡持有库存的边际成本和缺货的边际成本。我们通过历史数据估算出单位缺货损失可能包括直接利润损失和商誉损失和单位库存持有/损耗成本从而为每种蔬菜计算出一个“最优服务水平”进而推导出目标库存水平。2.3 定价与补货的耦合迭代定价和补货不是孤立的。更高的价格可能抑制需求从而影响最优补货量而补货量决定了库存约束又反过来限制了可以通过定价实现的销量。因此需要一个协同优化或迭代求解的过程。我们的求解框架是一个两层循环内层定价循环在给定补货计划即每天可用库存的前提下为每一天、每一种蔬菜求解最优价格。外层补货循环根据内层定价循环产生的预期销量序列重新评估和优化补货计划更新可用库存。迭代重复步骤1和2直到补货计划和价格序列稳定变化小于某个阈值或者达到预设的迭代次数。这个过程在数学上可以看作是在寻找一个纳什均衡或不动点。在实际编程求解时我们将其实现为一个交替优化算法收敛速度很快通常5-10轮迭代即可得到稳定解。3. 数据预处理与特征工程实战题目通常会提供一段时间的历史销售数据包括日期、品类、销量、价格等。原始数据直接丢进模型效果肯定不好必须经过精心处理。这部分工作看似枯燥却直接决定了模型的上限。3.1 数据清洗与异常值处理蔬菜销售数据中常见的“脏数据”包括负销量或零价格系统错误或数据录入问题直接剔除或按前后值插补。销量暴增/暴降可能是团购、促销或断货。我们采用箱线图结合业务判断的方法对于超出箱线图上下界的点并非一律删除而是结合日期是否节假日、是否有促销记录来判断。如果是合理的业务波动则保留否则视为异常值用移动中位数进行平滑。缺失值对于连续的少量缺失我们使用时间序列插值法如线性插值或季节分解后的插值。对于整段缺失如某天数据全无则考虑使用同类蔬菜或历史同期的数据进行填充。import pandas as pd import numpy as np from scipy import stats def clean_sales_data(df): 清洗销售数据 df 应包含列date, category, sales_volume, price # 1. 处理明显错误值 df df[(df[sales_volume] 0) (df[price] 0)] # 2. 按品类分组处理异常值 def remove_outliers(group): Q1 group[sales_volume].quantile(0.25) Q3 group[sales_volume].quantile(0.75) IQR Q3 - Q1 lower_bound Q1 - 1.5 * IQR upper_bound Q3 1.5 * IQR # 标记异常值但不立即删除 is_outlier (group[sales_volume] lower_bound) | (group[sales_volume] upper_bound) # 这里可以加入业务逻辑判断例如检查是否为节假日 # 本例中我们简单地将异常值替换为上下界 group.loc[is_outlier, sales_volume] np.clip(group.loc[is_outlier, sales_volume], lower_bound, upper_bound) return group df df.groupby(category, group_keysFalse).apply(remove_outliers) return df3.2 关键特征构建直接从原始数据中提取有价值的特征是提升模型性能的关键。时间特征day_of_week星期几0-6捕捉周内波动。is_weekend是否为周末。month,day_of_month捕捉月内趋势。is_holiday是否为节假日需要外部日历数据。滞后特征sales_lag_1,sales_lag_7前1天、前7天的销量捕捉短期自相关和周期性。price_lag_1前一天的价格反映价格粘性或消费者记忆。滚动统计特征sales_rolling_mean_7过去7天平均销量反映近期趋势。sales_rolling_std_7过去7天销量标准差反映需求波动性。品类交互特征某些蔬菜可能存在互补或替代关系。例如西红柿和鸡蛋的销量可能正相关。可以计算品类间的销量相关系数并将高相关品类的滞后销量作为特征。3.3 需求预测模型构建我们采用梯度提升树作为核心预测模型。相比传统的ARIMA时间序列模型树模型能更好地处理多特征、非线性关系并且对异常值更鲁棒。from sklearn.ensemble import GradientBoostingRegressor from sklearn.model_selection import TimeSeriesSplit, GridSearchCV from sklearn.metrics import mean_absolute_error, mean_squared_error def train_demand_forecast_model(train_data, feature_cols, target_colsales_volume): 训练需求预测模型 X train_data[feature_cols] y train_data[target_col] # 使用时间序列交叉验证 tscv TimeSeriesSplit(n_splits5) model GradientBoostingRegressor(random_state42) # 简单的参数网格 param_grid { n_estimators: [100, 200], max_depth: [3, 5], learning_rate: [0.01, 0.1] } grid_search GridSearchCV(model, param_grid, cvtscv, scoringneg_mean_squared_error, n_jobs-1, verbose1) grid_search.fit(X, y) print(fBest parameters: {grid_search.best_params_}) print(fBest CV score: {-grid_search.best_score_:.4f}) return grid_search.best_estimator_实操心得对于时间序列数据千万不要用随机划分的交叉验证必须使用TimeSeriesSplit确保验证集的时间在训练集之后这样才能模拟真实的预测场景评估模型的泛化能力。否则你会得到过于乐观的、完全不可信的评估结果。4. 模型核心模块的代码实现下面进入核心部分我们将定价模型、补货模型以及它们的协同优化过程用Python代码完整实现。我们假设数据已经过上述预处理并存储在Pandas DataFrame中。4.1 定价优化模块定价模块针对单日单品类在已知补货量即最大可售量和需求函数参数的情况下求解最优价格。import numpy as np from scipy.optimize import minimize_scalar class PricingOptimizer: 单品类单日定价优化器 假设需求函数为线性: Q a - b * P 其中 a 是基础需求量 b 是价格弹性系数 def __init__(self, a, b, cost, max_inventory, perish_rate0.3): 参数: a: 基础需求量 b: 价格弹性系数 cost: 单位进货成本 max_inventory: 当日最大可售库存昨日剩余今日补货 perish_rate: 未售出商品的损耗率按成本比例计算损失 self.a a self.b b self.cost cost self.max_inventory max_inventory self.perish_rate perish_rate def expected_demand(self, price): 计算给定价格下的预期需求量 return max(0, self.a - self.b * price) # 需求非负 def expected_sales(self, price): 计算给定价格下的预期销量受库存限制 demand self.expected_demand(price) return min(demand, self.max_inventory) def expected_profit(self, price): 计算给定价格下的预期利润 sales self.expected_sales(price) revenue sales * price goods_cost sales * self.cost # 已售出部分的成本 # 计算损耗成本未售出部分 * 成本 * 损耗率 leftover max(0, self.max_inventory - sales) perish_cost leftover * self.cost * self.perish_rate total_cost goods_cost perish_cost profit revenue - total_cost return profit def find_optimal_price(self, price_low, price_high): 在[price_low, price_high]区间内寻找最大化利润的价格 使用Brent方法进行一维优化 def negative_profit(p): return -self.expected_profit(p) result minimize_scalar(negative_profit, bounds(price_low, price_high), methodbounded) optimal_price result.x max_profit -result.fun return optimal_price, max_profit # 使用示例 if __name__ __main__: # 假设西红柿的参数 optimizer PricingOptimizer(a100, b2.5, cost2.0, max_inventory80) opt_price, opt_profit optimizer.find_optimal_price(price_low3.0, price_high10.0) print(f最优价格: {opt_price:.2f}元预期利润: {opt_profit:.2f}元)4.2 补货决策模块补货模块基于需求预测和当前库存计算目标库存水平和补货量。这里我们实现一个基于服务水平的简单启发式策略。class ReplenishmentPlanner: 基于服务水平的多周期补货计划器 使用简单但有效的 (s, S) 策略思想当库存低于s时补货至S。 这里我们每天计算目标库存水平S。 def __init__(self, holding_cost, shortage_cost, lead_time0): 参数: holding_cost: 单位商品单期持有成本包含资金占用和损耗风险 shortage_cost: 单位商品缺货造成的损失 lead_time: 补货提前期本题中通常为0当日补货当日到 self.holding_cost holding_cost self.shortage_cost shortage_cost def calculate_target_inventory(self, demand_forecast, demand_std, service_level0.95): 计算目标库存水平 (S) 假设需求服从正态分布使用新闻vendor模型公式 S mean_demand z * std_demand 其中 z 是标准正态分布对应服务水平的分位数 mean_demand demand_forecast # 计算安全库存 from scipy.stats import norm z norm.ppf(service_level) # 获取分位数 safety_stock z * demand_std target_inventory mean_demand safety_stock return target_inventory def generate_replenishment_plan(self, initial_inventory, demand_forecast_list, demand_std_list): 生成多期补货计划 参数: initial_inventory: 期初库存列表每个品类 demand_forecast_list: 未来各期需求预测列表 demand_std_list: 未来各期需求标准差列表 返回: 各期建议补货量列表 plan [] current_inv initial_inventory for mean_demand, std_demand in zip(demand_forecast_list, demand_std_list): # 计算本期目标库存 target_inv self.calculate_target_inventory(mean_demand, std_demand) # 计算需要补货的量 order_qty max(0, target_inv - current_inv) plan.append(order_qty) # 更新库存状态简化为当期期末库存 当期期初补货-预测需求 # 注意这是计划阶段的模拟实际销量会受价格影响 current_inv current_inv order_qty - mean_demand current_inv max(0, current_inv) # 库存非负 return plan # 使用示例 if __name__ __main__: planner ReplenishmentPlanner(holding_cost0.1, shortage_cost0.5) # 假设未来5天对某蔬菜的需求预测和标准差 forecast [50, 55, 60, 52, 58] std [8, 9, 10, 7, 9] initial_inv 20 replenishment_plan planner.generate_replenishment_plan(initial_inv, forecast, std) print(f未来5天补货计划: {replenishment_plan})4.3 定价-补货协同优化主循环这是整个系统的“大脑”负责迭代调用定价和补货模块直到决策稳定。class PricingReplenishmentSystem: 定价与补货协同优化系统 def __init__(self,品类列表, 需求预测模型, 成本数据, 初始库存, 计划期天数7): self.categories 品类列表 self.demand_model 需求预测模型 self.cost_data 成本数据 # 字典品类-成本 self.initial_inventory 初始库存 # 字典品类-库存 self.planning_horizon 计划期天数 self.perish_rate 0.3 # 统一损耗率可按品类细化 def run_optimization(self, max_iterations20, tolerance1e-3): 运行协同优化 返回: (最优价格计划, 最优补货计划, 各次迭代利润列表) # 初始化 n_cats len(self.categories) prices np.random.uniform(3, 8, (self.planning_horizon, n_cats)) # 随机初始价格 replenishment np.zeros((self.planning_horizon, n_cats)) # 初始补货为0 inventory np.tile(list(self.initial_inventory.values()), (self.planning_horizon1, 1)) # 库存矩阵 profit_history [] for iteration in range(max_iterations): total_profit 0 new_prices prices.copy() new_replenishment replenishment.copy() # 步骤1: 固定补货计划优化每日每品类价格 for day in range(self.planning_horizon): for idx, cat in enumerate(self.categories): # 获取当日可用库存 available_inv inventory[day, idx] replenishment[day, idx] # 获取该品类需求函数参数 (这里需要从预测模型或历史数据中获取a, b) # 假设我们有一个函数 get_demand_params(cat, day) 返回 (a, b) a, b self.get_demand_params(cat, day) cost self.cost_data[cat] optimizer PricingOptimizer(a, b, cost, available_inv, self.perish_rate) opt_price, _ optimizer.find_optimal_price(3.0, 10.0) new_prices[day, idx] opt_price # 计算采用此价格后的预期销量和利润 exp_sales optimizer.expected_sales(opt_price) profit optimizer.expected_profit(opt_price) total_profit profit # 更新库存状态用于后续计算 inventory[day1, idx] available_inv - exp_sales # 步骤2: 基于新的价格和预期销量重新优化补货计划 # 这里简化根据更新后的库存水平和未来需求预测重新计算补货量 # 实际中需要调用 ReplenishmentPlanner这里用启发式规则示例 for idx, cat in enumerate(self.categories): planner ReplenishmentPlanner(holding_cost0.1, shortage_cost0.5) # 获取该品类未来需求预测 future_demand self.get_future_demand_forecast(cat, self.planning_horizon) future_std self.get_future_demand_std(cat, self.planning_horizon) initial_inv inventory[0, idx] new_plan planner.generate_replenishment_plan(initial_inv, future_demand, future_std) new_replenishment[:, idx] new_plan[:self.planning_horizon] # 检查收敛条件价格和补货量的变化是否小于容差 price_change np.max(np.abs(new_prices - prices)) replenishment_change np.max(np.abs(new_replenishment - replenishment)) prices new_prices replenishment new_replenishment profit_history.append(total_profit) print(fIteration {iteration1}: Profit {total_profit:.2f}, fPrice Δ {price_change:.4f}, Replenish Δ {replenishment_change:.4f}) if price_change tolerance and replenishment_change tolerance: print(fConverged after {iteration1} iterations.) break return prices, replenishment, profit_history # 以下为辅助函数需要根据具体数据实现 def get_demand_params(self, category, day): 根据品类和日期返回需求函数参数(a, b) # 此处应接入历史数据拟合的模型或查找表 # 示例返回固定值 return 100.0, 2.5 # (a, b) def get_future_demand_forecast(self, category, horizon): 返回未来horizon天的需求预测列表 # 此处应调用需求预测模型 return [50 i for i in range(horizon)] # 示例数据 def get_future_demand_std(self, category, horizon): 返回未来horizon天的需求标准差列表 return [5.0] * horizon # 示例数据5. 模型验证、敏感性分析与结果解读模型建好了代码跑通了但结果靠谱吗这就需要严格的验证和分析。5.1 回测验证我们使用历史数据的一部分进行训练另一部分进行回测。具体方法是将历史数据划分为训练集和测试集。用训练集的数据拟合需求函数参数、训练预测模型。然后在测试集的时间段上模拟运行我们的定价-补货协同优化系统每天根据当时的“已知”信息实际上是历史数据做出决策然后将决策结果价格、补货量与“实际”结果历史销量、实际库存变化进行比较。关键的评估指标包括总利润模拟期的总利润与历史同期实际利润的对比。平均毛利率衡量定价策略的有效性。库存周转率总销售额 / 平均库存衡量补货策略的效率。损耗率损耗成本 / 总进货成本衡量对易腐品的管理水平。缺货率缺货天数或数量/ 总天数或总需求。一个好的模型应该在测试集上展现出比简单策略如固定价格、按昨日销量补货更高的利润和更优的运营指标。5.2 敏感性分析模型中有许多假设和参数如需求弹性系数b、损耗率perish_rate、持有成本holding_cost、缺货成本shortage_cost等。这些参数估计不准怎么办我们需要知道模型输出对它们的敏感程度。操作方法选择一个关键参数如b在其合理估计范围内取多个值例如基准值±20%分别运行整个优化系统观察总利润、平均价格、平均补货量等核心输出指标的变化。用图表展示结果。import matplotlib.pyplot as plt def sensitivity_analysis_on_elasticity(base_b, range_percent0.2, steps5): 分析利润对需求弹性系数b的敏感性 b_values [base_b * (1 range_percent * (i - steps//2) / (steps//2)) for i in range(steps)] profits [] for b in b_values: # 假设其他参数不变重新运行优化系统并记录总利润 # 这里调用之前定义的优化系统并传入修改后的b # system PricingReplenishmentSystem(...) # _, _, profit_hist system.run_optimization() # total_profit profit_hist[-1] if profit_hist else 0 # profits.append(total_profit) # 为示例我们用一个简单的模拟函数代替 profit simulate_profit_for_b(b) # 假设的函数 profits.append(profit) plt.figure(figsize(8,5)) plt.plot(b_values, profits, o-, linewidth2) plt.axvline(xbase_b, colorr, linestyle--, labelBase b) plt.xlabel(Price Elasticity Coefficient (b)) plt.ylabel(Total Simulated Profit) plt.title(Sensitivity Analysis: Profit vs. Demand Elasticity) plt.grid(True, alpha0.3) plt.legend() plt.show() # 计算弹性 base_profit profits[steps//2] max_change max(abs(p - base_profit) for p in profits) / base_profit if base_profit ! 0 else 0 print(f利润对弹性系数b的最大相对变化: {max_change:.2%})通过敏感性分析我们可以识别出哪些参数对结果影响最大从而在数据收集和参数估计上投入更多精力。例如如果利润对损耗率非常敏感那么我们就需要花更大力气去精确测量或预测不同蔬菜的损耗情况。5.3 决策结果解读与业务建议模型输出的最终结果是一张表格未来7天每种蔬菜每天的建议零售价和补货量。我们不能直接把这张表扔给采购和运营必须翻译成业务语言。价格策略解读高价品哪些蔬菜被建议定高价是因为需求弹性低必需品还是成本高或是预测需求旺盛建议运营关注这些高价值品的陈列和保鲜。低价/促销品哪些蔬菜被建议定低价是为了清库存高损耗风险还是作为引流品弹性高降价能显著提升销量可以将其作为每日特价菜。价格走势同一蔬菜一周内价格如何变化周末是否提价根据模型解释原因如周末需求增加。补货策略解读补货大户哪些蔬菜需要大量、频繁补货可能是畅销品或损耗极低的品类需要保证供应链畅通。谨慎补货品哪些蔬菜建议少补或不补可能是滞销品、高损耗品或即将下市的季节尾货。建议采购部门与供应商协商灵活的退换货机制。补货节奏补货量是否呈现一定的周期性如周末前加大备货这与需求预测的周期性是否吻合风险提示明确指出模型决策依赖的关键假设如需求预测的准确性、参数估计的可靠性。给出监控建议建议运营人员每日核对实际销量与预测销量如果连续出现较大偏差需要触发人工复核或模型重新训练。准备应急预案对于模型建议极端高或极端低的价格/补货量设置人工审批流程。6. 参赛经验、常见陷阱与进阶思考最后结合我们参赛和项目实践的经验分享一些干货和更深度的思考。6.1 数学建模竞赛实战要点论文重于代码国赛最终提交的是论文代码只是支撑。论文必须清晰阐述模型假设、建立过程、求解方法、结果分析。将上述的“分而治之”思想、协同优化框架用流程图和公式清晰地画出来、写出来。可视化是关键多用图表说话。比如历史销量时间序列图、需求弹性拟合图、优化前后的利润对比柱状图、敏感性分析折线图、最终决策的甘特图或热力图。一图胜千言。灵敏度分析是加分项不要只给出一个结果。像我们上面做的那样展示当关键参数在合理范围内变动时结果如何变化。这体现了模型的稳健性和你对问题的深刻理解。模型检验必不可少除了在测试集上回测还可以设计一些仿真模拟。例如假设未来需求突然增长20%或出现一个竞争对手降价你的策略表现如何这能体现模型的适应能力。6.2 常见陷阱与避坑指南陷阱一忽视数据的时空特性。直接把所有日期数据混在一起拟合一个需求函数。正确做法必须按蔬菜品类分开建模并且考虑星期几、节假日等时间效应。可以使用虚拟变量或为不同时间段建立不同的模型。陷阱二将定价和补货完全割裂或强行同时求解。前者忽略了协同效应后者导致模型过于复杂无法求解。正确做法采用我们提出的迭代优化框架这是工程上解决复杂耦合问题的常用思路在论文中也容易解释。陷阱三过度追求复杂算法。一上来就想用强化学习、深度学习。在有限的时间和数据下这些“大炮”往往不如经典的运筹学模型如报童模型、线性规划稳定、可解释。正确做法先用简单稳健的模型搭建基线系统确保逻辑正确如果时间充裕再尝试改进。陷阱四模型结果不切实际。比如算出某蔬菜价格高达50元/斤或补货量为负。正确做法在优化模型中必须加入现实约束如价格上下限、最小补货批量、库存容量上限等。这些约束条件往往来自题目说明或合理的业务假设。6.3 从赛题到现实进阶思考这道赛题是现实世界零售智能决策的一个高度简化。在实际工业级系统中还需要考虑更多因素多层级库存中央仓、区域仓、门店的多级补货调拨。供应商约束最小起订量、供货周期、折扣阶梯。品类关联蔬菜之间的替代和互补效应西红柿贵了可能更多人买黄瓜。动态定价一天内的价格变化早市 vs 晚市。数据实时性需要在线学习根据最新销售数据实时调整模型参数。解决这些更复杂的问题可能会用到随机规划、鲁棒优化、多智能体强化学习等更高级的工具。但无论工具多先进其核心思想是不变的将业务问题转化为数学问题在不确定性中寻找最优决策并用数据驱动的方式持续迭代和改进。这道国赛C题正是培养这种解决问题能力的绝佳练兵场。
返回列表