【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策
在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差,
大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需
求情况每天进行补货。
由于商超销售的蔬菜品种众多、产地不尽相同,而蔬菜的进货交易时间通常在凌晨 3:00-
4:00,为此商家须在不确切知道具体单品和进货价格的情况下,做出当日各蔬菜品类的补货
决策。蔬菜的定价一般采用“成本加成定价”方法,商超对运损和品相变差的商品通常进行
打折销售。可靠的市场需求分析,对补货决策和定价决策尤为重要。从需求侧来看,蔬菜类
商品的销售量与时间往往存在一定的关联关系;从供给侧来看,蔬菜的供应品种在 4 月至 10
月较为丰富,商超销售空间的限制使得合理的销售组合变得极为重要。
附件 1 给出了某商超经销的 6 个蔬菜品类的商品信息;附件 2 和附件 3 分别给出了该
商超 2020 年 7 月 1 日至 2023 年 6 月 30 日各商品的销售流水明细与批发价格的相关数据;
附件 4 给出了各商品近期的损耗率数据。请根据附件和实际情况建立数学模型解决以下问
题:

裙号:882663918
完整代码:https://www.jdmm.cc/file/2709542/

问题一代码:

#!/usr/bin/env python
# coding: utf-8

# In[34]:


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import warnings
warnings.filterwarnings('ignore')
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
import matplotlib.font_manager as fm


# In[35]:


# 设置全局字体
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为黑体

# 加载字体文件
font = fm.FontProperties(fname='C:\Windows\Fonts\simhei.ttf', size=16)


# In[ ]:


#千千数模 q群:790539996
#代码购买链接:https://www.jdmm.cc/file/2709542/
#倒卖欢迎举报 举报有奖


# # 1.1 蔬菜类商品不同品类或不同单品之间可能存在一定的关联关系,请分析蔬菜各品类及单品销售量的分布规律及相互关系。

# In[36]:


# Read the data
'''
# data_1: 6 个蔬菜品类的商品信息
# data_2: 销售流水明细数据
# data_3: 蔬菜类商品的批发价格
# data_4: 蔬菜类商品的近期损耗率
附件 1 中,部分单品名称包含的数字编号表示不同的供应来源。
附件 4 中的损耗率反映了近期商品的损耗情况,通过近期盘点周期的数据计算得到。

'''
data_1 = pd.read_excel('../data/附件1.xlsx')
data_2 = pd.read_excel('../data/附件2.xlsx')
data_3 = pd.read_excel('../data/附件3.xlsx')
data_4 = pd.read_excel('../data/附件4.xlsx')


# In[37]:


data_1.head()


# In[38]:


data_2.head()


# In[39]:


data_3.head()
#将data_3中的列重命名为销售日期、单品编码和批发价格
data_3.columns = ['销售日期','单品编码','批发价格(元/千克)']
data_3.head()
#data_3.shape


# In[40]:


#将data_4中的列重命名为分类编码、分类名称、平均损耗率
data_4.columns = ['分类编码','分类名称','平均损耗率']
data_4.head()
#data_4.shape


# In[41]:


data_2.shape


# # 1.1.1 蔬菜各品类销售量的分布规律

# In[42]:


# 合并data_1和data_2
merged_data = pd.merge(data_1, data_2, on='单品编码')
# 按照分类名称进行分组,计算每个品类的销售量
sales_by_category = merged_data[merged_data['销售类型'] == '销售'].groupby('分类名称')['销量(千克)'].sum() - merged_data[merged_data['销售类型'] == '退货'].groupby('分类名称')['销量(千克)'].sum()


# In[43]:


sales_by_category.index[0:6]


# In[44]:


# plot the sales distribution
plt.figure(figsize=(10, 6)) # set the figure size to 10x6 inches
plt.bar(sales_by_category.index, sales_by_category.values)
plt.xticks(rotation=45, fontproperties = font, size = 16) # set the font for x-axis labels
plt.xlabel('分类名称', fontproperties = font) # set the font for x-axis label
plt.ylabel('销售量(千克)', fontproperties = font) # set the font for y-axis label
plt.title('蔬菜各品类销售量分布', fontproperties = font) # set the font for title
plt.savefig('../results/sales_distribution.png', dpi=300, bbox_inches='tight') # set dpi to 300 for higher resolution and save the entire figure


# In[45]:


# 以季度为周期,可视化不同蔬菜品类销售量的变化趋势
# 将销售数据按照季度进行重采样
quarterly_sales = merged_data.resample('Q', on='销售日期')['销量(千克)'].sum()
# 将销售数据按照分类名称和季度进行分组,计算每个品类在每个季度的销售量
# sales_by_category = merged_data[merged_data['销售类型'] == '销售'].groupby(['分类名称', pd.Grouper(key='销售日期', freq='Q')])['销量(千克)'].sum() - merged_data[merged_data['销售类型'] == '退货'].groupby(['分类名称', pd.Grouper(key='销售日期', freq='Q')])['销量(千克)'].sum()
sales_by_category = merged_data[merged_data['销售类型'] == '销售'].groupby(['分类名称', pd.Grouper(key='销售日期', freq='Q')])['销量(千克)'].sum()
# 可视化销售量变化趋势
fig, ax = plt.subplots(figsize=(10, 6))
for category in sales_by_category.index.levels[0]:
    ax.plot(sales_by_category.loc[category].index, sales_by_category.loc[category].values, label=category)
