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

第1章:序贯决策问题的建模

在计算机上求解任何物理问题(尤其是任何序贯决策问题)的过程都需要构建一个数学模型,如图 1.1 所示。几十年来,研究界一直使用一个标准的数学框架来处理所有数据都提前已知的决策问题(称为确定性优化)。确定性优化问题的一个简单版本,被称为线性规划,可以写作

\[\begin{align} \min_x c^T x, \label{eq:linearprogram1} \end{align}\]

其中 $x$ 是一个元素向量,必须满足一组通常写作如下的约束条件

\[\begin{align} A x & = b, \label{eq:linearprogram2}\\ x & \geq 0. \label{eq:linearprogram3} \end{align}\]
现实世界与计算机之间的桥梁是一个数学模型。
图 1.1。 现实世界与计算机之间的桥梁是一个数学模型。

理解方程 $\eqref{eq:linearprogram1}$–$\eqref{eq:linearprogram3}$(这需要具备线性代数的基础知识)并非必要,但每年都有成千上万的学生从相关课程毕业,他们在课程中学习这种记号,也学习如何将各种各样的物理问题转化为这种记号。之后,有各种软件包能将这种格式的问题转化为解答。最重要的是,这种记号语言是全世界通用的。对于统计建模/机器学习,也可以做出同样的论断,如今这一领域的从业者群体规模远大于理解方程 $\eqref{eq:linearprogram1}$–$\eqref{eq:linearprogram3}$ 的人群。

但对于序贯决策问题,我们无法做出同样的论断,这是一个至少被15个不同学科群体研究的问题类别,它们使用八种根本不同的记号风格,往往还需要用到高深的数学知识。在本书中,我们采用一种”以实例教学”的风格,展示如何为这一极其丰富的问题类别——我们称之为序贯决策问题——建模。虽然我们关注的是相对简单的问题,但我们的框架可以用来为任何序贯决策问题建模。此外,所得到的模型可以直接转化为软件。

本书的分析基础包含在《Reinforcement Learning and Stochastic Optimization: A unified framework for sequential decisions》(RLSO)一书中,那是一本以方法论为核心的研究生级别教材。我们会不时提及该书中的内容,供有兴趣深入了解的读者参考,也鼓励有技术background的读者将RLSO作为参考资料。不过,这并非必需。本书旨在通过一系列示例提供背景知识,使读者能够对序贯决策问题进行清晰、精确的思考,即便他们永远不会编写一行代码。

本书面向修读过概率与统计课程的本科生或硕士生(不需要具备线性规划的知识,尽管我们有一个例子需要求解一个线性规划问题)。除了第 1 章(提供整个建模框架的概述)和第 7 章(在这一章中,我们会停下来利用前六章的内容来说明一些重要原则)之外,所有章节都围绕具体的示例展开。

本书的讲解不需要超出概率与统计入门课程所要求的数学知识。也就是说,本书的核心是展示如何使用足够精确的记号来描述序贯决策问题,使其能够成为计算机软件的基础。

大多数章节都配有Python模块;这些模块是围绕贯穿全书的建模框架编写的。同时,任何用于模拟序贯决策问题的软件包,无论其求解方式如何,都可以直接转化为我们所使用的建模框架。因此,我们鼓励读者将任何一段记号都视为计算机程序中的一个变量。

入门须知

序贯决策问题总是可以写成

\[decision,\ information, \ decision, \ information, \ decision, \ldots\]

每次我们做出决策时,都会产生成本或获得贡献或奖励(衡量绩效的方法有很多种)。决策是通过一种我们称之为策略的方法来制定的。本书的核心目标之一,是设计出能够在信息尚未到来的不确定性下、长期表现良好的有效策略。

序贯决策问题无处不在,几乎出现在人类的每一个过程中。表 1.1 列出了一些领域的示例,以及这些领域中可能出现的一些决策。这些领域中的大多数可能都存在许多不同类型的决策,其复杂程度从何时出售一项资产或采用一种新的网页设计,到选择最佳的药物、材料或设施进行设计,再到管理复杂的供应链或调度一支卡车车队,不一而足。

领域问题
商业我们应该销售什么产品,具有哪些特性?应该使用哪些供应商?应该定价多少?
经济学根据经济状况,美联储应该设定怎样的利率?应该提供多大程度的市场流动性?
金融投资组合应该投资哪些股票?交易员应该如何对冲合约的潜在下行风险?
互联网我们应该展示哪些广告以最大化广告点击量?哪些电影最能吸引关注?应该何时/如何发送大规模通知?
工程如何设计从喷雾罐到电动汽车、从桥梁到交通系统、从晶体管到计算机的各种设备?
公共卫生我们应该如何进行检测以估计疾病的传播进程?应该如何分配疫苗?应该针对哪些人群?
医学研究哪种分子结构能产生杀死最多癌细胞的药物?生产单壁纳米管需要哪些步骤?
供应链管理我们应该何时向中国下达库存订单?应该使用哪家供应商?
货运运输应该由哪位司机来运送货物?整车运输承运商应该承诺运送哪些货物?司机应该驻扎在哪里?
信息收集我们应该将无人机派往何处以收集有关野火或入侵物种的信息?应该测试哪种药物来对抗某种疾病?
多智能体系统在寡头垄断市场中,一家大公司应该如何在预见竞争对手反应的情况下对合同进行投标?
算法在搜索算法中应该使用什么样的步长规则?我们如何确定评估某个昂贵函数的下一个点?

表 1.1。 不同领域及每个领域内需要做出的决策示例。

比列出所有类型的决策更具挑战性的,是识别许多应用中出现的不同不确定性来源。人类行为、市场、物理过程、交通网络、能源系统,以及健康领域中出现的广泛的不确定性,都暗示了不确定性来源的多样性。

在撰写本书之际,人类正在与COVID-19各种变种的传播作斗争。应对这场大流行病被描述为”复杂得令人难以置信”[《今日美国》,2020年9月8日],但这实际上是未能以结构化方式思考该问题所导致的结果。我们将向读者展示,如何将问题分解为一系列基本组成部分,从而得出切实可行的解决方案。

我们的方法首先要识别一些核心要素,例如绩效指标、决策以及不确定性来源,然后据此建立问题的数学模型。下一步通常(但并非总是)是在计算机上实现该模型,但也会有许多问题,出于种种原因,构建计算机模型是不切实际的。因此,我们也将考虑那些必须在现场测试和评估想法的问题。要提高绩效,我们首先需要学习如何随时间推移做出良好的决策(这就是我们控制系统的方式)。然后,我们再转向系统的设计。

目前,学术界尚未针对序贯决策问题采用统一的标准建模流程。这与静态、确定性优化问题领域形成了鲜明对比,后者自20世纪50年代以来一直遵循严格的框架(方程 $\eqref{eq:linearprogram1}$–$\eqref{eq:linearprogram3}$ 展示了这一框架的一个示例)。我们的建模流程基于RLSO一书中的阐述,那本书面向的是主要对在计算机上开发和实现模型感兴趣的技术型读者。

相比之下,本书面向更广泛的读者群体,他们首先且最主要地是希望学习如何思考序贯决策问题。本书采用一种”以实例教学”的风格,重点传达建模过程,我们认为这一过程即便最终不构建计算机模型也同样有用。我们方法的核心是建立一个数学模型,从而消除用日常英语描述问题时存在的歧义。对于有兴趣开发计算机模型的读者而言,记号是通往编写软件的垫脚石。但我们主要会使用数学记号来在描述问题时创造清晰性,即使读者根本不打算编写任何代码。

本书的内容安排如下:

应用章节(第2–6章和第8–14章)都遵循相同的大纲结构。它们可以按任意顺序阅读,但需要注意的是,第2–6章中的应用较为简单,是为了说明四类策略中的每一种而选取的。对特定建模主题(例如状态变量、不确定性建模,或希望了解策略的不同示例)感兴趣的读者,可以略读各章,直接跳转到自己感兴趣的主题。

每章结尾都附有一系列习题,分为三类:

那么,什么是决策?

关于人们如何做决策的研究,其历史可以追溯到 2000 多年前苏格拉底(Socrates)、亚里士多德(Aristotle)和柏拉图(Plato)的时代。此外,自 20 世纪 50 年代以来(也有一些重要工作出现得更早),关于如何做出最优决策的数学研究文献也相当可观,包含数以千计的论文和著作。这些文献似乎忽略了一个基本问题:

