知识二: 马尔科夫决策过程

news2024/11/23 16:45:53

强化学习从入门到精通(马尔科夫决策过程)(7天入门强化学习)

知识二:马尔科夫决策过程

  • 先介绍马尔可夫过程(Markov process)以及马尔可夫奖励过程(Markov reward process)。

2.1 马尔可夫过程

2.1.1 马尔可夫性质
  • 随机过程,已知现在状态和过去所有状态,未来状态的条件概率分布仅仅依赖于当前状态。由下面公式可以看出,未来状态只和现在的当前状态相关。
    p ( X t + 1 = x t + 1 ∣ X 0 : t = x 0 : t ) = p ( X t + 1 = x t + 1 ∣ X t = x t ) p\left(X_{t+1}=x_{t+1}\mid X_{0:t}=x_{0:t}\right)=p\left(X_{t+1}=x_{t+1}\mid X_{t}=x_{t}\right) p(Xt+1=xt+1X0:t=x0:t)=p(Xt+1=xt+1Xt=xt)
2.1.2 马尔科夫链
  • s t s_{t} st是当前时刻状态, s t + 1 s_{t+1} st+1是下一时刻状态, h t h_{t} ht包含所有状态,马尔可夫过程满足如下公式(只与当前状态有关就是马尔可夫过程):

p ( s t + 1 ∣ s t ) = p ( s t + 1 ∣ h t ) p\left(s_{t+1}\mid s_t\right)=p\left(s_{t+1}\mid h_t\right) p(st+1st)=p(st+1ht)

  • 离散时间的马尔可夫过程也称为马尔可夫链,就是状态有限,时间离散。我们可以用状态转移矩阵 P P P,来表示状态转移 p ( s t + 1 = s ′ ∣ s t = s ) : p\left(s_{t+1}=s^{\prime}\mid s_{t}=s\right): p(st+1=sst=s):
    P = ( p ( s 1 ∣ s 1 ) p ( s 2 ∣ s 1 ) … p ( s N ∣ s 1 ) p ( s 1 ∣ s 2 ) p ( s 2 ∣ s 2 ) … p ( s N ∣ s 2 ) ⋮ ⋮ ⋱ ⋮ p ( s 1 ∣ s N ) p ( s 2 ∣ s N ) … p ( s N ∣ s N ) ) \boldsymbol{P}=\left(\begin{array}{ccccc}p\left(s_1\mid s_1\right)&p\left(s_2\mid s_1\right)&\dots&p\left(s_N\mid s_1\right)\\p\left(s_1\mid s_2\right)&p\left(s_2\mid s_2\right)&\dots&p\left(s_N\mid s_2\right)\\\vdots&\vdots&\ddots&\vdots\\p\left(s_1\mid s_N\right)&p\left(s_2\mid s_N\right)&\dots&p\left(s_N\mid s_N\right)\end{array}\right) P=p(s1s1)p(s1s2)p(s1sN)p(s2s1)p(s2s2)p(s2sN)p(sNs1)p(sNs2)p(sNsN)

2.2 马尔科夫奖励过程

  • 马尔可夫奖励过程是马尔可夫链加上奖励函数。在马尔可夫奖励过程中,状态转移矩阵和状态都与马尔可夫链一样,只是多了奖励函数(就是多了个奖励)
2.2.1 回报与价值函数
  • 回报可以定义为奖励的逐步叠加,公式如下:
    G t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + γ 3 r t + 4 + … + γ T − t − 1 r T G_t=r_{t+1}+\gamma r_{t+2}+\gamma^2r_{t+3}+\gamma^3r_{t+4}+\ldots+\gamma^{T-t-1}r_T Gt=rt+1+γrt+2+γ2rt+3+γ3rt+4++γTt1rT

  • 回报 G t G_{t} Gt表示, r t + 1 r_{t+1} rt+1是下一时刻的奖励, r T r_{T} rT是最优一个时刻的奖励, γ \gamma γ是折扣系数。(就是重视挨着的下一时刻的奖励,未来的奖励的重视程度逐渐削弱)

  • 状态价值函数,公式如下**(注意:有状态价值V和动作价值Q)**:

V t ( s ) = E [ G t ∣ s t = s ] = E [ r t + 1 + γ r t + 2 + γ 2 r t + 3 + … + γ T − t − 1 r T ∣ s t = s ] \begin{aligned}V^t(s)&=\mathbb{E}\left[G_t\mid s_t=s\right]\\&=\mathbb{E}\left[r_{t+1}+\gamma r_{t+2}+\gamma^2r_{t+3}+\ldots+\gamma^{T-t-1}r_T\mid s_t=s\right]\end{aligned} Vt(s)=E[Gtst=s]=E[rt+1+γrt+2+γ2rt+3++γTt1rTst=s]

  • 当前 s s s状态的价值用 V t ( s ) V^t(s) Vt(s)表示**(就是** s s s状态下得到的回报),当前时刻到下一时刻的状态**(因为下一时刻的状态有很多,不一定是哪个状态所以用期望的方式取平均)**
2.2.2 贝尔曼方程
  • 采用贝尔曼方程计算状态价值 V V V:

V ( s ) = R ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) V(s)=R(s)+\gamma\sum_{s'\in S}p\left(s'\mid s\right)V\left(s'\right) V(s)=R(s)+γsSp(ss)V(s)

  • 其中 R ( s ) R(s) R(s)是即时奖励**(到状态 s s s时的奖励) V ( s ′ ) V\left(s'\right) V(s)是其他所有状态的状态价值, p ( s ′ ∣ s ) p\left(s'\mid s\right) p(ss)是状态转移矩阵(就是在状态 s s s到状态 s ′ s' s的概率) γ \gamma γ是折扣系数(除了到达 s s s的即时奖励,其他状态的奖励都要乘折扣)**。
  • 其推到过程如下**(简单看明白就行)**:

V ( s ) = E [ G t ∣ s t = s ] = E [ r t + 1 + γ r t + 2 + γ 2 r t + 3 + … ∣ s t = s ] = E [ r t + 1 ∣ s t = s ] + γ E [ r t + 2 + γ r t + 3 + γ 2 r t + 4 + … ∣ s t = s ] = R ( s ) + γ E [ G t + 1 ∣ s t = s ] = R ( s ) + γ E [ V ( s t + 1 ) ∣ s t = s ] = R ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) \begin{aligned} V(s)& =\mathbb{E}\left[G_{t}\mid s_{t}=s\right] \\ &=\mathbb{E}\left[r_{t+1}+\gamma r_{t+2}+\gamma^{2}r_{t+3}+\ldots\mid s_{t}=s\right] \\ &=\mathbb{E}\left[r_{t+1}|s_{t}=s\right]+\gamma\mathbb{E}\left[r_{t+2}+\gamma r_{t+3}+\gamma^{2}r_{t+4}+\ldots\mid s_{t}=s\right] \\ &=R(s)+\gamma\mathbb{E}[G_{t+1}|s_{t}=s] \\ &=R(s)+\gamma\mathbb{E}[V(s_{t+1})|s_t=s] \\ &=R(s)+\gamma\sum_{s^{\prime}\in S}p\left(s^{\prime}\mid s\right)V\left(s^{\prime}\right) \end{aligned} V(s)=E[Gtst=s]=E[rt+1+γrt+2+γ2rt+3+st=s]=E[rt+1st=s]+γE[rt+2+γrt+3+γ2rt+4+st=s]=R(s)+γE[Gt+1st=s]=R(s)+γE[V(st+1)st=s]=R(s)+γsSp(ss)V(s)

  • 从这个公式可以看出,当前 s s s状态的价值,可以通过下个 s ′ s^{\prime} s状态的价值导出。贝尔曼方程就是当前状态与未来状态的迭代关系。贝尔曼方程的矩阵形式如下:

( V ( s 1 ) V ( s 2 ) ⋮ V ( s N ) ) = ( R ( s 1 ) R ( s 2 ) ⋮ R ( s N ) ) + γ ( p ( s 1 ∣ s 1 ) p ( s 2 ∣ s 1 ) … p ( s N ∣ s 1 ) p ( s 1 ∣ s 2 ) p ( s 2 ∣ s 2 ) … p ( s N ∣ s 2 ) ⋮ ⋮ ⋱ ⋮ p ( s 1 ∣ s N ) p ( s 2 ∣ s N ) … p ( s N ∣ s N ) ) ( V ( s 1 ) V ( s 2 ) ⋮ V ( s N ) ) \left(\begin{array}{c}V\left(s_{1}\right)\\V\left(s_{2}\right)\\\vdots\\V\left(s_{N}\right)\end{array}\right)=\left(\begin{array}{c}R\left(s_{1}\right)\\R\left(s_{2}\right)\\\vdots\\R\left(s_{N}\right)\end{array}\right)+\gamma\left(\begin{array}{cccc}p\left(s_{1}\mid s_{1}\right)&p\left(s_{2}\mid s_{1}\right)&\ldots&p\left(s_{N}\mid s_{1}\right)\\p\left(s_{1}\mid s_{2}\right)&p\left(s_{2}\mid s_{2}\right)&\ldots&p\left(s_{N}\mid s_{2}\right)\\\vdots&\vdots&\ddots&\vdots\\p\left(s_{1}\mid s_{N}\right)&p\left(s_{2}\mid s_{N}\right)&\ldots&p\left(s_{N}\mid s_{N}\right)\end{array}\right)\left(\begin{array}{c}V\left(s_{1}\right)\\V\left(s_{2}\right)\\\vdots\\V\left(s_{N}\right)\end{array}\right) V(s1)V(s2)V(sN)=R(s1)R(s2)R(sN)+γp(s1s1)p(s1s2)p(s1sN)p(s2s1)p(s2s2)p(s2sN)p(sNs1)p(sNs2)p(sNsN)V(s1)V(s2)V(sN)

  • 从而可以导出向量 V V V的值,推到过程如下:

V = R + γ P V I V = R + γ P V V = ( I − γ P ) − 1 R \begin{aligned} \text{V}& =R+\gamma PV \\ \boldsymbol{IV}& =R+\gamma PV \\ \text{V}& =(I-\gamma\boldsymbol{P})^{-1}\boldsymbol{R} \end{aligned} VIVV=R+γPV=R+γPV=(IγP)1R

  • **注:**矩阵求逆的过程一般情况下都是元素个数的3次方。所以通过上述方法去求解,只适用于很小量的马尔可夫奖励过程。
2.2.3 计算马尔可夫奖励过程价值的迭代算法
  • 我们可以将迭代的方法应用于状态非常多的马尔可夫奖励过程,比如:动态规划的方法蒙特卡洛的方法(通过采样的办法计算它),时序差分学习的方法(时序差分学习是动态规划和蒙特卡洛方法的一个结合)。
2.2.3.1 蒙特卡洛方法
  • 因为计算到达全部状态的轨迹很多,所以蒙特卡洛(通过采样的办法计算)得到每个轨迹上的奖励,最后加上开始状态的及时回报,就得到了开始状态的价值。(其实就是用局部代替全体的路径,就是一个采样的方法。从而减少用到的计算资源)
2.2.3.2 动态规划方法
  • 就是不停的迭代,更行开始状态的价值,知道更新前后的开始状态价值差别不大,结束迭代。

2.3 马尔可夫决策过程

  • 相对于马尔可夫奖励过程,马尔可夫决策过程多了决策(决策是指动作),其他的定义与马尔可夫奖励过程的是类似的。
2.3.1 马尔可夫决策过程中的策略
  • 策略就是在某一个状态应该采取什么样的动作。策略函数如下:

π ( a ∣ s ) = p ( a t = a ∣ s t = s ) \pi(a\mid s)=p\left(a_t=a\mid s_t=s\right) π(as)=p(at=ast=s)

  • 已知马尔可夫决策过程和策略 π \pi π,我们可以把马尔可夫决策过程转换成马尔可夫奖励过程。在策略 π \pi π下,由 s s s状态转移到 s ′ s' s状态的概率转移矩阵如下:

P π ( s ′ ∣ s ) = ∑ a ∈ A π ( a ∣ s ) p ( s ′ ∣ s , a ) P_{\pi}\left(s'\mid s\right)=\sum_{a\in A}\pi(a\mid s)p\left(s'\mid s,a\right) Pπ(ss)=aAπ(as)p(ss,a)

  • 已知策略 π \pi π就是知道在状态 s s s时执行每个动作的概率。(所以在状态 s s s下和对应动作下 a a a的条件下转移到 s ’ s’ s的概率,把所有动作求和,就得到了在策略 π \pi π下从状态 s s s转移到 s ’ s’ s的概率)。
  • 对应的在策略 π \pi π下的奖励函数如下:

r π ( s ) = ∑ a ∈ A π ( a ∣ s ) R ( s , a ) r_\pi(s)=\sum_{a\in A}\pi(a\mid s)R(s,a) rπ(s)=aAπ(as)R(s,a)

  • 在状态 s s s和对应动作 a a a下的奖励,乘以在状态 s s s条件下执行动作 a a a的概率。

  • 马尔可夫决策过程和马尔可夫过程及其奖励过程的差异如下图。请添加图片描述

  • 左侧的马尔可夫过程,只有一个随机性(到达下一个状态的随机性)。右侧马尔可夫决策过程,有两个随机性(首先,是到达下一个动作的随机性,其次,是到达下一个状态的随机性)。

2.3.2 马尔可夫决策过程中的价值函数
  • 马尔可夫决策过程中的价值函数可定义为:

V π ( s ) = E π [ G t ∣ s t = s ] V_\pi(s)=\mathbb{E}_\pi\left[G_t\mid s_t=s\right] Vπ(s)=Eπ[Gtst=s]

  • 动作价值函数,即Q函数公式如下:

Q π ( s , a ) = E π [ G t ∣ s t = s , a t = a ] Q_\pi(s,a)=\mathbb{E}_\pi\left[G_t\mid s_t=s,a_t=a\right] Qπ(s,a)=Eπ[Gtst=s,at=a]

  • 这里的期望其实也是基于策略函数的。所以我们需要对策略函数进行一个加和,然后得到它的价值。对 Q Q Q函数中的动作进行加和,就可以得到价值函数:

V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_\pi(s)=\sum_{a\in A}\pi(a\mid s)Q_\pi(s,a) Vπ(s)=aAπ(as)Qπ(s,a)

  • 此处我们对 Q Q Q 函数的贝尔曼方程进行推导:

Q ( s , a ) = E [ G t ∣ s t = s , a t = a ] = E [ r t + 1 + γ r t + 2 + γ 2 r t + 3 + … ∣ s t = s , a t = a ] = E [ r t + 1 ∣ s t = s , a t = a ] + γ E [ r t + 2 + γ r t + 3 + γ 2 r t + 4 + … ∣ s t = s , a t = a ] = R ( s , a ) + γ E [ G t + 1 ∣ s t = s , a t = a ] = R ( s , a ) + γ E [ V ( s t + 1 ) ∣ s t = s , a t = a ] = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V ( s ′ ) \begin{aligned} Q(s,a)& =\mathbb{E}\left[G_{t}\mid s_{t}=s,a_{t}=a\right] \\ &=\mathbb{E}\left[r_{t+1}+\gamma r_{t+2}+\gamma^{2}r_{t+3}+\ldots\mid s_{t}=s,a_{t}=a\right] \\ &=\mathbb{E}\left[r_{t+1}|s_{t}=s,a_{t}=a\right]+\gamma\mathbb{E}\left[r_{t+2}+\gamma r_{t+3}+\gamma^{2}r_{t+4}+\ldots\mid s_{t}=s,a_{t}=a\right] \\ &=R(s,a)+\gamma\mathbb{E}[G_{t+1}|s_{t}=s,a_{t}=a] \\ &=R(s,a)+\gamma\mathbb{E}[V(s_{t+1})|s_{t}=s,a_{t}=a] \\ &=R(s,a)+\gamma\sum_{s^{\prime}\in S}p\left(s^{\prime}\mid s,a\right)V\left(s^{\prime}\right) \end{aligned} Q(s,a)=E[Gtst=s,at=a]=E[rt+1+γrt+2+γ2rt+3+st=s,at=a]=E[rt+1st=s,at=a]+γE[rt+2+γrt+3+γ2rt+4+st=s,at=a]=R(s,a)+γE[Gt+1st=s,at=a]=R(s,a)+γE[V(st+1)st=s,at=a]=R(s,a)+γsSp(ss,a)V(s)

  • 这个和前面的推到是一样的。
2.3.3 贝尔曼期望方程
  • 状态价值 V V V的贝尔曼方程如下:

V π ( s ) = E π [ r t + 1 + γ V π ( s t + 1 ) ∣ s t = s ] V_\pi(s)=\mathbb{E}_\pi\left[r_{t+1}+\gamma V_\pi\left(s_{t+1}\right)\mid s_t=s\right] Vπ(s)=Eπ[rt+1+γVπ(st+1)st=s]

  • 动作价值 Q Q Q的贝尔曼方程如下:

Q π ( s , a ) = E π [ r t + 1 + γ Q π ( s t + 1 , a t + 1 ) ∣ s t = s , a t = a ] Q_\pi(s,a)=\mathbb{E}_\pi\left[r_{t+1}+\gamma Q_\pi\left(s_{t+1},a_{t+1}\right)\mid s_t=s,a_t=a\right] Qπ(s,a)=Eπ[rt+1+γQπ(st+1,at+1)st=s,at=a]

  • 贝尔曼期望方程定义了当前状态与未来状态之间的关联。我们进一步进行简单的分解,先给下式:

V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) \begin{aligned}V_\pi(s)=\sum_{a\in A}\pi(a\mid s)Q_\pi(s,a)\end{aligned} Vπ(s)=aAπ(as)Qπ(s,a)

  • 接着给出

Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) Q_{\pi}(s,a)=R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)V_{\pi}\left(s'\right) Qπ(s,a)=R(s,a)+γsSp(ss,a)Vπ(s)

  • Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)代入 V π ( s ) V_\pi(s) Vπ(s)得到:

V π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) ) V_{\pi}(s)=\sum_{a\in A}\pi(a\mid s)\left(R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)V_{\pi}\left(s'\right)\right) Vπ(s)=aAπ(as)(R(s,a)+γsSp(ss,a)Vπ(s))

  • V π ( s ) V_\pi(s) Vπ(s)代入 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)得到:

Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) Q_{\pi}(s,a)=R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)\sum_{a'\in A}\pi\left(a'\mid s'\right)Q_{\pi}\left(s',a'\right) Qπ(s,a)=R(s,a)+γsSp(ss,a)aAπ(as)Qπ(s,a)

  • 以上两个公式是贝尔曼方程的另外两种形式
2.3.4 备份图

请添加图片描述

  • 如上图所示,当前状态的价值如下:

V π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) ) V_{\pi}(s)=\sum_{a\in A}\pi(a\mid s)\left(R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)V_{\pi}\left(s'\right)\right) Vπ(s)=aAπ(as)(R(s,a)+γsSp(ss,a)Vπ(s))
请添加图片描述

  • 如上图所示,图(b)的计算公式如下:

V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_\pi(s)=\sum_{a\in A}\pi(a\mid s)Q_\pi(s,a) Vπ(s)=aAπ(as)Qπ(s,a)

  • 图(b)给出了状态价值函数与$ Q 函 数 之 间 的 关 系 。 图 ( c ) 计 算 函数之间的关系。图(c)计算 cQ$函数为:

Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) Q_{\pi}(s,a)=R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)V_{\pi}\left(s'\right) Qπ(s,a)=R(s,a)+γsSp(ss,a)Vπ(s)

  • Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)代入 V π ( s ) V_\pi(s) Vπ(s)得:

