如何在强化学习中泛化多个同时依赖的动作

人工智能 强化学习 组合学
2021-10-28 07:34:26

我正在尝试建立一个 RL 代理来为商业航班的付费座位定价。我应该在这里重申一下——我不是在谈论机票的价格——而是,我说的是如果你点击座位图来选择你在飞机上的位置(出口排、靠窗座位等)看到的价格. 一般设置是:

  1. 选择他们的航班(预订n人)后,客户将查看一个网页,其中包含可用座位类型及其价格可见。
  2. 他们从座位图中选择零个和n个座位,不同座位有各种不同的价格,以添加到他们的预订中。
  3. 第 2 步的收入被观察为奖励。

每个“剧集”都是一个航班的销售周期。无论客户是否购买了选定的座位,库存都会下降,因为他们仍有机票,因此将在出发时获得座位。我想即时更改价格,而不是在整个销售周期中固定一组最优价格。

我还没有决定一个通用的架构。我想考虑各种预订、航班和库存信息,所以我知道我将使用函数逼近(很可能是神经网络)来概括状态空间。

但是,我不太清楚如何设置我的行动空间。我想一个动作相当于一个向量,每个不同的座位类型(靠窗座位、出口排等)都有一个价格。例如,如果我有 8 种不同的座位类型,每个座位有 10 个不同的价格点,这给了我总共 10^8 种不同的动作,其中许多会非常相似。从某种意义上说,每个动作都由子动作的组合组成——为每种座位类型定价的动作。

此外,每个子操作(为一种座位类型定价)在一定程度上依赖于其他子行为,因为一种座位类型的价格可能会影响另一种座位类型的需求(并因此影响奖励贡献)。例如,如果您将靠窗座位设置为非常便宜的价格,人们就不太可能为其他座位类型花费正常金额。因此,我怀疑问题是否可以分解为一组子问题。

如果有任何研究来处理这样的问题,我很感兴趣。显然,我构建的任何代理都需要某种方式在某种程度上跨动作泛化,因为不可能收集数百万个动作的真实数据,即使只是针对一个状态。

在我看来,这归结为三个问题:

  1. 是否有可能让代理能够将一组动作(价格)作为一个单一的决策来处理?
  2. 是否有可能让这个代理以相对的方式理解动作?例如,一组潜在价格是 [10, 12, 20],用于中间座位、过道座位和靠窗座位。我能否让我的代理意识到那里存在自然排序,并且前两个定价行为彼此之间比第三个可能的行为更相似?
  3. 除此之外,是否可以从这组动作中进行概括 - 是否可以设置代理来理解一组价格 [10, 13, 20] 与第一组非常相似?

我还没有找到任何关于这方面的文献,尤其是与第二个问题有关的文献 - 任何帮助将不胜感激!

1个回答

如果您想将该问题视为一个完整的强化学习问题,我建议通过将每个子动作视为一个单独的决策点,一个单独的完整动作来尝试避免动作空间的组合爆炸。例如,如果您已经为特定客户选择了 4 个子操作,则可以尝试在进入第 5 个子操作时以某种方式将这些子操作包含在状态表示/输入中。通过在状态空间中包含已经选择的子操作,您的算法可以学会考虑某些座位类型的最佳价格将取决于已经为其他类型选择的价格。

我确实怀疑这样一个完整的强化学习公式仍然是一个难以学习的问题,需要大量的经验。无论如何简化它可能是值得考虑的,将其视为上下文 + 组合多臂老虎机问题。这样一来,您将无法了解评论中描述的对多个不同客户的长期影响,但您可能至少能够在经验较少的情况下学到一些效果很好的东西。最近,出现了一本关于 MAB 问题的有趣新书,可在此处免费获得。你会在那里找到许多关于上下文 MAB 的章节,以及关于组合 MAB 的一章(第 30 章)。

请注意,使用这些“组合”方法中的任何一种,您还可以尝试使用您选择子操作的顺序。例如,为座位类型 A 选择的子操作/价格点可能对其他座位类型的最佳剩余策略有重大影响,而座位类型 B 的子操作可能对其他座位类型没有影响. 然后,始终优先考虑为座位类型 A 选择子操作会很有用。您可以尝试通过跟踪观察到的回报中的(协)方差来识别这些类型的影响。


  1. 是否有可能让代理能够将一组动作(价格)作为一个单一的决策来处理?

我上面提出的解决方案并没有明确地做到这一点,它们通过采取多个顺序决策来规避这个问题。在 RL 中似乎确实有一些向量值动作的研究。例如,论文Clipped Action Policy Gradient在 3.2 小节中简要提到了向量值操作。我个人对 RL + 向量值操作不够熟悉,无法直接推荐哪些方法有效或无效,但如果这是您想要的方向,也许这至少可以帮助您找到更多相关文献喜欢追求。

  1. 是否有可能让这个代理以相对的方式理解动作?例如,一组潜在价格是 [10, 12, 20],用于中间座位、过道座位和靠窗座位。我能否让我的代理意识到那里存在自然排序,并且前两个定价行为彼此之间比第三个可能的行为更相似?
  2. 除此之外,是否可以从这组动作中进行概括 - 是否可以设置代理来理解一组价格 [10, 13, 20] 与第一组非常相似?

这种泛化应该再次自然地来自使用函数逼近和上述任何一种解决方案。