什么是决策?

我们从这样一个观察出发:决策是一种信息形式,它会影响我们试图控制的某个”系统”的行为。这个系统隐含着一个或多个用于量化系统运行表现的度量指标。然后,我们需要确定一个控制该系统某方面的智能体(agent)。

基于这一基础,识别出三类信息会很有帮助:

  1. 知识状态——这是我们当前拥有的、与系统性能相关的信息。
  2. 我们所控制的、会改变知识状态的信息(这需要为我们的系统确定一个控制智能体)。
  3. 到达我们系统的、会改变知识状态但超出我们控制范围的信息。

我们将第 2 类信息称为决策。这提示我们可以给出决策的一个正式定义,取自《架起决策问题之桥,第一卷:问题的构建》(Bridging Decision Problems, Volume I: Framing the Problem):

定义(正式): 决策是一种内生可控的信息类别。

一个非正式的定义可能是:

定义(非正式): 决策是我们所控制的东西。

这些定义提供了一个起点,但我们从中学到的东西并不多。更有意思的是识别决策的具体例子,这是我们接下来要做的。

决策的类型

我们基于所处情境以及可能用来确定最佳决策的工具,识别出了 10 种类型的决策。它们是:

1)物理与财务决策——这些决策产生于对物理和财务资源的管理中,例如人员、设备、设施、产品、水、能源,以及现金或投资等财务资源。决策包括购买、出售和修改资源,其中”修改”可能意味着将其从一个地点移动到另一个地点、维修设备、培训人员,或将原料组合起来制作蛋糕。

2)复杂/战略决策——这些决策可能对系统做出多重改变(改变资源、参数、信念),并且通常涉及重大的不确定性来源。这些决策通常只被评估一次,但也可能存在等待并在之后再做决策的选择。

3)信息获取/观测决策——包括诸如在实验室中进行实验、现场测试或计算机模拟等决策。它可能包括开展市场调研、聘请专家,或向大型语言模型提问。

4)信息交流/共享决策——这些决策有两种形式:

5)绩效指标与目标——这代表了一个关键的选择,即量化我们试图实现的目标,例如最大化收入、最小化成本、最小化患病人数,或最大化获得的选票。

6)函数选择——这些可能是做决策的方法(策略)、优化模型的构建方式、绩效指标的选择、预测或估计的方法,或转移函数的设计(例如疾病如何传播)。

7)参数设定——通常有若干参数会影响系统的性能。这些参数可能是价格、统计模型中的系数、制造过程中所用的温度。也可能是赋予某一绩效指标的权重,或绩效目标。

8)估计或识别——我们可能需要识别一个人、预测需求,或命名一种疾病。

9)特征与行为——如何设计一款产品、一个软件包应具备哪些功能、应向客户提供哪些服务,或学生应选择的专业方向,这决定了他们毕业时具备的技能。

10)决定要决定什么——虽然我们通常不会对这最后一项决策使用正式分析,但认识到我们何时正在做决策,以及是否希望通过数据分析和建模正式处理这一决策,是很重要的。

在识别决策的过程中,隐含着理解该决策如何影响系统性能。移动物理资源(第 1 类)会产生成本,而满足需求会带来收入。一项决策可能对一个或多个绩效指标产生即时影响(这在资源管理中经常发生),但决策往往需要在一段时间内进行评估,并且依赖于决策做出时尚不可知的信息。正因如此,我们常常评估的是我们如何做决策(即方法),而不是决策本身。

问题的构建

处理决策问题的第一步涉及回答三个问题:

请注意,这些问题的答案对任何决策问题而言都是根本性的。在本书中,这些问题看起来会相当简单,因为我们是在已经为解决某个问题而设计好的模型背景下回答它们的。而在实际应用中,绩效指标、决策和不确定性的清单可能相当冗长。

作为对问题构建过程所能达到的丰富程度的一点提示,我们鼓励读者查阅专著《问题的构建》Framing the Problem),该书正是专门探讨这一主题的。这本专著用整整几章的篇幅分别探讨这些问题,并通过十几种不同的应用加以说明。

问题构建过程的目标是识别真正重要的东西,首先是从绩效指标开始——即使是一个简单的库存问题,也可以用超过 20 个绩效指标、30 种不同类型的决策以及超过 30 种不确定性来描述。列出这些内容的电子表格可以在 tinyurl.com/PowellInventoryDecisions 找到。这并不意味着我们真的要构建一个包含如此复杂程度的模型。因此,本书引入了一种称为交互矩阵(interaction matrices)的工具,由领域专家对指标进行优先级排序,然后运用判断力来识别对最重要指标影响最大的决策和不确定性。

本书假设我们已经将一个问题简化为少量的指标、决策和不确定性,并以此为重点来构建数学模型。

建模过程

建模是一门艺术,但这门艺术是在一个数学框架的指导下进行的,该框架确保我们能得到一个定义良好、可以放到计算机上求解的问题。这可以看作是从一个杂乱、定义不清的现实世界问题,架起一座通往计算机能够理解的清晰表述的桥梁——即便你的最终目标并非要将其放到计算机上求解。

从历史上看,如果一项建模工作涉及试图做出决策,人们通常会求助于众所周知的确定性优化框架,它通常呈现为方程 $\eqref{eq:linearprogram1}$–$\eqref{eq:linearprogram3}$ 所给出的模型形式,其中包括决策变量 $x$、目标函数 $cx$,以及由 $\eqref{eq:linearprogram2}$–$\eqref{eq:linearprogram3}$ 给出的约束条件。

这种经典建模框架的问题在于它所遗漏的内容:

数学模型首先且最重要的是,应当提供一条指引我们如何思考问题的路径。遵循方程 $\eqref{eq:linearprogram1}$–$\eqref{eq:linearprogram3}$ 格式的经典确定性优化模型,完全忽略了与我们问题随时间演化相关的一切内容。

本书完全围绕一种称为通用建模框架(universal modeling framework)的建模方法展开设计。简而言之,它力图表示一个可控系统的任何方面。我们的默认模型将假设系统随着新信息的到来而随时间演化。

在本节中,我们将给出通用建模框架的一个非常简明的版本。然后,我们将首先用一个非常简单的库存问题来说明该框架,随后引入一些适度的扩展。在给出这些示例之后,我们将回过头来对通用建模框架进行更详细的介绍。

动态模型的简明呈现

我们首先观察到,任何序贯决策问题都可以用如下序列建模

\[(S_0,x_0,W_1,S_1,x_1,W_2, \ldots, S_t, x_t, W_{t+1}, \ldots, S_T),\]

其中:

决策 $x_t$ 由我们称之为策略的某种方法决定,我们将其记为 $X^\pi(S_t)$。符号 $\pi$ 携带了关于函数结构的信息,我们用一组潜在函数 $\Fcal$ 中的 $f$ 来表示该函数结构,以及由该函数结构所定义的任何可调参数 $\theta\in\Theta^f$。例如,一个库存策略可能是:只要库存低于 $\theta^{min}$ 就订购 $\theta^{order}$ 单位,这意味着可调参数为 $\theta = (\theta^{order}, \theta^{min})$。该函数的结构则是函数 $f$ 的一个示例。

我们假设有一个转移函数,它以状态 $S_t$、决策 $x_t$ 和外源信息 $W_{t+1}$ 作为输入,给出更新后的状态 $S_{t+1}$。转移函数是一组用于更新状态变量 $S_t$ 每个元素的方程,状态变量可能只有一个元素,也可能有成千上万个(甚至更多)。

当我们在状态 $S_t$ 所包含的信息下做出决策 $x_t=X^\pi(S_t)$ 时,我们会产生贡献(或成本)$C(S_t,x_t)$。我们的目标是找到能够最大化某个依赖于贡献 $C(S_t,x_t)$(其中 $x_t=X^\pi(S_t)$)的目标的策略。对于更复杂的情形,$C(S_t,x_t)$ 实际上可能是一组绩效指标,尽管我们需要以某种方式将它们组合起来,以确定应该选择哪个决策 $x_t$。

这是对序贯决策问题的一个非常简洁的描述。接下来我们将描述建模过程中需要遵循的一系列步骤。

建模过程中的步骤

(就我们的目的而言)可以将整个建模过程划分为七个步骤。在这些步骤之前(下面标记为”步骤 0”),是对应用技术复杂度的简要总结,以便为读者提供指引。

