【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 位数字的销售总量求和得到,即
S i = ∑ j ∈ C i s j S_i = \sum_{j \in C_i} s_j Si=j∈Ci∑sj
其中, C i C_i Ci 表示蔬菜品类 i i i 所包含的子类集合, s j s_j sj 表示子类 j j j 的销售总量。
接下来,需要计算每个蔬菜品类的成本加成定价。假设蔬菜品类  i i i 的成本为  c i c_i ci,加成率为  m i m_i mi,则成本加成定价为
  p i = ( 1 + m i ) c i p_i = (1 + m_i) c_i pi=(1+mi)ci
需要根据附件3的批发价格数据来计算成本和利润。对于每个蔬菜品类 i i i,其成本 c i c_i ci 可以通过对其子类的平均批发价格求和得到,即
c i = ∑ j ∈ C i w j p j ∑ j ∈ C i w j c_i = \dfrac{\sum_{j \in C_i} w_j p_j}{\sum_{j \in C_i} w_j} ci=∑j∈Ciwj∑j∈Ciwjpj
其中, w j w_j wj 表示子类 j j j 的批发数量, p j p_j pj 表示子类 j j j 的平均批发价格。
接下来,需要根据附件4的损耗率数据来计算每个蔬菜品类的损耗成本。具体来说,假设蔬菜品类 i i i 的损耗率为 r i r_i ri,则其损耗成本 l i l_i li 可以通过对其子类的销售总量和批发价格求加权平均再乘以损耗率得到,即
l i = ∑ j ∈ C i s j w j p j ∑ j ∈ C i s j w j × r i l_i = \dfrac{\sum_{j \in C_i} s_j w_j p_j}{\sum_{j \in C_i} s_j w_j} \times r_i li=∑j∈Cisjwj∑j∈Cisjwjpj×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')
 
(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()
 

 
(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()
 
(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()
 

3.2 问题二、三

相关文章:
【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现
【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 1 题目 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此&…...
华为云云耀云服务器L实例评测|华为云云耀云服务器L实例评测使用
作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖…...
【DS思想+堆贪心】CF595div3 D2
Problem - D2 - Codeforces 题意: 思路: 大家都说这是典,但是我不懂怎么个典法,可能堆贪心都是这样做的吗,不懂 首先肯定要贪心,对于一个坏点,优先删除覆盖别的点多的 考虑nlogn做法&#x…...
2023-09-08 LeetCode每日一题(计算列车到站时间)
2023-09-08每日一题 一、题目编号 2651. 计算列车到站时间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时…...
软考-高级-信息系统项目管理第四版(完整24章全笔记)
《信息系统项目管理师教程》(第4版)是由全国计算机专业技术资格考试办公室组织编写的考试用书,根据2022年审定通过的《信息系统项目管理师考试大纲》编写,对信息系统项目管理师岗位所要求的主要知识及应用技术进行了阐述。 《信息…...
华为Mate 60和iPhone 15选哪个?
最近也有很多朋友问我这个问题来着,首先两款手机定位都是高端机,性能和体验各有千秋,各自有自己的铁杆粉。 但是让人意想不到的是华为mate60近日在海外越来越受欢迎和追捧,甚至是引起了不少人的抢购,外观设计和…...
嵌入式Linux驱动开发(同步与互斥专题)(二)
一、自旋锁spinlock的实现 自旋锁,顾名思义:自己在原地打转,等待资源可用,一旦可用就上锁霸占它。 ① 原地打转的是CPU x,以后CPU y会解锁:这涉及多个CPU,适用于SMP系统; ② 对于单…...
Docker安装部署Nexus3作为内网镜像代理缓存容器镜像
Docker安装部署Nexus3作为内网镜像代理 一、背景描述 基础镜像比较小,仓库使用阿里云或者腾讯云拉取速度挺快,但是时光飞逝几年时间过去,再加上AI加持的情况下,有些镜像的大小已经接近20G! 这种情况下不管是测试环境…...
SpringBoot工具库:解决SpringBoot2.*版本跨域问题
1.解决问题:When allowCredentials is true, xxxxxxx , using “allowedOriginPatterns“ instead 2.3版本跨域配置如下 /*** 跨域问题解决*/ Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegi…...
docker安装开发常用软件MySQL,Redis,rabbitMQ
Docker安装 docker官网:Docker: Accelerated Container Application Development docker镜像仓库:https://hub.docker.com/search?qnginx 官网的安装教程:Install Docker Engine on CentOS | Docker Docs 安装步骤 1、卸载以前安装的doc…...
C# Unity FSM 状态机
C# Unity FSM 状态机 使用状态机可以降低代码耦合性,并且可以优化代码可读性,方便团队协作等。 对于游戏开发内容来讲游戏开发的流程控制玩家动画都可以使用FSM有限状态机来实现。 1.FsmState 每个状态的基类,泛型参数表示所拥有者 publi…...
pytorch搭建squeezenet网络的整套工程,及其转tensorrt进行cuda加速
本来,前辈们用caffe搭建了一个squeezenet的工程,用起来也还行,但考虑到caffe的停更后续转trt应用在工程上时可能会有版本的问题所以搭建了一个pytorch版本的。 以下的环境搭建不再细说,主要就是pyorch,其余的需要什么p…...
【精读Uboot】SPL阶段的board_init_r详细分析
对于i.MX平台上的SPL来说,其不会直接跳转到Uboot,而是在SPL阶段借助BOOTROM跳转到ATF,然后再通过ATF跳转到Uboot。 board_init_f会初始化设备相关的硬件,最后进入board_init_r为镜像跳转做准备。下面是board_init_r调用的核心函数…...
canvas绘制渐变色三角形金字塔
项目需求:需要绘制渐变色三角形金字塔,并用折线添加标识 (其实所有直接用图片放上去也行,但是ui没切图,我也懒得找她要,正好也没啥事,直接自己用代码绘制算了,总结一句就是闲的) 最终效果如下图: (以上没用任何图片,都是代码绘制的) 在网上找了,有用canvas绘…...
企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部供…...
Debain JDK8 安装
Debain JDK8 安装 首先请安装依赖: sudo apt-get update && sudo apt-get install -y wget apt-transport-https然后信任 GPG 公钥: wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /etc/apt/keyrings/…...
Python序列操作指南:列表、字符串和元组的基本用法和操作
文章目录 序列列表创建列表访问元素修改元素添加和删除元素 range()字符串创建字符串访问字符字符串切片修改字符串 元组创建元组访问元素获取元素数量元组的特点: 可变对象改变对象的值改变变量的指向比较运算符总结 python精品专栏推荐python基础知识(…...
【已更新代码图表】2023数学建模国赛E题python代码--黄河水沙监测数据分析
E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响,以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位于小浪底水…...
【前端】CSS-Grid网格布局
目录 一、grid布局是什么二、grid布局的属性三、容器属性1、display①、语句②、属性值 2、grid-template-columns属性、grid-template-rows属性①、定义②、属性值1)、固定的列宽和行高2)、repeat()函数3)、auto-fill关键字4)、f…...
计算机竞赛 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别
文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...
新版NANO下载烧录过程
一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…...
