2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策

本文主要是介绍2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中思路、代码、文章的参考助攻, 会提供2024年高教社国赛各个赛题的全套参考内容(一般36h内更新完毕), 欢迎订阅!

这期文档是 2023 年的高教授全国大学生数学建模比赛 C题 的一个详细的复盘建模教学,也包括代码复现,它分为两个部分。

第一个部分我们会结合着这个赛题的内容,然后这个题目还有数据的一个设计,跟大家详细的讲一下,我们看到这个题目我们解题的一个思路是什么样子的. 我们可以采用什么样子的模型,怎么样进行数据预处理. 然后如果我们想要进行模型的对比或者是模型的一个优化调优提升,应该要怎么样进行这个脱颖而出的模型的选用

第二部分就是我们会对这个文章的代码进行一个复现,一步步教大家怎么样去进行这个问题的解答。

首先 C题 是一个蔬菜类商品的自动定价和补货决策。这个题目它首先的一个难点就是我们要进行数据处理,因为它给的是四个数据表,我们要先将这四个数据表进行一个数据预处理和数据合并之后才能进行四个问题的一个操作。

问题二三的话,它的计算的复杂度是非常高的。因为它的那个搜索的一个范围是很大的,一般是需要选择一个比较好的求解的优化算法,或者是采用蒙特卡洛算法进行一个搜索。

下面我们对四个问题分别进行详细的建模和代码求解

为了更清晰地阐述我们所构建的相关模型,我们给出所用到模型变量及其相关含义。

在这里插入图片描述

1 蔬菜各品类及单品销售量的分布规律及相互关系分析

首先,我们对蔬菜各品类的销售量分布规律及相互关系进行分析。结合所提供的数据,我们可以得到蔬菜各品类的销售情况。图1展示了过去时间段内蔬菜各品类的销售量分布情况。
请添加图片描述

可以看到,蔬菜各品类中,花叶类销售量最大,其次是辣椒类、食用菌,水生根茎类和花叶类的销售量近似,而茄类的销售量最低。

进一步地,我们以季度为周期,计算各蔬菜品类在各个季度的销售量,图2展示了从2020年9月至2023年5月期间内,9个季度蔬菜品类的销售量变化。
请添加图片描述

可以看到,蔬菜品类的销售量受到时间影响。例如,茄类的销量在一季度往往会有下降的趋势,而花叶类蔬菜的销售高峰往往出现在秋冬季,而辣椒类往往出现在春夏季度,所以商超在制定补货和定价策略时,应该考虑季度因素。

同样以季度为周期,图3展示了蔬菜各品类的平均销售单价和销售总价的变化趋势。蔬菜各品类的平均销售单价计算公式如下:
s a l e _ a v g i = ∑ j ∈ i ( s a l e j d × s a l e _ n u m j d ) ∑ j ∈ i s a l e _ n u m j d sale\_avg_i = \frac{\sum_{j \in i}(sale_{jd} \times sale\_num_{jd})}{\sum_{j \in i} sale\_num_{jd}} sale_avgi=jisale_numjdji(salejd×sale_numjd)

请添加图片描述

由图中可以看到,花叶类蔬菜的销售单价在每个季度近乎都是最低的,但是其销售总价非常高。结合图2的销售量情况,说明销售单价较低的蔬菜品类具有较高的销售量,销售量和销售定价之间存在着一定的关系。

结合所提供的数据,我们可以计算蔬菜各品类的利润变化趋势,蔬菜各品类的利润计算公式如下:
p r o f i t i = ∑ d ( s a l e j d × s a l e _ n u m j d − s a l e j d × r e t u r n j d − w h o l e s a l e j d × ( 1 + a t t r i t i o n i ) × s a l e _ n u m j d ) profit_i = \sum_{d} \left( sale_{jd} \times sale\_num_{jd} - sale_{jd} \times return_{jd} - wholesale_{jd} \times (1 + attrition_i) \times sale\_num_{jd} \right) profiti=d(salejd×sale_numjdsalejd×returnjdwholesalejd×(1+attritioni)×sale_numjd)