步骤 0. 章节摘要 —— 我们在每一章开头都会概述本章将要涵盖的内容,在某些情况下,还会说明本章内容与其他章节内容的关系。这些摘要指明了用于建模不确定性以及所使用策略的方法。

步骤 1. 叙述描述 —— 这是对问题的一个通俗英语描述。该叙述不会提供构建数学模型所需的全部信息;相反,它是第一步,旨在让建模者获得问题的整体图景,而不会陷入符号细节之中。

步骤 2. 问题的框架化 —— 这一步包括回答三个问题:

步骤 3. 识别问题的核心要素,特别强调任何序贯决策问题的三个维度。这些要素在描述时不使用数学语言:

我们将回答这三个问题的过程称为问题的框架化

不确定性类型描述
1) 观测误差观察出现症状的人;将有症状的人误判为感染新冠的错误
2) 外源不确定性新增病例、死亡人数的报告;重症监护病床的可用性;疫苗的实际产量
3) 预后不确定性住院情况;疫苗未来的效果;人群对疫苗的反应
4) 推断不确定性感染率的估计;疫苗有效性的估计
5) 实验不确定性临床试验中的药物效果;接种疫苗的人数
6) 模型不确定性疾病传播率;感染的地理扩散
7) 转移不确定性疫苗库存的增加/撤出
8) 控制不确定性哪些人群接种了疫苗;疫苗分配方案
9) 实施不确定性未能完成接种
10) 沟通错误现场报告中的错误;未能及时通知何时接种
11) 目标不确定性在应优先接种人群上的分歧
12) 环境不确定性疫苗是否/何时获批;疫苗在不同州、国家之间的分配

表 1.2。新冠疫情疫苗接种应对中出现的不同类型不确定性示例。

步骤 4. 数学模型 —— 在这里,我们在步骤 2 中提出的前三个要素的基础上进一步构建,现在需要建立一个由五个维度组成的数学模型,这五个维度适用于每一个序贯决策问题:

\[S_{t+1} = S^M(S_t,x_t,W_{t+1}),\]

其中 $S^M(\cdot)$ 被称为状态(或系统)转移模型(因此上标中出现 $M$)。转移函数描述了在给定决策 $x_t$ 和外源信息 $W_{t+1}$ 的情况下,状态变量每个元素如何变化。在复杂问题中,实现转移函数可能需要数千行代码。

\[\begin{align} \max_{\pi=(f,\theta)} F^\pi(S_0) = \E \left\{\sum_{t=0}^T C(S_t,X^\pi(S_t\vert \theta))\vert S_0\right\},\label{eq:baseobjectivefunction} \end{align}\]

其中”$\E$”被称为期望算子,意味着它对任何随机的量求平均值,这可能包括初始状态 $S_0$ 中的不确定信息,以及外源信息过程 $W_1, \ldots, W_T$。标准做法是写出期望算子,但我们实际上永远无法真正计算出它。稍后我们将展示如何通过运行一系列模拟并取平均值,或通过在实地观察某个过程,来对其进行近似。

在解读方程 $\eqref{eq:baseobjectivefunction}$ 中的期望算子”$\E$”时必须谨慎。该算子的字面含义是”对任何不确定的量求平均值”。其中最明显的不确定性部分就是外源信息过程 $W_1, W_2, \ldots, W_t, \ldots, W_T$。

从(由叙述引导的)实际问题过渡到数学模型的各要素,或许是最困难的一步,因为这通常需要从非技术性的信息来源那里获取信息。

我们注意到,我们已经在没有说明如何做出决策(即由策略 $X^\pi(S_t)$ 表示的内容)的情况下,呈现了整个模型。我们将此称为”先建模,后求解“,这代表了与处理序贯决策问题的大量文献所采取方式的重大背离。要说清楚以这种方式处理序贯决策问题的重要性,实属不易。

步骤 5. 不确定性模型 —— 这是我们对不同类型不确定性进行建模的方式。将不确定性引入模型有两种途径:

  1. 通过初始状态 $S_0$,它可能为诸如患者对药物的反应或市场对价格的反应等不确定参数指定一个概率分布。
  2. 通过外源信息过程 $W_1, \ldots, W_T$。

我们有三种方法来对外源信息过程建模:

步骤 6. 设计策略 —— 策略是函数,因此我们必须搜索最佳函数。(没错,策略是用于选择最佳决策的函数,但选择策略本身也是一个决策!)为此,我们通过确定两大核心策略设计思路来完成这项工作:

我们将更明确地说明如何识别这些策略。后面有一节将介绍四类策略,它们将涵盖任何做决策的方法(这些是元类别)。

第7步。评估策略 —— 找到最佳策略意味着评估各种策略,以确定哪个最优。评估策略有两种方式:

模拟器可能十分复杂、难以构建,并且仍然会受到建模近似的影响。因此,实践中遇到的绝大多数实际问题往往涉及在现场进行测试,这既缓慢(模拟一天需要一天时间),又需要承受实验结果所带来的后果。

要让人对某个数学模型感到熟悉,唯一的方法就是用一个大家熟悉的例子来说明它。我们从一个我们在日常生活中都会遇到的普遍性问题开始:库存管理。

一些库存问题

我们将使用一个经典库存问题的两个变体来说明我们的建模框架,该问题被广泛用作说明求解序贯决策问题的某些方法的应用案例。我们先从一个简单的库存示例开始,它体现了我们建模框架的核心要素,同时让我们暂时忽略本书后续将探讨的许多复杂性。

然后,我们将过渡到一个略微更复杂的库存问题,借此说明一些建模原则。在全书中,我们也会采用这样的方式:先从某个问题的基本版本入手,然后引入一些扩展,从而暗示实际应用中可能出现的各种复杂情况。

一个简单的库存问题

我们每次去商店时都会遇到的最熟悉的序贯决策问题之一,就是库存问题。我们将使用这个问题的一个简单版本来说明上面介绍的建模流程的六个步骤:

第1步:叙述 —— 一家披萨餐厅需要决定向其食品分销商订购多少磅香肠。餐厅必须在第 $t$ 天结束时做出决策,传达订单,然后订单会在次日早上到达,以满足明天的订单需求。如果香肠有剩余,可以保留到第二天。香肠的成本,以及次日出售的价格,都是事先已知的,但需求量却是未知的。

第2步:该问题的核心要素为:

第3步:数学模型 —— 该模型由五个要素组成。

1) 状态变量 $S_t$ —— 我们区分初始状态变量 $S_0$ 和动态状态变量 $S_t$(对于 $t > 0$ 而言)。初始状态变量 $S_0$ 由固定参数以及随时间变化的变量的初始值组成,由此得到

\[S_0 = (R^{inv}_0, (p, c), (\Dbar, \sigmabar^D)).\]

我们将初始状态划分为三类变量:

动态状态变量 $S_t$ 就是我们的库存,我们将其记为 $R^{inv}_t$。目前,这是动态状态变量的唯一组成部分,因此

\[S_t = R^{inv}_t.\]

之后我们会为状态变量引入更多的要素。

2) 决策变量 $x_t$ 是我们在时间 $t$ 订购的数量,我们(目前)假设它会立即到货。我们使用一个我们稍后会设计的策略 $X^\pi(S_t)$ 来做出决策。

3) 外源信息 是我们产品的随机需求,我们将其记为 $\Dhat_{t+1}$,因此 $W_{t+1} = \Dhat_{t+1}$。

4) 我们的转移函数 刻画了库存 $R_t$ 如何随时间演变,由下式给出

\[\begin{align} R^{inv}_{t+1} = \max\{0, R^{inv}_t+x_t-\Dhat_{t+1}\}. \label{eq:inventoryexampleequation} \end{align}\]

5) 我们的目标函数。 对于我们的库存问题,最自然的做法是计算包括产品 $x_t$ 的购买成本,以及满足需求 $\Dhat_{t+1}$ 所带来的收入,这意味着我们单期的贡献函数可以写成

\[C(S_t,x_t,\Dhat_{t+1}) = -cx_t + p \min\{R^{inv}_t+x_t, \Dhat_{t+1}\},\]

其中 $x_t = X^\pi(S_t)$。给定一个需求序列 $\Dhat_1, \ldots, \Dhat_T$,某个策略 $\Fhat^\pi$ 的价值将是