ax.legend()
ax.set_xlabel('季度')
ax.set_ylabel('销售量(千克)')
ax.set_title('蔬菜各品类销售量变化趋势')
plt.savefig('../results/sales_num_trend.png', dpi=300, bbox_inches='tight')

【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策_第1张图片
【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策_第2张图片
【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策_第3张图片

问题 1 蔬菜类商品不同品类或不同单品之间可能存在一定的关联关系,请分析蔬菜各
品类及单品销售量的分布规律及相互关系。

问题一要求分析蔬菜各品类及单品销售量的分布规律及相互关系。下

  1. 数据预处理 首先,我们需要对附件2中的销售流水明细数据进行预处理,以便于后续的分析和建模。具体地,我们可以按照以下步骤进行:
  • 对销售流水明细数据进行汇总,得到各蔬菜品类和单品的销售总量。
  • 对销售总量进行归一化处理,以便于后续的分析和比较。
  1. 分析销售量的分布规律 接下来,我们需要分析各蔬菜品类和单品的销售量的分布规律。具体地,我们可以按照以下步骤进行:
  • 绘制销售量的直方图和箱线图,观察它们的分布情况和异常值情况。
  • 计算销售量的均值、方差、偏度和峰度等统计量,以便于后续的分析和比较。
  • 进行聚类分析,将蔬菜品类和单品划分为若干个类别,以便于后续的分析和建模。
  1. 分析销售量的相互关系 在分析了销售量的分布规律之后,我们可以进一步分析各蔬菜品类和单品之间的销售量的相互关系。具体地,我们可以按照以下步骤进行:
  • 绘制销售量的散点图,观察它们之间的关系。
  • 计算销售量之间的相关系数,判断它们之间的线性关系的强度和方向。
  • 进行因子分析

问题 2 考虑商超以品类为单位做补货计划,请分析各蔬菜品类的销售总量与成本加成
定价的关系,并给出各蔬菜品类未来一周(2023 年 7 月 1-7 日)的日补货总量和定价策略,
使得商超收益最大。

问题 2要求分析各蔬菜品类的销售总量与成本加成定价的关系,并给出各蔬菜品类未来一周(2023年7月1-7日)的日补货总量和定价策略,使得商超收益最大。

  1. 数据预处理 首先,我们需要对附件2和附件3中的数据进行预处理,以便于后续的分析和建模。具体地,我们可以按照以下步骤进行:
  • 对销售流水明细数据进行汇总,得到各蔬菜品类的销售总量。
  • 对批发价格数据进行处理,计算各蔬菜品类的成本加成定价。
  1. 分析销售总量与成本加成定价的关系 接下来,我们需要分析各蔬菜品类的销售总量与成本加成定价的关系。具体地,我们可以按照以下步骤进行:
  • 绘制销售总量与成本加成定价的散点图,观察它们之间的关系。
  • 计算销售总量与成本加成定价之间的相关系数,判断它们之间的线性关系的强度和方向。
  • 进行回归分析,得到销售总量与成本加成定价之间的线性回归方程,以便于后续的建模和优化。
  1. 建立数学模型 在分析了销售总量与成本加成定价的关系之后,我们可以建立数学模型,以最大化商超的收益。具体地,我们可以按照以下步骤进行: - 定义决策变量:对于每个蔬菜品类,我们定义一个补货量和一个定价变量,分别表示商超在未来一周内每天补货的数量和每个蔬菜品类的定价。
  • 定义目标函数:商超的收益可以定义为销售收入减去成本。因此,我们可以将目标函数定义为: max Σ(销售收入 - 成本) 其中,Σ表示对所有蔬菜品类求和,销售收入可以通过补货量和定价计算得到,成本可以通过批发价格和补货量计算得到。
  • 定义约束条件:为了保证补货量和定价的合理性,我们需要定义一些约束条件。具体地,我们可以按照以下方式定义约束条件:
  • 补货量约束:商超每天补货的数量不能超过该蔬菜品类的销售总量。
  • 定价约束:商超的定价必须在一定的范围内,以保证价格的合理性和市场竞争力。
  • 收益约束:商超的收益必须大于等于一个给定的阈值,以保证商超的盈利能力。
  1. 求解数学模型 在建立了数学模型之后,我们可以使用数学优化方法,如线性规划或整数规划,来求解模型,得到最优的补货计划和定价策略。具体地,我们可以使用求解器或其他数学优化软件,将模型输入其中,然后运行求解器,得到最优的补货量和定价。最后,我们可以根据模型的结果,给出各蔬菜品类未来一周的日补货总量和定价策略,以实现商超收益最大化。 总之,通过以上的步骤,我们可以分析各蔬菜品类的销售总量与成本加成定价的关系,建立数学模型,求解模型,得到最优的补货计划和定价策略,以实现商超收益最大化。需要注意的是,在实际应用中,我们还需要考虑一些其他的因素,如市场需求、供应链管理、损耗率等,以保证模型的准确性和可行性。