图4展示了以季度为周期,蔬菜各品类的利润变化趋势。

请添加图片描述

可以看到,蔬菜各品类利润变化与销售总价的变化大致相同。花叶类蔬菜的售卖由于销售量大,给商超带来的利润也是最多的,其次是辣椒类和食用菌类。茄类、花菜类和水生根茎类的利润大致相同。

以季度为周期,我们利用皮尔逊相关系数计算蔬菜各品类销售量之间的关联关系,皮尔逊相关系数的计算方式如下:
ρ X Y = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ i = 1 n ( X i − X ˉ ) 2 ∑ i = 1 n ( Y i − Y ˉ ) 2 \rho_{XY} = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{n} (X_i - \bar{X})^2 \sum_{i=1}^{n} (Y_i - \bar{Y})^2}} ρXY=i=1n(XiXˉ)2i=1n(YiYˉ)2 i=1n(XiXˉ)(YiYˉ)
其中, X i X_i Xi Y i Y_i Yi 是两个变量 X X X Y Y Y 的观测值, X ˉ \bar{X} Xˉ Y ˉ \bar{Y} Yˉ 分别是 X X X Y Y Y 的均值, n n n 是观测值的数量。

图5展示了蔬菜各品类销售量相关系数矩阵的热力图。

请添加图片描述

这个热力图展示了蔬菜各品类销售量之间的相关系数矩阵。相关系数矩阵是一个方阵,其中每个元素是两个变量之间的相关系数。在这个热力图中,每个单元格的颜色表示对应品类之间的相关系数大小,颜色越深表示相关性越强,颜色越浅表示相关性越弱。根据相关系数矩阵,我们可以看到以下几种蔬菜品类之间的相关性较强:

  • 花叶类和花菜类的相关系数为0.896,相关性较强。
  • 水生根茎类和食用菌的相关系数为0.597,相关性较强。
  • 花叶类和水生根茎类的相关系数为0.489,相关性较强。

另外,我们也可以看到茄类和水生根茎类之间的相关系数为-0.720,呈现出负相关性,即当水生根茎类的产量增加时,茄类的产量反而会下降。

相似地,我们进一步分析蔬菜单品销售量的分布情况和关联情况。图6展示了各蔬菜单品销售量的分布情况。

请添加图片描述

这个直方图展示了各蔬菜单品销售量的分布情况。横轴表示销售量(单位为千克),纵轴表示单品数量。直方图将销售量分成了50个区间,每个区间的高度表示该区间内单品数量的数量。可以看出,销售量在0-5000千克之间的单品数量最多,而销售量在5000-15000千克之间的单品数量逐渐减少。同时,销售量在15000千克以上的单品数量非常少。

图7展示了销售量最高的前10个蔬菜单品的销售量。我们可以看到销售量最高的前十个单品名称及其销售量。其中,销售量最高的单品名称为芜湖青椒(1),销售量为28199.151千克。而销售量最低的单品名称为小米椒(份),销售量为10861.0千克。销售量最高的前三个单品分别为芜湖青椒(1)、西兰花和净藕(1),说明这三个单品在市场上的需求最大。

请添加图片描述

图8展示了以季度为周期蔬菜销售量前10的单品的变化趋势。

请添加图片描述

同样,我们计算了不同蔬菜单品的销售量的相关系数矩阵以分析其关联关系,图9展示了销售量前15的蔬菜单品销售量相关系数矩阵热力图。

请添加图片描述

根据相关系数矩阵,我们可以看到以下几种蔬菜单品之间的相关性较强:

  • 云南生菜和云南油麦菜之间的相关系数为0.883,相关性较强。
  • 云南生菜和金针菇(盒)之间的相关系数为0.725,相关性较强。
  • 云南生菜和云南生菜(份)之间的相关系数为-0.832,呈现出负相关性,即当云南生菜的销售量增加时,云南生菜(份)的销售量反而会下降。
  • 云南生菜和泡泡椒(精品)之间的相关系数为0.778,相关性较强。