\[\Fhat^\pi(S_0) = \sum_{t=0}^T C(S_t,X^\pi(S_t),\Dhat_{t+1}).\]

我们的利润 $\Fhat^\pi(S_0)$ 是随机的,因为它取决于某个特定的随机需求序列 $\Dhat_1, \ldots, \Dhat_T$。最后,我们通过取期望来对这些随机需求进行平均:

\[\begin{align} F^\pi(S_0) = \E \left\{\sum_{t=0}^T C(S_t,X^\pi(S_t),\Dhat_{t+1})\vert S_0\right\}. \label{eq:inventoryobjective} \end{align}\]

这里,以初始状态 $S_0$ 为条件,可以理解为“基于我们最初所知的信息来取期望”。每当我们取期望时,以 $S_0$ 为条件都是隐含的,因此许多作者会将其省略。然而,我们将保留对 $S_0$ 的条件化处理,以明确说明如果我们的初始输入(包括信念)发生变化,可能会影响策略的表现。

第4步:不确定性模型 —— 建模不确定性的最简单方法就是直接使用历史数据。我们可能遇到的问题是,如果香肠售罄,我们可能无法观测到当天对香肠的全部需求。如果我们能够捕捉到这部分未被满足的需求,那么这种方法就是合理的。

另一种方法是构建一个数学模型。我们可以假设我们的需求服从均值为 $\Dbar$、标准差为 $\sigmabar^D$ 的正态分布。如果我们假设这两者都已知,我们可以将需求写成

\[\Dhat_{t+1} \sim N(\Dbar,(\sigmabar^D)^2),\]

并利用能够从正态分布中抽样的软件包(例如,在Excel中这被称为 Norm.inv$(Rand(),\Dbar,\sigmabar)$)来生成一个均值为 $\Dbar$、标准差为 $\sigmabar$ 的随机观测值。

利用这个模型,我们可以生成一组需求 $(\Dhat_1, \Dhat_2, \ldots, \Dhat_T)$。然后,我们可以将此过程重复 $N$ 次,从而生成 $N$ 条包含 $T$ 个需求的序列,得到序列 $(\Dhat^n_1, \Dhat^n_2, \ldots, \Dhat^n_T)$(对于 $n=1, \ldots, N$ 而言),这正是我们在第6步中估计策略价值所需要的(我们将在下面用到它)。

第5步:设计策略 —— 接下来,我们必须设计一种确定订货量的方法。库存问题中常用的一种策略被称为“补货至上限”策略,其形式如下

\[\begin{align} X^\pi(S_t\vert \theta) = \begin{cases} \theta^{max} - R_t & \text{if } R_t < \theta^{min}, \\ 0 & \text{otherwise,}\end{cases} \label{eq:introorderupto} \end{align}\]

其中 $\theta = (\theta^{min},\theta^{max})$ 是一组需要调优的参数。之所以称为“补货至上限”,是因为我们下订单是为了将库存补充“至”上限 $\theta^{max}$。

第6步:评估策略 —— 我们可以使用多种策略。在实践中,我们无法计算方程 $\eqref{eq:inventoryobjective}$ 中目标函数里的期望值,因此我们会取一系列需求样本。设 $\Dhat^n_1, \ldots, \Dhat^n_T$ 为在 $t=1, \ldots, T$ 上的一个需求样本,并假设我们能生成 $N$ 个这样的样本。现在,我们可以通过对 $n=1, \ldots, N$ 的样本取平均,来估计策略 $X^\pi(S_t)$ 的预期利润,其计算方式为

\[\Fbar^\pi(\theta\vert S_0) = \frac{1}{N} \sum_{n=1}^N \sum_{t=0}^T C(S_t,X^\pi(S_t\vert \theta),\Dhat^n_{t+1}).\]

用通俗的话来说,我们是在使用模拟(或从历史中观测得到)的需求样本 $\Dhat^n_1, \ldots, \Dhat^n_T$,对策略 $X^\pi(S_t\vert \theta)$ 进行 $N$ 次模拟,然后对表现取平均以得到 $\Fbar^\pi(\theta\vert S_0)$。接下来我们面临的问题是找到 $\theta$ 的最优值。一个简单的策略是生成 $K$ 个可能的取值 $\theta_1, \ldots, \theta_K$,对每一个都进行模拟以求得对应的 $\Fbar^\pi(\theta_k\vert S_0)$(针对每个 $k$),然后选取表现最佳的 $\theta_k$ 值。这并非最优策略,但它提供了一个简单、实用的起点。

一个稍微更复杂的问题

上面的简单库存问题是演示一种求解序贯决策问题的特定方法——即所谓动态规划——的经典场景,该方法依赖于拥有一个简单的状态变量,该变量a) 是离散的,且b) 不具有过多可能取值。在我们这个稍微更复杂的库存问题中,我们将展示三种不同类型的状态变量,它们对于某种流行的求解序贯决策问题的方法而言会构成严重的复杂性,但对我们所选择的策略却没有影响。

第1步:叙述 —— 我们再次以那家需要订购香肠的披萨餐厅为例,但这次我们将允许我们所支付的香肠价格逐日变化,其中我们假设某一天的价格与前一天的价格是独立的。然后,我们还将假设,尽管明天香肠的需求是随机的,但我们会获得一个关于明天需求的预测,该预测尽管不完美,但比没有预测要好。除此之外,我们这个更复杂问题的其他方面都与之前相同。

第2步:核心要素 —— 这些要素为:

第3步:数学模型 —— 我们仍然拥有同样的五个要素,但现在问题变得更加丰富:

1) 为构建状态变量,我们需要列出模型中三个不同部分所需的信息(具体来说,是随时间演变的信息):(1) 目标函数,(2) 用于做决策的策略(其中包括约束条件),以及(3) 转移函数。当然,我们尚未介绍这些函数中的任何一个,因此你需要往后阅读,并验证我们的状态变量包含了计算这些函数所需的全部信息。可以把它想成是我们将需要的信息的一份词典。

我们从初始状态 $S_0$ 开始,它由常量参数,以及随时间变化的量和参数的初始值组成。它们是:

这意味着我们的初始状态变量是

\[S_0 = (R_0,c_0, p, f^D_{0,1}, \sigmabar^D_0, \sigmabar^f_0).\]

接下来,我们有随时间演变的信息,这些信息构成了我们的动态状态变量 $S_t$:

我们的动态状态变量则由下式给出

\[S_t = (R^{inv}_t, c_t, f^D_{t,t+1}, \sigmabar^D_t, \sigmabar^f_t).\]

2) 决策变量$x_t$是我们在时间$t$订购的数量,我们(暂时)假设它会立即到货。我们使用一个策略$X^\pi(S_t)$来做出决策,该策略我们将在后面设计。

3) 外源信息现在包括:

\[\Dhat_{t+1} = f^D_{t,t+1} + \varepsilon^D_{t+1}.\]

我们完整的外源信息变量集合现在可以写作

\[W_{t+1} = \big(\chat_{t+1}, \varepsilon^f_{t+1}, \varepsilon^D_{t+1}\big).\]

4) 转移函数——该函数指定每个(动态)状态变量$S_t$如何随时间演化。我们使用以下方式更新库存:

\[\begin{align} R^{inv}_{t+1} &= \max\{0, R^{inv}_t + x_t - \Dhat_{t+1}\}. \label{eq:introcomplexinventorytransition1} \end{align}\]

需求等于预测需求加上相对于预测的偏差$\varepsilon^D_{t+1}$,由此我们得到方程:

\[\begin{align} \Dhat_{t+1} &= f^D_{t,t+1} + \varepsilon^D_{t+1}. \label{eq:introcomplexinventorytransition2} \end{align}\]

我们假设预测使用以下方式更新

\[\begin{align} f^D_{t+1,t+2} &= f^D_{t,t+1} + \varepsilon^f_{t+1}. \label{eq:introcomplexinventorytransition3} \end{align}\]

接下来,我们将自适应地估计需求方差和需求预测的方差:

\[\begin{align} (\sigmabar^D_{t+1})^2 &= (1-\alpha)(\sigmabar^D_t)^2 + \alpha (f^D_{t,t+1} - \Dhat_{t+1})^2, \label{eq:introcomplexinventorytransition4}\\ (\sigmabar^f_{t+1})^2 &= (1-\alpha)(\sigmabar^f_t)^2 + \alpha (f^D_{t,t+1} - f^D_{t+1,t+2})^2, \label{eq:introcomplexinventorytransition5} \end{align}\]

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

