强化学习的数学框架:马尔科夫决策过程 MDP

news2024/11/24 8:05:58

文章目录

  • 1. 什么是马尔科夫过程
  • 2. 强化学习与MDP的关系
  • 3. 价值函数的贝尔曼方程[^1]
    • 3.1 状态价值函数的贝尔曼方程
    • 3.2 动作价值函数的贝尔曼方程
    • 3.3 价值函数递推关系的转换
  • 4. 最优价值函数
  • 5. MDP计算最优值函数实例[^2]


1. 什么是马尔科夫过程

马尔科夫过程(Markov Decision Process, MDP),也称为马尔科夫链(Markov Chain),是指具有马尔科夫性质的过程,而马尔科夫性质指的是该过程中的未来状态仅依赖于当前的状态和行动,与过去的状态序列无关。具体来说,马尔科夫过程满足以下两个性质:

  • 无记忆性(Markov Property):给定当前时刻的状态,未来时刻的状态只依赖于当前时刻的状态,而与过去的状态序列无关。这意味着过程中的状态转移概率只与当前状态有关,与之前的历史状态无关。
  • 状态空间可数:马尔科夫过程的状态空间是可数的,即状态集合中的状态数量是有限或可列无穷的。

马尔科夫过程在许多领域都有应用,例如在统计学、信号处理、自然语言处理、金融等领域中都有广泛的应用。

2. 强化学习与MDP的关系

在强化学习中,马尔科夫决策过程是用于建立智能体与环境之间交互过程的重要数学框架,具体而言,强化学习解决的问题就是在一个MDP中找到一个最优的策略,使得智能体在这个策略下获得的累积奖励最大化。

可以将强化学习过程定义为马尔科夫过程的标准数学形式,用一个五元组 ( S , A , R , P , π ) (S,A,R,P,\pi) (S,A,R,P,π) 表示,其中:

  1. S S S 是状态空间集合,包含了所有可能的有效状态;
  2. A A A 是动作空间集合;
  3. R R R 是奖励函数,阶段 t t t 采取动作的奖励 r t = R ( s t , a t , s t + 1 ) r_t = R(s_t, a_t, s_{t+1}) rt=R(st,at,st+1)
  4. P P P 状态转移概率矩阵,其中 P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a) 是在状态 s s s 下 采取动作 a a a 转移到状态 s ′ s' s 的概率;
  5. π \pi π 是智能体在每个状态下采取动作的策略。

其中,对应用强化学习的系统的如下元素做马尔科夫假设:

  • 环境的状态转移:即未来的环境状态只与当前的环境状态和当前智能体所采取的动作有关,与过去的状态序列无关;
  • 智能体的策略:即智能体在状态 s s s 处所采取的动作 a a a 的概率仅与当前状态有关,与其他要素无关,即如下的策略函数:
    π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s)=P(A_t=a|S_t=s) π(as)=P(At=aSt=s)
  • 状态价值函数:即对一个状态的价值估计只基于当前的状态,而不考虑过去的状态情况,仅评估当前状态下,基于已有策略 π \pi π 还能获得的累积奖励,具体公式如下:
    v π ( s ) = E π ( G t ∣ S t = s ) = E π ( R t + γ R t + 1 + γ 2 R t + 2 + … ∣ S t = s ) v_\pi(s)=\mathrm{E}_\pi\left(G_t \mid S_t=s\right)=\mathrm{E}_\pi\left(R_{t}+\gamma R_{t+1}+\gamma^2 R_{t+2}+\ldots \mid S_t=s\right) vπ(s)=Eπ(GtSt=s)=Eπ(Rt+γRt+1+γ2Rt+2+St=s)
  • 动作价值函数:同理,评估一个状态 s s s 下采取动作 a a a 的价值,只依赖于当前的状态和动作,与过去的状态和动作无关。

以上部分概念可以通过前文《强化学习基础概念入门》了解。

3. 价值函数的贝尔曼方程1