另外,我们也可以看到大白菜和金针菇(盒)之间的相关系数为-1.000,呈现出负相关性,即当大白菜的销售量增加时,金针菇(盒)的销售量反而会下降。

4.2 各蔬菜品类未来一周的日补货总量和定价策略

结合题目背景,为了制定商超各蔬菜品类未来一周的日补货总量和定价策略,使得商超收益最大化,我们首先需要分析各蔬菜品类销售总量和成本加成定价的关系,以确定销售定价对销售总量的影响。由于以蔬菜品类为单位进行分析,我们首先计算蔬菜品类每天的平均销售定价,以该定价代替成本加成定价,该定价计算公式如下:
s a l e _ a v g i = ∑ j ∈ i ( s a l e j d × s a l e _ n u m j d ) ∑ j ∈ i s a l e _ n u m j d sale\_avg_i = \frac{\sum_{j \in i}(sale_{jd} \times sale\_num_{jd})}{\sum_{j \in i} sale\_num_{jd}} sale_avgi=jisale_numjdji(salejd×sale_numjd)
各蔬菜品类每天的销售总量计算公式如下:
s a l e _ n u m i = ∑ j ∈ i s a l e _ n u m j d sale\_num_i = \sum_{j \in i} sale\_num_{jd} sale_numi=jisale_numjd
我们考虑不同的函数用于拟合不同的蔬菜品类平均销售定价与销售总量的关系,包括线性函数、幂函数和对数函数,并选择拟合效果最佳的模型作为定价-销量模型func。图10-16展示了不同函数对六种蔬菜品种的拟合效果。最终选择的模型参数如下表所示:

分类名称模型名称模型参数
水生根茎类对数函数[-26.11035516, 2.51727164, 83.60511972]
花叶类对数函数[-36.00775817, 2.35435122, 209.756959]
花菜类线性函数[-2.89165146, 64.2021206]
茄类对数函数[-8.16177241, 1.62367199, 36.4701182]
辣椒类对数函数[-17.07560033, 3.10816607, 105.16379865]
食用菌线性函数[-3.28878025, 92.53732638]

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

为了获取商品利润,我们还需要对蔬菜品类的平均批发价进行预测,蔬菜品类每天的平均批发价计算公式如下:
w h o l e _ a v g _ s a l e i = ∑ j ∈ i ( ( 1 + a t t r i t i o n i ) × s a l e _ n u m j d × w h o l e s a l e j d ) ∑ j ∈ i ( 1 + a t t r i t i o n i ) × s a l e _ n u m j d whole\_avg\_sale_i = \frac{\sum_{j \in i} ((1 + attrition_i) \times sale\_num_{jd} \times wholesale_{jd})}{\sum_{j \in i} (1 + attrition_i) \times sale\_num_{jd}} whole_avg_salei=ji(1+attritioni)×sale_numjdji((1+attritioni)×sale_numjd×wholesalejd)
图16展示了以月为周期,各蔬菜品类平均批发价格的变化。

请添加图片描述

我们利用ARIMA模型对蔬菜品类未来7天的平均批发价进行预测。

自回归差分移动平均模型(ARIMA)是一种时间序列分析中常用的统计模型,用于描述和预测时间序列数据的变化趋势。ARIMA模型基于以下核心思想:时间序列数据中的趋势和周期性可以通过对数据进行自回归、差分和移动平均的操作来捕捉和建模。ARIMA模型的参数通常表示为p、d和q,分别对应了自回归、差分和移动平均的阶数。选择合适的p、d和q值是建立ARIMA模型的关键步骤。

我们利用模型的赤池信息准则(Akaike Information Criterion,AIC)选择最佳的模型参数为(2,2,2),对未来七天的蔬菜品类平均批发价格进行了预测。

