【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现

简介: 本文介绍了2023年高教社杯数学建模竞赛C题,涉及蔬菜类商品的自动定价与补货决策,包括问题分析、数学模型的构建以及Python代码实现,旨在优化商超的补货和定价策略以提高收益。

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策

在这里插入图片描述

1 题目

C题蔬菜类商品的自动定价与补货决策

在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需求情况每天进行补货。

由于商超销售的蔬菜品种众多、产地不尽相同,而蔬菜的进货交易时间通常在凌晨 3:00- 4:00,为此商家须在不确切知道具体单品和进货价格的情况下,做出当日各蔬菜品类的补货决策。蔬菜的定价一般采用“成本加成定价”方法,商超对运损和品相变差的商品通常进行打折销售。可靠的市场需求分析,对补货决策和定价决策尤为重要。从需求侧来看,蔬菜类商品的销售量与时间往往存在一定的关联关系;从供给侧来看,蔬菜的供应品种在 4 月至 10 月较为丰富,商超销售空间的限制使得合理的销售组合变得极为重要。

附件 1 给出了某商超经销的 6 个蔬菜品类的商品信息;附件 2 和附件 3 分别给出了该商超 2020 年 7 月 1 日至 2023 年 6 月 30 日各商品的销售流水明细与批发价格的相关数据;附件 4 给出了各商品近期的损耗率数据。请根据附件和实际情况建立数学模型解决以下问题:

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

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

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

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

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

2 问题分析

2.1 问题一

分析每个蔬菜品类和单品的销售量分布规律,可以使用可视化工具展示销售量的直方图和箱线图,观察销售量的分布情况和异常值情况。然后,计算相关系数法分析蔬菜类商品之间的销售量相关性,以及不同品类或不同单品之间可能存在的销售量关联关系。

2.2 问题二

线性规划问题。首先,需要根据附件2的销售流水明细计算出各蔬菜品类的销售总量。具体来说,对于每个蔬菜品类 i i i,其销售总量 S i S_i Si​ 可以通过对其子类,即分类编码为包含品类编码的前 8 位数字的销售总量求和得到,即

Si=jCisj

其中,Ci​ 表示蔬菜品类 i所包含的子类集合,sj​ 表示子类 j 的销售总量。

接下来,需要计算每个蔬菜品类的成本加成定价。假设蔬菜品类 i 的成本为ci​,加成率为mi​,则成本加成定价为
pi=(1+mi)ci

需要根据附件3的批发价格数据来计算成本和利润。对于每个蔬菜品类 i,其成本 ci​ 可以通过对其子类的平均批发价格求和得到,即

ci=jCiwjpjjCiwj

其中,wj​ 表示子类 j 的批发数量,pj​ 表示子类 j 的平均批发价格。

接下来,需要根据附件4的损耗率数据来计算每个蔬菜品类的损耗成本。具体来说,假设蔬菜品类 i 的损耗率为ri​,则其损耗成本li​ 可以通过对其子类的销售总量和批发价格求加权平均再乘以损耗率得到,即

li=jCisjwjpjjCisjwj×ri

最后,需要根据题目要求,设计一个数学模型,计算出未来一周每个蔬菜品类的日补货总量和定价策略,使得商超收益最大。

请下载完整资料

2.3 问题三

在问题二模型的基础上,需要考虑进一步制定单品的补货计划的问题,即需要限制每个蔬菜品类的可售单品总数控制在 27-33 个,且各单品订购量满足最小陈列量 2.5 千克的要求。将其转为整数规划问题。改进的主要包括两个地方:

(1)添加约束条件,限制每个蔬菜品类的可售单品总数不超过 33 个,同时除最后一天外,每天需补货的种类数也不超过 33 个。

(2)将原优化问题拆分为 7 天的子问题,在满足第一步限制条件的前提下,求解出每天的最优补货量和售价。

数学模型如下:

请下载完整资料

其中第一个约束限制了每个蔬菜品类在每天的日补货总量不超过其最大日补货量。
第二个约束限制了除最后一天外,每天需补货的种类数不超过 33 个。
第三个约束限制了最后一天无需补货。
第四个约束限制了补货量和售价必须为整数。

2.4 问题四

商品交易是买卖双方的事情,尽可能的采集买卖双方的数据,就能实现客户定制化,卖家合理化的销售方案。

(1)顾客信息:购买偏好以及消费者的人口统计信息,如年龄、性别、职业、月收入等,分析市场需求和制定适合不同消费者群体的销售组合和定价策略。

(2)商品信息:商品的产地、采购时间、采购批次等信息,分析不同季节的采购价格、采购成本及商品质量。

3 python代码

3.1 问题一

读取数据

import pandas as pd
import numpy as np
import warnings
import matplotlib.pyplot as plt 
import seaborn as sns 
import scipy.stats as st
%matplotlib  inline
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif'] = 'SimSun' # 换成自己环境下的中文字体,比如'SimHei'
plt.style.use('seaborn-darkgrid')
sns.set(style = 'darkgrid')

# 使用分类编码和单品编码进行合并
item_info = pd.read_excel('data/附件1.xlsx')
item_info = item_info.fillna(method='ffill')
item_info['单品编码'] = item_info['单品编码'].astype('str')
item_info['分类编码'] = item_info['分类编码'].astype('str')
item_info['分类-单品编码'] = item_info['分类编码'] + '-' + item_info['单品编码']

