本文主要是介绍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=∑j∈isale_numjd∑j∈i(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_numjd−salejd×returnjd−wholesalejd×(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(Xi−Xˉ)2∑i=1n(Yi−Yˉ)2∑i=1n(Xi−Xˉ)(Yi−Yˉ)
其中, 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=∑j∈isale_numjd∑j∈i(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=j∈i∑sale_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=∑j∈i(1+attritioni)×sale_numjd∑j∈i((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_numid−supplyid×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.95334 | 19.62878 |
2 | 水生根茎类 | 10.94375 | 19.6342 |
3 | 水生根茎类 | 10.82813 | 19.69978 |
4 | 水生根茎类 | 10.80803 | 19.71121 |
5 | 水生根茎类 | 10.79247 | 19.72005 |
6 | 水生根茎类 | 10.78517 | 19.72421 |
7 | 水生根茎类 | 10.77935 | 19.72752 |
1 | 花叶类 | 159.7414 | 9.440909 |
2 | 花叶类 | 159.9985 | 9.396931 |
3 | 花叶类 | 160.0699 | 9.384782 |
4 | 花叶类 | 159.9614 | 9.403269 |
5 | 花叶类 | 160.1486 | 9.371391 |
6 | 花叶类 | 160.0068 | 9.395525 |
7 | 花叶类 | 160.2002 | 9.362627 |
1 | 花菜类 | 22.07802 | 15.75169 |
2 | 花菜类 | 22.1002 | 15.74521 |
3 | 花菜类 | 22.08577 | 15.74943 |
4 | 花菜类 | 22.09992 | 15.74529 |
5 | 花菜类 | 22.08922 | 15.74842 |
6 | 花菜类 | 22.10044 | 15.74514 |
7 | 花菜类 | 22.09229 | 15.74752 |
1 | 茄类 | 17.07341 | 14.00598 |
2 | 茄类 | 17.08081 | 13.99551 |
3 | 茄类 | 17.06499 | 14.0179 |
4 | 茄类 | 17.06977 | 14.01114 |
5 | 茄类 | 17.0663 | 14.01606 |
6 | 茄类 | 17.06447 | 14.01864 |
7 | 茄类 | 17.06293 | 14.02083 |
1 | 辣椒类 | 76.95735 | 11.01945 |
2 | 辣椒类 | 76.7876 | 11.09116 |
3 | 辣椒类 | 76.96742 | 11.01522 |
4 | 辣椒类 | 76.81373 | 11.08008 |
5 | 辣椒类 | 76.98788 | 11.00663 |
6 | 辣椒类 | 76.8376 | 11.06997 |
7 | 辣椒类 | 77.00889 | 10.99781 |
1 | 食用菌 | 54.24866 | 13.20099 |
2 | 食用菌 | 52.53689 | 13.67229 |
3 | 食用菌 | 51.98256 | 13.82492 |
4 | 食用菌 | 53.4264 | 13.42738 |
5 | 食用菌 | 51.83244 | 13.86625 |
6 | 食用菌 | 53.38939 | 13.43758 |
7 | 食用菌 | 52.05502 | 13.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_numd−supplyd×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.36699084 | 18.98666667 |
上海青 | 3.542098523 | 8 |
云南油麦菜(份) | 20.77066984 | 4.159060403 |
云南生菜(份) | 14.16476615 | 4.461504425 |
净藕(1) | 0 | 0 |
双孢菇(盒) | 0 | 0 |
圆茄子(2) | 28.58223041 | 6.133333333 |
外地茼蒿 | 0 | 0 |
奶白菜 | 8.539312758 | 4.792 |
姜蒜小米椒组合装(小份) | 20.98586099 | 4.72244898 |
娃娃菜 | 5.602326454 | 6.54109589 |
小皱皮(份) | 0 | 0 |
小米椒(份) | 14.09529155 | 5.769333333 |
小青菜(1) | 9.498576104 | 5.2 |
木耳菜 | 15.98918396 | 5.332075472 |
枝江青梗散花 | 0 | 0 |
洪湖藕带 | 0 | 0 |
海鲜菇(包) | 24.68027962 | 2.748387097 |
竹叶菜 | 12.49620554 | 3.773953488 |
紫茄子(2) | 0 | 0 |
红椒(2) | 5.627657919 | 18.89230769 |
红莲藕带 | 0 | 0 |
红薯尖 | 0 | 0 |
芜湖青椒(1) | 7.728847498 | 5.2 |
苋菜 | 0 | 0 |
菜心 | 0 | 0 |
菠菜 | 4.760075759 | 14 |
菠菜(份) | 4.223043276 | 5.510204082 |
菱角 | 29.86845451 | 14 |
虫草花(份) | 9.693139396 | 3.6125 |
螺丝椒 | 16.07547691 | 11.29133858 |
螺丝椒(份) | 0 | 0 |
蟹味菇与白玉菇双拼(盒) | 0 | 0 |
西兰花 | 19.3910901 | 12.4080402 |
西峡花菇(1) | 22.80611168 | 24 |
金针菇(盒) | 19.10032914 | 1.879646018 |
长线茄 | 0 | 0 |
青红杭椒组合装(份) | 29.03063805 | 5.493333333 |
青线椒(份) | 22.70106748 | 4.3 |
青茄子(1) | 4.141759794 | 6 |
高瓜(1) | 0 | 0 |
云南油麦菜 | 25.66818909 | 7.2 |
云南生菜 | 14.28796708 | 9.2 |
高瓜(2) | 0 | 0 |
白玉菇(袋) | 0 | 0 |
鲜木耳(份) | 0 | 0 |
木耳菜(份) | 0 | 0 |
紫茄子(1) | 26.75966417 | 9 |
野生粉藕 | 23.37169162 | 26 |
4.4 所需采集数据及应用分析
为了更好地制定蔬菜商品的补货和定价决策,我们认为商超可能还需要以下数据:
- 成本数据: 了解每个蔬菜品类的生产和采购成本,包括生产、包装、运输和采购成本。这将有助于商超确定最佳的成本加成定价策略。
- 促销活动数据: 收集有关促销活动的数据,包括促销周期、折扣率、促销时间段等。这有助于商超优化促销策略,并预测促销对销售的影响。
- 顾客反馈数据: 了解顾客的反馈和购买偏好,包括商品的质量、口味、包装等方面的评价。这有助于商超改进商品选择和品质管理。
- 库存数据: 监控库存水平,包括每个蔬菜品类的当前库存量和库存周转率。这可以帮助商超避免过多的库存或库存不足。
- 供应商数据: 收集关于供应商的信息,包括供应商的信誉、供货稳定性和合同条款。这有助于商超选择可靠的供应商并管理供应关系。
- 市场趋势数据: 了解蔬菜市场的趋势和变化,包括市场价格波动、新品上市、市场需求变化等。这有助于商超做出灵活的决策以适应市场变化。
这篇关于2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!