贝尔曼方程定义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贝尔曼方程定义相关的知识,希望对你有一定的参考价值。
我正试图理解Bellman方程,并面临着一些混乱的时刻。1)在不同的来源中,我遇到了Bellman方程的不同定义,有时它被定义为价值-状态函数
v(s) = R + y*V(s')
有时它被定义为动作状态函数
q(s,a) = r + max(q(s',a'))
这两个定义是否正确?原文中贝尔曼方程是如何介绍的?
贝尔曼方程给动态编程解提供了一个确定的形式,利用这个形式我们可以概括出优化问题的解,这些问题在本质上是递归的,并且遵循了以下的原则 最佳结构 属性。
最优子结构简单来说就是给定的问题可以分解成更小的子问题,这些子问题需要用更小的数据来解决同样的问题。如果可以计算出小问题的最优解,那么就意味着给定问题(大问题)也可以计算出来。
让我们把给定状态的问题解表示为 S
按价值 V(S)
, S
是状态或子问题。让我们来表示选择行动所产生的成本。a(i)
在国 S
做 R
. 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问题及其解决方案的清单。
以上是关于贝尔曼方程定义的主要内容,如果未能解决你的问题,请参考以下文章