在提到马尔科夫决策过程时,经常也会提到贝尔曼方程(Bellman Equation),这是描述马尔科夫决策过程中最优值函数的重要方程。前面提到,不论是状态价值函数还是动作价值函数都是只与当前状态有关,估计的累积价值包括当前阶段的价值和未来阶段的价值,而贝尔曼方程的核心思想就是,将基于当前状态的价值估计和基于下一个状态的价值估计联系起来,形成一个递归方程,作为求解最优价值函数或者动作价值函数的基础。

3.1 状态价值函数的贝尔曼方程

根据上面提到的状态价值函数的表达式,进行如下推导:

v π ( s ) = E π ( R t + γ R t + 1 + γ 2 R t + 2 + … ∣ S t = s ) = E π ( R t + γ ( R t + 1 + γ R t + 2 + … ) ∣ S t = s ) = E π ( R t + γ G t + 1 ∣ S t = s ) = E π ( R t + γ v π ( S t + 1 ) ∣ S t = s ) \begin{aligned} v_\pi(s) & =\mathrm{E}_\pi\left(R_{t}+\gamma R_{t+1}+\gamma^2 R_{t+2}+\ldots \mid S_t=s\right) \\ & =\mathrm{E}_\pi\left(R_{t}+\gamma\left(R_{t+1}+\gamma R_{t+2}+\ldots\right) \mid S_t=s\right) \\ & =\mathrm{E}_\pi\left(R_{t}+\gamma G_{t+1} \mid S_t=s\right) \\ & =\mathrm{E}_\pi\left(R_{t}+\gamma v_\pi\left(S_{t+1}\right) \mid S_t=s\right)\end{aligned} vπ(s)=Eπ(Rt+γRt+1+γ2Rt+2+St=s)=Eπ(Rt+γ(Rt+1+γRt+2+)St=s)=Eπ(Rt+γGt+1St=s)=Eπ(Rt+γvπ(St+1)St=s)

即在 t t t 时刻的状态估计价值和在 t + 1 t+1 t+1 时刻的状态估计价值满足如下的递推关系(贝尔曼方程):

v π ( s ) = E π ( R t + γ v π ( S t + 1 ) ∣ S t = s ) v_{\pi}(s)=\mathrm{E}_{\pi}(R_{t}+\gamma v_{\pi}(S_{t+1})|S_t=s) vπ(s)=Eπ(Rt+γvπ(St+1)St=s)

其中, R t R_t Rt 是在状态 s s s 下采取动作后的即时奖励, γ \gamma γ 是奖励衰减因子。

3.2 动作价值函数的贝尔曼方程

除了状态价值估计函数 v π ( s ) v_{\pi}(s) vπ(s),还有一个动作价值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a),该估计函数考虑了所采取的动作 a a a 对回报的影响,公式与状态价值函数相似,如下:

q π ( s , a ) = E π ( G t ∣ S t = s , A t = a ) = E π ( R t + γ R t + 1 + γ 2 R t + 2 + … ∣ S t = s , A t = a ) q_\pi(s,a)=\mathrm{E}_\pi\left(G_t \mid S_t=s, A_t=a \right)=\mathrm{E}_\pi\left(R_{t}+\gamma R_{t+1}+\gamma^2 R_{t+2}+\ldots \mid S_t=s,A_t=a \right) qπ(s,a)=Eπ(GtSt=s,At=a)=Eπ(Rt+γRt+1+γ2Rt+2+St=s,At=a)

同理,可得 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 的贝尔曼方程如下:

q π ( s , a ) = E π ( R t + γ q π ( S t + 1 , A t + 1 ) ∣ S t = s ) q_{\pi}(s,a)=\mathrm{E}_{\pi}(R_{t}+\gamma q_{\pi}(S_{t+1},A_{t+1})|S_t=s) qπ(s,a)=Eπ(Rt+γqπ(St+1,At+1)St=s)

3.3 价值函数递推关系的转换

前面的两种价值函数的贝尔曼方程,尽管呈现了前后阶段的估计价值的递推关系,但是仍是期望表达式,为了最优化动作策略,需要将动作策略 π ( a ∣ s ) \pi(a|s) π(as) 纳入到递推关系当中。