最后,我们用”观测成本”$\chat_{t+1}$更新成本$c_{t+1}$,简单地写作

\[\begin{align} c_{t+1} = \chat_{t+1}.\label{eq:introcomplexinventorytransition6} \end{align}\]

方程$\eqref{eq:introcomplexinventorytransition6}$是一个我们观测而非计算得到的状态变量的示例,这与我们在$\eqref{eq:introcomplexinventorytransition1}$中对库存$R^{inv}_t$所做的处理不同。方程$\eqref{eq:introcomplexinventorytransition1}$有时被称为”基于模型的”,因为它反映了库存更新的物理规律,而方程$\eqref{eq:introcomplexinventorytransition6}$被称为”无模型的”,因为我们并未尝试对产生成本变化的潜在过程进行建模。

我们的转移函数$S_{t+1} = S^M(S_t,x_t,W_{t+1})$由方程$\eqref{eq:introcomplexinventorytransition1}$–$\eqref{eq:introcomplexinventorytransition6}$组成。

5) 最后,我们的单期贡献函数现在可以写作

\[C(S_t,x_t,\Dhat_{t+1}) = -c_tx_t + p \min\{R_t+x_t, \Dhat_{t+1}\},\]

与较简单的库存问题唯一的不同之处在于,成本$c$现在是随时间变化的$c_t$。我们打破了将贡献写作$C(S_t,x_t)$的惯例,允许它包含来自需求$\Dhat_{t+1}$的收入。

我们现在正式陈述我们的目标函数为

\[\begin{align} \max_{\pi=(f,\theta)} \E \left\{\sum_{t=0}^T C(S_t,X^\pi(S_t\vert \theta),\Dhat_{t+1})\vert S_0\right\}. \label{eq:introcomplexinventoryobjective} \end{align}\]

优化$\max_\pi$意味着我们在由$(f,\theta)$表示的所有可能策略中进行搜索,这实际上意味着在我们可能用来做出决策的所有不同函数中进行搜索。本书中的示例将展示我们如何在函数空间中进行搜索。

回忆一下,我们之前提到索引$\pi$携带了关于函数类型$f\in\Fcal$以及任何可调参数$\theta\in\Theta^f$的信息。在实践中,对函数类型$f\in\Fcal$的搜索往往是临时性的(一位经验丰富的分析师会选择对特定问题有意义的函数),而计算机算法则负责搜索$\theta\in\Theta^f$的最佳值。

步骤4. 不确定性模型——我们将假设外源变化$\varepsilon^D_{t+1}$和$\varepsilon^f_{t+1}$由均值为0、方差分别为$(\sigmabar^D_t)^2$和$(\sigmabar^f_t)^2$的正态分布来描述,我们将其表示为

\[\varepsilon^D_t \sim N(0, (\sigmabar^D_t)^2), \quad \varepsilon^f_t \sim N(0, (\sigmabar^f_t)^2).\]

不确定性模型可能变得相当复杂,但这里将作为一个示例。

步骤5. 设计策略——接下来我们必须设计一种确定订货量的方法。我们不再采用较简单模型中的补货至某水平的策略,而是提出这样一个思路:订购足够满足明天预期需求的数量,并加以调整。我们可以将其写作

\[\begin{align} X^\pi(S_t\vert \theta) = \max\{0,f^D_{t,t+1}-R_t\} + \theta. \label{eq:adjustedforecastpolicy} \end{align}\]

如果我们有完美的预测,那么我们所需订购的就只是$f^D_{t,t+1}$(我们对$\Dhat_{t+1}$的预测)减去现有库存。然而,由于存在不确定性,我们将添加一个调整项$\theta$,以便留有一定的缓冲以避免缺货。

步骤6. 评估策略——这一次我们必须对序列$W_1, W_2, \ldots, W_T$中所有随机变量生成样本。我们同样可以生成整个序列的$N$个样本,从而使用以下方式估计策略的表现

\[\Fbar^\pi(\theta) = \frac{1}{N} \sum_{n=1}^N \sum_{t=0}^T C(S_t,X^\pi(S_t\vert \theta),\Dhat^n_{t+1}).\]

我们再次面临寻找$\theta$最佳值的问题,但我们将在后面讨论这一挑战。

通用建模框架

我们现在准备更详细地描述通用建模框架(UMF)的各个要素。我们注意到,UMF能够对任何序贯决策问题进行建模。随着各要素的展开,这一相当宽泛的论断将变得显而易见,因为我们只是将符号应用于序贯决策问题的一般表述之上。

UMF的五个要素

UMF由以下要素组成:

  1. 状态变量$S_t$。
  2. 决策变量$x_t$。
  3. 外源信息过程$W_t$。
  4. 状态转移模型$S^M(S_t,x_t,W_{t+1})$。
  5. 目标函数。

我们对这些要素作如下详细说明:

状态变量——系统在时间$t$的状态$S_t$包含了从时间$t$起对我们的系统建模所必需且充分的全部信息。更具体地说,这些信息包括:

$S_t$中有三种类型的信息:

物理状态$R_t$可能是现金账户中的资金数额,而$I_t$可能是股票和债券市场的当前状态。如果我们在一个动态网络中出行,$R_t$可能是我们在网络中的位置,而$I_t$可能是我们对每条链路上出行时间的了解情况。如果我们制定了一个计划并希望对偏离计划的行为进行惩罚,那么该计划将通过$I_t$被包含在状态变量中。

状态变量通常不是显而易见的。它们是在建模过程中逐渐显现的,而不是你能够立即列出的东西。仅仅因为我们首先写出它,并不意味着你总能立即列出状态变量的所有元素。但最终,这就是你存储从时间$t$起对系统建模所需的所有信息的地方。

决策变量——不同的学术社区对决策使用不同的记号,比如工程学中用$a_t$表示(通常是离散的)动作,或用$u_t$表示(通常是连续的)控制。我们默认使用$x_t$,因为它被数学规划社区广泛采用。

决策变量有不同的类型:

我们注意到,存在由决策变量性质所决定的算法类别。

我们假设决策是通过策略做出的,如果我们用$x_t$作为决策,可以将该策略记为$X^\pi(S_t)$。我们假设决策$x_t = X^\pi(S_t)$在时间$t$是可行的,这意味着$x_t \in \Xcal_t$属于某个集合(或区域)$\Xcal_t$,该集合可能依赖于$S_t$。

我们让”$\pi$”携带关于函数类型$f\in\Fcal$(例如,具有特定解释变量的线性模型)以及任何可调参数$\theta \in \Theta^f$的信息。

外源信息——我们令$W_{t+1}$为在时间$t+1$首次变为已知的任何新信息(即在$t$和$t+1$之间),其中该信息的来源是我们系统之外的(这就是为什么称之为”外源的”)。在对特定变量建模时,我们用”帽子”符号来表示外源信息。因此,$\Dhat_{t+1}$可能是在$t$和$t+1$之间产生的需求,或者我们可以令$\phat_{t+1}$为$t$和$t+1$之间价格的变化。

外源信息过程可能是平稳的或非平稳的,可能是纯粹外源的,也可能依赖于状态(甚至可能依赖于行动)(如果我们决定抛售大量股票,可能会压低价格)。

我们令$\omega$表示一条样本路径$W_1, \ldots, W_T$,它代表每个$W_t$结果的一个序列。通常,我们会创建一个由离散样本组成的集合$\Omega$,其中每个样本代表我们$W_t$过程结果的一个特定序列,可以写作$W_1(\omega), \ldots, W_T(\omega)$。如果我们有20条样本路径,可以将$\omega$看作是1到20之间的一个数字,它使我们能够查找相应的样本路径。

转移函数——我们用以下方式表示转移函数

\[\begin{align} S_{t+1} = S^M(S_t,x_t,W_{t+1}), \label{eq:transition} \end{align}\]

其中$S^M(\cdot)$也被称为状态转移模型、系统模型、被控对象模型、被控对象方程、状态方程和传递函数等名称。

方程$\eqref{eq:transition}$是转移函数的经典形式,它给出了从状态$S_t$到状态$S_{t+1}$的方程。方程$\eqref{eq:inventoryexampleequation}$是我们简单库存示例中唯一的转移方程,而方程$\eqref{eq:introcomplexinventorytransition1}$–$\eqref{eq:introcomplexinventorytransition6}$则构成了我们更复杂示例的转移函数。