问题 3 因蔬菜类商品的销售空间有限,商超希望进一步制定单品的补货计划,要求可
售单品总数控制在 27-33 个,且各单品订购量满足最小陈列量 2.5 千克的要求。根据 2023
年 6 月 24-30 日的可售品种,给出 7 月 1 日的单品补货量和定价策略,在尽量满足市场对各
品类蔬菜商品需求的前提下,使得商超收益最大。

问题三要求制定单品的补货计划,要求可售单品总数控制在27-33个,且各单品订购量满足最小陈列量2.5千克的要求。根据2023年6月24-30日的可售品种,给出7月1日的单品补货量和定价策略,在尽量满足市场对各品类蔬菜商品需求的前提下,使得商超收益最大。

  1. 数据预处理 首先,我们需要对附件2中的销售流水明细数据进行预处理,以便于后续的分析和建模。具体地,我们可以按照以下步骤进行:
  • 对销售流水明细数据进行汇总,得到各蔬菜品类和单品的销售总量。
  • 对销售总量进行归一化处理,以便于后续的分析和比较。
  1. 制定补货计划和定价策略 接下来,我们需要制定单品的补货计划和定价策略。具体地,我们可以按照以下步骤进行:
  • 根据可售品种和市场需求,确定需要补货的单品种类和数量。
  • 根据各单品的销售量和成本加成定价的关系,计算出各单品的售价。
  • 根据各单品的售价和损耗率,计算出各单品的净收益。
  • 根据各单品的净收益和补货量,计算出商超的总收益。
  • 利用数学优化方法,求解最优的补货计划和定价策略,使得商超收益最大化。
  1. 控制单品的数量和订购量 根据问题三的要求,商超希望制定单品的补货计划,要求可售单品总数控制在27-33个,且各单品订购量满足最小陈列量2.5千克的要求。因此,在制定补货计划和定价策略时,需要考虑这些限制条件,以确保计的可行性和有效性。具体地,我们可以按照以下步骤进行:
  • 根据可售品种和市场需求,确定需要补货的单品种类和数量。
  • 对于每个单品,计算出其最小陈列量,以确保其能够满足市场需求。
  • 根据可售单品总数的限制,对各单品的补货量进行调整,以确保总数控制在27-33个之间。
  • 根据各单品的补货量和最小陈列量,计算出各单品的订购量,以确保其能够满足市场需求和陈列要求。 需要注意的是,这些限制条件可能会相互制约,因此需要进行综合考虑和优化,以达到最优的补货计划和定价策略。

问题 4 为了更好地制定蔬菜商品的补货和定价决策,商超还需要采集哪些相关数据,
这些数据对解决上述问题有何帮助,请给出你们的意见和理由。
对于问题四,商超需要采集哪些相关数据,这些数据对解决上述问题有何帮助,请给出你们的意见和理由。 为了更好地制定蔬菜商品的补货和定价决策,商超需要采集以下相关数据:

  1. 市场需求数据:商超需要了解市场对各品类蔬菜商品的需求情况,以便于制定最优的补货计划和定价策略。这些数据可以通过市场调研、销售数据分析等方式获得。
  2. 成本数据:商超需要了解各单品的成本情况,以便于计算出各单品的售价和净收益。这些数据可以通过采购记录、供应商报价等方式获得。
  3. 损耗率数据:商超需要了解各单品的损耗率情况,以便于计算出各单品的净收益。这些数据可以通过库存管理系统、盘点记录等方式获得。
  4. 供应商数据:商超需要了解各单品的供应商情况,以便于进行供应商评估和管理。这些数据可以通过采购记录、供应商合同等方式获得。
    这些数据对解决上述问题非常有帮助。例如,市场需求数据可以帮助商超了解市场对各品类蔬菜商品的需求情况,从而制定最优的补货计划和定价策略;成本数据和损耗率数据可以帮助商超计算出各单品的售价和净收益,从而实现商超收益最大化;供应商数据可以帮助商超进行供应商评估和管理,从而确保商品的质量和供应.
    附件1给出了6个蔬菜品类的商品信息,包括品类、单品名称、供应商、规格、单位和成本加成等信息。附件2和附件3分别给出了该商2020年7月1日至2023年6月30日各商品的销售流水明细与批发价格的相关数据。附件4给出了各商品近期的损耗率数据。这些数据对制定蔬菜类商品的补货和定价决策非常有帮助,可以帮助商超了解市场需求、商品成本、损耗情况等,从而制定最优的补货计划和定价策略,实现商超收益最大化。

附件 1 6 个蔬菜品类的商品信息
附件 2 销售流水明细数据
附件 3 蔬菜类商品的批发价格
附件 4 蔬菜类商品的近期损耗率

你可能感兴趣的:(数学建模)