根据动作价值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 和状态价值函数 v π ( s ) v_{\pi}(s) vπ(s) 的定义,可以得到如下的关系:

v π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) v_{\pi}(s)=\sum_{a\in A} \pi(a|s)q_{\pi}(s,a) vπ(s)=aAπ(as)qπ(s,a)

即当前状态的估计价值,是所有动作的估计价值基于策略(概率分布函数) π ( a ∣ s ) \pi(a|s) π(as) 的期望值,即在当前状态和当前策略下,所有动作的估计价值乘以动作的选择概率,求和后得到当前状态的估计价值。

同理,在一个状态 s s s 下,估计动作 a a a 的价值即采取了该动作之后,状态转移到下一阶段状态的期望价值,关系如下:

q π ( s , a ) = R t + γ ∑ s ′ ∈ S ( P s s ′ a v π ( s ′ ) ) q_{\pi}(s,a)=R_t+\gamma \sum_{s'\in S}(P^a_{ss'}v_{\pi}(s')) qπ(s,a)=Rt+γsS(Pssavπ(s))

即在状态 s s s 下采取动作 a a a,由于环境的随机因素,状态可能转移到其他的多种状态 s ′ s' s,因此评估状态 s s s 下动作 a a a 的价值,计算的是下一阶段的状态估计价值的期望,再乘以下一阶段价值(奖励)的衰减因子 γ \gamma γ

将上述两个式子彼此代入,得到新的贝尔曼递推关系式,如下:

v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R t a + γ ∑ s ′ ∈ S ( P s s ′ a v π ( s ′ ) ) ) v_{\pi}(s)=\sum_{a\in A} \pi(a|s)(R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'}v_{\pi}(s'))) vπ(s)=aAπ(as)(Rta+γsS(Pssavπ(s)))

q π ( s , a ) = R t a + γ ∑ s ′ ∈ S ( P s s ′ a ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) ) q_{\pi}(s,a)=R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'} \sum_{a'\in A} \pi(a'|s')q_{\pi}(s',a')) qπ(s,a)=Rta+γsS(PssaaAπ(as)qπ(s,a))

4. 最优价值函数

当我们对价值函数的估计越准确,即策略越有效,则我们决策过程的累积奖励值越大。前面提到,贝尔曼方程是作为求解最优价值函数的基础,通过贝尔曼方程的递推关系,我们可以迭代地求解出最优价值函数,直到算法收敛。

假设在马尔可夫决策过程当中,我们所采取的策略是最优的,表示为 π ∗ \pi^* π,它能使得我们在每个阶段的回报都比其他的策略所获回报要高,得到这么一个策略就是强化学习问题所要求的解。但我们很难直接地找到这样地策略,只能在不断的训练中,去比较和学习更优的策略,且对于复杂问题,几乎不可能穷举所有的策略,因此比较得到的最优策略是局部最优的。

比较策略的优劣最直接的方式就是通过比较策略在不同状态下的期望累积奖励大小,其中使得期望累积奖励值达到最大的策略即为最优策略,如下:

v ∗ ( s ) = max ⁡ π v π ( s ) v_*(s)=\max_{\pi}v_{\pi}(s) v(s)=πmaxvπ(s)

同理,最优动作价值函数的最优策略,如下:

q ∗ ( s , a ) = max ⁡ π q π ( s , a ) q_*(s,a)=\max_{\pi}q_{\pi}(s,a) q(s,a)=πmaxqπ(s,a)

假设动作 a a a 是最优策略所选出的最优动作(这里暂不考虑策略的随机性),则最优状态价值函数和最优动作价值函数之间的关系为:

v ∗ ( s ) = max ⁡ a q ∗ ( s , a ) v_{*}(s)=\max_{a}q_{*}(s,a) v(s)=amaxq(s,a)

q ∗ ( s , a ) = R t a + γ ∑ s ′ ∈ S ( P s s ′ a v ∗ ( s ′ ) ) q_{*}(s,a)=R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'}v_{*}(s')) q(s,a)=Rta+γsS(Pssav(s))