得到蔬菜品类平均批发价格和定价-销售量模型之后,我们构建了非线性规划模型,以求解最佳的补货总量和定价策略。所构建的非线性规划模型如下:

Objective:
max ⁡ ( p r o f i t i d = s a l e i d × s a l e _ n u m i d − s u p p l y i d × w h o l e s a l e i d ) \max (profit_i^d = sale_i^d \times sale\_num_i^d - supply_i^d \times wholesale_i^d) max(profitid=saleid×sale_numidsupplyid×wholesaleid)

请添加图片描述

其中,目标函数为最大化商超第d天在蔬菜品类i上的利益,含义为销售总价减去批发总价。 s u p p l y i d supply_i^d supplyid为商品i在d天的补货量, s a l e i d sale_i^d saleid为商品i在d天的销售量;约束条件1要求补货量大于销售量加损耗量,约束条件2要求销售价大于成本批发价,约束条件3要求补货量和销售定价大于0。约束条件4为定价-销售量函数,通过该函数可以由销售定价确定销售量。

带入数据,求解得到商超未来7天的蔬菜品类日补货量和定价策略如下表所示:

日期类别进货量 (kg)定价 (元/kg)
1水生根茎类10.9533419.62878
2水生根茎类10.9437519.6342
3水生根茎类10.8281319.69978
4水生根茎类10.8080319.71121
5水生根茎类10.7924719.72005
6水生根茎类10.7851719.72421
7水生根茎类10.7793519.72752
1花叶类159.74149.440909
2花叶类159.99859.396931
3花叶类160.06999.384782
4花叶类159.96149.403269
5花叶类160.14869.371391
6花叶类160.00689.395525
7花叶类160.20029.362627
1花菜类22.0780215.75169
2花菜类22.100215.74521
3花菜类22.0857715.74943
4花菜类22.0999215.74529
5花菜类22.0892215.74842
6花菜类22.1004415.74514
7花菜类22.0922915.74752
1茄类17.0734114.00598
2茄类17.0808113.99551
3茄类17.0649914.0179
4茄类17.0697714.01114
5茄类17.066314.01606
6茄类17.0644714.01864
7茄类17.0629314.02083
1辣椒类76.9573511.01945
2辣椒类76.787611.09116
3辣椒类76.9674211.01522
4辣椒类76.8137311.08008
5辣椒类76.9878811.00663
6辣椒类76.837611.06997
7辣椒类77.0088910.99781
1食用菌54.2486613.20099
2食用菌52.5368913.67229
3食用菌51.9825613.82492
4食用菌53.426413.42738
5食用菌51.8324413.86625
6食用菌53.3893913.43758
7食用菌52.0550213.80497

4.3 各蔬菜单品未来一天的日补货总量和定价策略

依据题意,商超补货时需要控制可售单品总数,且满足单品订购量的最小陈列量要求,在尽量满足市场对各品类蔬菜商品需求的前提下,使得商超收益最大化。我们假设7月1日所能补货的单品与上一周的可售品种相同,图17展示了2023年6月24日至30日蔬菜单品的销售情况,总共有49种可以采购的单品。

请添加图片描述

与问题4.2类似,我们首先对各单品未来一天的批发价格进行了预测,在这里我们采用历史平均值预测方法得到未来的批发价格 w h o l e s a l e j d wholesale_{jd} wholesalejd,定义非线性规划模型如下:

Objective:
max ⁡ p r o f i t d = ∑ s e l e c t d ( s a l e d × s a l e _ n u m d − s u p p l y d × w h o l e s a l e d ) \max profit_d = \sum_{select_d}(sale_d \times sale\_num_d - supply_d \times wholesale_d) maxprofitd=selectd(saled×sale_numdsupplyd×wholesaled)

Subject to:
请添加图片描述