转移函数可能捕捉以下任一类型的更新:

转移函数可能是一组已知的方程,也可能是未知的,例如当我们描述人类行为或大气中CO2的演变时。当方程未知时,该问题通常被描述为”无模型的”或”数据驱动的”,这意味着我们只能观察一个变量的变化,而不是使用一个物理模型。方程$\eqref{eq:introcomplexinventorytransition6}$是无模型转移的一个示例,在该方程中我们”观测”成本$c_{t+1} = \chat_{t+1}$,而完全不知道我们是如何从$c_t$演化而来的。

转移函数可能是线性的、连续非线性的或阶跃函数。当状态$S_t$包含信念状态$B_t$时,转移函数就必须包含更新方程(我们将在本书后面加以说明)。

给定一个策略$X^\pi(S_t)$、一个外源过程$W_{t+1}$和一个转移函数,我们可以将状态、决策和信息的序列写作

\[(S_0, x_0, W_1, S_1, x_1, W_2, \ldots, x_{T-1}, W_T, S_T).\]

目标函数——书写目标函数的方式有多种。其中最常见的一种,我们将其作为默认方式,是在某个时域$t=0, \ldots, T$上最大化总期望贡献

\[\begin{align} \max_{\pi=(f,\theta)} F^\pi(S_0) = \E \left\{\sum_{t=0}^T C_t(S_t,X^\pi_t(S_t\vert \theta))\vert S_0\right\}, \label{eq:objectivecumulativereward} \end{align}\]

其中

\[\begin{align} S_{t+1} = S^M(S_t,X^\pi_t(S_t),W_{t+1}). \label{eq:basetransition} \end{align}\]

当我们同时拥有初始状态$S_0$的模型以及外源过程$W_1, W_2, \ldots$的模型时,该模型才算完全确定。我们将全部外源信息写作

\[\begin{align} (S_0, W_1, W_2, \ldots, W_T). \label{eq:basestochasticmodel} \end{align}\]

方程$\eqref{eq:objectivecumulativereward}$、$\eqref{eq:basetransition}$和$\eqref{eq:basestochasticmodel}$共同构成了一个序贯决策问题的模型。

接下来,为了简洁起见,我们将使用$\max_\pi$来表示对函数类型$f\in\Fcal$和可调参数$\theta\in\Theta^f$的搜索。

方程$\eqref{eq:objectivecumulativereward}$使用了一个期望$\E$,这意味着要对$W_1, \ldots, W_T$所有可能结果取平均值。这在计算上几乎从来都是不可行的。相反,设$\omega$表示序列$W_1, \ldots, W_T$的单个结果,我们可以将其写作$W_1(\omega), \ldots, W_T(\omega)$。假设我们能够创建该序列的$N$个可能结果,并令$\omega^n$表示我们如何对第$n^{th}$个序列进行索引。

如果我们沿着一条样本路径 $\omega$ 进行,那么我们可以使用

\[\begin{align} S_{t+1}(\omega) = S^M(S_t(\omega),X^\pi_t(S_t(\omega)),W_{t+1}(\omega)). \label{eq:basetransition2} \end{align}\]

将 $\eqref{eq:basetransition}$ 中的转移函数重新写出。

我们用 $\omega$ 对方程 $\eqref{eq:basetransition2}$ 中的每个变量进行索引,以表示我们正在沿着 $W_t$ 的单一样本路径的值进行计算。

现在我们可以用一个平均值来代替基于期望的目标函数,写作

\[\begin{align} \max_\pi \Fbar^\pi(S_0) = \frac{1}{N}\sum_{n=1}^N \sum_{t=0}^T C_t(S_t(\omega^n),X^\pi_t(S_t(\omega^n))). \label{eq:objectivecumulativerewardaverage} \end{align}\]

通常,我们只处理单一的样本路径,可能来自历史数据。在这种情况下,我们是利用这条单一样本路径来近似策略的表现,可以写作

\[\begin{align} \max_\pi \Fhat^\pi(\omega\vert S_0) = \sum_{t=0}^T C_t(S_t(\omega),X^\pi_t(S_t(\omega))). \label{eq:objectivecumulativerewardsample} \end{align}\]

任何时候我们用期望来书写目标函数,如 $\eqref{eq:objectivecumulativereward}$ 所示,请记住我们实际上应该使用像 $\eqref{eq:objectivecumulativerewardaverage}$ 那样的平均值,或者像 $\eqref{eq:objectivecumulativerewardsample}$ 那样的样本。

期望还可能需要反映初始状态 $S_0$ 中的不确定性,这可能是捕捉关于不确定预测的信念,或者关于患者疾病状态的不确定估计。在这种情况下,样本路径 $\omega$ 需要包括来自这些初始分布的样本。

在某些情境下,使用计数器 $n$ 而不是时间会更合理。在这种情况下,我们令 $S^n$ 为经过 $n$ 次观测后的状态(这些观测可能是实验、顾客到达,或算法的迭代)。我们将使用时间 $t$ 作为默认的索引。

初始状态变量 $S_0$

我们需要区分初始状态 $S_0$ 与 $t > 0$ 之后的状态 $S_t$:

无论我们使用的是 $F^\pi(S_0)$、$\Fbar^\pi(S_0)$ 还是 $\Fhat^\pi(\omega\vert S_0)$,我们都要明确写出策略表现对初始状态 $S_0$ 的依赖关系。虽然这一点应该是显而易见的,但却常常被忽视。初始状态包括如下要素:

需要注意的是,将永不改变的初始值与随时间演变的(无论是由于决策的直接结果,还是由于外源信息而演变)值分开会有所帮助。永不改变的值存储在 $S_0$ 中,但不在 $t > 0$ 时的 $S_t$ 中表示。这样做的原因是希望使 $S_t$ 尽可能保持紧凑。

假设我们的策略 $X^\pi(S_t\vert \theta)$ 具有可调参数。例如,我们可能正在管理一个库存系统,其中我们使用大家熟悉的”补货至某水平”策略(在库存文献中称为 $(s,S)$ 策略),其形式为

\[X^\pi(S_t\vert \theta) = \begin{cases} \theta^{max} - R_t & R_t < \theta^{min},\\ 0 & \text{otherwise.}\end{cases}\]

其中 $\theta = (\theta^{min},\theta^{max})$。为简单起见,我们可以假设当我们下订单时会立即到货(这是教科书中的标准假设,但在实践中从未成立),这使我们能够用以下方式写出我们物理状态 $R_t$(即在下达即时订单之前的库存量)的演变:

\[R_{t+1} = \max\{0,R_t + x_t - \Dhat_{t+1}\}\]

其中 $x_t = X^\pi(S_t\vert \theta)$,而 $\Dhat_{t+1}$ 是我们的产品在区间 $(t,t+1)$ 上的需求(这是我们的外源信息 $W_{t+1}$)。最后,令 $C(S_t,x_t,W_{t+1})$ 为我们在区间 $(t,t+1)$ 上的净利润(这暂时并不重要)。

现在设想我们拥有一个历史需求过程 $W_1, W_2, \ldots, W_t, \ldots, W_T$,这使我们能够对系统进行仿真。令 $\omega$ 表示这一历史需求序列(或任何外源信息)。我们可以用以下方式写出寻找最优订购参数集 $\theta$ 的问题:

\[\begin{align} \max_\theta \Fhat^\pi(\omega,\theta\vert S_0) = \sum_{t=0}^T C_t(S_t(\omega),X^\pi_t(S_t(\omega))), \label{eq:optimizingtheta} \end{align}\]

其中状态变量按以下方式演变

\[S_{t+1}(\omega) = S^M(S_t(\omega), X^\pi_t(S_t(\omega)), W_{t+1}(\omega)).\]

令 $\theta^\ast $ 为我们通过优化 $\eqref{eq:optimizingtheta}$ 所找到的 $\theta$ 的值。书写这一最优值的恰当方式是将其作为依赖于 $S_0$ 中信息的函数 $\theta^\ast (S_0)$(它也依赖于样本路径 $\omega$)。这有助于传达这样一个现实:如果我们改变问题的输入数据,即由 $S_0$ 表示的数据,那么这可能会影响我们策略参数 $\theta$ 的最佳值。事实上,我们甚至可能不得不改变策略的选择!

