全渠道定价、库存决策,混合整数规划建模求解,MNL选择模型,内附代码!

1. 文章信息#

  • 基本信息

    (1)发表期刊:Transportation Research Part E(10.047/Q1,运输领域的good good刊 ૮ ´͈ ᗜ `͈ ა♡)

    (2)标题:Fulfillment and pricing optimization for omni-channel retailers considering shipment of in-store demand(为考虑店内需求发货的全渠道零售商提供履行和定价优化)

    (3)作者/发表时间:Khosro Pichka, Layth C. Alwan*, Xiaohang Yue / November 2022

    (4)研究方向:运筹学,全渠道物流,定价,库存,MNL,混合整数规划

  • 难度评价

    (1)模型难度:★★★☆☆

    (2)编程难度:★☆☆☆☆

    (3)评价:适合用于入门全渠道物流/运筹调度,模型较为基础,但又因为它很基础,所以能给读者带来很多灵感和启发。这篇文章乍一看很难,甚至附录部分还将正文运筹模型的约束条件化为了80多条。但文中的非线性运筹模型,最后实际上化为了线性规划模型,作者直接用了Cplex求解;其他需要编程的部分,作者甚至直接import了python的包去解决 ૮₍ ˙О˙₎ა

2. 主要内容#

2.1 摘要、关键字(翻译版)#

摘要: 全渠道零售商通过电子商务渠道和不同区域的实体商店满足各地客户的需求。他们不仅可以通过电子履行中心来满足他们的线上订单,还可以通过实体店的店内库存来满足线上订单。另一方面,零售商可以使用定价决策来控制线上、实体渠道的需求。我们首先通过多项式 logit(MNL)选择模型,对客户需求进行建模。然后,我们提出了两个混合整数非线性规划(MINLP)模型,通过考虑履行和定价决策来最大化总利润。我们假设,如果商店库存不足,电子履行中心的库存也可以用作店内订单的备用库存,但仅适用于同一区域中的商店。我们还假设初始库存有限,并且在有限的销售范围内没有补货。在第二个 MINLP 模型中,我们还允许多种运输选项和库存决策。通过数值实验,我们表明全渠道零售商可以通过控制初始库存分配并通过电子履行库存满足店内需求来增加利润。

关键字:全渠道零售;跨渠道履行;定价;整数规划编程

2.2 研究思路#

  • 全渠道履行方式

    请结合下图一起食用:

(1)每个区域都有各自的电子履行库存和门店库存,每个区域都有各自的实体店及实体店顾客,及通过线上渠道购买商品的线上顾客。

(2)对于同一地区,电子履行库存可满足该地区线上顾客的需求,门店库存可满足该地区实体店顾客的需求。当出现缺货情况时,电子履行库存和门店库存可互补,但履行成本会发生变化。

(3)对于不同地区,当电子履行库存发生缺货时,可使用另一地区的电子履行库存满足线上顾客的需求。对于实体店顾客的需求,不能通过跨区域调度电子履行库存来满足;对于门店库存,不能跨区域调度以满足其他区域的线上或线下顾客需求。

  • 文章的研究思路

    (1)利用多项式logit(MNL)选择模型,对客户需求进行建模,从而预估需求量

    (2)在得到客户需求量的基础上,第一个模型以最大化总利润为目标,考虑履行和定价决策。由于对库存是短期计划,故该模型不考虑库存持有成本。

    (3)第二个模型在上一个模型的基础上进行拓展,对于库存,加入对库存持有成本的考虑;对于线上渠道履行方式,为客户增加常规运输和次日达的配送选项。模型在增加上述因素后,仍以最大化总利润为目标,考虑履行及定价决策。

    (4)文章最后通过数值实验,表明全渠道零售商可以通过控制初始库存分配并通过电子履行库存满足店内需求来增加利润。

3. 模型建立#

3.1 MNL选择模型的建立#

文中MNL选择模型的建立,主要参考了Ben-Akiva等人1985年时发的一篇有关Travel Demand研究的论文,该篇论文链接如下:

Discrete Choice Analysis: Theory and Application to Travel Demand | SpringerLink

文中构建MNL选择模型的目的是预估线上、线下渠道的客户需求,以便后面建立运筹学模型。下面是文章建立MNL选择模型的过程:

  • 假设客户效用的随机分量ξi是相互独立的,且服从Gumbel分布,累积分布函数为:

    F(x)=P(ξi≤x)=e−μ(x−η)

    其中,x是误差随机变量,η是位置参数,μ是正比例函数。

    随机变量ξi的均值和方差为:

    E[ξi]=η+γμVar[ξi]=π26μ2

    其中,π≈3.14,γ≈0.57(欧拉常数)

  • 假设全渠道网络中共有Z个地区,客户从实体渠道购买的效用为Ubz,从网上渠道购买商品的效用为Uez(对于z地区来说,z∈Z)

    Ubz=ubz+ξbz

    Uez=uez+ξez

    其中,uiz(i∈{b,e})是选择i的效益,ξiz(i∈{b,e})是一个i.i.d.Gumber随机变量,所有的i均值为0标度函数为1.

    如果客户不从这些渠道购买,那么此时的平均效用为0,在这个效用模型下,客户选择渠道i购买的效益为:

    θ=euiz∑j∈{e,b}(eujz)+eu0∀i∈{e,b},∀z∈Z

    其中,θiz是客户从区域z中选择渠道i购买的概率,而u0是客户选择不购买时的平均效用。

3.2 模型1的建立(短期规划)#

  • 假设选择i的平均效用uiz(i∈{e,b})是一个关于渠道价格的线性函数。

    ubz=β0z+β1zPbz

    uez=β0z+β1zPez

    其中,β0z是常量,β1z是在线或实体渠道中的价格系数,它可以通过使用历史数据计算。Piz(i∈e,b)是z区域的渠道为顾客提供的价格,它是一个向量。

    价格向量函数Pzt的计算方法如下:

    Dbzt(Pzt)=nzt×θbzDbzt(Pzt)=nzt×eβ0z+β1zPbzeβ0z+β1zPbz+eβ0z+β1zPez+1

    Dezt(Pzt)=nzt×θezDezt(Pzt)=nzt×eβ0z+β1zPbzeβ0z+β1zPez+eβ0z+β1zPez+1

    其中,nzt是z区域t时间段的市场规模,θbz、θez分别是客户从线下、线上渠道购买的概率。Pzt=(Pbzt,Pezt)是价格矢量,其包括在z区域t时间中提供的线下和线上渠道价格。

3.2.1 基本假设和符号说明#

  • 论文的基本假设如下:

    (1)假设客户从线下渠道取货的平均效用与线上渠道相同。

    (2)线下和线上渠道库存有限。

    (3)销售周期有限,且分为T个周期。

    (4)在周期t开始时,零售商公开每个销售区域z中的价格向量Pzt=(Pbzt,Pezt),消费者可以据此了解到各个渠道的价格。

    (5)线下和在线渠道在区域z中的需求表示为Dbzt(Pzt)和Dezt(Pzt)

    (6)不考虑补货和缺货,不考虑缺货成本。

  • 论文的符号说明如下:

  • 决策变量:、、、、、、、、、、、、、、Sbwzt、Sewzt、Obwzt、Oewzt、Lbz、Lez、Pbzt、Pezt

3.2.2 模型建立#

Max∑t∈T∑w∈Z∑z∈Z[Pbzt(Sbwzt+Sewzt)+Pezt(Obwzt+Oewzt)]+v[∑w∈Z(Lbw+Lew)]−∑t∈T∑w∈Z∑z∈Z(cbwzsSbwzt+cewzsSewzt+cbwzoObwzt+cewzoOewzt)

s.t.

∑w∈Z(Sbwzt+Sewzt)≤Dbzt(Pzt)∀z∈Z,∀t∈T

∑w∈Z(Obwzt+Oewzt)≤Dezt(Pzt)∀z∈Z,∀t∈T

Lbw=xbw−∑t∈T∑z∈Z(Sbwzt+Obwzt)∀w∈Z

Lew=xew−∑t∈T∑z∈Z(Sbwzt+Obwzt)∀w∈Z

Pzt=(Pbzt,Pezt)∀z∈Z,∀t∈T

Sbwzt,Sewzt,Obwzt,Oewzt≥0∀z∈Z,∀w∈Z,∀t∈T

Lez,Lbz≥0∀z∈Z

  • 目标函数为总利润最大化,主要分为三部分:第一部分为满足线上、线下渠道需求的收入;第二部分为剩余库存的价值;第三部分为线下、线上渠道的履行成本。

  • 关于约束条件:第一、第二条约束条件为需求约束,即销售额必须小于对应渠道的需求;第三、第四条为剩余库存的计算;第五条为价格向量约束;其他约束条件为变量的非负约束。

3.3 模型2的建立(长期规划)#

  • 假设客户购买渠道为线下和线上渠道,其中线上渠道又可以选择常规运输次日达两种配送方式。客户从商店购买产品的效用与网上购买到店取货(BOPS)的平均效用相同。基于此定义的客户效用函数为:

    ubz=β0z+β1zPbz+β2ztbz+β3ztbzPbz

    ufz=β0z+β1zPfz+β2ztfz+β3ztfzPfz

    usz=β0z+β1zPsz+β2ztsz+β3ztszPsz

    其中,Piz、tiz,i∈{b,f,s}分别代表向客户交付的价格、时间;、、、、b、f、s分别代表实体渠道、常规运输、次日达;β0z是截距;β1z分别是实体渠道、常规运输、次日达的价格系数;β2z是交货时间系数;β3z是价格与交货时间的相互作用系数。

  • 假设有T个周期,在区域z,t时间段的市场规模为ntt。此时,线上和实体渠道对于区域z和时间t下不同的商品配送方式选择的需求函数遵循以下形式:

    Dbzt(Pzt)=nzt×eubzeubz+eufz+eusz+1

    Dfzt(Pzt)=nzt×eufzeubz+eufz+eusz+1

    Dszt(Pzt)=nzt×euszeubz+eufz+eusz+1

    其中,Pzt为价格向量函数,Pzt=(Pbzt,Pfzt,Pszt)是价格矢量,在区域z时间段t中为线上和实体渠道提供的价格。

3.3.1 基本假设和符号说明#

  • 论文的基本假设如下:

    (1)在周期t开始时,零售商在每个区域z∈Z设置价格向量Pzt=(Pbzt,Pfzt,Pszt),确定价格后,估算实体渠道的需求Dbzt(Pzt),Dfzt(Pzt),Dszt(Pzt)。

    (2)假设零售商在每个区域都有一家商店和一个电子履行中心。

    (3)不考虑缺货成本。

    (4)店内库存可用于满足常规配送和次日达需求。

  • 论文的符号说明如下:

  • 决策变量:、、、、、、、、、、、、、、、、、、、、Sbwzt、Sewzt、Obwzft、Oewzft、Obwzst、Oewzst、Pbzt、Pfzt、Pszt、Xbz、Xez

3.3.2 模型建立#

Max∑t∈T∑w∈Z∑z∈Z[Pbzt(Sbwzt+Sewzt)+Pfzt(Obwzft+Oewzft)+Pszt(Obwzst+Oewzst)]+v[∑z∈Z(XbzT+XewT)]+h[∑t∈T∑z∈Z(Xbzt+Xezt)]

−∑t∈T∑w∈Z∑z∈Z(cbwzsSbwzt+cewzsSewzt+cbwzfObwzft+cewzsOewzft+cbwzsObwzst+cewzsOewzst)

s.t.

∑w∈Z(Sbwzt+Sewzt)≤Dbzt(Pzt)∀z∈Z,∀t∈T

∑w∈Z(Obwzft+Oewzft)≤Dfzt(Pzt)∀z∈Z,∀t∈T

∑w∈Z(Obwzst+Oewzst)≤Dszt(Pzt)∀z∈Z,∀t∈T

Xbwt=Xbwt−1−∑z∈Z(Sbwzt+Obwzft+Obwzst)∀w∈Z,∀t∈T

Xewt=Xewt−1−∑z∈Z(Sewzt+Oewzft+Oewzst)∀w∈Z,∀t∈T

∑w∈ZXew0+∑w∈ZXbw0=x

Pzt=(Pbzt,Pfzt,Pszt)∀z∈Z,∀t∈T

Sbwzt,Sewzt,Obwzft,Oewzft,Obwzst,Oewzst≥0∀z∈Z,∀w∈Z,∀t∈T

Xezt,Xbzt≥0∀z∈Z,∀t∈T

  • 目标函数为总利润最大化,主要分为四部分:第一部分为满足线上、线下渠道需求的收入;第二部分为剩余库存的价值;第三部分为库存持有成本;第四部分为线下、线上渠道的履行成本。

  • 关于约束条件:第一、第二、第三条约束条件为需求约束,即销售额必须小于对应渠道的需求;第四、第五条为区域z在t期末的剩余库存计算;第五条为库存约束,确保期初线上、线下的库存之和为整个计划期前的库存量;第六条为价格向量约束;其他约束条件为变量的非负约束。

4. 模型求解#

文中的模型主要是用PyLogit和CPLEX求解器求解的,CPLEX求解比较简单,所以在这里不加赘述。但我发现有关PyLogit函数的资料居然全网都搜不到(╯‵□′)╯︵┻━┻,于是我采用了一些技术手段,找ChatGPT帮我写了个详解和代码。下面主要介绍PyLogit的详解及文章的MNL选择模型代码。

4.1 Python的PyLogit包详解#

以下为ChatGPT的回答。

使用Python的PyLogit包求解MNL模型有以下几个步骤:

1.   计算变量并生成数据集

首先,您需要确定MNL模型中需要考虑哪些变量并将这些变量收集到一个数据集中。然后需要计算其中变量的值,这些值可能来自不同的数据集,可以直接从代码中读取,也可以从文件中读取到数据集中。在将数据集导入Python环境中之后,可以使用Pandas DataFrame属性计算变量。

2.   模型拟合

使用PyLogit包的模型拟合函数,您可以拟合MNL模型。这个函数将需要以下参数:

  • formula:一个字符串表示模型公式,语法可以参照R语言的glam()函数。

  • data:包含数据集和变量的Pandas DataFrame对象。

  • alt_name:一个字符串,是数据集中包含选择项的列名。

  • obs_id:一个字符串,表示数据集中包含观测编号的列名。

  • num_params:一个整数,表示模型参数的数量。

3.   模型评价

使用PyLogit包的模型评价函数评价模型。这个函数将需要以下参数:

  • model_results:包含模型拟合结果的PyLogit Mnlogit结果对象。

  • print_results:一个布尔值,表示是否打印出结果。

通过这些步骤完成之后,您将拟合一个MNL模型并可以使用PyLogit包进行相关的分析,如预测新数据等。

代码示例:

 

Copy

# 导入PyLogit包 from pylogit import PyLogit # 从文件中读取数据集 data = pd.read_csv("data.csv") # 计算变量 # ... # 将变量添加到数据集中 # ... # 指定模型公式 formula = 'Y ~ X1 + X2 + X3' # 拟合模型 mnl_model = PyLogit(data=data, formula=formula, alt_name='Y', obs_id='Obs_ID', # num_params 等于 X1 + X2 + X3 中变量数量 num_params=3) # 评估模型 mnl_model.fit(maxiter=1000, # 最大迭代次数 halton_iterations=0, check_gradient=True) # 打印结果 print(mnl_model.summary())

4.2 PyLogit求解MNL选择模型#

我后面又询(奴)问(役)了一下ChatGPT,让它帮我写使用PyLogit包求解MNL选择模型的代码,以下代码是我根据GPT的代码进行修改,对论文中MNL选择模型的复现。

 

Copy

import numpy as np import pandas as pd import pylogit as pl #ID代表客户的ID #Choice代表客户对渠道的选择(b为线下渠道,e为线上渠道) #Price代表对应的价格 data = pd.DataFrame({ 'ID': [1, 1, 2, 2, 3, 3, 4, 4], 'Choice': ['b', 'e', 'b', 'e', 'b', 'e', 'b', 'e'], 'Price': [10, 8, 12, 6, 20, 15, 18, 10] }) #'gev'是对Gumbel分布的定义 data['b_Price_Utility'] = pl.create_choice_column(data['Price'], 0.0, 'gev', (1,)) data['e_Price_Utility'] = pl.create_choice_column(data['Price'], 0.0, 'gev', (1,)) # 将数据重构为"wide"格式 long_data = pl.convert_wide_to_long(data, id_col='ID', alt_col='Choice', observation_col=None, drop_alt_id=False) wide_data = pl.convert_long_to_wide_format(long_data, id_col='ID', value_col='Price Utility') #使用MNL训练模型 model = pl.create_choice_model(data=wide_data, alt_id_col='alt_id', obs_id_col='obs_id', choice_col='choice', specification={ 'Price': [1, 2] }, model_type='MNL') result = model.fit() #输出模型的参数,里面包含了文中所需的β参数 print(result.summary())

代码中ID、Choice、Price的数据都是我乱编的,因为论文中没给训练数据集。但大家如果有需要的话可以自己收集数据读入训练。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48528.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让我们一起来了解什么是人工智能吧

前言 最近这几年”人工智能“相关的话题热度一直很高,1997年5月11日深蓝战胜当时的国际象棋世界冠军卡斯帕罗夫, 2017年5月27日 AlphaGo战胜当时的围棋世界冠军柯洁,一次又一次让世人感到震惊,再到如今爆火出圈的ChatGPT。笔者也一…

悉尼大学计算机研究生学制,悉尼大学研究生一般读几年?九大领域研究生学制盘点!...

悉尼大学是澳洲最知名的八大院校之一,该校的研究生课程备受留学生青睐,以下是悉尼大学九大领域的研究生学制详情: 一、Architecture、design and planning建筑、设计和规划 研究生学制—— 研究生证书课程为0.5年制,研究生文凭课程…

悉尼科技大学计算机科学,悉尼科技大学计算机专业

原标题:悉尼科技大学计算机专业 悉尼科技大学计算机专业 悉尼科技大学的信息技术专业能让学生在技术和管理领域获得全面和深入的理解。本专业有多个方向,可以满足学生的职业发展的需求。当今时代拥有IT知识和技术是至关重要的,本专业能加强学…

悉尼大学计算机硕士健康科技,悉尼大学健康科学学院

悉尼大学健康科学学院的前身是辅助医学研究学院,成立于1973年。该学院主要针对物理治疗,职业病治疗,以及语言 病理学三个学术领域提供高等教育课程。并且在1975年, 将NSW College of Nursing的高级护士注册课程也纳入学院的课程作…

悉尼大学计算机科学硕士专业,悉尼大学计算机硕士

原标题:悉尼大学计算机硕士 介绍,悉尼大学是澳大利亚第一所大学,其信息技术(IT)学院因致力于精英教育和创新研究而备受尊崇,并晋身工程和技术专业世界排名35之列。根据当前各行业对高级信息技术人才的广泛需求,该大学通…

悉尼大学计算机科学专业,悉尼大学计算机科学专业怎么样

悉尼大学计算机科学专业为计算机科学方向。基于扎实的计算机科学和数学方面的基础知识,学生能够对现代计算机系统有比较全面且深刻的理解。在该专业的学习中,学生将学习到该行业的计算机设计、研发、安装、集合与维修等必备的技巧。该专业分为三大专攻方…

悉尼大学计算机科学专业,悉尼大学计算机科学专业

悉尼大学计算机科学专业为计算机科学方向。基于扎实的计算机科学和数学方面的基础知识,学生能够对现代计算机系统有比较全面且深刻的理解。在该专业的学习中,学生将学习到该行业的计算机设计、研发、安装、集合与维修等必备的技巧。该专业分为三大专攻方…

悉尼大学计算机录取要求,悉尼大学录取要求

原标题:悉尼大学录取要求 悉尼大学按照专业不同,录取要求也不尽相同,具体录取要求如下,1.商科方向,学术,985院校75%,211院校75%,双非83%,语言,雅思7单项6,托福…

悉尼大学计算机一年制硕士,悉尼大学一年制硕士

澳洲也有许多学校开设了一年制硕士课程,悉尼大学就是其中之一。悉尼大学的一年制硕士课程有Master of International Business,.Masterof EducationMaster of Engineering等。 悉尼大学一年制硕士课程介绍 1、Master of International Business 学制&…

Speech and Language Processing-导读

朋友们,最近打算做一个大工程,我曾多次提过,chatgpt未来将是一股非常大的信息技术革命,有的人不以为然,或者国内很多企业好像并不是很重视,以我从业多年来的经验,chatgpt与之前的NLP技术有着较为…

PDFgear——一款接入AI智能化模型的免费PDF聊天软件

目录 一、前言 二、产品介绍 2.1、PDFgear是什么? 2.2、PDFgear能做什么? 2.3、技术规格 三、产品安装 四、功能介绍 4.1、PDF聊天 4.1.1、支持和PDF进行聊天 4.1.2、支持上传多个PDF对话 4.1.3、始终保持会话不会丢失 4.1.4、完全免费和PD…

区块链技术在金融领域的应用与思考

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 一、区块链技术的特点及市场情况 区块链技术作为一种分布式记账技术,其最大的特点是去中心化。这意味着所有参与者可…

【CICC原创】面向智能博弈的决策Transformer方法综述

来源:中国指挥与控制学会 (《指挥与控制学报》刊文精选) 引用格式 罗俊仁, 张万鹏, 苏炯铭, 等. 面向智能博弈的决策 Transformer 方法综述 [J]. 指挥与控制学报, 2023, 9 (1) : 9-22. LUO J R, ZHANG W P, SU J M, e…

2023年4月的12篇AI论文推荐

GPT-4发布仅仅三周后,就已经随处可见了。本月的论文推荐除了GPT-4以外还包括、语言模型的应用、扩散模型、计算机视觉、视频生成、推荐系统和神经辐射场。 1、GPT-4 Technical Report Sbastien Bubeck, Varun Chandrasekaran, Ronen Eldan, Johannes Gehrke, Eric…

OpenAI API调用

上次简单写了一篇对ChatGPT的一些看法,最近想深入研究一下。 极客时间上有个课程《AI大模型之美》,看了一下还可以。当做入门是不错的,但还是有很多细节可以打磨,不过毕竟是在风口上的课,也能接受。 本次演示如何调用…

B+G双轮驱动,税友股份迎来数字化东风

配图来自Canva可画 不知不觉之间,国内的数字经济已经蔚然成潮。据相关部门的统计数据显示,去年国内数字经济规模已经达到了50万亿,占到了国内GDP总量的40%以上,增速更是持续领先于GDP增速。与此同时,随着数字中国战略…

Controller 层如何写才能简洁又优雅!

更多内容关注微信公众号:fullstack888 一个优秀的 Controller 层逻辑 说到 Controller,相信大家都不陌生,它可以很方便地对外提供数据接口。它的定位,我认为是不可或缺的配角。 说它不可或缺是因为无论是传统的三层架构还是现在的…

AI对话交互场景使用WebSocket建立H5客户端和服务端的信息实时双向通信

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 一、为什么需要 WebSock…

WorkPlus AI助理 | 将企业业务场景与ChatGPT结合

近年来,人工智能成为了企业数字化转型的热门话题,作为被训练的语言模型,ChatGPT具备模拟对话、回答问题、写代码、写小说、进行线上内容创作的能力,还能根据聊天的上下文进行互动。作为一款新兴的人工智能应用程序,对于…

用Python比较图片的不同

准备两张不同的图片 原图 修改后(在左下角增加了文字) 比较不同 使用PIL(Pillow library)库 安装 pip install pillow,然后直接用其中的ImageChops函数 from PIL import Image from PIL import ImageChops def comp…