同理,将上述两个式子代入彼此,可以得到最优价值函数,如下:

v ∗ ( s ) = max ⁡ a ( R t a + γ ∑ s ′ ∈ S ( P s s ′ a v ∗ ( s ′ ) ) ) v_{*}(s)=\max_{a} (R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'}v_{*}(s'))) v(s)=amax(Rta+γsS(Pssav(s)))

q ∗ ( s , a ) = R t a + γ ∑ s ′ ∈ S ( P s s ′ a max ⁡ a ‘ q ∗ ( s ′ , a ′ ) ) q_{*}(s,a)=R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'} \max_{a‘}q_{*}(s',a')) q(s,a)=Rta+γsS(Pssaamaxq(s,a))

上述的最优价值函数是在强化学习的迭代训练中不断更新得到的,随着训练场景增多,价值函数不断逼近最优价值函数。

5. MDP计算最优值函数实例2

现有一个关于学生开始的马尔科夫决策过程,左上角的圆圈是当前的起始位置(状态),右上角的方框是终点位置(状态)。学生可以采取的动作为下图弧线上的红色字符串,有 S t u d y , F a c e b o o k , Q u i t , S l e e p , P u b Study,Facebook,Quit,Sleep,Pub Study,Facebook,Quit,Sleep,Pub,各个状态下采取动作对应的即时奖励 R R R 的值在相关弧线上。现需要找到最优的状态价值或动作价值函数,以期能够达成最优策略。

在这里插入图片描述
每个非结束状态,都有两种可选择的动作,因此为了方便,我们令初始策略选择每个动作的概率 π ( a ∣ s ) \pi(a|s) π(as) 均为 0.5 0.5 0.5,同时假设奖励衰减因子为 1 1 1,即初始策略下会考虑当前及未来全量的累积奖励。

这里我们将终点状态的价值设为 0 0 0,即不论由什么状态通过什么动作直接到达终点,都不增加奖励。接着,定义左上 s 1 s_1 s1、左下 s 2 s_2 s2、中下 s 3 s_3 s3、右下 s 4 s_4 s4 四个圆圈的状态价值为 v 1 , v 2 , v 3 , v 4 v_1,v_2,v_3,v_4 v1,v2,v3,v4,通过以下公式计算各个状态的估计价值(状态价值函数):

v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R t a + γ ∑ s ′ ∈ S ( P s s ′ a v π ( s ′ ) ) ) v_{\pi}(s)=\sum_{a\in A} \pi(a|s)(R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'}v_{\pi}(s'))) vπ(s)=aAπ(as)(Rta+γsS(Pssavπ(s)))

先从起始状态出发,可得如下的方程组:

v 1 = 0.5 × ( 0 + v 2 ) + 0.5 × ( − 1 + v 1 ) v 2 = 0.5 × ( − 1 + v 1 ) + 0.5 × ( − 2 + v 3 ) v 3 = 0.5 × ( − 2 + v 4 ) + 0.5 × ( 0 + 0 ) v 4 = 0.5 × ( 10 + 0 ) + 0.5 × ( 1 + 0.2 × v 2 + 0.4 × v 3 + 0.4 × v 4 ) v_1=0.5\times (0+v_2) + 0.5\times (-1+v_1)\\ v_2=0.5\times (-1+v_1) + 0.5\times (-2+v_3)\\ v_3=0.5\times (-2+v_4) + 0.5\times (0+0)\\ v_4=0.5\times (10+0) + 0.5\times (1+0.2\times v_2 + 0.4\times v_3 + 0.4\times v_4) v1=0.5×(0+v2)+0.5×(1+v1)v2=0.5×(1+v1)+0.5×(2+v3)v3=0.5×(2+v4)+0.5×(0+0)v4=0.5×(10+0)+0.5×(1+0.2×v2+0.4×v3+0.4×v4)

通过解方程得到 v 1 = − 2.3 , v 2 = − 1.3 , v 3 = 2.7 , v 4 = 7.4 v_1=-2.3,v_2=-1.3,v_3=2.7,v_4=7.4 v1=2.3,v2=1.3,v3=2.7,v4=7.4,这是在我们规定好价值函数之后求得的状态估计价值,但这不一定是最优价值函数。求最有价值函数的关键在于,求出各个状态的价值,以及每个状态可以采取的动作的估计价值,

