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}\]
The bridge between the real world and the computer is a mathematical model.
图 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)一书中,这是一本以方法论为核心的研究生水平教材。我们会不时提及该书中的内容,供那些可能希望深入了解的读者参考,并鼓励技术背景较强的读者将 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多年前苏格拉底、亚里士多德和柏拉图的时代。此后,关于如何做出最优决策的数学理论也有大量文献,主要出现在20世纪50年代之后(此前也有一些重要的工作),包括数千篇论文和著作。这些文献似乎都忽略了一个基本问题:

什么是决策?

我们从这样一个观察出发:决策是一种信息形式,它会影响我们想要控制的某个”系统”的行为。这个系统隐含地包含一个或多个用于量化系统表现优劣的度量指标。然后,我们需要确定一个控制系统某方面运作的主体。

基于这一基础,有必要区分三类信息:

  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找到。这并不意味着我们实际上会构建一个包含所有这些复杂性的模型。因此,本书引入了一种称为交互矩阵的工具,由领域专家对指标进行优先排序,然后凭借经验判断,识别出对最重要指标影响最大的决策和不确定性。

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

建模过程

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

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

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

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

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

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

动态模型的精简呈现

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

\[(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$ 携带了关于函数结构的信息,我们用 $f$ 表示,它属于一组潜在函数 $\Fcal$,以及由函数结构所定义的任何可调参数 $\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$ 与 $t > 0$ 时刻的动态状态变量 $S_t$。初始状态变量 $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$ 个需求组成的序列,从而得到我们在第 6 步中用于估计策略价值所需的序列 $(\Dhat^n_1, \Dhat^n_2, \ldots, \Dhat^n_T)$(其中 $n=1, \ldots, N$)。

第 5 步. 设计策略 —— 接下来我们需要设计一种确定订单量的方法。库存问题中常用的一种策略被称为“补足订货”(order-up-to)策略,其形式如下

\[\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$ 是可行的,这意味着对于某个集合(或区域)$\Xcal_t$,$x_t \in \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}$ 则构成了我们更复杂示例中的转移函数。

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

转移函数可能是一组已知的方程,也可能是未知的,例如当我们描述人类行为或大气中二氧化碳的演化时。当方程未知时,问题通常被描述为”无模型的”或”数据驱动的”,这意味着我们只能观察到某个变量的变化,而无法使用物理模型。方程 $\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$,那么我们可以将 $\eqref{eq:basetransition}$ 中的转移函数重写为

\[\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:basetransition2}$ 中的每个变量都用 $\omega$ 进行索引,以表明我们正在遵循 $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$ 的整个模拟过程),模拟经过 $N$ 次迭代,来评估我们针对 $\theta$ 的学习策略(我们记为 $\Theta^\pi(S^{\theta,N})$)。当我们得到参数 $\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}).\]

这意味着,在我们必须选择 $x_t$ 的时间 $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. 在实际场景中。
    讨论每种方法的优缺点。