生鲜商超蔬菜补货决策优化:基于线性规划模型的单品补货量和定价策略

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

由于商超销售的蔬菜品种众多、产地不尽相同,而蔬菜的进货交易时间通常在凌晨 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)}")

代码说明:

  1. 读取数据:从四个附件中读取相关数据,并使用 pandas 库进行数据处理。
  2. 构建目标函数系数:根据单品损耗率和批发价格计算目标函数系数。
  3. 构建约束条件:将上述约束条件转换为矩阵形式,用于线性规划模型的求解。
  4. 求解线性规划模型:使用 scipy.optimize 库中的 linprog 函数求解线性规划模型。
  5. 提取最优解:从求解结果中提取单品补货量。
  6. 输出结果:输出每个单品的补货量和定价策略。

结论:

通过建立线性规划模型并求解,商超可以获得最优的单品补货量和定价策略,从而在满足市场需求和控制成本的前提下,最大化商超收益。

注意:

  • 代码中的附件路径需要根据实际情况进行修改。
  • 代码中没有考虑成本加成率,可以根据实际情况添加成本加成率参数。
  • 模型中没有考虑其他因素,例如季节性需求、促销活动等。

未来展望:

可以进一步优化模型,考虑更多因素,例如季节性需求、促销活动、库存管理等,以提高模型的准确性和实用性。

生鲜商超蔬菜补货决策优化:基于线性规划模型的单品补货量和定价策略

原文地址: http://www.cveoy.top/t/topic/ef49 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录