假设终点的状态价值仍为 0 0 0,系统的奖励衰减因子 γ = 1 \gamma=1 γ=1,可得,在(未知)最优策略 π ( a ∣ s ) \pi(a|s) π(as) 下, q ∗ ( s 3 , s l e e p ) = 0 , q ∗ ( s 4 , s t u d y ) = 10 q_*(s_3, sleep)=0, q_*(s_4,study)=10 q(s3,sleep)=0,q(s4,study)=10。接着利用如下公式:

q ∗ ( s , a ) = R t a + γ ∑ s ′ ∈ S ( P s s ′ a max ⁡ a ’ q ∗ ( s ′ , a ′ ) ) q_{*}(s,a)=R_t^a+\gamma \sum_{s'\in S}(P^a_{ss'} \max_{a’}q_{*}(s',a')) q(s,a)=Rta+γsS(Pssaamaxq(s,a))

得到:

q ∗ ( s 3 , s t u d y ) = − 2 + max ⁡ ( q ∗ ( s 4 , s t u d y ) , q ∗ ( s 4 , p u b ) ) q ∗ ( s 4 , p u b ) = 1 + 0.2 × max ⁡ ( q ∗ ( s 2 , f a c e b o o k ) , q ∗ ( s 2 , s t u d y ) ) + 0.4 × max ⁡ ( q ∗ ( s 3 , s t u d y ) , q ∗ ( s 3 , s l e e p ) ) + 0.4 × max ⁡ ( q ∗ ( s 4 , s t u d y ) , q ∗ ( s 4 , p u b ) ) q ∗ ( s 2 , s t u d y ) = − 2 + max ⁡ ( q ∗ ( s 3 , s t u d y ) , q ∗ ( s 3 , s l l e p ) ) q ∗ ( s 2 , f a c e b o o k ) = − 1 + max ⁡ ( q ∗ ( s 1 , f a c e b o o k ) , q ∗ ( s 1 , q u i t ) ) q ∗ ( s 1 , f a c e b o o k ) = − 1 + max ⁡ ( q ∗ ( s 1 , f a c e b o o k ) , q ∗ ( s 1 , q u i t ) ) q ∗ ( s 1 , q u i t ) = − 1 + max ⁡ ( q ∗ ( s 2 , s t u d y ) , q ∗ ( s 2 , f a c e b o o k ) ) q_*(s_3,study)=-2+\max(q_*(s_4,study), q_*(s_4,pub))\\ q_*(s_4,pub)=1+0.2\times \max(q_*(s_2,facebook), q_*(s_2,study)) + 0.4\times \max(q_*(s_3,study), q_*(s_3,sleep)) + 0.4\times\max(q_*(s_4,study), q_*(s_4,pub))\\ q_*(s_2,study)=-2+\max(q_*(s_3,study), q_*(s_3,sllep))\\ q_*(s_2,facebook)=-1+\max(q_*(s_1,facebook), q_*(s_1,quit))\\ q_*(s_1,facebook)=-1+\max(q_*(s_1,facebook), q_*(s_1,quit))\\ q_*(s_1,quit)=-1+\max(q_*(s_2,study), q_*(s_2,facebook)) q(s3,study)=2+max(q(s4,study),q(s4,pub))q(s4,pub)=1+0.2×max(q(s2,facebook),q(s2,study))+0.4×max(q(s3,study),q(s3,sleep))+0.4×max(q(s4,study),q(s4,pub))q(s2,study)=2+max(q(s3,study),q(s3,sllep))q(s2,facebook)=1+max(q(s1,facebook),q(s1,quit))q(s1,facebook)=1+max(q(s1,facebook),q(s1,quit))q(s1,quit)=1+max(q(s2,study),q(s2,facebook))

根据上述方程组求解得到各个状态下的动作价值:

q ∗ ( s 3 , s t u d y ) = 8 q ∗ ( s 4 , p u b ) = 9.4 q ∗ ( s 2 , s t u d y ) = 6 q ∗ ( s 2 , f a c e b o o k ) = 5 q ∗ ( s 1 , f a c e b o o k ) = 5 q ∗ ( s 1 , q u i t ) = 6 q_*(s_3,study) = 8\\ q_*(s_4,pub)=9.4\\ q_*(s_2,study)=6\\ q_*(s_2,facebook)=5\\ q_*(s_1,facebook)=5\\ q_*(s_1,quit)=6 q(s3,study)=8q(s4,pub)=9.4q(s2,study)=6q(s2,facebook)=5q(s1,facebook)=5q(s1,quit)=6

接着根据如下公式计算各个状态的估计价值:

v ∗ ( s ) = max ⁡ a q ∗ ( s , a ) v_{*}(s)=\max_{a}q_{*}(s,a) v(s)=amaxq(s,a)

可得: v 1 = 6 , v 2 = 6 , v 3 = 8 , v 4 = 10 v_1=6,v_2=6,v_3=8,v_4=10 v1=6,v2=6,v3=8,v4=10,即为最终的最优价值估计,基于这些价值估计的策略可得,最优的学习路线为: s 1 → s 2 → s 3 → s 4 → s_1\rightarrow s_2\rightarrow s_3\rightarrow s_4\rightarrow s1s2s3s4 终点。


  1. 马尔科夫决策过程(MDP) :https://www.cnblogs.com/pinard/p/9426283.html ↩︎

  2. UCL 强化学习第二章节讲义 https://www.davidsilver.uk/wp-content/uploads/2020/03/MDP.pdf ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用酷鸟云进行iOS上架?

众所周知,大部分苹果开发者通常会上架多个马甲包应用,以获得更多流量和收益。这个过程需要进行账号、IP、设备隔离,这会需要很多电脑,但又没有那么mac 电脑的话,可以借助酷鸟云来进行上架,它是VPS云服务器&…

工作日常随记-总

软件测试主管工作日常随记-总 前言 接下来,我将开始散文式地记录我作为一位从业3年多的软件测试人员的软测经验。这是我在繁忙的日常工作的中跋涉出来又又投入的另一工作(bushi)另一兴趣中去。 我将简单(偏流水线向)…

性能升级,INDEMIND机器人AI Kit助力产业再蜕变

随着机器人进入到越来越多的生产生活场景中,作业任务和环境变得更加复杂,机器人需要更精准、更稳定、更智能、更灵敏的自主导航能力。 自主导航技术作为机器人技术的核心,虽然经过了多年发展,取得了长足进步,但在实践…

windwos安全加固

一、账号管理 按用户类型分配账号 目的:根据系统要求,设定不同账户和组,管理员、数据库 sa、审计用户、来宾用户等 实施方法: 打开本地用户和计算机管理器 ​ 1.打开运行,输入lusrmgr.msc 2.根据用户要求将账户加入…

一文涵盖Lambda,Stream,响应式编程,从此爱上高效率编程

一文涵盖Lambda,Stream,响应式编程,从此爱上高效率编程 前言 本文结构为 先是一个例子,带你快速体验,之后再去深究里面的方法。以及一些底层原理是如何实现的。从如何用,到如何用好,如何用精。学习操作,学…

设计模式——2_7 状态(State)

欲买桂花同载酒,终不似,少年游 ——刘过《唐多令芦叶满汀州》 文章目录 定义图纸一个例子:如何模拟一个转笔刀自动转笔刀PencilPencilSharpener 投诉和改善钝刀BladePencilSharpener 没有铅笔PencilSharpener if if ifStatePencilSharpener 碎…

雪亮工程视频联网综合管理/视频智能分析系统建设方案(一)

一、行业背景 雪亮工程主要是针对农村地区治安防控的监控项目,在乡村的主干道、路口、人群聚集地部署高清摄像头,通过三级综治中心和指挥平台,将视频图像信息系统纵向下延至县、乡、村,同时利用系统拓展在安防、社会治理、智慧交…