V π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) ) V_{\pi}(s)=\sum_{a\in A}\pi(a\mid s)\left(R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)V_{\pi}\left(s'\right)\right) Vπ(s)=aAπ(as)(R(s,a)+γsSp(ss,a)Vπ(s))

请添加图片描述

  • 如上图所示, Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)公式如下:

Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) Q_{\pi}(s,a)=R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)\sum_{a'\in A}\pi\left(a'\mid s'\right)Q_{\pi}\left(s',a'\right) Qπ(s,a)=R(s,a)+γsSp(ss,a)aAπ(as)Qπ(s,a)

请添加图片描述

  • 如上图(c)所示, V π ( s ′ ) V_{\pi}\left(s'\right) Vπ(s)公式如下:

V π ( s ′ ) = ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) V_{\pi}\left(s'\right)=\sum_{a'\in A}\pi\left(a'\mid s'\right)Q_{\pi}\left(s',a'\right) Vπ(s)=aAπ(as)Qπ(s,a)

  • 将其代入前面的, Q Q Q函数可以得到未来 Q Q Q函数与当前 Q Q Q函数之间的关联,如下:

Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) Q_{\pi}(s,a)=R(s,a)+\gamma\sum_{s'\in S}p\left(s'\mid s,a\right)\sum_{a'\in A}\pi\left(a'\mid s'\right)Q_{\pi}\left(s',a'\right) Qπ(s,a)=R(s,a)+γsSp(ss,a)aAπ(as)Qπ(s,a)

2.3.5 策略评估
  • 策略评估为已知马尔可夫决策过程以及要采取的策略 π \pi π ,计算价值函数 V π ( s ) V_\pi(s) Vπ(s)​ 的过程。策略评估在有些地方也被称为(价值)预测,也就是预测我们当前采取的策略最终会产生多少价值。通过迭代,由上一次迭代的价值函数,求出这次迭代的价值函数。
2.3.6 预测与控制
  • 预测问题是给定一个策略,我们要确定它的价值函数是多少。而控制问题是在没有策略的前提下,我们要确定最佳的价值函数以及对应的决策方案(策略未知,然后找到最佳的价值函数和最优策略)
知识一:什么是强化学习,我就没有写,随便刷个短视频就可以知道了。
明天分享动态规划(策略评估、策略改进、策略迭代、价值迭代),一周快速入门强化学习,请大家多多支持谢谢。开始学很难受,一点一点推到,理解了就行,

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

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

相关文章

matlab不小心删除怎么撤回

预设项——>删除文件——>移动至临时文件夹 tem临时文件夹下

中级软考-软件设计师重要性与含金量以及就业方向(文末分享考试真题与笔记)

中级软考软件设计师在中国IT行业中具有重要的地位和高含金量,特别是在以下几个方面: 重要性与含金量 职业认可:该证书是国家认可的,证明持证人具备一定的软件设计和开发能力,对求职者在招聘市场上具有较强的竞争力。 …

如何在 iPad 上恢复已删除的历史记录?

iPad 配备了一个名为 Safari 的内置网络浏览器。这是一种在旅途中保持联系和浏览网页的强大且便捷的方式。但如果您不小心删除了浏览历史记录,则尝试恢复它可能会很令人沮丧。 幸运的是,您可以通过多种方法在 iPad 上恢复已删除的 Safari 历史记录。您应…

匹配全国地址的正则表达式工具类

正则表达式,匹配全国五级地址工具类,可以直接放在项目中使用~ 1级:国 (可忽略不填) 2级:**省、**自治区、**直辖市、**特别行政区、(四个直辖市可忽略不填) 3级:**市、**…

低代码和零代码开发方式如何改变软件开发行业?

低代码和零代码开发方式如何改变软件开发行业? 随着技术的进步和数字化转型的加速,软件开发行业正在经历一场革命。在这场革命中,低代码和零代码平台正逐渐成为企业开发应用的重要工具。它们以其简单易用的特性,极大地降低了软件…

面试笔记-js基础篇

1、因为在 JS 的最初版本中,使用的是 32 位系统,为了性能考虑使用低位存储了变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了&#xff…

计算机网络第1章(概述)万字笔记详细版

1.1、计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施计算机网络已经像水,电,煤气这些基础设施一样,成为我们生活中不可或缺的一部分 我国互联网发展状况 中国互联网络信息中心CNNIC 1.2、…

万字详解AI实践,零手写编码用AI完成开发 + 数据清洗 + 数据处理 的每日新闻推荐,带你快速成为AI大神

用AIdify完成前后端开发数据处理和数据清洗。 引言数据获取和数据处理dify构建workflow进行数据清洗前端页面构建和前后端交互总结 引言 AI时代对开发人员的加强是非常明显的,一个开发人员可以依靠AI横跨数个自己不熟悉的领域包括前后端、算法等。让我们来做个实践…

模板和静态文件

模板和静态文件 1、templates模板2、静态文件2.1、static目录2.2、引用静态文件 1、templates模板 "templates"目录用于存放模板文件,通常是用于动态生成页面的文件。 在app01目录下创建templates文件夹,html文件均保存在templates中 在urls.p…

Linux的hadoop集群部署

1.hadoop是一个分布式系统基础架构,主要解决海量数据额度存储与海量数据的分析计算问题 hdfs提供存储能力,yarn提供资源管理能力,MapReduce提供计算能力 2.安装 一:调整虚拟机内存,4G即可 二:下载安装包 网址:https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.4.0/…

【文心智能体 AI大师工坊】『​​​​​​​人间夸夸机』情感类智能体开发调优全过程详解

🚀『人间夸夸机』点击前往体验:https://snhoio.smartapps.baidu.com/?_swebScene3611000000000000 最近参加了百度文心智能体平台AI大师工坊🎉活动,在这个活动中,我利用文心平台提供的各种插件、大模型等工具&#xf…

Linux内核USB3.0驱动框架分析--USB主机控制器hcd驱动分析

一,概述 usb主机控制器驱动一般以platform的形式将驱动注册进内核,,因此我们需要从前面一篇文章的框图说起。主要分析下图中橙色部分的内容。 二,usb主机控制器相关函数 2.1 usb_create_hcd 我们来看一下usb_create_hcd函数&a…

如何成为 Rust 核心贡献者?Rust 开发的核​​心是什么?Rust 重要技术专家揭秘

10 月 17 - 18日,由 GOSIM 开源创新汇主办、CSDN 承办的 GOSIM CHINA 2024 将在北京盛大启幕。作为 GOSIM 开源年度大会的第三届盛会,本次活动邀请了 60 多位国际开源专家,汇聚了来自全球百余家顶尖科技企业、知名高校及开源社区的技术大咖、…

图像增强论文精读笔记-Kindling the Darkness: A Practical Low-light Image Enhancer(KinD)

1. 论文基本信息 论文标题:Kindling the Darkness: A Practical Low-light Image Enhancer 作者:Yonghua Zhang等 发表时间和期刊:2019;ACM MM 论文链接:https://arxiv.org/abs/1905.04161 2. 研究背景和动机 现有…

C++入门基础知识110—【关于C++ if...else 语句】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C if...else 语句的相关内容&#xff01…

SAP SD学习笔记09 - 受注传票中的不完全Log 和 Business Partner(取引先机能)

好久没写SD了,今天继续写。 上一章讲了SD的如下知识 - SD的售前的流程(引合和見積(询价和报价)) - 数据流的概念,主要就是后传票可以参照前传票,以实现数据的流动,减少输入 - Co…

PHP游泳馆会员管理系统-计算机毕业设计源码86627

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于游泳馆会员管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了游泳馆会员管理系统,它彻底改…

二分查找法 ← Python实现

【二分查找法】 ★ 二分查找,是一种效率较高的查找方法。但是,二分查找要求元素按关键字有序排列。 ★ 二分查找每一次查找都使查找范围缩小一半,与顺序查找相比,很显然会提高查找效率。为了标记查找过程中每一次的查找区间&#…

自动猫砂盆真的有必要吗?买自动猫砂盆不看这四点小心害死猫。

现在越来越多铲屎官选择购买自动猫砂盆来代替自己给猫咪铲屎,可是自动猫砂盆真的有必要吗?要知道,在现在忙碌的生活中,有很多人因为工作上的忙碌而不小心忽视了猫咪,猫咪的猫砂盆堆满粪便,要知道猫砂盆一天…

windows如何设置右键新建文档

1. windows如何设置右键新建文档 文章目录 1. windows如何设置右键新建文档1.1. 注意注意注意1.2. 参考资料1.3. 注册列表中各项的意思1.4. 右键新建文档1.4.1. 新建文件夹快捷键1.4.2. 新建txt文件快捷键1.4.3. 新建Word文档快捷键1.4.4. 新建PowerPoint文档快捷键1.4.5. 新建…