Sequential Decision Analytics and Modeling 第2版
Back to SDA site →

第10章:供应链管理I:双主体报童问题

本章概览

在任何供应链管理问题中都会出现一个常见问题:管理者(”代理人”)需要资源,因此必须向更高层的管理者申请这些资源。在实践中,这些”一线”管理者永远无法确切知道他们需要多少资源,因此往往会多申请一些,以避免资源短缺带来的重大不利成本。”中央”管理者希望一线管理者拥有他们所需的资源,但也意识到一线管理者有多申请的动机。因此,中央管理者往往会削减这些申请,试图只给一线管理者他们真正需要的量。

这两类管理者都有各自的”报童问题”,我们在第 3 章中首次见到过这个问题。然而,现在我们有两个相互博弈的”报童”,因为每一方都需要对另一方的行为建立近似模型。这个问题在企业中普遍存在,但在研究文献中似乎尚未引起关注。

这个问题要求我们初步涉足多代理问题的建模。我们仍然使用之前一直采用的标准建模框架,只是现在要为每个决策代理创建这些模型的一个版本。不过,除了引入更丰富的交互关系之外,将通用建模框架应用于每个代理的方式保持不变。

情景描述

假设亚马逊的一位一线管理者需要每周提供拖车,以便将货物从芝加哥运出。这位一线管理者可以获取信息,据此估计他当周需要多少拖车,但实际需求可能高于或低于该估计值。随后一线管理者向中央管理者提出拖车申请,中央管理者再根据自己的判断决定提供多少拖车,并对最终提供的拖车数量做出决定。

这两位管理者为同一家公司工作,但一线管理者更担心资源短缺,因为一旦拖车不够用,他就必须进行短期租赁。另一方面,中央管理者既不希望一线管理者出现短缺,也不希望他拥有过多的拖车,因为她需要为这些拖车付费。

我们假设这一过程按以下方式展开:

步骤 1: 一线管理者观察到所需拖车数量的初始估计值。这一信息仅为一线管理者所私有。

步骤 2: 随后,一线管理者向中央管理者申请拖车,通常他会夸大申请数量以降低短缺的概率。

步骤 3: 中央管理者随后决定给予一线管理者多少拖车,通常会根据以往一线管理者申请量超过实际所需量的模式来削减申请。

步骤 4: 一线管理者收到中央管理者批准的拖车数量,随后观察到拖车的实际需求。

步骤 5: 一线和中央管理者分别使用各自的超量成本(未使用的拖车)和短缺成本(未满足的需求)来计算各自的绩效。

这个问题中的张力首先来自于:所需拖车数量的初始估计仅仅是一个估计值,我们可以假设它是无偏的(即平均而言是准确的)。问题在于,一线管理者一旦短缺就要承担较大的成本,因此他的策略是高估自己的需求(回想一下第 3 章中的报童问题)。另一方面,中央管理者的超量和短缺成本可能是均衡的,她既不想订购过多,也不想订购过少。

使这个问题更加复杂的是给予一线管理者的初始估计值。虽然这个估计值并不完美,但它包含有价值的信息,因为它会显示某一天的需求是高还是低。这意味着,中央管理者必须重视一线管理者提出的申请,同时也要认识到一线管理者提出的申请会存在向上的偏差。知道这一点后,中央管理者往往会以一线管理者的申请为起点,但在最终分配时会对其进行削减。不出所料,一线管理者也知道中央管理者会这样做,因此会相应地做出补偿。

问题的框架化

我们对三个框架化问题的回答如下:

基本模型

由于两个参与者所拥有的信息并不相同,我们将分别为两个代理建模。在整个模型中,我们将用 $q$ 表示一线管理者,用 $q’$ 表示中央管理者。

状态变量