细胞世界:4.细胞分化(划区域)与细胞衰老(设施磨损)

(1)细胞凋亡 1. 概念:细胞凋亡可以比作城市的规划者主动拆除某些建筑来更新城市或防止危险建筑对市民的潜在伤害。这是一个有序的过程,由城市(细胞内部)的特定规划(基因)所决定。 2. 特征:细…

LeetCode-1143. 最长公共子序列【字符串 动态规划】

LeetCode-1143. 最长公共子序列【字符串 动态规划】 题目描述:解题思路一:动规五部曲解题思路二:1维DP解题思路三:0 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。…

【攻防世界】Confusion1

php的标志是大象,Python的标志是蛇 。Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 点进register.php 输入{{3*4}} 输入 {{config}} 也有回显,ssti 判断是否存在ssti注入: 1. {{8*8}} 2. {{config}} 过滤了关键字&#xff0…

详解Qt添加外部库

在Qt项目中添加外部库是一项常见任务,无论是静态库还是动态库都需要正确的配置才能让项目顺利编译链接。以下是详细步骤和不同场景下的配置方法: 方法一:手动编辑.pro文件 添加头文件路径: 在Qt项目中的.pro文件中使用INCLUDEPAT…

在线视频教育平台|基于Springboot的在线视频教育平台系统设计与实现(源码+数据库+文档)

在线视频教育平台目录 基于Springboot的在线视频教育平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 用户功能模块 教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)

前言: 前一阵子一直在捣鼓人大金仓数据库,虽然国产化的数据库很值得夸赞,但是网上的资料确实少的可怜。特此记录一下我在学习这个数据库的心酸历程。 安装就看这个大哥的,我之前安装就是看的他的,非常靠谱。 linux安装…

海外代理IP如何助力YouTube广告投放?

一、海外代理的角色与优势 拓展地理访问: 海外代理允许您从其他国家或地区的IP地址进行网络访问。通过使用海外代理,您可以绕过部分限制,实现访问YouTube和其他平台的目的。扩展受众: 利用海外代理,您可以将广告投放面…

每日一题---OJ题: 相交链表

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题---相交链表,准备好了吗? Ready Go! ! ! emmm,看这道题好像不怎么难,我们一起画图分析分析 上图中,A链表有5个结点,分别为 a1,a2,c1,c2,c3 ; B链表有6个结点,分别为 b1,b2,b3,c1,c2,c3 ; A链表和B链表在c1结点相交 …

【Python】数学函数和特殊内置函数大揭秘:Python中隐藏的秘密武器

欢迎来CILMY23的博客 本篇主题为 数学函数和特殊内置函数大揭秘:Python中隐藏的秘密武器 个人主页:CILMY23-CSDN博客 个人专栏系列: Python | C语言 | 数据结构与算法 | C 感谢观看,支持的可以给个一键三连,点赞关…

Partisia Blockchain:被严重低估的隐私区块链生态

在今年 3 月,隐私公链 Partisia Blockchain 迎来了重要的进展,该生态通证 $MPC 上线了交易所,目前 $MPC 通证可以在 Kucoin、Gate、BitMart、Bitfinex、Bitture 等平台交易,并将在不久后上线 MEXC 平台。 在上个月上线市场至今&am…

【Linux】进程间通信——system V版本 共享内存

目录 共享内存 原理 实践 shmget() 创建共享内存 shmctl() 删除共享内存 shmat() 挂接进程和共享内存 shmt() 进程和共享内存去关联 共享内存的特性 优势 劣势 用共享内存实现进程间通信 共享内存 原理 两个进程的PCB各自维护着一个进程地址空间。当两个进…

VsCode 安装Jupyter Notebook

VsCode 安装Jupyter Notebook 安装 1、打开 VSCode 编辑器,点击界面左端的【扩展】栏; 2、在【搜索框】中输入python,点击第一个Python,检查是否已经安装 python 插件,没安装的点击安装;已安装的继续第3步…

32单片机入门持续更新中

配套资料为野火霸道V2 初识 STM32 4.1 什么是 STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起 来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今…