通过Bellman算子理解动态规划
文章目录
- 前言
- MDP上Bellman方程的收敛性
- Value Functions as Vectors
- 贝尔曼算子Bπ,B∗\bf{B}_{\pi},\bf{B}_{*}Bπ,B∗
- Contraction and Monotonicity of Operators
- 求解
- Policy Iteration
- Policy Evaluation
- Policy Improvement
- Value Iteration
- Greedy Policy from Optimal VF is an Optimal Policy
前言
贝尔曼方程和算子算是RL的基础了,偶然间看到有人总结这个slides的内容,但其实不易懂,排版也看不习惯,我觉得还是要自己整理一下。
主要针对有模型场景,相关资料在末尾有引用。
MDP上Bellman方程的收敛性
Value Functions as Vectors
首先将值函数表示为向量。
状态空间SSS有nnn个状态:{s1,⋯,sn}\{s_1,\cdots,s_n\}{s1,⋯,sn};动作空间AAA有mmm个动作:{a1,⋯,am}\{a_1,\cdots,a_m\}{a1,⋯,am}。这个阐述也能很容易扩展到连续状态/动作空间。
定义随机策略π(a∣s)\pi(a|s)π(a∣s),确定性策略为π(s)=a\pi(s)=aπ(s)=a。
考虑一个nnn维空间Rn\mathbb{R}^nRn,每一维对应SSS中的一个状态。将值函数(VF)v:S→R\textbf{v}:S\rightarrow\mathbb{R}v:S→R当做这个空间的一个向量,坐标为:[v(s1),⋯,v(sn)][\textbf{v}(s_1),\cdots,\textbf{v}(s_n)][v(s1),⋯,v(sn)]。
策略π\piπ的值函数记做vπ:S→R\textbf{v}_{\pi}:S\rightarrow\mathbb{R}vπ:S→R,最优值函数记做v∗:S→R\textbf{v}_{*}:S\rightarrow\mathbb{R}v∗:S→R,满足:
v∗(s)=maxπvπ(s)\textbf{v}_{*}(s)=\max_{\pi}\textbf{v}_{\pi}(s)v∗(s)=πmaxvπ(s)
Rsa\mathcal{R}_s^aRsa记做状态sss执行动作aaa的期望奖赏,Ps,s′a\mathcal{P}_{s,s'}^aPs,s′a记做状态sss执行动作aaa转移到s′s's′的概率。这两个与环境有关。
定义策略π\piπ下状态的期望奖赏Rπ(s)=∑a∈Aπ(a∣s)Rsa\bf{R}_{\pi}(s)=\sum_{a\in A}\pi(a|s)\mathcal{R}_s^aRπ(s)=∑a∈Aπ(a∣s)Rsa,Rπ\bf{R}_{\pi}Rπ是向量[Rπ(s1),⋯,Rπ(sn)][\bf{R}_{\pi}(s_1),\cdots,\bf{R}_{\pi}(s_n)][Rπ(s1),⋯,Rπ(sn)]。
定义策略π\piπ下转移概率Pπ(s,s′)=∑a∈Aπ(a∣s)Ps,s′a\bf{P}_{\pi}(s,s')=\sum_{a\in A}\pi(a|s)\mathcal{P}_{s,s'}^aPπ(s,s′)=∑a∈Aπ(a∣s)Ps,s′a,Pπ\bf{P}_{\pi}Pπ是矩阵[Pπ(si,sj)][\bf{P}_{\pi}(s_i,s_j)][Pπ(si,sj)],1≤i,j≤n1\leq i,j\leq n1≤i,j≤n。
上面这两个与策略有关。
γ\gammaγ是MDP的折扣因子。
贝尔曼算子Bπ,B∗\bf{B}_{\pi},\bf{B}_{*}Bπ,B∗
定义将一个VF向量转换为另一个VF向量的算子。
贝尔曼期望算子Bπ\bf{B}_{\pi}Bπ:Bπv=Rπ+γPπv\bf{B}_{\pi}\bf{v}=\bf{R}_{\pi}+\gamma\bf{P}_{\pi}\bf{v}Bπv=Rπ+γPπv 是一个线性算子,拥有不动点vπ\bf{v}_{\pi}vπ满足Bπvπ=vπ\bf{B}_{\pi}\bf{v}_{\pi}=\bf{v}_{\pi}Bπvπ=vπ。
贝尔曼最优算子(B∗v)(s)=maxa(Rsa+γ∑s′∈SPs,s′av(s′))(\bf{B}_*\bf{v})(s)=\max_{a}(\mathcal{R}_s^a+\gamma\sum_{s'\in S}\mathcal{P}_{s,s'}^a\bf{v}(s'))(B∗v)(s)=maxa(Rsa+γ∑s′∈SPs,s′av(s′)) 是一个非线性算子,拥有不动点v∗\bf{v}_{*}v∗满足B∗v∗=v∗\bf{B}_{*}\bf{v}_{*}=\bf{v}_{*}B∗v∗=v∗。
定义一个函数GGG将v\bf{v}v映射为确定性贪心策略G(v)G(\bf{v})G(v)形式为:
G(v)(s)=arg maxa{Rsa+γ∑s′∈SPs,s′av(s′)}G(\bf{v})(s)=\argmax_a\{\mathcal{R}_s^a+\gamma\sum_{s'\in S}\mathcal{P}_{s,s'}^a{\bf{v}}(s')\}G(v)(s)=aargmax{Rsa+γs′∈S∑Ps,s′av(s′)}
对于任意v\bf{v}v,BG(v)v=B∗v\bf{B}_{G(\bf{v})}\bf{v}=\bf{B}_*\bf{v}BG(v)v=B∗v
Contraction and Monotonicity of Operators
首先对于有限奖赏的有限MDP,所有值函数都是实数域上的,值函数之间通过L∞L_{\infty}L∞度量,对于任意两个值函数度量:∥v1−v2∥∞=maxs∈S∣v1(s)−v2(s)∣\|{\bf{v}}_1-{\bf{v}}_2\|_{\infty}=\underset{s\in S}{\max}\ |{\bf{v}}_1(s)-{\bf{v}}_2(s)|∥v1−v2∥∞=s∈Smax ∣v1(s)−v2(s)∣,即使用两个值函数相差最大的状态的值作为两个值函数的度量。
这里已知度量空间(R,L∞)(R, L_{\infty})(R,L∞)是完备的,具体证明可参考:https://towardsdatascience.com/mathematical-analysis-of-reinforcement-learning-bellman-equation-ac9f0954e19f。
Bπ,B∗\bf{B}_{\pi},\bf{B}_*Bπ,B∗都是(R,L∞)(R, L_{\infty})(R,L∞)上的收缩映射,即:
对于任意两个v1,v2\bf{v}_1,\bf{v}_2v1,v2,满足:
∥Bπv1−Bπv2∥∞≤γ∥v1−v2∥∞\|\bf{B}_{\pi}\bf{v}_1-\bf{B}_{\pi}\bf{v}_2\|_{\infty}\leq\gamma \|\bf{v}_1-\bf{v}_2\|_{\infty}∥Bπv1−Bπv2∥∞≤γ∥v1−v2∥∞
∥B∗v1−B∗v2∥∞≤γ∥v1−v2∥∞\|\bf{B}_*\bf{v}_1-\bf{B}_*\bf{v}_2\|_{\infty}\leq\gamma \|\bf{v}_1-\bf{v}_2\|_{\infty}∥B∗v1−B∗v2∥∞≤γ∥v1−v2∥∞
首先证明Bπ\bf{B}_{\pi}Bπ:
∥Bπv1−Bπv2∥∞=∥Rπ+γPπv1−(Rπ+γPπv2)∥∞=∥γPπv1−γPπv2∥∞=γ∥Pπ(v1−v2)∥∞=γmaxiPπ∣v1−v2∣i\begin{aligned} \|\bf{B}_{\pi}\bf{v}_1-\bf{B}_{\pi}\bf{v}_2\|_{\infty} & =\|\bf{R}_{\pi}+\gamma\bf{P}_{\pi}\bf{v}_1-(\bf{R}_{\pi}+\gamma\bf{P}_{\pi}\bf{v}_2)\|_{\infty} \\ & = \|\gamma\bf{P}_{\pi}\bf{v}_1-\gamma\bf{P}_{\pi}\bf{v}_2\|_{\infty} \\ & =\gamma\|\bf{P}_{\pi}(\bf{v}_1-\bf{v}_2)\|_{\infty} \\ & =\gamma\underset{i}{\max}\ {\bf{P}}_{\pi}|{\bf{v}}_1-{\bf{v}}_2|_{i} \end{aligned} ∥Bπv1−Bπv2∥∞=∥Rπ+γPπv1−(Rπ+γPπv2)∥∞=∥γPπv1−γPπv2∥∞=γ∥Pπ(v1−v2)∥∞=γimax Pπ∣v1−v2∣i
Pπ\bf{P}_{\pi}Pπ作为策略π\piπ下每个状态之间的转移概率矩阵,每一位都不大于1,因此可得:
γmaxiPπ(v1−v2)i≤γmaxi(v1−v2)i=γ∥v1−v2∥∞\begin{aligned} \gamma\underset{i}{\max}\ {\bf{P}}_{\pi}({\bf{v}}_1-{\bf{v}}_2)_{i} & \leq\gamma\underset{i}{\max}\ ({\bf{v}}_1-{\bf{v}}_2)_{i}\\ & =\gamma\|\bf{v}_1-\bf{v}_2\|_{\infty} \end{aligned} γimax Pπ(v1−v2)i≤γimax (v1−v2)i=γ∥v1−v2∥∞
所以∥Bπv1−Bπv2∥∞≤γ∥v1−v2∥∞\|\bf{B}_{\pi}\bf{v}_1-\bf{B}_{\pi}\bf{v}_2\|_{\infty}\leq\gamma \|\bf{v}_1-\bf{v}_2\|_{\infty}∥Bπv1−Bπv2∥∞≤γ∥v1−v2∥∞。
然后证明B∗\bf{B}_*B∗,首先将B∗v\bf{B}_*\bf{v}B∗v关于sss展开:
B∗v={maxa(Rs1a+γ∑s′∈SPs1,s′av(s′)),maxa(Rs2a+γ∑s′∈SPs2,s′av(s′)),⋯,maxa(Rsna+γ∑s′∈SPsn,s′av(s′))}\begin{aligned} \bf{B}_*\bf{v}=\{ &\max_{a}(\mathcal{R}_{s_1}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}(s')),\\ &\max_{a}(\mathcal{R}_{s_2}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_2,s'}^a\bf{v}(s')),\\ &\cdots,\\ & \max_{a}(\mathcal{R}_{s_n}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_n,s'}^a\bf{v}(s'))\} \end{aligned} B∗v={amax(Rs1a+γs′∈S∑Ps1,s′av(s′)),amax(Rs2a+γs′∈S∑Ps2,s′av(s′)),⋯,amax(Rsna+γs′∈S∑Psn,s′av(s′))}
然后可得:
B∗v1−B∗v2={maxa(Rs1a+γ∑s′∈SPs1,s′av1(s′))−maxa(Rs1a+γ∑s′∈SPs1,s′av2(s′)),maxa(Rs2a+γ∑s′∈SPs2,s′av1(s′))−maxa(Rs2a+γ∑s′∈SPs2,s′av2(s′)),⋯,maxa(Rsna+γ∑s′∈SPsn,s′av1(s′))−maxa(Rsna+γ∑s′∈SPsn,s′av2(s′))}\begin{aligned} \bf{B}_*\bf{v}_1-\bf{B}_*\bf{v}_2=\{ &\max_{a}(\mathcal{R}_{s_1}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}_1(s'))-\max_{a}(\mathcal{R}_{s_1}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}_2(s')),\\ &\max_{a}(\mathcal{R}_{s_2}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_2,s'}^a\bf{v}_1(s'))-\max_{a}(\mathcal{R}_{s_2}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_2,s'}^a\bf{v}_2(s')),\\ &\cdots,\\ & \max_{a}(\mathcal{R}_{s_n}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_n,s'}^a\bf{v}_1(s'))-\max_{a}(\mathcal{R}_{s_n}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_n,s'}^a\bf{v}_2(s'))\} \end{aligned} B∗v1−B∗v2={amax(Rs1a+γs′∈S∑Ps1,s′av1(s′))−amax(Rs1a+γs′∈S∑Ps1,s′av2(s′)),amax(Rs2a+γs′∈S∑Ps2,s′av1(s′))−amax(Rs2a+γs′∈S∑Ps2,s′av2(s′)),⋯,amax(Rsna+γs′∈S∑Psn,s′av1(s′))−amax(Rsna+γs′∈S∑Psn,s′av2(s′))}
这里虽然没有区分动作符号,但B∗v1(s)\bf{B}_*\bf{v}_1(s)B∗v1(s)与B∗v2(s)\bf{B}_*\bf{v}_2(s)B∗v2(s)的最优动作不一定一样。对于其中的每一个元素,我们可得:
∥B∗v1(s1)−B∗v2(s1)∥∞=∥maxa(Rs1a+γ∑s′∈SPs1,s′av1(s′))−maxa(Rs1a+γ∑s′∈SPs1,s′av2(s′))∥∞≤∥maxa(γ∑s′∈SPs1,s′av1(s′)−γ∑s′∈SPs1,s′av2(s′))∥∞=γmaxa,s′∑s′∈SPs1,s′a(v1(s′)−v2(s′))=γ∥v1(s′)−v2(s′)∥∞maxa,s′∑s′∈SPs1,s′a=γ∥v1(s′)−v2(s′)∥∞\begin{aligned} \|\bf{B}_*\bf{v}_1(s_1)-\bf{B}_*\bf{v}_2(s_1)\|_{\infty}&=\|\max_{a}(\mathcal{R}_{s_1}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}_1(s'))-\max_{a}(\mathcal{R}_{s_1}^a+\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}_2(s'))\|_{\infty}\\ &\leq \|\max_a(\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}_1(s')-\gamma\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\bf{v}_2(s'))\|_{\infty}\\ &=\gamma\max_{a,s'}\ \sum_{s'\in S}\mathcal{P}_{s_1,s'}^a(\bf{v}_1(s')-\bf{v}_2(s'))\\ &=\gamma\|{\bf{v}}_1(s')-{\bf{v}}_2(s')\|_{\infty}\max_{a,s'}\ \sum_{s'\in S}\mathcal{P}_{s_1,s'}^a\\ &=\gamma\|{\bf{v}}_1(s')-{\bf{v}}_2(s')\|_{\infty}\\ \end{aligned} ∥B∗v1(s1)−B∗v2(s1)∥∞=∥amax(Rs1a+γs′∈S∑Ps1,s′av1(s′))−amax(Rs1a+γs′∈S∑Ps1,s′av2(s′))∥∞≤∥amax(γs′∈S∑Ps1,s′av1(s′)−γs′∈S∑Ps1,s′av2(s′))∥∞=γa,s′max s′∈S∑Ps1,s′a(v1(s′)−v2(s′))=γ∥v1(s′)−v2(s′)∥∞a,s′max s′∈S∑Ps1,s′a=γ∥v1(s′)−v2(s′)∥∞
其中∑s′∈SPs1,s′a=1\sum_{s'\in S}\mathcal{P}_{s_1,s'}^a=1∑s′∈SPs1,s′a=1,所以上式成立。s′s's′其实同s1s_1s1都是状态空间SSS中的一个元素,元素之间存在这样的偏序关系,所以证得∥B∗v1−B∗v2∥∞≤γ∥v1−v2∥∞\|\bf{B}_*\bf{v}_1-\bf{B}_*\bf{v}_2\|_{\infty}\leq\gamma \|\bf{v}_1-\bf{v}_2\|_{\infty}∥B∗v1−B∗v2∥∞≤γ∥v1−v2∥∞。
在γ∈(0,1)\gamma\in(0,1)γ∈(0,1)时,Bπ,B∗\bf{B}_{\pi},\bf{B}_*Bπ,B∗都是(R,L∞)(R, L_{\infty})(R,L∞)上的收缩映射。
因此,根据Banach不动点定理(非正式地,该定理说,对于完备的度量空间,将压缩映射一遍又一遍地应用到集合的元素上,最终将使我们获得不动点),可以用迭代的方法求Bellman期望算子和Bellman最优算子的不动点,迭代正比于γk\gamma^kγk的速度收敛(其中kkk是迭代次数)。由于Bellman期望算子的不动点就是策略价值,Bellman最优算子的不动点就是最优价值,所以这就意味着我们可以用迭代的方法求得策略的价值或最优价值。
同时可以得出结论:每个MDP都有一个唯一的最优值函数v∗\bf{v}^*v∗。 使用该v∗\bf{v}^*v∗,我们可以得出最佳策略π∗\pi^*π∗。因此证明,对于任何有限的MDP,都存在一个最佳策略π∗\pi^*π∗,使其优于或等于其他所有可能的策略π\piπ。
求解
DP方式求解的主要就两种方法,策略迭代和值迭代,下面分别介绍这两种。
Policy Iteration
策略迭代从一个任意的确定性策略开始,交替进行策略评估和策略改进。这里的策略改进是严格的策略改进,即改进后的策略和改进前的策略是不同的。
对于状态空间和动作空间均有限的Markov决策过程,其可能的确定性策略数是有限的。由于确定性策略总数是有限的,所以在迭代过程中得到的策略序列一定能收敛,并且收敛的结果就是最优策略,这个在策略改进中会有说明。
Policy Evaluation
整体就是从任意值函数v{\bf{v}}v开始,重复应用Bπ\bf{B}_{\pi}Bπ,就会得到唯一不动点vπ{\bf{v}}_{\pi}vπ:
limN→∞BπNv=vπ,for any VF v\lim_{N\to \infty}{\bf{B}}_{\pi}^N{\bf{v}}={\bf{v}}_{\pi}, \text{for any VF }{\bf{v}}N→∞limBπNv=vπ,for any VF v
也就是对于任意策略,我们总会得到其对应的值函数,这就是策略评估。
这里由于使用确定性策略,也就是贪心策略,所以值函数v(s){\bf{v}}(s)v(s)就是对应动作的q(s,a)q(s,a)q(s,a),但因为可能存在策略改进,所以不一定是maxaq(s,a)\max_a q(s,a)maxaq(s,a)。
迭代策略评估算法具有以下两大意义:一方面,这个策略评估算法将作为策略迭代算法的一部分,用于最优策略的求解;另一方面,在这个策略评估算法的基础上进行修改,可以得到迭代求解最优策略的算法。
Policy Improvement
这个过程类似策略评估,同样是先计算每个动作的值,然后得到贪心策略,如果新的策略与旧的策略不一致,就更新。
正如之前所说,G(v)G({\bf{v}})G(v)代表贪心策略,BG(v)v=B∗v{\bf{B}}_{G({\bf{v}})}{\bf{v}}={\bf{B}}_*{\bf{v}}BG(v)v=B∗v,每次策略改进其实就是应用B∗{\bf{B}}_*B∗,也就是说对于迭代数kkk:
B∗vπk=BG(vπk)vπk=Bπk+1vπk{\bf{B}}_*{\bf{v}}_{\pi_k}={\bf{B}}_{G({\bf{v}}_{\pi_k})}{\bf{v}}_{\pi_k}={\bf{B}}_{\pi_{k+1}}{\bf{v}}_{\pi_k}B∗vπk=BG(vπk)vπk=Bπk+1vπk
由算子定义可知,对于任意策略π\piπ,都有B∗v≥Bπv{\bf{B}}_*{\bf{v}}\ge{\bf{B}}_{\pi}{\bf{v}}B∗v≥Bπv,并且因为策略评估收敛了,有Bπkvπk=vπk{\bf{B}}_{\pi_{k}}{\bf{v}}_{\pi_{k}}={\bf{v}}_{\pi_{k}}Bπkvπk=vπk,所以:
B∗vπk=Bπk+1vπk≥Bπkvπk=vπk{\bf{B}}_*{\bf{v}}_{\pi_k}={\bf{B}}_{\pi_{k+1}}{\bf{v}}_{\pi_k}\geq {\bf{B}}_{\pi_{k}}{\bf{v}}_{\pi_{k}}={\bf{v}}_{\pi_{k}}B∗vπk=Bπk+1vπk≥Bπkvπk=vπk
因此每次策略改进都是单调递增的。
之后又会进行策略评估,因此策略评估是重复应用Bπk+1{\bf{B}}_{\pi_{k+1}}Bπk+1,由上可知,重复应用产生的是单调递增序列,所以改进后策略对应的值函数为:
vπk+1=limN→∞Bπk+!Nvπk≥vπk{\bf{v}}_{\pi_{k+1}}=\lim_{N\to \infty}{\bf{B}}_{\pi_{k+!}}^N{\bf{v}}_{\pi_k}\geq{\bf{v}}_{\pi_k}vπk+1=N→∞limBπk+!Nvπk≥vπk
也就是说,策略迭代过程中产生的值函数序列是单调递增的,同时B∗{\bf{B}}_*B∗只有一个不动点,所以策略迭代会收敛到最优值函数v∗{\bf{v}}_*v∗。
Value Iteration
值迭代是一种利用迭代求解最优价值函数进而求解最优策略的方法。策略迭代中,策略评价利用Bellman期望方程迭代求解给定策略的值函数。与之相对,值迭代利用Bellman最优方程迭代求解最优策略的值函数,并进而求得最优策略。
值迭代相当于去掉策略评估,也就是不使用Bπ{\bf{B}}_{\pi}Bπ,只使用B∗{\bf{B}}_{*}B∗。已知B∗v{\bf{B}}_{*}{\bf{v}}B∗v是单调递增的运算,之前也证明过其能收敛至唯一不动点,即:
limN→∞B∗Nv=v∗,for any VF v\lim_{N\to \infty}{\bf{B}}_{*}^N{\bf{v}}={\bf{v}}_{*}, \text{for any VF }{\bf{v}}N→∞limB∗Nv=v∗,for any VF v
所以值迭代可以收敛收敛到最优值函数v∗{\bf{v}}_*v∗。
Greedy Policy from Optimal VF is an Optimal Policy
可以通过证明两个策略对应的值函数等价证明两个策略等价。
上面已经说过BG(v)v=B∗v{\bf{B}}_{G({\bf{v}})}{\bf{v}}={\bf{B}}_*{\bf{v}}BG(v)v=B∗v,所以对于B∗{\bf{B}}_*B∗的不动点v∗{\bf{v_*}}v∗有:
BG(v∗)v∗=B∗v∗=v∗{\bf{B}}_{G({\bf{v_*}})}{\bf{v_*}}={\bf{B}}_*{\bf{v_*}}={\bf{v_*}}BG(v∗)v∗=B∗v∗=v∗
不过BG(v){\bf{B}}_{G({\bf{v}})}BG(v)同样有其不动点vG(v){\bf{v}}_{G({\bf{v}})}vG(v),所以有:
vG(v∗)=v∗{\bf{v}}_{G({\bf{v_*}})}={\bf{v}}_{*}vG(v∗)=v∗
也就是说简单地遵循贪心的确定性策略G(v∗)G({\bf{v}}_*)G(v∗)实际上就实现了最优值函数v∗{\bf{v}}_*v∗。
换句话说,G(v∗)G({\bf{v}}_*)G(v∗)是最优确定性策略。
https://towardsdatascience.com/mathematical-analysis-of-reinforcement-learning-bellman-equation-ac9f0954e19f
https://developer.aliyun.com/article/726187
http://blog.franktian.xyz/2020/12/10/%E7%94%A8Bellman%E7%AE%97%E5%AD%90%E7%90%86%E8%A7%A3%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/
通过Bellman算子理解动态规划相关推荐
- 【动态规划模型】金矿模型理解动态规划!(精彩的故事)
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划.本 ...
- 巧妙理解动态规划算法
我们先来看一个题目:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.要求用程序来求出一共有多少种走法. 很显然可以使用暴力破解求出所有的排列组合,但是时间复杂度是指数级的. ...
- 简单粗暴地理解动态规划
动态规划可以说是做题时比较难以理解的算法了,我之前也不是很理解,直到在随机过程中学习了马尔科夫过程后,再看动态规划就觉得很简单了. 本文只是帮助简单粗暴的理解动态规划,熟练地运用需要亲自进行大量的习题 ...
- 初学者怎么理解动态规划
通过金矿模型介绍动态规划 本文转载于https://blog.csdn.net/lyh__521/article/details/46595339 对于动态规划,每个刚接触的人都需要一段时间来理解,特 ...
- java动态规划鸡蛋问题_教你彻底理解动态规划——扔鸡蛋问题 Drop Eggs2
问题 有一个n层的建筑.如果一个鸡蛋从第k层及以上落下,它会碎掉.如果从低于这一层的任意层落下,都不会碎. 有m个鸡蛋,用最坏的情况下实验次数最少的方法去找到k, 返回最坏情况下所需的实验次数. 样例 ...
- matlab 背包问题动态规划,从01背包问题理解动态规划---初体验
这个问题有两种解法,动态规划和贪婪算法.本文仅涉及动态规划. 先不套用动态规划的具体定义,试着想,碰见这种题目,怎么解决? 首先想到的,一般是穷举法,一个一个地试,对于数目小的例子适用,如果容量增大, ...
- 【算法】-- LintCode经典算法题理解动态规划
动态规划有多重要? 科技公司面试必考算法 根据面试经验,一半失败的面试都与动态规划有关 动态规划题目特点 1.计数题 -有多少种方式走到右下角 -有多少种方法选出k个数使得和是Sum 2.求最大最小值 ...
- 01背包问题:图表法带你快速理解动态规划解决01背包问题 附C++源码
0-1背包问题 所谓0-1背包问题,也就是给你一个重量为M的背包和n种物品,每种物品有一定的重量和价值,在每种物品均可装入背包1次或不装入(不能仅装入物品的一部分)且不超过背包载重量的前提下,问你怎样 ...
- ReduceByKey算子理解
前言 最近经常使用到reduceByKey这个算子,想着结合*ByKey算子和stage划分一起总结一下,所以沉下心来仔细过了一遍相关的博客和帖子,在此整体过一遍这个算子,那么我们开始: 国外的大牛一 ...
最新文章
- 女生做软件测试需要学习什么技术?
- 工作一周了,紧张 + 累
- OO学习之二——面向对象分析(OOD)的介绍
- rpm打包的流程包括以下哪些_卖房流程包括哪些
- LIST_VIEW_和LVITEM用法
- LeetCode 2099. 找到和最大的长度为 K 的子序列
- Java 代码性能优化总结
- 阿里云前端周刊 - 第 15 期
- centos下安装和卸载jdk
- mysqld got signal 11处理
- 彻底关闭win10自动更新
- 建模实训报告总结_计算机三维建模实训报告
- 用python分析股票收益影响因素的方法_【Python】用Python分析股票的收益和风险
- 李嘉诚:孤独是他的能量
- 第一届全国大学生GIS应用技能大赛试题答案及数据下载(下午)
- b450支持服务器内存,b450支持内存频率是多少
- 国内APP消息推送机制以及微信消息延迟问题剖析
- 读 活着 【思维导图版】
- 快速幂+矩阵快速幂(总结+例题)
- 【深度学习】如何封装可维护的restiful api
热门文章
- ancestral 箭头符号,英文字典
- JAVA后端如何保证业务操作的幂等性
- 论机电一体化的发展By integration of machinery development
- 视频会议软件的使用形式
- sap系统中的batch_SAP 批次管理(Batch management)配置介绍
- matlab绘制x坐标是底数为2的幂函数的折线图
- FRM-91500: Unable to start/complete the build.
- AI芯片科普/MAC(Multiplier and Accumulation)是乘累加器
- C 宏定义实现字符大小写转换
- 风云岛行动电脑版模拟器使用体验报告