贝尔曼方程定义

问题描述 投票:0回答:1

我正试图理解Bellman方程,并面临着一些混乱的时刻。1)在不同的来源中,我遇到了Bellman方程的不同定义,有时它被定义为价值-状态函数

v(s) = R + y*V(s')

有时它被定义为动作状态函数

q(s,a) = r + max(q(s',a'))

这两个定义是否正确?原文中贝尔曼方程是如何介绍的?

dynamic-programming reinforcement-learning definition
1个回答
0
投票

贝尔曼方程给动态编程解提供了一个确定的形式,利用这个形式我们可以概括出优化问题的解,这些问题在本质上是递归的,并且遵循了以下的原则 最佳结构 属性。

最优子结构简单来说就是给定的问题可以分解成更小的子问题,这些子问题需要用更小的数据来解决同样的问题。如果可以计算出小问题的最优解,那么就意味着给定问题(大问题)也可以计算出来。

让我们把给定状态的问题解表示为 S 按价值 V(S), S 是状态或子问题。让我们来表示选择行动所产生的成本。a(i) 在国 SR. R 将是一个函数 f(S, a(i)),其中 a 是所有可以在状态上执行的可能动作的集合。S.

V(S) = max{ f(S, a(i)) + y * V(S') } 哪儿 max 是通过迭代所有可能的 i. y 是一个固定的常数,税子问题向大问题过渡的固定常数,对于大多数问题来说,都是如此 y = 1,所以你可以暂时忽略它。

所以基本上在任何给定的子问题上 S, V(S) 通过选择所有的行动组合,将给我们提供最优化的解决方案。a(i) 可以执行的动作和下一个将用该动作创建的状态。如果你的思维是递归的,并且习惯于这样的东西,那么很容易理解为什么上面的公式是正确的。

我建议解决动态编程问题,看看一些标准问题及其解决方案,了解这些问题是如何被分解成更小的类似问题并递归解决的。之后,上面的公式就会更有意义。另外,你会发现,你上面写的两个方程几乎是一样的,只是它们的写法有些不同。

下面是 是一个比较常见的DP问题及其解决方案的清单。

© www.soinside.com 2019 - 2024. All rights reserved.