生鲜商超蔬菜补货决策优化:基于线性规划模型的单品补货量和定价策略
生鲜商超蔬菜补货决策优化:基于线性规划模型的单品补货量和定价策略
在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差,大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需求情况每天进行补货。
由于商超销售的蔬菜品种众多、产地不尽相同,而蔬菜的进货交易时间通常在凌晨 3:00-4:00,为此商家须在不确切知道具体单品和进货价格的情况下,做出当日各蔬菜品类的补货决策。蔬菜的定价一般采用'成本加成定价'方法,商超对运损和品相变差的商品通常进行打折销售。可靠的市场需求分析,对补货决策和定价决策尤为重要。从需求侧来看,蔬菜类商品的销售量与时间往往存在一定的关联关系;从供给侧来看,蔬菜的供应品种在 4 月至 10 月较为丰富,商超销售空间的限制使得合理的销售组合变得极为重要。
附件信息:
- 附件1.xlsx:单品编码、单品名称、分类编码、分类名称
- 附件2.xlsx:销售日期、扫码销售时间、单品编码、销量(千克)、销售单价(元/千克)、销售类型、是否打折销售
- 附件3.xlsx:日期、单品编码、批发价格(元/千克)
- 附件4.xlsx:单品编码、单品名称、损耗率(%)
问题 3:
因蔬菜类商品的销售空间有限,商超希望进一步制定单品的补货计划,要求可售单品种类数控制在 27-33 个,且各单品订购量满足最小陈列量 2.5 千克的要求。根据 2023年 6 月 24-30 日的可售品种,给出 7 月 1 日的单品补货量和定价策略,在尽量满足市场对各品类蔬菜商品需求的前提下,使得商超收益最大。
模型建立:
假设商超有 n 个可售单品,每个单品的补货量为 x_i,定价为 p_i。商超的收益可以表示为:
收益 = ∑(x_i * p_i * (1-损耗率_i) - x_i * 批发价格_i)
其中,损耗率_i 和批发价格_i 可以从附件1 中获取。
约束条件:
- 可售单品总数控制在 27-33 个:
- ∑x_i >= 27
- ∑x_i <= 33
- 各单品订购量满足最小陈列量 2.5 千克的要求:
- x_i >= 2.5, i = 1,2,...,n
- 满足市场对各品类蔬菜商品需求:
- ∑x_i * (1-损耗率_i) >= 销售量_i, i = 1,2,...,n
定价策略:
由于商超对运损和品相变差的商品通常进行打折销售,我们可以将定价策略设置为:
- p_i = 批发价格_i * (1+成本加成率)
其中,成本加成率是商超根据经验确定的参数。
线性规划模型:
- 目标函数:
- Maximize 收益 = ∑(x_i * p_i * (1-损耗率_i) - x_i * 批发价格_i)
- 约束条件:
- ∑x_i >= 27
- ∑x_i <= 33
- x_i >= 2.5, i = 1,2,...,n
- ∑x_i * (1-损耗率_i) >= 销售量_i, i = 1,2,...,n
Python 代码实现:
import pandas as pd
import numpy as np
from scipy.optimize import linprog
# 读取数据
df1 = pd.read_excel('附件1.xlsx')
df2 = pd.read_excel('附件2.xlsx')
df3 = pd.read_excel('附件3.xlsx')
df4 = pd.read_excel('附件4.xlsx')
# 获取可售单品种类数
n = df2['单品编码'].nunique()
# 构建目标函数系数
profit_coefficient = []
for i in range(n):
code = df2['单品编码'].unique()[i]
loss_rate = df4[df4['单品编码'] == code]['损耗率(%)'].values[0] / 100
wholesale_price = df3[df3['单品编码'] == code]['批发价格(元/千克)'].values[0]
profit_coefficient.append((1 - loss_rate) * wholesale_price)
# 构建约束条件
A_eq = np.ones((1, n))
b_eq = np.array([27])
A_ub = np.ones((2, n))
b_ub = np.array([33, 2.5 * n])
for i in range(n):
code = df2['单品编码'].unique()[i]
sales_volume = df2[df2['单品编码'] == code]['销量(千克)'].sum()
loss_rate = df4[df4['单品编码'] == code]['损耗率(%)'].values[0] / 100
A_ub = np.vstack((A_ub, [1 - loss_rate] * n))
b_ub = np.append(b_ub, sales_volume)
# 求解线性规划模型
res = linprog(-np.array(profit_coefficient), A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq=b_eq)
# 提取最优解
x = res.x
# 输出单品补货量和定价策略
for i in range(n):
code = df2['单品编码'].unique()[i]
replenishment_quantity = x[i]
wholesale_price = df3[df3['单品编码'] == code]['批发价格(元/千克)'].values[0]
print(f"单品编码: {code}, 补货量: {replenishment_quantity}, 定价策略: {wholesale_price * (1 + res.fun / replenishment_quantity)}")
代码说明:
- 读取数据:从四个附件中读取相关数据,并使用 pandas 库进行数据处理。
- 构建目标函数系数:根据单品损耗率和批发价格计算目标函数系数。
- 构建约束条件:将上述约束条件转换为矩阵形式,用于线性规划模型的求解。
- 求解线性规划模型:使用 scipy.optimize 库中的 linprog 函数求解线性规划模型。
- 提取最优解:从求解结果中提取单品补货量。
- 输出结果:输出每个单品的补货量和定价策略。
结论:
通过建立线性规划模型并求解,商超可以获得最优的单品补货量和定价策略,从而在满足市场需求和控制成本的前提下,最大化商超收益。
注意:
- 代码中的附件路径需要根据实际情况进行修改。
- 代码中没有考虑成本加成率,可以根据实际情况添加成本加成率参数。
- 模型中没有考虑其他因素,例如季节性需求、促销活动等。
未来展望:
可以进一步优化模型,考虑更多因素,例如季节性需求、促销活动、库存管理等,以提高模型的准确性和实用性。
原文地址: http://www.cveoy.top/t/topic/ef49 著作权归作者所有。请勿转载和采集!