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

相关文章

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建