# 计算出每个商品的销售总量、销售总额等信息
sales_details = pd.read_excel('data/附件2.xlsx')
sales_details['单品编码'] = sales_details['单品编码'].astype('str')
sales_details = sales_details[['销售日期', '单品编码', '销量(千克)', '销售单价(元/千克)']]
sales_details['销售额(元)'] = sales_details['销量(千克)'] * sales_details['销售单价(元/千克)']
sales_by_item = sales_details.groupby('单品编码').agg({'销量(千克)': 'sum', '销售额(元)': 'sum'}).reset_index()

# 计算出每个商品的平均批发价格、总批发额等信息
wholesale_price = pd.read_excel('data/附件3.xlsx')
wholesale_price
wholesale_price['单品编码'] = wholesale_price['单品编码'].astype('str')
wholesale_by_item = wholesale_price.groupby('单品编码').agg({'批发价格(元/千克)': 'mean'}).reset_index()
wholesale_by_item.columns = ['单品编码', '平均批发价格(元/千克)']
wholesale_by_item['总批发额(元)'] = wholesale_by_item['平均批发价格(元/千克)'] * sales_by_item['销量(千克)']

# 与商品信息合并,得到每个商品的损耗率
loss_rate = pd.read_excel('data/附件4.xlsx')
loss_rate
loss_rate['小分类编码'] = loss_rate['小分类编码'].astype('str')
item_info['单品编码'] = item_info['单品编码'].astype('str')
item_loss_rate = pd.merge(item_info, loss_rate, left_on='分类编码', right_on='小分类编码', how='left')
AI 代码解读

(1)分析每个蔬菜品类和单品的销售量分布规律,使用直方图和箱线图展示销售量的分布情况,

# 统计根茎类不同单品的销售量
sales_by_item = sales_details.merge(item_info, on='单品编码', how='left')
sales_by_item = sales_by_item.groupby(['分类名称', '单品名称']).agg({'销量(千克)': 'sum'}).reset_index()

# 绘制直方图展示销售量分布情况
sales_by_item[sales_by_item['分类名称'] == '根茎类'].sort_values('销量(千克)', ascending=False).plot(kind='bar', x='单品名称', y='销量(千克)',
                                                                                             figsize=(10, 6))
plt.title('根茎类销售量直方图')
plt.xlabel('单品名称')
plt.ylabel('销量(千克)')
plt.show()

# 绘制箱线图展示销售量分布情况
sales_by_item.boxplot(column='销量(千克)', by='分类名称', figsize=(10, 6))
plt.title('各品类销售量箱线图')
plt.xlabel('品类名称')
plt.ylabel('销量(千克)')
plt.show()
AI 代码解读

在这里插入图片描述
在这里插入图片描述

(2)分析蔬菜类商品之间的销售量相关性,使用相关系数矩阵和热力图来分析不同蔬菜类商品之间的销售量相关性

# 将销售流水明细和商品信息合并,得到分类-单品编码和销售量的对应关系
sales_by_category = sales_details.merge(item_info, on='单品编码', how='left')
# 只取了20个进行可视化分析
sales_by_category = sales_by_category[0:20]
sales_matrix = sales_by_category.pivot(columns='分类-单品编码', values='销量(千克)')
corr_matrix = sales_matrix.corr()

plt.figure(figsize=(10, 8))
plt.imshow(corr_matrix, cmap=plt.cm.Reds_r)
plt.xticks(range(len(corr_matrix.columns)), corr_matrix.columns, rotation=90)
plt.yticks(range(len(corr_matrix.columns)), corr_matrix.columns)
plt.colorbar()
plt.title('销售量相关系数热力图')
plt.savefig('3.png',dpi=300)
plt.show()
AI 代码解读

(3)分析不同品类或不同单品之间可能存在的销售量关联关系,使用散点图来展示不同品类或不同单品之间可能存在的销售量关联关系

# 将销售流水明细和商品信息合并,得到分类名称和销售量的对应关系
sales_by_category = sales_details.merge(item_info, on='单品编码', how='left')
sales_by_category = sales_by_category.groupby('分类名称').agg({'销量(千克)': 'sum'}).reset_index()

# 绘制散点图展示不同品类之间的销售量关联情况
categories = list(set(item_info['分类名称']))
fig, ax = plt.subplots(figsize=(10, 6))
for c in categories:
    if c != '其他':
        ax.scatter(sales_by_category[sales_by_category['分类名称'] == c]['销量(千克)'], 
                   sales_by_category[sales_by_category['分类名称'] == c].index,
                   label=c)
plt.legend()
plt.ylabel('分类名称')
plt.xlabel('销售量(千克)')
plt.title('不同品类间销售量关联情况')
plt.show()
AI 代码解读

在这里插入图片描述

3.2 问题二、三

在这里插入图片描述

目录
打赏
0
1
1
0
150
分享
相关文章
1688平台API接口实战:Python实现店铺全量商品数据抓取
本文介绍如何使用Python通过1688开放平台的API接口自动化抓取店铺所有商品数据。首先,开发者需在1688开放平台完成注册并获取App Key和App Secret,申请“商品信息查询”权限。接着,利用`alibaba.trade.product.search4trade`接口,构建请求参数、生成MD5签名,并通过分页机制获取全量商品数据。文中详细解析了响应结构、存储优化及常见问题处理方法,还提供了竞品监控、库存预警等应用场景示例和完整代码。
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
|
2月前
|
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
78 5
Python高性能编程:五种核心优化技术的原理与Python代码
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
141 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
3月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
86 33
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
59 10

热门文章

最新文章