第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}\]
理解方程 $\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 中的阐述,该书面向的是主要对在计算机上开发和实现模型感兴趣的技术受众。
相比之下,本书面向的是更广泛的受众,这些读者首先且最主要感兴趣的是学习如何思考序贯决策问题。本书采用”以例施教”的方式,重点传授建模过程,我们认为即便最终不建立计算机模型,这一过程本身也大有裨益。我们方法的核心在于建立一个数学模型,从而消除用日常语言描述问题时存在的歧义。对于有意开发计算机模型的读者而言,符号表示法是通往软件编写的垫脚石。然而,我们主要会使用数学符号来在描述问题时创造清晰性,即便读者从未打算编写一行代码。
本书的内容安排如下:
- 第 1 章对通用建模框架做了简要介绍,通过两个库存问题(一个简单的,一个稍微复杂一些的)进行说明,随后简要讨论了不确定性建模。接着介绍了涵盖所有决策制定方法的四类策略。
- 第 2–6 章各自描述一个具体的序贯决策问题,以”以例施教”的方式说明建模框架。选择这些应用案例是为了体现四类策略中的每一类。
- 第 7 章更详细地回归通用建模框架。利用第 2–6 章的示例提供背景,对四类策略以及不同类型的状态变量进行了更为细致的讨论。
- 第 8–14 章提供了更多示例,使用更复杂的场景来说明更高级的建模概念,既涵盖不确定性建模(尤其是第 8 章中关于电价的建模),也涵盖更丰富的策略集合。
应用章节(第 2–6 章和第 8–14 章)都遵循相同的大纲。它们可以按任意顺序阅读,但需要注意,第 2–6 章中的应用较为简单,是为了说明四类策略中的每一类而选定的。对特定建模主题(如状态变量、不确定性建模,或想了解策略的不同示例)感兴趣的读者,可以略读各章,直接跳到自己感兴趣的主题。
每章末尾都附有一系列习题,分为三大类:
- 复习题——这些是简单的问题,可用于巩固通过阅读本章获得的基本理解。
- 问题求解题——这些问题引入了需要运用问题求解技能的建模挑战。
- 编程题——大多数章节都有依托一组Python模块的编程习题。这些最初用Python 2编写的Python模块,得益于德国卡尔斯鲁厄大学Dennis Djanka教授的一次重大升级。新的库可以从tinyurl.com/sdagithub下载。其中一些问题需要对Python代码进行编程修改。
那么,什么是决策?
关于人们如何做决策的研究,历史悠久,可以追溯到2000多年前苏格拉底、亚里士多德和柏拉图的时代。此后,关于如何做出最优决策的数学理论也有大量文献,主要出现在20世纪50年代之后(此前也有一些重要的工作),包括数千篇论文和著作。这些文献似乎都忽略了一个基本问题:
什么是决策?
我们从这样一个观察出发:决策是一种信息形式,它会影响我们想要控制的某个”系统”的行为。这个系统隐含地包含一个或多个用于量化系统表现优劣的度量指标。然后,我们需要确定一个控制系统某方面运作的主体。
基于这一基础,有必要区分三类信息:
- 知识状态——这是我们目前所拥有的、与系统表现相关的信息。
- 我们所控制的、会改变知识状态的信息(这需要确定一个控制系统的主体)。
- 到达我们系统、改变知识状态但超出我们控制范围的信息。
我们将第2类信息称为决策。这为决策提供了一个正式的定义,借鉴自Bridging Decision Problems, Volume I: Framing the Problem:
定义(正式): 决策是一种内生可控的信息类别。
一个非正式的定义可能是:
定义(非正式): 决策是我们所控制的信息。
这些定义提供了一个起点,但我们从其中学到的东西并不多。更有意思的是识别决策的具体例子,这正是我们接下来要做的。
决策的类型
根据决策所处的场景以及我们可能用来确定最优决策的工具,我们识别出了10种基本决策类型。它们是:
1) 物理与财务决策——这些决策出现在对物理和财务资源的管理中,例如人员、设备、设施、产品、水、能源,以及现金或投资等财务资源。决策包括购买、出售和修改资源,其中”修改”可能意味着将资源从一个地点移动到另一个地点、维修设备、培训人员,或将各种原料组合起来制作蛋糕。
2) 复杂/战略决策——这些决策可能对系统产生多重改变(改变资源、参数、信念),并且通常涉及重大的不确定性来源。这些决策通常只被评估一次,但也可能存在等待并推迟决策的选项。
3) 信息获取/观测决策——这包括诸如在实验室进行实验、进行现场测试或计算机仿真之类的决策。它可能包括进行市场调研、雇用专家,或者向大语言模型提问。
4) 信息交流/共享决策——这类决策有两种形式:
- a) 信息传递——反映我们在文本、视频和/或音频中所表达的内容。
- b) 渠道与时机——涉及选择如何发送信息:文本/电子邮件、出版物(印刷版或在线版)、社交媒体,或广告渠道。这还需要选择发送的时机与频率。
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}$给出的约束条件组成。
这种经典建模框架的问题在于它所遗漏的内容:
- 它假设刻画该模型的所有数据(包含在变量$A$、$b$和$c$中)都是完全已知的。
- 大多数决策会随时间反复发生,然而这一点却没有被体现出来。
- 没有方式来表示流向系统的信息流。
- 作为一个副产品,该模型的最优解无法预见到那些在实际应用中会影响$x$表现的事件。
- 没有方式来表示风险,而这在许多应用中是一个重大问题。
- 它假设只有单一的决策者。
数学模型首先应该、也最重要的是,提供一条告诉我们如何思考问题的路径。遵循方程$\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),\]其中:
- $S_t$是状态变量,它捕捉了我们所需要的一切信息,以便:
- a) 在时间$t$做出决策。
- b) 计算时间$t$的绩效指标。
- c) 在未来任何时点计算(a)或(b)所需的其他任何信息。
最好将$S_t$理解为在时间$t$的信息状态,或更一般地,知识状态。
- $x_t$代表决策变量,它捕捉了我们所控制的要素,例如是否出售一套房子、通过一个网络的路径、某项治疗所选择的药物、出售一款产品的价格,或用于运送一批货物的卡车选择。
-
$W_{t+1}$是我们做出决策$x_t$之后到达的信息,它可能是一套房子的最终成交价格、通过一个网络的行程时间、患者对某种药物的反应、某产品在某一价格下的销量,以及在我们做出初始分配之后新调入的货运量。我们将$W_{t+1}$中的信息视为来自我们系统之外,这意味着它超出了我们的控制范围。因此,我们将其称为外源信息。
在许多情形下,最好将$W_{t+1}$看作是一个依赖于当前状态$S_t$和/或决策$x_t$的函数$W_{t+1}(S_t,x_t)$。我们将在下面更详细地讨论这一点。我们将使用$W_{t+1}$作为默认符号,但需要理解的是,它可能受到状态$S_t$或决策$x_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 展示了新冠疫苗分配模型中不同的不确定性来源(有关 12 类不确定性的介绍,请参见 RLSO,第 10 章)。
我们将回答这三个问题的过程称为问题的框定。
| 不确定性类型 | 描述 |
|---|---|
| 1) 观测误差 | 观察有症状的人群;将有症状人群分类为患有新冠的错误 |
| 2) 外源不确定性 | 新增病例、死亡病例的报告;重症监护病床的可用性;疫苗的实际生产量 |
| 3) 预后不确定性 | 住院情况;疫苗的未来表现;人群对疫苗的反应 |
| 4) 推断不确定性 | 感染率的估计;疫苗有效性的估计 |
| 5) 实验不确定性 | 临床试验中的药物表现;接种人数 |
| 6) 模型不确定性 | 疾病传播率;感染的地理传播 |
| 7) 转移不确定性 | 疫苗库存的增加/撤出 |
| 8) 控制不确定性 | 哪些人群接种了疫苗;疫苗分配 |
| 9) 实施不确定性 | 未能接种疫苗 |
| 10) 通讯错误 | 现场报告错误;未能通知何时接种疫苗 |
| 11) 目标不确定性 | 在应该给谁接种疫苗上的分歧 |
| 12) 环境不确定性 | 疫苗是否/何时会获批;疫苗在不同州、国家之间的分配 |
表 1.2。新冠疫情疫苗接种应对中出现的不同类型不确定性的示例。
步骤 4. 数学模型 —— 在这里,我们以步骤 2 中的前三个要素为基础,但现在我们必须建立一个由五个维度组成的数学模型,这五个维度适用于每一个序贯决策问题:
- 状态变量 $S_t$ —— 状态变量捕获了在时间 $t$ 你需要知道的一切信息,以便在时间 $t$ 做出决策、计算成本和约束,并在必要时模拟推演到时间 $t+1$。状态变量可以包括关于物理资源的信息(通过约束进入问题的库存或车辆位置)、其他信息(如通过目标函数进入问题的成本或价格),以及关于我们并不完全了解的数量和参数的信念(如对患者对药物反应的预测或估计)。
-
决策变量 $x_t$ —— 这些描述了我们将如何设计或控制我们的系统。决策必须满足我们写作 $x_t \in \Xcal$ 的约束条件,其中 $\Xcal$ 可以是一组离散选择,也可以是一组线性方程。决策将由策略决定,策略是我们指定为 $X^\pi(S_t)$ 的函数(或规则),它根据状态变量中的信息确定 $x_t$。策略可以非常简单(低买高卖),也可以相当复杂。
索引 $\pi$ 携带了关于用于做出决策的函数类型以及任何可调参数的信息。设 $f\in\Fcal$ 为该函数的结构,$\Fcal$ 为可能函数的集合,设 $\theta\in\Theta^f$ 为函数 $f$ 的任何可调参数。我们的策略随后将表示为 $\pi = (f,\theta)$。我们通常会将策略写作 $X^\pi(S_t\vert \theta)$,以表明其对可调参数的依赖性。
我们将在本章后面以及全书中详细回到这个话题。书中给出的每个示例都是经过精心选择,以帮助说明特定类型的策略。
- 外源信息 $W_{t+1}$ —— 这是在我们做出决策 $x_t$ 之后(但在我们决定 $x_{t+1}$ 之前)到达的新信息,例如设定价格后的销售量,或我们所选路径完成所需的时间。当我们在时间 $t$ 做出决策时,$W_{t+1}$ 中的信息是未知的,因此在选择 $x_t$ 时,我们将其视为随机变量。
- 转移函数 $S^M(S_t,x_t,W_{t+1})$ —— 这些是描述状态变量如何随时间演变的方程。对于许多实际问题,转移函数捕捉了问题的全部动态,可能相当复杂。在某些情况下,我们甚至不知道这些方程,只能依赖我们能够观测到的状态变量。我们使用转移函数将状态变量的演变 $S_t$ 写为
其中 $S^M(\cdot)$ 被称为状态(或系统)转移模型(因此上标中有 $M$)。转移函数描述了给定决策 $x_t$ 和外源信息 $W_{t+1}$ 时,状态变量的每个元素如何变化。在复杂问题中,实现转移函数可能需要数千行代码。
-
目标函数 —— 这捕捉了我们用来评估绩效的绩效指标,并为搜索策略提供了基础。我们用 $C(S_t,x_t)$ 表示决策 $x_t$ 的贡献(若为最大化)或成本(若为最小化),它可能依赖于 $S_t$ 中的信息。在某些情形下,将单期贡献函数写为 $C(S_t,x_t,W_{t+1})$ 更为自然,即在观测到 $W_{t+1}$ 之后,在时间区间 $(t,t+1)$ 结束时评估的贡献函数。例如,我们可能会下一份 $x_t$ 的订单,它会立即到达以满足 $W_{t+1}$ 中所包含的不确定需求。
我们的目标是找到最佳策略 $X^\pi(S_t)$,以优化某个指标,例如:
- 最大化在某个时域内贡献的期望总和。
- 最大化通过若干次实验或观测所学到的最终设计的期望绩效。
- 最小化与最终设计相关的风险。
我们书写目标函数最常用的方式是
其中”$\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. 不确定性模型 —— 这是我们对不同类型的不确定性进行建模的方式。将不确定性引入模型有两种方式:
- 通过初始状态 $S_0$,它可能为不确定参数(例如患者对药物的反应方式或市场对价格的反应方式)指定一个概率分布。
- 通过外源信息过程 $W_1, \ldots, W_T$。
我们有三种方法来对外源信息过程进行建模:
- 建立 $W_1, W_2, \ldots, W_T$ 的数学模型。
- 使用历史观测数据,如过去的价格、销售额或天气事件。
- 在实地运行系统,实时观察 $W_t$ 的发生。
步骤 6. 设计策略 —— 策略是函数,因此我们必须搜索最佳函数。(是的,策略是用来选择最佳决策的函数,但选择策略本身也是一个决策!)我们通过识别设计策略的两种核心策略来完成这一点:
- 在一族函数中进行搜索,找出随时间推移平均表现最优的那一个。
- 通过估计决策 $x_t$ 的即时成本或贡献,加上对未来成本或贡献的近似,然后找出能优化当前与未来成本或贡献之和的选择 $x_t$,从而构造出一个策略。Google 地图在决定左转还是右转时,是在通过网络中下一条链路所需的时间加上到达目的地所需的剩余时间上进行优化。一个库存决策则可能是在订单成本加上未来持有一定数量库存的估计价值上进行优化。
我们将更加明确地说明如何识别这些策略。后面有一节将介绍四大类策略,它们将涵盖任何一种做决策的方法(这些是元类)。
第 7 步. 评估策略 —— 找到最优策略意味着要对各种策略进行评估,以确定哪一个最优。评估策略有两种方式:
- 在计算机模拟器中测试该策略。这要求将状态转移模型 $S^M(S_t,x_t,W_{t+1})$ 中用于更新状态变量 $S_t$ 所需的所有方程都编程实现。这也意味着要能够生成 $W_{t+1}$ 的样本,这往往是模拟器中最微妙的部分。
- 观察该策略在实际现场中的运行情况。
模拟器可能十分复杂、难以构建,而且仍然受到建模近似的限制。正因如此,实践中遇到的绝大多数实际问题往往需要在现场进行测试,这既缓慢(模拟一天需要花费一天的时间),又要求承受实验结果带来的后果。
要让人对某个数学模型感到自如,唯一的办法就是用一个熟悉的例子来说明它。我们从一个我们在日常生活中都会遇到的普遍性问题开始:库存管理。
一些库存问题
我们将用一个经典库存问题的两个变体来说明我们的建模框架,该问题被广泛用作说明求解序贯决策问题的某些方法的应用案例。我们先从一个简单的库存示例入手,它体现了我们建模框架的核心要素,同时让我们可以暂且忽略本书后续将要探讨的许多复杂之处。
随后,我们将过渡到一个稍微复杂一些的库存问题,借此说明一些建模原则。在全书中,我们也将采用这种做法:先从一个问题的基本版本入手,然后引入一些扩展,以此暗示实际应用中可能出现的各类复杂情况。
一个简单的库存问题
我们每次去商店时都会遇到的最熟悉的序贯决策问题之一,就是库存问题。我们将用这个问题的一个简单版本来说明前面介绍的建模流程的六个步骤:
第 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)).\]我们将初始状态划分为三类变量:
- 资源状态 $R^{inv}_0$ 的初始值。
- 常数参数 $c$ 和 $p$ 的取值。
- 我们对需求的信念,由均值为 $\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$ 开始,它由常数参数以及随时间变化的量和参数的初始值组成。具体如下:
- 初始库存 —— 我们从初始库存 $R_0$ 开始。
- 初始购买成本 —— $c_0$。
- 价格 —— 我们假设以固定价格 $p$ 出售香肠。
- 初始预测 —— 我们假设首个预测 $f^D_{0,1}$ 是给定的,其中 $f^D_{0,1}$ 是在时刻 0 已知的、对时刻 1 需求的预测值。
- 需求标准差的初始估计值 —— $\sigmabar^D_0$。
- 预测标准差的初始估计值 —— $\sigmabar^f_0$。
这意味着我们的初始状态变量为
\[S_0 = (R_0,c_0, p, f^D_{0,1}, \sigmabar^D_0, \sigmabar^f_0).\]接下来,我们有随时间演化的信息,它们构成了我们的动态状态变量 $S_t$:
- 当前库存 $R^{inv}_t$ —— 时间区间 $(t,t+1)$ 开始时的库存。
- 购买成本 $c_t$ —— 这是在时刻 $t$ 购买香肠的成本,该成本在时刻 $t$ 提供给我们。
- 需求预测 $f^D_{t,t+1}$ —— 这是在已知时刻 $t$ 信息的条件下,对 $\Dhat_{t+1}$ 的预测。
- 需求标准差的当前估计值 —— $\sigmabar^D_t$。
- 预测标准差的当前估计值 —— $\sigmabar^f_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) 外源信息现在包括:
- 采购成本 $\chat_{t+1}$ —— 这是第 $t+1$ 天香肠的采购成本,由外部指定。
- 预测——每个时间段我们都会得到一个新的预测。设 $\varepsilon^f_{t+1}$ 为预测在时间 $t$ 与 $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由以下要素组成:
- 状态变量 $S_t$。
- 决策变量 $x_t$。
- 外源信息过程 $W_t$。
- 状态转移模型 $S^M(S_t,x_t,W_{t+1})$。
- 目标函数。
我们对这些要素进行更详细的描述如下:
状态变量——系统在时间 $t$ 的状态 $S_t$ 包含了从时间 $t$ 起对我们的系统进行建模所必需且充分的全部信息。更具体地说,这些信息包括:
- a) 在时间 $t$ 做出决策所需的信息。
- b) 在时间 $t$ 计算绩效指标所需的信息。
- c) 现在需要用来在未来计算(a)和(b)的任何信息。
$S_t$ 中的信息有三种类型:
- 物理状态 $R_t$,捕捉诸如库存、人员、可用机器、设施、水、药品、能源和(各种形式的)资金等物理量。$R_t$ 还将包括客户对产品或服务的请求。在许多应用中,$R_t$ 描述了正在被管理的资源,一个相当常见的错误是将”状态”等同于”物理状态”。
- 信息状态 $I_t$,其中包含正在使用的函数(当存在选择时)以及任何可调参数。$I_t$ 可能会指定我们如何预测需求,以及用于拟合预测的参数,此外还有控制系统演化的其他参数。
- 信念状态 $B_t$,其中包含对未完全已知的量和参数的估计或信念。因此,$B_t$ 可以捕捉正态分布的估计均值和方差(如上文我们的需求预测所示)。或者,它也可以是一个随时间演化的概率向量。
物理状态 $R_t$ 可能是现金账户中的资金数额,而 $I_t$ 可能是股票和债券市场的当前状态。如果我们正在动态网络上出行,$R_t$ 可能是我们在网络上的位置,而 $I_t$ 可能是我们对每条链路上行程时间的了解情况。如果我们规划了一条路径,随后希望对偏离计划的行为进行惩罚,那么该计划将通过 $I_t$ 被包含在状态变量中。
状态变量通常并不显而易见。它们是在建模过程中逐渐显现出来的,而不是你可以立即列出的东西。仅仅因为我们首先写出它,并不意味着你总能立刻列出状态变量的所有要素。但归根结底,这里是你存储从时间 $t$ 起对系统进行建模所需的全部信息的地方。
决策变量——不同的学术群体对决策使用不同的符号,例如工程学中用 $a_t$ 表示(通常是离散的)行动,或用 $u_t$ 表示(通常是连续的)控制。我们默认使用 $x_t$,因为它被数学规划界广泛使用。
决策变量有不同的类型:
- 二元的(例如用于建模是否出售资产,或用于不同网页设计的A/B测试)。
- 离散的(例如药物选择、要推广的产品)。
- 连续标量的(价格、温度、浓度)。
- 向量的(离散或连续的,例如血液供应在各医院间的分配)。
- 分类的(例如在产品广告中要突出哪些特征)。
我们注意到,存在由决策变量的性质所决定的算法类别。
我们假设决策是通过策略做出的,如果我们用 $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$:
- $S_0$ – 初始状态 $S_0$ 捕捉了:i) 永不改变的确定性参数;ii) 会发生变化(可能由于决策引起)的量或参数的初始值;以及 iii) 我们并不完全了解的量或参数的信念(这可能是概率分布的参数),例如我们对疫苗的反应或市场对价格的反应。这些信念可能保持静态,也可能随着我们从观测中学习而更新。
- $S_t$ – 这是我们在时间 $t$ 需要从历史中获取的所有信息,用于对系统从时间 $t$ 起进行建模。对于 $t > 0$,$S_t$ 只包含随时间变化的变量,这意味着在时间 $t$,我们可能还会使用 $S_0$ 中包含的静态信息。
无论我们使用 $F^\pi(S_0)$、$\Fbar^\pi(S_0)$ 还是 $\Fhat^\pi(\omega\vert S_0)$,我们都要写出策略表现对初始状态 $S_0$ 的显式依赖关系。虽然这一点应该是显而易见的,但却常常被忽视。初始状态包括如下要素:
- 物理或金融资源数量的初始值 $R_0$ – 这可能是初始库存、车辆的初始位置、可用的机器以及初始设施集合。它还包括任何静态值,比如运输网络、仓库的大小(不会改变)以及车队中的卡车数量。
- 参数的初始值,以及用于建模问题的任何函数 $I_0$ – 这可能是初始价格、患者体内的药物水平,以及用于预测或建模某人群疾病演变所选择的函数。
- 任意数量或参数的初始信念或估计 $B_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$ 的最佳取值。事实上,我们甚至可能不得不改变策略的选择!
变体
我们基本数学模型有两个重要的变体:
-
从时间 $t$ 到迭代 $n$ – 在有些问题场景中,使用计数器 $n$ 比使用时间 $t$ 更为自然。我们所做的不仅仅是将 $t$ 改为 $n$,因为我们看待随迭代变化的变量的方式,与随时间演化的方式不同。具体来说,我们将索引 $n$ 放在上标位置,例如 $S^n$、$x^n$ 和 $W^{n+1}$。
这样做的一个原因是,我们将时间 $x_1, x_2, \ldots, x_t, \ldots, x_T$ 上的一组变量视为一个向量 $x=(x_1, x_2, \ldots, x_t, \ldots, x_T)$,这在为确定性问题建模时很有用(我们可能会一次性对整个向量 $x$ 进行优化)。相比之下,我们将 $x^n$ 视为一个随时间演化的函数。
更实际地说,将 $n$ 放在上标位置使我们能够写出迭代式模拟。因此,我们可以用以下方式写出迭代 $n$ 中随时间变化的信息过程:
如果我们正在迭代地搜索最佳策略,我们可以用 $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)$。
-
优化最终奖励 – 一种常见的情形是我们在执行随机搜索,比如在寻找最佳策略时就会出现这种情况。评估算法的每次迭代可能需要对时间进行一次模拟,尽管情况并非总是如此。
现在假设我们的决策变量是参数 $\theta$,并且我们有一个算法 $\Theta^\pi(S^{\theta,n})$,其运作方式就像一个策略 $X^\pi(S_t\vert \theta)$,其中 $S^{\theta,n}$ 捕捉了算法在第 $n$ 次迭代时的”状态”。
搜索算法都是序贯决策问题,但与大多数随时间演化的序贯决策问题不同,我们希望运行 $N$ 次迭代,而且我们只关心最终的解。令 $\theta^{\pi,N}$ 为遵循”算法”(策略)$\pi$ 经过 $N$ 次迭代后 $\theta^n$ 的值。
值 $\theta^{\pi,N}$ 取决于我们信息过程 $W^1, \ldots, W^t, \ldots, W^N$ 的具体序列,但随后我们必须使用一组新的样本对其进行评估,我们将这组样本称为 $\What$。
我们使用最终奖励目标函数来评估算法的表现,写作
简单来说,我们通过使用对 $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$。
初始状态中的不确定性
初始状态变量可能包含确定性参数或动态变化的量与参数的初始值。如果初始状态中只包含这些内容,那么它就没有捕捉到任何形式的不确定性。
在许多问题中,我们并不知道某些量或参数,但可以通过概率分布的参数来表示我们已知的信息。一些例子如下:
- 患者对新药物的反应。
- 市场对价格变化的反应方式。
- 我们库存中有多少个可销售的生菜头(可能有不确定数量已经枯萎,无法再销售)。
- 之前从中国订购的一箱库存的到货时间。
- 存入共同基金的存款金额围绕均值 $\lambda$ 随机变化,但我们不知道 $\lambda$ 的值。
以上是我们可以用来在某些输入存在不确定性的情况下初始化模型的若干方式。
初始的概率信念可能来自主观判断,也可能来自以往的观测或实验。
外源信息过程
不确定性进入我们模型的第二种方式是通过外源信息过程。变量 $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个不同领域的书籍封面,这些领域都涉及不确定性下的序贯决策。它们使用了八种不同的记号体系,在建模方法的处理方式上也存在根本性的差异。有些还把策略(涉及内嵌的优化问题)与目标函数混为一谈。
策略性能度量
确定性优化的特征是有一个目标函数,用来判断一个决策是否优于另一个决策。对于序贯决策问题,我们通常会有一个目标函数,用来评估策略的表现,就像我们在方程 $\eqref{eq:objectivecumulativereward}$、$\eqref{eq:objectivecumulativerewardaverage}$ 和 $\eqref{eq:objectivecumulativerewardsample}$ 中所做的那样。
然而在实践中,策略的选择是基于若干相互竞争的标准:
- 解的质量——我们通常关注的是在某段时期内的表现(例如成本、利润、健康结果),如方程 $\eqref{eq:objectivecumulativerewardsample}$ 中目标函数的抽样版本所表达的那样。由于这是随机的,我们必须同时考虑平均表现和最坏情况下的表现。
- 计算需求——在实际运行环境中,运行时间至关重要。与目标函数一样,计算某个策略所需的时间也是随机的,因此我们需要考虑平均执行时间和最坏情况下的执行时间。
- 透明度——将某个决策追溯回可能存在误差的输入数据的难易程度。
- 灵活性/适应性——现实世界的问题可能很复杂,我们常常需要适应复杂的情况。
- 方法复杂度——例如,如果某项策略是由内部分析团队来实施的,他们就必须考虑该方法能够真正奏效的可能性。
- 数据需求——不同的策略有不同的数据需求。
图 1.2 中所展示的数学优化各学科群体可能会谈论最优策略,这意味着要对方程 $\eqref{eq:objectivecumulativereward}$ 中的期望值进行优化。然而,重要的是要关注上述所有这些特性。
四类策略
图 1.2 中的这些书籍展示了随时间做出决策的多种方式。事实证明,它们都可以划分为若干明确定义的策略类别。创建策略有两种基本策略,每一种又可以进一步细分为两个类别,从而形成四类策略:
策略搜索——即在各种决策方法(函数)中进行搜索,通过模拟其表现(如我们在方程 $\eqref{eq:objectivecumulativereward}$ 中所做的那样),找出长期平均表现最优的方法。这可能涉及在不同的方法类别中进行搜索,也可能涉及为给定方法搜索任何可调参数。这一思路开辟出两类策略:
- 1)策略函数近似(PFAs)——这些是关于状态的解析函数,直接给出一个行动。方程 $\eqref{eq:introorderupto}$ 中的补货策略(order-up-to policy)就是一个很好的例子,方程 $\eqref{eq:adjustedforecastpolicy}$ 中我们使用调整后预测值的策略也是如此。
- 2)成本函数近似(CFAs)——这类策略涉及求解一个优化问题,该问题通常是对原始问题的简化,并引入一些参数以帮助策略在长期内表现得更好。这是一个特别强大的思想,在业界被广泛使用。本书后面会有若干关于CFA的示例(从第4章开始,学习糖尿病的最佳用药方案)。
前瞻策略——我们可以通过对某个决策的贡献(或成本),加上对当前所做决策所引发的下游贡献(或成本)的近似值进行优化,来构建有效的策略。同样,我们可以将其再细分为两类:
- 3)值函数近似(VFAs)——设想我们正在图 1.3 所示的一个网络中穿行,希望找到一条从节点1到节点11的路径。现在设想我们位于节点 $S_t = i = 2$,其中 $t$ 记录了我们已经经过的链路数量。设 $V_{t+1}(S_{t+1})$ 为从节点 $S_{t+1}$(例如节点4或5)到节点11的路径的值(假设我们的目标是最大化;先不必担心我们是如何得到 $V_{t+1}(S_{t+1})$ 的)。设决策 $x_t$ 为我们从节点 $S_t = i$ 出发所经过的链路。那么处于节点 $S_t$ 的值将由下式给出
方程 $\eqref{eq:bellmangraph}$ 被称为贝尔曼方程。当它被用来在如图 1.3 所示的确定性网络中寻找最佳路径时,是相当容易理解的。
在许多问题中,从状态 $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})$。
关于逼近值函数的方法,已有非常丰富的文献,但这并非万灵药。本书将在若干地方对这一思想加以说明,但要提醒读者,这一类策略是相当难以使用的。
-
4)直接前瞻近似(DLAs) —— 有许多问题,我们根本无法利用前三类中的任何一类来开发有效的策略,此时我们不得不转向直接前瞻近似。稍后我们将以完整的数学形式写出这一内容,但目前,我们先将DLA描述为:在对某个(通常是近似的)延伸至某规划时域的模型进行优化的同时,做出当前的决策。
一种常见的DLA是构建一个确定性的近似模型。这正是我们在使用导航系统时所做的——假设我们已知网络中每条链路上的行驶时间,从而找出到目的地的最短路径。一般而言,求解一个精确的关于未来的随机模型几乎总是不可能的,因此我们将研究逼近该问题的不同策略。
我们利用两个库存问题来说明我们的建模框架,并用方程$\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.00 | 45.53 | 47.07 | 47.56 | 47.80 | 48.43 | 46.93 | 46.57 |
| $\omega^2$ | 45.00 | 43.15 | 42.51 | 40.51 | 41.50 | 41.00 | 39.16 | 41.11 |
| $\omega^3$ | 45.00 | 45.16 | 45.37 | 44.30 | 45.35 | 47.23 | 47.35 | 46.30 |
| $\omega^4$ | 45.00 | 45.67 | 46.18 | 46.22 | 45.69 | 44.24 | 43.77 | 43.57 |
| $\omega^5$ | 45.00 | 46.32 | 46.14 | 46.53 | 44.84 | 45.17 | 44.92 | 46.09 |
| $\omega^6$ | 45.00 | 44.70 | 43.05 | 43.77 | 42.61 | 44.32 | 44.16 | 45.29 |
| $\omega^7$ | 45.00 | 43.67 | 43.14 | 44.78 | 43.12 | 42.36 | 41.60 | 40.83 |
| $\omega^8$ | 45.00 | 44.98 | 44.53 | 45.42 | 46.43 | 47.67 | 47.68 | 49.03 |
| $\omega^9$ | 45.00 | 44.57 | 45.99 | 47.38 | 45.51 | 46.27 | 46.02 | 45.09 |
| $\omega^{10}$ | 45.00 | 45.01 | 46.73 | 46.08 | 47.40 | 49.14 | 49.03 | 48.74 |
表1.3. 一组均从$45.00开始的价格样本路径示例。
问题在于:我们如何创建像表1.3所示的观测样本?通常有三种策略:
- 从历史数据中创建样本。由于在任一时间点只有一个观测结果,我们可以通过组合来自不同时间段的观测值来创建多条样本路径。我们可能会挑选不同年份的价格、不同月份的需求,或不同日期观测到的行驶时间。当外源信息依赖于状态$S_t$或决策$x_t$时,这种方法就不适用了。
- 从数学模型中进行仿真。这种方法的优势在于能够生成大量样本,从而获得关于策略表现的统计上可靠的估计。这些模型可以非常复杂精细,但也很容易构建出(即使是相当精细的)无法复现真实数据行为的模型。最大的挑战在于捕捉相关性,无论是随时间变化的相关性,还是样本之间的相关性(例如不同产品的需求、不同股票的价格,或不同地点的风速)。
- 我们可以在实际场景中检验某个想法,利用实际发生的观测数据。这样做的优势是我们使用的是真实数据(历史未必等同于未来)。缺点是,观测一天的新数据需要花费一天时间(而我们可能需要远不止一天的观测数据)。
如果$W_{t+1}$依赖于状态$S_t$和/或决策$x_t$,那么我们必须设计一种方法来体现这种依赖关系。构建数学模型使得在计算机中进行大量仿真成为可能,但创建信息过程的样本同样需要重现跨时间以及跨空间的相关性。关于不确定性建模更深入的讨论,请读者参阅RLSO第10章。
后续步骤
本书接下来的五章将把我们的建模框架应用于五个不同的问题:
这些章节中的每一章都将遵循与上文描述两个库存问题时相同的提纲。该提纲包括:
- 叙述——对问题的通俗英语描述。
- 通用模型——该模型将按照我们的格式,描述序贯决策问题的五个要素:状态变量、决策变量、外源信息变量、转移函数和目标函数。
- 不确定性模型——在这里,我们将为问题中的任何不确定性提供一个可能的模型。
- 策略设计——我们将为决策的制定提出可能的策略。我们选择这些问题的方式,使得这五个应用场景能够带我们领略全部四类策略。目前,我们先让读者自行尝试辨认我们在每种情形下选用的是四类中的哪一类。
- 扩展——最后,我们可能会对基本问题提出一个或多个可能的扩展,这些扩展可能需要改变策略。
随后,我们将在第7章中回到这四类策略,讨论我们通用的建模框架,并借助第2至6章中的问题来说明不同的建模思路。
在此讨论之后,我们将回到以案例教学为模式的章节,但会使用更为复杂的问题。我们余下的章节涵盖以下问题:
- 第8章 —— 储能问题I
- 第9章 —— 储能问题II
- 第10章 —— 供应链管理I:双主体报童问题
- 第11章 —— 供应链管理II:啤酒游戏
- 第12章 —— 广告点击优化
- 第13章 —— 血液管理问题
- 第14章 —— 临床试验优化
我们学到了什么?
- 首先,我们了解了什么是决策!
- 我们提出了一个通用模型,称为通用建模框架,适用于任何序贯决策问题。
- 我们首先利用一个经典的库存问题来说明该模型,其中系统的状态就是库存量。
- 随后,我们转向了一个稍微复杂一些的库存问题,其中状态变量包括库存的资源状态$R_t$、以价格$p_t$形式呈现的信息状态变量,以及关于即将到来的需求$\Dhat_{t+1}$的信念状态,其形式为估计的均值和方差。
- 我们学习了如何为可能来自多个不同来源的外源信息流建模。外源信息被表示为一个函数,该函数可能依赖于状态和/或决策。
- 我们说明了一类简单策略——策略函数近似(简称PFA)的两种形式。
- 我们了解到,策略的评估方式取决于具体情境以及决策的使用方式,因而存在多种不同的评估方法。
- 最后,我们简要概述了四类策略。这四类策略的示例将在第2至6章中给出,届时我们会在第7章暂停,对这些策略进行更深入的讨论,为第8至14章中更复杂的问题铺垫基础。
习题
复习题
- 序贯决策问题数学模型的五个要素是什么?
- 对于$t > 0$而言,初始状态$S_0$与动态状态$S_t$中的变量有何区别?
- 决策与外源信息之间有何区别?
- 策略的两大主要类别是什么?它们之间有何不同?
- 比较简单库存问题与更复杂库存问题的状态变量。
问题求解题
- 比较这两个库存问题的策略在处理与时间相关的行为方面的差异。例如,我们的比萨店在周末的需求可能远高于工作日。请就将可调参数$\theta$设为随时间变化(或随星期几变化)这一做法,评论其在提升求解质量方面可能带来的价值。
- 请对比在以下两种情形下,你会如何调优库存问题中的参数$\theta$:
- 在仿真器中。
- 在实际场景中。