【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 前言 &#…...

2023-9-8 求组合数(二)
题目链接:求组合数 II #include <iostream> #include <algorithm>using namespace std;typedef long long LL; const int mod 1e9 7; const int N 100010;// 阶乘,阶乘的逆 int fact[N], infact[N];LL qmi(int a, int k, int p) {int res…...

k8s service的一些特性
文章目录 Service分发负载的策略同一端口通过不同协议暴露Headless Service的负载分发策略 Service分发负载的策略 大家都知道,一个service可以对应多个pod,那么一定要有一些方法来把service接收到的请求(负载)转发到pod上。 一般…...

C++中std::enable_if和SFINAE介绍
作为一个标准的C++模板类,我们先看下enable_if的定义: // STRUCT TEMPLATE enable_if template <bool _Test, class _Ty = void> struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty> struct enable_if<true, _Ty> { //…...
华为OD机考算法题:数字加减游戏
目录 题目部分 解读与分析 代码实现 题目部分 题目数字加减游戏难度难题目说明小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字 s 变成数字 t 。 每个回合,小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以用来加减…...

WPF命令
在设计良好的Windows应用程序中,应用程序逻辑不应位于事件处理程序中,而应在更高层的方法中编写代码。其中的每个方法都代表单独的应用程序任务。每个任务可能依赖其他库。 使用这种设计最明显的方式是在需要的地方添加事件处理程序,并使用各…...

Unity中Shader的屏幕抓取 GrabPass
文章目录 前言一、抓取1、抓取指令2、在使用抓取的屏幕前,需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的 前言 Unity中Shader的屏幕抓取 GrabPass 一、抓取 1、抓取指令 屏幕的抓取需要使用一个Pass GrabPass{} GrabPass{“NAME”} 2、在使用…...

手撕 队列
队列的基本概念 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 队列用链表实现 队列的实现 队列的定义 队列…...

【autodl/linux配环境心得:conda/本地配cuda,cudnn及pytorch心得】-未完成
linux配环境心得:conda/本地配cuda,cudnn及pytorch心得 我们服务器遇到的大多数找不到包的问题一,服务器安装cuda和cudnn使用conda在线安装cuda和cudnn使用conda进行本地安装检查conda安装的cuda和cudnn本地直接安装cuda和cudnn方法一&#x…...

macOS Ventura 13.5.2(22G91)发布,附黑/白苹果镜像下载地址
系统介绍(下载请百度搜索:黑果魏叔) 黑果魏叔 9 月 8 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新(内部版本号:22G91),本次更新距离上次发布隔了 21 天。 本次更新查…...

vue 子组件向父组件传递参数 子传父
子组件中写: this.$emit(RowCount,res.data.RowCount); 父组件中写: getMFGLRowCount(val){ //父组件中的方法: 接收子组件传过来的参数值赋值给父组件的变量 //this.totalCount val; alert("这…...