一线管理者可获得的初始信息是所需拖车数量的估计值,我们用 $R^{est}_{tq}$ 表示,即所需拖车数量的初始估计值。这一初始估计值可能存在偏差,因此我们引入 $\delta^{est}_{tq}$ 来表示这一偏差的估计值,即 $R^{est}_{tq}$ 与真实需求之间差异的初始估计值。我们还需要估计中央管理者会将一线管理者的申请削减多少,我们用 $\delta_{tq}$ 表示这一估计值,即中央管理者将削减一线管理者申请量的估计值。类似地,中央管理者将了解一线管理者提出的申请与一线管理者最终所需数量之间的差异,我们用 $\delta_{tq’}$ 表示,即一线管理者所申请数量与一线最终所需数量之间差异的估计值。

每个代理的状态变量是他们在做出决策之前所拥有的信息。对于一线管理者而言,状态变量为

\[S_{tq} = (R^{est}_{tq}, \delta^{est}_{tq}, \delta_{tq}).\]

中央管理者的状态变量为

\[S_{tq'} = (x_{tqq'}, \delta_{tq'}).\]

其中 $x_{tqq’}$ 是一线代理 $q$ 向中央代理 $q’$ 提出的申请(下文将介绍)。

决策变量

每个代理的决策由 $x_{tqq’}$ 给出,即代理 $q$ 向代理 $q’$ 申请的拖车数量,以及 $x_{tq’q}$,即代理 $q’$ 给予代理 $q$ 的拖车数量,这也是最终在实地中实施的数量。

外源信息

一线管理者的外源信息可以被视为所需拖车数量的初始估计值(尽管我们将其纳入了状态变量中):$R^{est}_{tq}$,即所需拖车数量的初始估计值。这一估计值仅为一线代理 $q$ 所知。

在做出决策 $x_{tqq’}$ 之后,我们将收到两类信息:中央管理者批准的数量,以及实际所需的需求:$x_{tq’q}$,即中央管理者针对一线管理者申请所做出的决策;以及 $\Rhat_{t+1}$,即一线管理者 $q$ 最终所需的实际拖车数量(这一信息也可供中央管理者获取)。

因此,代理 $q$ 的外源信息为

\[W_{t+1,q} = (x_{tq'q},\Rhat_{t+1}).\]

我们顺带指出,虽然这一信息的索引为时间 $t+1$,但中央管理者批准的申请量 $x_{tq’q}$ 的索引却为 $t$,因为它取决于截至时间 $t$ 时可获得的信息。初始估计值 $R^{est}_{tq}$ 是新信息,但它是在决策做出之前到达的,因此已被纳入一线代理的状态变量中。

中央管理者收到的初始申请 $x_{tqq’}$ 是作为外源信息到达的,但由于该信息是在她做出决策之前收到的,因此它是通过中央管理者的状态变量进入模型的。中央管理者唯一的外源信息是最终需求,该信息随后可能被用于更新会影响未来决策的信念。这意味着

\[W_{t+1,q'} = (\Rhat_{t+1}).\]

转移函数

对于一线管理者而言,存在三个状态变量:$R^{est}_{tq}$,估计值 $R^{est}_{tq}$ 与实际值 $\Rhat_{t+1}$ 之间的偏差 $\delta^{est}_{tq}$,以及一线管理者提出申请时中央管理者引入的偏差 $\delta_{tq}$。第一个状态变量 $R^{est}_{tq}$ 直接作为外源信息到达。偏差 $\delta^{est}_{tq}$ 和 $\delta_{t,q}$ 则通过以下方式更新:

\[\delta^{est}_{t+1,q} = (1-\alpha) \delta^{est}_{tq} + \alpha (\Rhat_{t+1} - R^{est}_{tq}), \qquad \delta_{t+1,q} = (1-\alpha) \delta_{tq} + \alpha (x_{tqq'} - x_{tq'q}),\]

其中 $0 < \alpha < 1$ 是平滑因子。

中央管理者的转移函数与此类似。同样,一线管理者的决策 $x_{tqq’}$ 会作为外源信息进入状态变量。随后,我们利用以下公式更新中央管理者对一线管理者申请中偏差的估计:

\[\delta_{t+1,q'} = (1-\alpha) \delta_{t,q'} + \alpha (x_{tqq'} - \Rhat_{t+1}).\]

目标函数

我们首先定义 $c^o_q$,即一线管理者为每辆多余拖车所承担的单位成本(一线为每辆拖车每天所支付的费用),也称为超量成本;$c^u_q$,即一线管理者为弥补容量不足而不得不租用每辆拖车所承担的单位成本,也称为短缺成本;以及 $c^o_{q’}, c^u_{q’}$,即中央管理者的超量和短缺成本。

每个代理的成本由以下公式给出:

\[C_{tq}(S_{tq},x_{tq'q}) = c^o_q \max\{x_{tq'q}-\Rhat_{t+1},0\} + c^u_{q} \max\{\Rhat_{t+1} - x_{tq'q},0\},\] \[C_{tq'}(S_{tq'},x_{tq'q}) = c^o_{q'} \max\{x_{tq'q}-\Rhat_{t+1},0\} + c^u_{q'} \max\{\Rhat_{t+1} - x_{tq'q},0\}.\]

一线和中央管理者的绩效均取决于中央管理者给予一线的拖车数量 $x_{tq’q}$。然而,这一决策又取决于一线管理者做出的决策。

一线管理者的决策由策略 $X_{tq}(S_t\vert \theta_q)$ 做出,其中 $\theta_q$ 是一个或多个用于求解以下问题的可调参数:

\[\begin{align} \min_{\theta_q}\E \left\{\sum_{t=0}^T C_{tq}(S_{tq},X_{tq}(S_t\vert \theta_q))\vert S_0\right\}. \label{eq:fieldobjective} \end{align}\]

类似地,中央管理者的决策由策略 $X_{tq’}(S_t\vert \theta_{q’})$ 做出,其中 $\theta_{q’}$ 是一个或多个用于求解以下问题的可调参数:

\[\begin{align} \min_{\theta_{q'}}\E \left\{\sum_{t=0}^T C_{t{q'}}(S_{tq'},X_{tq'}(S_t\vert \theta_{q'}))\vert S_0\right\}. \label{eq:centralobjective} \end{align}\]

$\eqref{eq:fieldobjective}$ 和 $\eqref{eq:centralobjective}$ 中的优化问题必须同时求解,因为两种策略都必须同时进行仿真。当然,我们也可以在调优一线管理者的 $\theta_q$ 时保持中央管理者的 $\theta_{q’}$ 不变,但最终我们要寻找的是一个稳定的局部最优解。

不确定性建模

这个问题是数据驱动的,这意味着我们会根据到达的数据做出反应。根据所涉及的代理不同,存在三类信息:

如果我们希望对这一过程进行仿真,只需对 $R^{est}_t$ 和 $\Rhat_t$ 的生成过程进行建模。更确切地说,我们需要从一个分布中生成 $R^{est}_t$,并从另一个分布中生成误差项 $\Rhat_t - R^{est}_t$。

策略设计

对于我们的双代理报童问题,我们需要为每个代理制定策略。我们先从一线管理者的策略开始。

一线管理者

一线管理者从估计值 $R^{est}_t$ 出发,但必须考虑以下三个因素:

1) 估计值 $R^{est}_t$ 可能存在偏差 $\delta^{est}$(我们无法确定估计值 $R^{est}_{tq}$ 的来源)。该偏差由以下公式给出:

\[\delta^{est}_{tq}= \E \Rhat_{t+1} - R^{est}_{tq}.\]

因此,如果 $\delta^{est}_{tq} > 0$,则说明 $R^{est}_t$ 存在向上的偏差。

2) 即便已将偏差纳入考虑,所需拖车的真实数量 $\Rhat_{t+1}$ 仍然是随机的。由于一线管理者在拖车不足时承担的成本高于拖车过多时的成本,因此他会希望引入向上的偏差,以反映短缺被发现时更高的成本。

3) 中央经理对资源过多或过少持平衡态度,并且知道现场经理的偏差。因此,中央经理通常会使用现场经理的请求 $x_{tqq’}$,正如现场经理可能会调整估计值 $R^{est}$ 与实际值 $\Rhat_t$ 之间可能存在的偏差一样。现场经理知道中央经理会做出这种调整,因此必须尝试估计并抵消它。由于现场经理既知道自己的请求 $x_{tqq’}$,然后又能看到中央经理提供的内容,时间 $t$ 对偏差的观测由以下给出

\[\delta_{tq} = x_{tq'q} - x_{tqq'}.\]

我们需要使用我们对 $R^{est}_t$ 和 $\Rhat_t$ 之间差异、$x_{tqq’}$ 和 $x_{tq’q}$ 之间差异、以及 $x_{tqq’}$ 和 $\Rhat_t$ 之间差异的估计。我们为现场经理提出了如下策略

\[\begin{align} X_{tqq'}(S_t\vert \theta_q) = R^{est}_t - \delta^{est}_{t-1,q} - \delta_{t-1,q} + \theta_q. \label{eq:fieldpolicy} \end{align}\]

该策略首先从初始估计 $R^{est}_t$ 开始,使用 $\delta^{est}_{t-1,q}$ 校正该初始估计中的偏差,然后校正来自中央经理的偏差 $\delta_{t-1,q}$,最后引入一个偏移量,用以捕捉现场经理在过量与不足两种情形下不同成本的差异。参数 $\theta_q$ 需要进行调优。

由于其中没有嵌入的优化问题(即 $\argmax_x$ 或 $\argmin_x$),这是一个经典的参数化策略函数逼近(PFA)。

中央经理

我们为中央经理提出的策略由以下给出

\[X_{tq'q}(S_t\vert \theta_{q'}) = x_{tqq'} - \delta_{t-1,q'} + \theta_{q'}.\]

在这里,我们从现场经理提出的请求开始,减去我们对现场经理请求与最终所需数量之间差异的最佳估计 $\delta_{tq’}$,然后加上 $\theta_{q’}$,它是中央经理的一个可调参数,其中 $\theta_{q’}$ 可能为负。

策略搜索

现在我们有两个参数化策略。现场策略的调优将使用 $\eqref{eq:fieldobjective}$ 中的目标函数完成,而中央策略的调优将使用 $\eqref{eq:centralobjective}$ 中的目标函数完成。这里的关键在于,由于两个策略是相互关联的,两个目标必须并行模拟。而在两个模拟同时运行的过程中,我们要追踪每个主体的目标。

处理每个主体参数优化的正确方法是同时模拟两个主体的行为,但为每个主体分别运行搜索算法,就好像它们是独立的一样。例如,现场主体的表现会受到中央主体行为的影响,正如现场主体也会受到其他形式外源信息的影响一样。

这种模拟提供了一个机会来探索每个主体的决策如何改变另一个主体的行为。我们将在习题中进一步探讨这一点。

我们学到了什么?

习题

复习题

  1. 主体 $q$ 知道但主体 $q'$ 不知道的是什么?同样,主体 $q'$ 知道但主体 $q$ 不知道的是什么?
  2. 有一条信息是两个主体都能获得的。这条信息是什么?
  3. 现场主体获得的外源信息是什么?中央主体获得的外源信息是什么?
  4. 我们的系统中有三种不确定性来源。它们是什么?

问题求解题

  1. 写出现场经理和中央经理的动态模型。请记住,一方经理的决策会成为另一方的外源信息。
  2. 如果现场主体只是不断订购越来越大的数量,会发生什么?可以在模型中引入什么机制来最小化这种不稳定性?
  3. 对现场主体的决策 $x_{tqq'}$ 可能如何影响中央主体的行为做出估计。然后,设计一个能捕捉这种效应的策略,使现场主体做出的决策能够预判其决策所产生的影响。
  4. 只有一条信息可以用来建立关于另一主体策略的信念。那条信息是什么?
  5. 现在假设现场主体可以将从中央主体获得的资源以价格 $p_{tq}$ 出售,而该价格会随时间随机变化。这意味着如果价格 $p_{tq}$ 过低,现场主体可以将其部分或全部资源保留到之后的时间段。请扩展本章的模型,以处理这一更为丰富的情形。你需要引入一个新的决策变量(满足多少需求)。请为此决策提出一个策略函数逼近方案。

编程题

这些习题使用位于 tinyurl.com/sdagithub 上的 Python 模块 TwoNewsvendor

  1. 对现场经理和中央经理的偏差进行网格搜索。对现场经理,在 $[0,10]$ 范围内搜索(步长为 1);对中央经理,在 $[-11,0]$ 范围内搜索(步长为 1)。运行博弈 $N = 30$ 个时间步,并对 1,000 个样本重复模拟(取平均值)。请注意,你要将 30 个时间步内的奖励累加,但在 1,000 个样本上取平均。为以下内容绘制三张热力图:
    1. 对于两种偏差的每种组合,现场经理的总奖励。
    2. 对于两种偏差的每种组合,中央经理的总奖励。
    3. 对于两种偏差的每种组合,公司的总奖励(现场经理与中央经理相加)。讨论从这三个不同视角来看,最优组合之间的差异。每个参与者都想最大化自己的奖励。
  2. 现在我们将使用区间估计学习策略来学习每一种偏差(参见[第4章](/sdam/zh/chapter-4/)中关于策略的讨论)。设 $\theta^{IE}_q$ 为现场经理 IE 策略的参数,设 $\theta^{IE}_{q'}$ 为中央经理 IE 策略的参数。我们不再搜索最佳偏差,而是搜索用于指导偏差查找策略的最佳参数。
    1. 运行 Python 模块,在 $(0, 1, 2, 3, 4, 5)$ 范围内改变每个学习参数。这意味着总共要进行 36 次模拟(时域为 $N = 20$,并针对 1,000 条样本路径)。绘制与习题 10 相同的三张热力图。
    2. 将 (a) 部分得到的热力图与习题 10 的热力图进行比较。尝试通过写出策略并思考其应有的行为方式来解释现场主体和中央主体的行为。
    3. 验证对偏差进行直接搜索能够给出最高的总体奖励。在问题参数可能随时间变化的更现实情形下,每种方法各有什么优缺点?
  3. (此习题需要对 Python 模块进行一些修改。)现在考虑一个双主体报童问题,其中中央经理也拥有一些关于需求的外部信息。他所拥有的是一个噪声大得多的需求估计(比如,对于我们的电子表格数据,其中需求始终在 20 到 40 之间,该噪声是与现场经理通信来源噪声的三倍)。 将中央经理的偏差重新定义为他添加到所获得的估计值上的数量。尝试一种学习方法,使他所选择的偏差在区间 $[-11, 0]$ 内选取。运行程序并将结果与旧的学习过程进行比较。与之前一样,运行博弈 $N = 30$ 个时间步,并对 1,000 个样本重复模拟(取平均值)。经过 $N = 30$ 个时间步后,中央主体是更看重来自现场的信息,还是更看重来自其他外部信息源的信息?为什么?
  4. 考虑这样一种情形:现场经理正在使用一种学习方法,而中央经理正在使用一种惩罚策略。由于他知道现场在提供低于需求的数量时会受到更大的惩罚,中央经理将计算前一次现场偏差(时间为 $t-1$),如果该偏差为正,则在下一轮中,他会对现场的请求施加一个幅度是原来两倍、符号相反的偏差。运行此实验,看看经过 30 个时间步后,现场的偏差会是多少。将此策略与之前的策略进行比较,中央经理是否应该采用这种策略?