其中,目标函数为最大化商超的销售利润,为每个蔬菜单品的销售利润的总和,在这里我们使用了一个选择列表 s e l e c t d select_d selectd来控制蔬菜单品的采购数量,其为一个长度为49,值为0或者1的列表,0表示不采购,1表示采购(约束函数9)。 s u p p l y d supply_d supplyd为补货量列表,长度为49,值为蔬菜单品的采购数量; s a l e d sale_d saled为售价列表,长度为49,值为蔬菜单品的销售单价。约束函数1用于满足补货量大于销售量加损耗量的要求;约束函数2用于满足售价大于批发价的要求;约束函数3用于满足最小陈列量要求;约束函数4用于满足单品选择数量要求;约束函数5用于满足补货量列表与选择列表具有相同的0元素值位置的要求;约束函数6用于满足销售价格列表与选择列表具有相同的0元素值位置的要求;约束函数7基于问题4.2所得到的蔬菜品类定价-销售量函数,通过蔬菜单品的品类和定价得到该蔬菜单品的销售量;约束函数8用于满足市场对各品类蔬菜商品需求,要求补货的蔬菜单品所属的品类总共有六种。求解得到商超未来1天的蔬菜单品补货和定价策略如下表所示:

单品名称进货量 (kg)销售价格 (元/kg)
七彩椒(2)28.3669908418.98666667
上海青3.5420985238
云南油麦菜(份)20.770669844.159060403
云南生菜(份)14.164766154.461504425
净藕(1)00
双孢菇(盒)00
圆茄子(2)28.582230416.133333333
外地茼蒿00
奶白菜8.5393127584.792
姜蒜小米椒组合装(小份)20.985860994.72244898
娃娃菜5.6023264546.54109589
小皱皮(份)00
小米椒(份)14.095291555.769333333
小青菜(1)9.4985761045.2
木耳菜15.989183965.332075472
枝江青梗散花00
洪湖藕带00
海鲜菇(包)24.680279622.748387097
竹叶菜12.496205543.773953488
紫茄子(2)00
红椒(2)5.62765791918.89230769
红莲藕带00
红薯尖00
芜湖青椒(1)7.7288474985.2
苋菜00
菜心00
菠菜4.76007575914
菠菜(份)4.2230432765.510204082
菱角29.8684545114
虫草花(份)9.6931393963.6125
螺丝椒16.0754769111.29133858
螺丝椒(份)00
蟹味菇与白玉菇双拼(盒)00
西兰花19.391090112.4080402
西峡花菇(1)22.8061116824
金针菇(盒)19.100329141.879646018
长线茄00
青红杭椒组合装(份)29.030638055.493333333
青线椒(份)22.701067484.3
青茄子(1)4.1417597946
高瓜(1)00
云南油麦菜25.668189097.2
云南生菜14.287967089.2
高瓜(2)00
白玉菇(袋)00
鲜木耳(份)00
木耳菜(份)00
紫茄子(1)26.759664179
野生粉藕23.3716916226

4.4 所需采集数据及应用分析

为了更好地制定蔬菜商品的补货和定价决策,我们认为商超可能还需要以下数据:

  • 成本数据: 了解每个蔬菜品类的生产和采购成本,包括生产、包装、运输和采购成本。这将有助于商超确定最佳的成本加成定价策略。
  • 促销活动数据: 收集有关促销活动的数据,包括促销周期、折扣率、促销时间段等。这有助于商超优化促销策略,并预测促销对销售的影响。
  • 顾客反馈数据: 了解顾客的反馈和购买偏好,包括商品的质量、口味、包装等方面的评价。这有助于商超改进商品选择和品质管理。
  • 库存数据: 监控库存水平,包括每个蔬菜品类的当前库存量和库存周转率。这可以帮助商超避免过多的库存或库存不足。
  • 供应商数据: 收集关于供应商的信息,包括供应商的信誉、供货稳定性和合同条款。这有助于商超选择可靠的供应商并管理供应关系。
  • 市场趋势数据: 了解蔬菜市场的趋势和变化,包括市场价格波动、新品上市、市场需求变化等。这有助于商超做出灵活的决策以适应市场变化。

这篇关于2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106440

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解