变体

我们的基本数学模型有两个重要变体:

\[\omega^n = (W^n_1, \ldots, W^n_t, \ldots, W^n_T).\]

如果我们正在迭代地搜索最优策略,我们可以用 $X^{\pi,n}(S_t)$ 来表示迭代 $n$ 中的策略,这样就产生了

\[S^n_0, x^n_0, W^n_1, \ldots, S^n_t, x^n_t, W^N_{t+1}, \ldots, S^N_T,\]

其中 $x^n_t = X^{\pi,n}(S^n_t\vert \theta)$。

\[\begin{align} \max_\pi \Fhat^\pi(S^\theta_0) & = \E_{\What} F(\theta^{\pi,N}, \What) \label{eq:objectivefinalreward1} \\ &\approx \frac{1}{M} \sum_{m=1}^M F(\theta^{\pi,N}, \What^m). \label{eq:objectivefinalreward2} \end{align}\]

简单来说,我们通过使用 $W^n$ 的观测值(这可能是随时间 $t$ 进行的整个仿真)对我们标记为 $\Theta^\pi(S^{\theta,N})$ 的学习策略进行 $N$ 次迭代仿真来评估其在 $\theta$ 情况下的表现。当我们得到参数 $\theta$ 的最终估计值,我们称之为 $\theta^{\pi,N}$ 时,我们通过一个独立的仿真来评估这个值的性能,在该仿真中我们固定 $\theta = \theta^{\pi,N}$,然后创建一组我们称为 $m=1, \ldots, M$ 的 $\What^m$ 的新随机观测值。

不确定性建模

对于许多复杂问题(供应链、能源系统和公共卫生仅是其中几例),识别和建模不同形式的不确定性可能是一项丰富而复杂的工作。我们将对可能出现的问题略作提示,但不会尝试对这一维度进行详尽的讨论。

不确定性通过两种机制传达给我们的模型:初始状态 $S_0$(我们会在其中对描述我们不完全了解的数量和参数的概率分布的参数进行建模),以及外源信息过程 $W_1, \ldots, W_T$。

初始状态中的不确定性

初始状态变量可能包含确定性参数,或动态变化的数量和参数的初始值。如果初始状态中只包含这些内容,那么它并未捕捉任何形式的不确定性。

有许多问题中,我们并不知道某些数量或参数,但可以通过一个概率分布的参数来表示我们已知的信息。一些例子包括:

这些是我们可以用来在某些输入中初始化含有不确定性的模型的若干方式。

初始的概率信念可能来自主观判断,也可能来自先前的观测或实验。

外源信息过程

不确定性进入我们模型的第二种方式是通过外源信息过程。变量 $W_t$ 包含直到时间段 $t$ 才为人所知的信息。这意味着我们必须在时间 $t$ 做出决策 $x_t$,而此时我们尚不知道 $W_{t+1}$ 的结果。

以下是在做出决策 $x_t$ 之后才被揭示的 $W_{t+1}$ 的一些示例:

在每种情况下,我们在做出决策之后所观察到的信息都会影响该决策的表现(以及原本哪个决策才是最优的)。

读者现在可能已经意识到,$W_{t+1}$ 通常是不同类型信息的集合。举例来说,设想我们正在治疗一位血糖偏高的患者。医生希望尝试不同的策略,从饮食和运动,到用于减肥的药物,再到专门针对血糖的药物。医生需要处理的信息来源可能包括:

这些都是各自独立的信息流。我们可以通过引入集合 $\Ical_t$(时间 $t$ 时的信息过程集合)来对这些进行建模(该集合可能会随着我们改变策略而变化,从而开启新的信息流)。现在我们可以使用 $W_{t+1,i}$ 来表达不同类型的信息,即来自信息源 $i\in\Ical_t$ 的信息实现,从而有 $W_{t+1} = (W_{t+1,i})_{i\in\Ical_t}$。

我们将继续使用 $W_{t+1}$ 来表示新到达的信息,但读者必须记住,在实际应用中,这通常会包括一整套信息来源,每种都有各自的行为特性。

状态/决策依赖过程

在许多应用中,信息 $W_{t+1}$ 依赖于当前状态 $S_t$ 和/或决策 $x_t$。一些例子包括:

正因如此,将外源信息表示为函数$W_{t+1}(S_t,x_t)$会很有帮助,这个外源信息函数给出了在区间$(t,t+1)$内到达的信息。

例如,设想我们正在大量买入或卖出某只股票,这可能会影响未来的价格。其动态过程可以写成

\[\begin{align} p_{t+1} = \theta^p_0 p_t + \theta^p_1 p_{t-1} + \theta^p_2 p_{t-2} + W_{t+1}(S_t,x_t). \label{eq:statedependentprice} \end{align}\]

这个价格过程的状态可以写成

\[S_t = (p_t, p_{t-1}, p_{t-2}).\]

由$W_{t+1}(S_t,x_t)$给出的价格随机变化,反映了我们的一种信念:价格变化可能取决于当前价格(如果价格已经很高,未来的变化很可能是负的),也取决于我们买入($x_t > 0$)或卖出($x_t < 0$)的数量。

当然,我们希望利用历史数据,尝试将$S_t$和$x_t$对未来价格的结构性影响,与真正的外源噪声区分开来。因此,我们可以提出这样一个模型

\[W_{t+1}(S_t,x_t) = \theta^x x_t + \varepsilon_{t+1},\]

其中我们可以假设

\[\varepsilon_{t+1} \sim N(0, \vert x_t\vert \sigma^2_t),\]

这个模型假设$\varepsilon_{t+1}$的均值为0,方差随$x_t$绝对值的增大而增大。那么信息$W_{t+1}(S_t,x_t)$的均值就是$\theta^x x_t$,如果我们是在买入股份($x_t > 0$),这个值为正;如果我们是在向市场卖出($x_t < 0$),则为负。

本书将继续使用$W_{t+1}$作为默认记号,但读者应当意识到,它可能依赖于当前状态和/或在给定状态下所做的决策。

不确定性的形态

识别信息的类型是理解不确定性的第一步。下一步是刻画不确定性的不同形态。以下总结了信息过程可能呈现行为方式中一些最重要的类型:

这些行为会对决策制定所选用的策略产生影响,这是我们接下来要讨论的主题。

不确定性被广泛认为是企业、组织乃至政府都必须为之规划的一个问题。人们常常忽略的一点是,建模不确定性的目的在于理解它是如何影响决策的。不确定性总是与未来到达的信息过程相关联,因此我们必须思考现在做出的决策会如何受到这一未来信息的影响。

设计策略

策略是做出决策的一种方法……任何方法都可以。

策略是利用状态变量中的信息来做出决策的函数。这听起来像是一个定义明确的问题;毕竟,机器学习界完全是围绕着寻找与训练数据集相匹配的函数这一挑战而建立起来的。然而,设计策略要丰富得多,这一点从活跃于该领域的众多学科的多样性中可见一斑。

图 1.2 展示了约15个不同领域的代表性书籍封面,这些领域都涉及不确定性下的序贯决策。它们使用了八种不同的记号体系,在建模方式上也采用了根本不同的方法。有些甚至把策略(涉及内嵌的优化问题)与目标函数相混淆。

随机优化不同领域代表性主要书籍的抽样展示。
图 1.2. 随机优化不同领域代表性主要书籍的抽样展示。

策略绩效指标

确定性优化的特征在于存在一个目标函数,用以判断某个决策是否优于另一个决策。而对于序贯决策问题,我们通常会有一个目标函数,用来评估策略的表现,就像我们在方程$\eqref{eq:objectivecumulativereward}$、$\eqref{eq:objectivecumulativerewardaverage}$和$\eqref{eq:objectivecumulativerewardsample}$中所做的那样。

然而在实践中,策略的选择是基于若干相互竞争的准则:

图1.2 中所展示的数学优化界可能会谈论最优策略,这意味着要对方程$\eqref{eq:objectivecumulativereward}$中的期望进行优化。然而,重要的是要关注上述所有这些特性。

四类策略

图1.2中的这些书籍展示了随时间做出决策的各种方式。事实证明,它们都可以划分为定义明确的策略类别。创建策略有两种基本策略方式,每一种又可以进一步划分为两类,从而形成四类策略:

策略搜索——即在各种做决策的方法(函数)中进行搜索,模拟它们的表现(如我们在方程$\eqref{eq:objectivecumulativereward}$中所做的那样),从而找出长期平均表现最佳的方法。这可能涉及在不同类别的方法之间进行搜索,也可能涉及对某个给定方法的可调参数进行搜索。这一思路开启了两类策略:

前瞻策略——我们可以通过在决策的贡献(或成本)之上,加上当前所做决策所导致的下游贡献(或成本)的近似值,并对二者之和进行优化,从而构建有效的策略。同样,我们可以将其进一步划分为两类策略:

\[\begin{align} V_t(S_t) = \max_{x_t} \big(C(S_t,x_t) + V_{t+1}(S_{t+1})\big). \label{eq:bellmangraph} \end{align}\]

方程$\eqref{eq:bellmangraph}$被称为贝尔曼方程。当它被用于在如图1.3所描绘的确定性网络中寻找最佳路径时,是相当容易直观理解的。

从节点1遍历到节点11的简单确定性图。
图 1.3. 从节点1遍历到节点11的简单确定性图。

在许多问题中,从状态$S_t$到$S_{t+1}$的转移涉及在时间$t$尚未知晓的随机信息。我们在第一个库存问题中见过一个简单的随机性例子,在第二个库存问题中则见过一个更复杂的例子。

对于这些更一般的问题,如果我们处在状态$S_t$,做出决策$x_t$,随后观察到新信息$W_{t+1}$(这在时间$t$是未知的),它将根据我们的转移函数把我们带到一个新的状态$S_{t+1}$

\[S_{t+1} = S^M(S_t,x_t,W_{t+1}).\]

这意味着在时间$t$,当我们必须选择$x_t$时,$W_{t+1}$是一个随机变量,这也就意味着$S_{t+1}$同样是一个随机变量。在这种情况下,我们必须在贝尔曼方程中插入一个期望,将方程$\eqref{eq:bellmangraph}$写成

\[\begin{align} V_t(S_t) = \max_{x_t} \big(C(S_t,x_t) + \E_{W_{t+1}} \left\{V_{t+1}(S_{t+1})\vert S_t,x_t\right\}\big). \label{eq:bellmanstochastic} \end{align}\]

这里我们插入了期望$\E_{W_{t+1}}\lbrace \cdot\rbrace $,它的字面含义就是对$W_{t+1}$的所有随机结果取平均。

$\eqref{eq:bellmanstochastic}$中随机版本的贝尔曼方程是极其一般化的。状态$S_t$不仅仅指图中的一个节点;它捕捉了与该问题相关的任何(以及所有)信息。困难在于,我们不再能够计算值函数$V_t(S_t)$,这反过来意味着我们将无法获得我们在方程$\eqref{eq:bellmangraph}$和$\eqref{eq:bellmanstochastic}$中假设已知的$V_{t+1}(S_{t+1})$。

研究界在尝试应用贝尔曼方程时所采用的策略,是借鉴机器学习领域,估计一个统计近似,我们将其称为$\Vbar_t(S_t)$。假设我们能够得出一个合理的近似$\Vbar_{t+1}(S_{t+1})$,我们就可以用下式来写出我们的策略(我们做出决策的方法)

\[\begin{align} X^\pi(S_t) = \argmax_{x_t\in\Xcal_t} \big(C(S_t,x_t) + \E_{W_{t+1}} \{\Vbar_{t+1}(S_{t+1})\vert S_t,x_t\}\big). \label{eq:introvbarpolicy} \end{align}\]

记号”$\argmax_x f(x)$”表示使函数$f(x)$取最大值的$x$的值。下标$\pi$携带的信息指明了函数$f$的结构,以及我们在近似$\Vbar_{t+1}(S_{t+1})$中所需要的任何可调参数$\theta$。

这类策略归属于诸如近似动态规划、以及最常见的强化学习这样的标题之下。虽然这是一个强大的思想,但它并不容易应用,其成效取决于我们创建出精确近似$\Vbar_{t+1}(S_{t+1})$的能力。

关于逼近值函数的方法,已有非常丰富的文献,但它并非万能药。本书将在若干地方阐述这一思想,但要提醒读者,这类策略相当难以使用。

我们用两个库存问题来说明我们的建模框架,并通过方程$\eqref{eq:introorderupto}$和$\eqref{eq:adjustedforecastpolicy}$提出了两种简单的策略(PFA的形式),但这样做只是为了给出一个具体的策略示例。尽管PFA在日常决策中被广泛使用,但这些都只是专门化的例子。

相比之下,我们要说明的是,我们刚才概述的四类策略(PFA、CFA、VFA和DLA)是通用的,也就是说,它们涵盖了我们可能用来求解任何序贯决策问题的任何方法。需要明确的是,这些是元类别。也就是说,即使我们认为某个问题适合归入某一特定类别,我们的工作也并未完成,因为我们仍然需要在该类别内设计出具体的策略。尽管如此,我们认为这四类策略为设计策略的过程提供了一份路线图。

策略的检验

要检验一个策略的价值,我们将使用方程$\eqref{eq:objectivecumulativerewardsample}$,该方程在信息过程$W_t$的单一样本路径上对策略进行模拟。在模拟策略时,最困难的部分通常是构建外源信息过程。

设$\omega$为一条样本路径,其中$W_1(\omega), \ldots, W_T(\omega)$表示某一特定的样本路径。表1.3展示了10条价格样本路径,索引从$\omega^1$到$\omega^{10}$。若我们选择$\omega^6$,则$W_7(\omega^6) = 44.16$。

$t=1$$t=2$$t=3$$t=4$$t=5$$t=6$$t=7$$t=8$
$\omega^n$$p_1$$p_2$$p_3$$p_4$$p_5$$p_6$$p_7$$p_8$
$\omega^1$45.0045.5347.0747.5647.8048.4346.9346.57
$\omega^2$45.0043.1542.5140.5141.5041.0039.1641.11
$\omega^3$45.0045.1645.3744.3045.3547.2347.3546.30
$\omega^4$45.0045.6746.1846.2245.6944.2443.7743.57
$\omega^5$45.0046.3246.1446.5344.8445.1744.9246.09
$\omega^6$45.0044.7043.0543.7742.6144.3244.1645.29
$\omega^7$45.0043.6743.1444.7843.1242.3641.6040.83
$\omega^8$45.0044.9844.5345.4246.4347.6747.6849.03
$\omega^9$45.0044.5745.9947.3845.5146.2746.0245.09
$\omega^{10}$45.0045.0146.7346.0847.4049.1449.0348.74

表1.3。 一组价格样本路径的示意,所有路径均从$45.00开始。

问题是:我们该如何生成如表1.3所示的一组观测样本?通常有三种策略:

如果$W_{t+1}$依赖于状态$S_t$和/或决策$x_t$,那么我们就必须设计出一种方法来体现这种依赖关系。构建数学模型使得在计算机中执行大量模拟成为可能,但生成信息过程的样本同样需要重现跨时间以及跨空间的相关性。关于不确定性建模的更深入讨论,我们建议读者参阅RLSO第10章。

下一步

本书接下来的五章将把我们的建模框架应用到五个不同的问题上:

这些章节中的每一章都将遵循我们上面用来描述两个库存问题时所采用的相同大纲。该大纲包括:

随后,我们将在第7章中回归到四类策略,讨论我们的通用建模框架,并利用第2至6章中的问题来说明不同的建模思路。

在这部分讨论之后,我们将回归到以举例教学为模式的章节,但所使用的问题会更加复杂。我们剩余的章节涵盖以下问题:

我们学到了什么?

习题

复习题

  1. 序贯决策问题数学模型的五个要素是什么?
  2. 对于$t > 0$,初始状态$S_0$中的变量与动态状态$S_t$中的变量有何区别?
  3. 决策与外源信息之间有何区别?
  4. 策略的两大类别是什么,它们之间有何不同?
  5. 比较简单库存问题与更复杂库存问题的状态变量。

问题求解题

  1. 就两个库存问题的策略如何应对与时间相关的行为进行比较。例如,我们的比萨店在周末的需求可能远高于工作日。请就使可调参数$\theta$随时间(或随星期几)变化,这一做法对改进解可能产生的价值发表评论。
  2. 对比一下你会如何针对以下两种情形,为库存问题调优参数$\theta$:
    1. 在模拟器中。
    2. 在实地环境中。
    讨论每种方法的优缺点。