【强化学习的数学原理-赵世钰】课程笔记(一)基本概念

目录

    • 一. 内容概述
      • 1. 通过案例介绍强化学习中的基本概念
      • 2. 在马尔可夫决策过程(MDP)的框架下将概念正式描述出来
    • 二. 通过案例介绍强化学习中的基本概念
      • 1. 网格世界(A grid world example)
      • 2. 状态(State)
      • 3. 动作(Action)
      • 4. 状态转移(State transition)
      • 5. 策略(Policy)
      • 6. 奖励(Reward)
      • 7. 轨迹和收益(Trajectory and return)
      • 8. 折扣回报(discounted return)
      • 9. Episode
    • 三. 在马尔可夫决策过程(MDP)的框架下将概念正式描述出来
      • 1. 马尔可夫决策过程(Markov decision process) 的关键要素:
        • (1)集合(Sets)
        • (2)概率分布(Probability distribution (or called system model))
        • (3)策略(policy)—— 对应 Markov decision process 中的 decision
        • (4)马尔可夫性质:无记忆性质(Markov property: memoryless property)—— 对应 Markov decision process 中的 Markov
      • 2. 马尔可夫过程(Markov process)
      • 3. 马尔可夫过程(Markov process)与马尔可夫决策过程(Markov decision process) 的关系
    • 四. 总结

一. 内容概述

​ 第一部分主要有两个内容:

1. 通过案例介绍强化学习中的基本概念

2. 在马尔可夫决策过程(MDP)的框架下将概念正式描述出来

二. 通过案例介绍强化学习中的基本概念

1. 网格世界(A grid world example)

在这里插入图片描述

​ 本课程中始终使用的一个示例:网格世界

​ (1)网格类型:可访问(Accessible);禁止访问(forbidden);目标单元格(target cells);边界(boundary)

​ (2)机器人只能在相邻网格移动,不能斜着移动

​ 强化学习的任务:给任意一个起始点,找到一个比较好的路径到达目标。比较好的路径就是尽量避开禁止访问的地方,不要有无意义的拐弯,不要超越边界。

2. 状态(State)

状态(state):智能体相对于环境的状态

​ 以网格世界为例,智能体的位置就是状态。有九个可能的位置,因此也就有九种状态: S 1 、 S 2 , … , S 9 S_1、S_2,\dots,S_9 S1S2,,S9。这些字母是一个索引,真正对应的状态可能是在二维平面上的位置(x,y),更复杂的问题可能还会对应速度,加速度,或其他类型的状态信息等等。

在这里插入图片描述

状态空间(state space):把所有状态放在一起,所有状态的集合(set)
S = { s i } i = 1 9 S=\{s_i\}_{i=1}^9 S={si}i=19

3. 动作(Action)

动作(action):每个状态都有五种可能的行动: a 1 , … , a 5 a_1,\dots, a_5 a1,,a5

  • a 1 a_1 a1:向上移动;
  • a 2 a_2 a2: 向右移动;
  • a 3 a_3 a3: 向下移动;
  • a 4 a_4 a4: 向左移动;
  • a 5 a_5 a5: 保持不变;

状态的动作空间(action space):状态的所有可能动作的集合。
A ( s i ) = { a i } i = 1 5 A(s_i) = \{a_i\}_{i=1}^5 A(si)={ai}i=15
动作空间和状态有依赖关系,不同状态的动作空间不同,由上面的公式可知,A 是 s i s_i si的函数。

4. 状态转移(State transition)

​ 在采取行动(action)时,智能体可能会从一个状态移动到另一个状态。这种过程称为状态转移。

在这里插入图片描述

  • 在状态$ s_1$ 下,如果我们选择行动$ a_2$,那么下一个状态是什么?(向右移动一格)

s 1 → a 2 s 2 s_1 \xrightarrow{a_2} s_2 s1a2 s2

  • 在状态 s 1 s_1 s1 下,如果我们选择行动 a 1 a_1 a1,那么下一个状态是什么?(向上移动一格,会撞到边界,所以状态还是 s 1 s_1 s1

s 1 → a 1 s 1 s_1 \xrightarrow{a_1} s_1 s1a1 s1

**状态转换描述了智能体与环境的交互行为。**在游戏当中可以任意定义某个状态采取一个行动后状态的转换,但是在实际中不可以

注意禁止访问的区域(forbidden area):

例如:在状态 s 5 s_5 s5,如果我们选择操作 a 2 a_2 a2、 那么下一个状态是什么?

  • 情况 1:禁区可以进入,但会受到惩罚。那么

s 5 → a 2 s 6 s_5 \xrightarrow{a_2} s_6 s5a2 s6

  • 情况 2:禁区无法进入(如被围墙包围)

s 5 → a 2 s 5 s_5 \xrightarrow{a_2} s_5 s5a2 s5

​ 这边考虑的是第一种情况,这种情况更为普遍,也更具挑战性。因为如果把一些状态给排除掉的话,状态空间就小了,实际上做搜索的时候会更加容易。虽然进去forbidden area会的得到惩罚,但是也许进去之后,进到target area反而是最近的路径,所以有可能agent会冒险进到这个forbidden area。

表格表示法(Tabular representation): 使用表格来描述状态转换,表格的每一行对应状态(state),每一列对应行动(action)。

在这里插入图片描述

表格表示法只能表示确定性(deterministic)的情况。

**State transition probability:**使用概率描述状态转换

  • 直觉:在状态$ s_1$ 下,如果我们选择行动(take action)$ a_2 ,下一个状态就是 ,下一个状态就是 ,下一个状态就是 s_2$。
  • 数学:使用条件概率表示

p ( s 2 ∣ s 1 , a 2 ) = 1 p ( s i ∣ s 1 , a 2 ) = 0 ∀ i ≠ 2 \begin{align} p(s_2 |s_1,a_2) &= 1 \\ p(s_i |s_1,a_2) &= 0 \ \ \ \ \forall i \ne 2 \end{align} p(s2s1,a2)p(sis1,a2)=1=0    i=2

解释:假如当前时刻状态在 s 1 s_1 s1,采取动作 a 2 a_2 a2,那么下一时刻状态转移到 $s_2 的概率是 1 ,但是下一时刻转移到其他任意 的概率是1,但是下一时刻转移到其他任意 的概率是1,但是下一时刻转移到其他任意 i \ne 2$ 的状态的概率是 0 。

虽然这里仍然是确定性情况,但是也可以用条件概率**描述随机性的(stochastic)**状态转换(例如阵风),假如当前时刻状态在 s 1 s_1 s1,采取动作$ a_2 ,由于有风,有百分之 50 的概率到 ,由于有风,有百分之 50 的概率到 ,由于有风,有百分之50的概率到s_2$,有百分之 50 的概率到 s 5 s_5 s5

在这里插入图片描述

5. 策略(Policy)

策略告诉智能体在某一状态下应采取什么行动。

(1) 策略的直观表示法: 我们用箭头来描述策略。(图中的圆圈表示待在原地不动)

在这里插入图片描述

​ 基于这一策略,我们可以得到以下不同起点的轨迹(path,trajectory)。

在这里插入图片描述

(2)策略的数学表示法: 使用条件概率描述策略

确定性策略(deterministic policy):

​ 例如,对于状态 s 1 s_1 s1,它的策略 π \pi π 就是一个条件概率,它指定了任何一个状态下,采取任何一个动作(action)的概率是多少。
π ( a 1 ∣ s 1 ) = 0 π ( a 2 ∣ s 1 ) = 1 π ( a 3 ∣ s 1 ) = 0 π ( a 4 ∣ s 1 ) = 0 π ( a 5 ∣ s 1 ) = 0 \begin{align} \pi(a_1|s_1) &= 0 \\ \pi(a_2|s_1) &= 1 \\ \pi(a_3|s_1) &= 0 \\ \pi(a_4|s_1) &= 0 \\ \pi(a_5|s_1) &= 0 \\ \end{align} π(a1s1)π(a2s1)π(a3s1)π(a4s1)π(a5s1)=0=1=0=0=0
公式解释: 在状态 s 1 s_1 s1下,采取动作(take action) a 1 a_1 a1往上走的概率是 0;在状态 s 1 s_1 s1 下,采取动作(take action) a 2 a_2 a2 往右走的概率是 1,以此类推。

针对一个状态所有可能采取的动作的概率之和应该等于 1。

​ 上面例子只说了 s 1 , 还有 s 2 , … , s 9 s_1,还有 s_2,\dots,s_9 s1,还有s2,,s9,针对每个状态都要它的有策略。

不确定性策略(stochastic policy):

在这里插入图片描述

​ 在这一策略中,对于状态 s 1 s_1 s1,使用条件概率表示策略:
π ( a 1 ∣ s 1 ) = 0 π ( a 2 ∣ s 1 ) = 0.5 π ( a 3 ∣ s 1 ) = 0.5 π ( a 4 ∣ s 1 ) = 0 π ( a 5 ∣ s 1 ) = 0 \begin{align} \pi(a_1|s_1) &= 0 \\ \pi(a_2|s_1) &= 0.5 \\ \pi(a_3|s_1) &= 0.5 \\ \pi(a_4|s_1) &= 0 \\ \pi(a_5|s_1) &= 0 \\ \end{align} π(a1s1)π(a2s1)π(a3s1)π(a4s1)π(a5s1)=0=0.5=0.5=0=0
公式解释: 在状态 s 1 s_1 s1 下,采取动作(take action) a 1 a_1 a1 往上走的概率是 0;在状态 s 1 s_1 s1 下,采取动作(take action) a 2 a_2 a2 往右走的概率是 0.5,以此类推。

针对一个状态所有可能采取的动作的概率之和应该等于 1。

​ **(3) 策略的表格表示法:**每一行对应一个状态(state),每一列对应一个动作(action)

在这里插入图片描述

这样的表格可以描述确定性(deterministic)或随机性(stochastic)的情况,在编程的时候就是这么做的,会用一个数组或者矩阵表示这样的一个策略。

6. 奖励(Reward)

奖励(reward)是强化学习中最独特的概念之一。

奖励:智能体采取行动(take action)后获得的真实数字,是标量。

  • 如果这个数字是正数,则是正向奖励,代表对采取此类行动的鼓励。
  • 如果这个数字是负数,则是负向奖励,代表对采取此类行动的惩罚,不希望这样的行为发生。
  • 那么零奖励呢?代表没有惩罚。
  • 正数也可以意味着惩罚,负数也可以意味着奖励,这是数学上的技巧而已。

在这里插入图片描述

​ 在网格世界示例中,奖励设计如下:

  • 如果智能体试图离开边界,则让$ r_{bound} = -1$
  • 如果智能体试图进入禁区,让$ r_{forbid} = -1$
  • 如果行为体到达目标单元,让$ r_{target} = +1$
  • 其他情况下,智能体获得的奖励为 r = 0 r = 0 r=0

奖励可以被理解为一种人机界面(我们与机器交互的一种手段),我们可以用它来引导智能体按照我们的期望行事。

例如,有了上述设计的奖励,智能体就会尽量避免走出边界或踏入禁区,而会尽量进入目标区域。所以可以通过设计 reward,实现目标。

(1)奖励转换(reward transition)的表格表示法: 表格的每一行对应一个状态(state),每一列对应一个动作(action),表格中间表示在某个状态采取某个动作得到的奖励(reward)。

在这里插入图片描述

​ 表格只能表示确定性的情况(deterministic),比如在一个状态采取了一个行动,一定会得到某种奖励,但是实际上奖励(reward)的大小可能是不确定的,这时候可以使用下面的数学表示法表示。

(2)奖励的数学表示法: 条件概率

​ **直觉:**在状态 s 1 s_1 s1下,如果我们选择行动 a 1 a_1 a1,奖励为 − 1 -1 1

数学: p ( r = − 1 ∣ s 1 , a 1 ) = 1 a n d p ( r ≠ − 1 ∣ s 1 , a 1 ) = 0 p(r = -1|s_1,a_1) = 1 \ and \ p(r \ne -1 |s_1,a_1) = 0 p(r=1∣s1,a1)=1 and p(r=1∣s1,a1)=0

这里是一个确定性(deterministic)案例,在这个状态采取这个行动,一定会得到那个 reward。奖励转换(reward transition)也可能是随机(stoachstic)的。

例如,如果你努力学习,这个行为会被鼓励,就会得到正的奖励。但正的奖励的数值多少不确定。

奖励依赖于当前的状态和动作,而不是依赖于下一个状态。

  • 比如在 s 1 s_1 s1 选择动作 a 1 a_1 a1,会回到 s 1 s_1 s1

  • s 1 s_1 s1 选择动作 a 5 a_5 a5,也会在 s 1 s_1 s1

这两个行为的下一个状态应用,但动作不一样,reward 就不一样。

7. 轨迹和收益(Trajectory and return)

(1)策略1

在这里插入图片描述

轨迹(trajectory)是一条状态-行动-回报链:
s 1 → r = 0 a 2 s 2 → r = 0 a 3 s 5 → r = 0 a 3 s 8 → r = 1 a 2 s 9 s_1 \xrightarrow[r=0]{a_2} s_2 \xrightarrow[r=0]{a_3} s_5 \xrightarrow[r=0]{a_3} s_8 \xrightarrow[r=1]{a_2} s_9 s1a2 r=0s2a3 r=0s5a3 r=0s8a2 r=1s9
这条轨迹的收益(return)是沿轨迹(trajectory)收集的所有奖励(reward)的总和(The return of this trajectory is the sum of all the rewards collected along the trajectory:):
r e t u r n = 0 + 0 + 0 + 1 = 1 return = 0 + 0 + 0 + 1 = 1 return=0+0+0+1=1
(2)策略2

在这里插入图片描述

​ 不同的策略(policy)带来不同的轨迹(trajectory)
s 1 → r = 0 a 3 s 4 → r = − 1 a 3 s 7 → r = 0 a 2 s 8 → r = 1 a 2 s 9 s_1 \xrightarrow[r=0]{a_3} s_4 \xrightarrow[r=-1]{a_3} s_7 \xrightarrow[r=0]{a_2} s_8 \xrightarrow[r=1]{a_2} s_9 s1a3 r=0s4a3 r=1s7a2 r=0s8a2 r=1s9
​ 这条路径的收益是(The return of this path is):$ return = 0 − 1 + 0 + 1 = 0$


哪种策略更好?

  • 从直觉上将:第一个更好,因为它避开了禁区。
  • 在数学角度:第一种更好,因为它的收益(return)更大!

收益(return)可以用来评价一项策略(policy)的好坏

8. 折扣回报(discounted return)

在这里插入图片描述

轨迹可能是无限的(A trajectory may be infinite:):
s 1 → a 2 s 2 → a 3 s 5 → a 3 s 8 → a 2 s 9 → a 5 s 9 → a 5 s 9 … s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_3} s_8 \xrightarrow{a_2} s_9 {\color{blue}\xrightarrow{a_5} s_9 \xrightarrow{a_5} s_9 \dots } s1a2 s2a3 s5a3 s8a2 s9a5 s9a5 s9
​ 收益是( The return is ): r e t u r n = 0 + 0 + 0 + 1 + 1 + 1 + . . . = ∞ return = 0 + 0 + 0 + 1+1 + 1 + . . . = \infty return=0+0+0+1+1+1+...=

​ 这个定义是无效的,因为回报(return)发生了偏离,会发散!需要引入折扣率(折扣因子) (discounted rate): γ ∈ [ 0 , 1 ) \gamma \in [0, 1) γ[0,1)

​ 折扣率(discounted rate)和回报(return)结合就得到了折扣回报(Discounted return)
d i s c o u n t e d r e t u r n = 0 + γ 0 + γ 2 0 + γ 3 1 + γ 4 1 + γ 5 1 + … = γ 3 ( 1 + γ + γ 2 + … ) = γ 3 1 1 − γ \begin{align} discounted \ \ return & = 0 + \gamma 0 + \gamma^2 0 + \gamma^3 1 + \gamma^4 1 + \gamma ^5 1 + \dots \\ &=\gamma^3(1 + \gamma + \gamma^2 + \dots) = \gamma^3 \frac{1}{1 - \gamma} \end{align} discounted  return=0+γ0+γ20+γ31+γ41+γ51+=γ3(1+γ+γ2+)=γ31γ1
折扣回报(Discounted return)的作用: 1)总和变得有限;2)平衡远期和近期的回报(reward):

  • 如果 γ \gamma γ 接近于 0, $\gamma $ 的三次,五次方会很快的衰减掉,则**折扣回报(Discounted return)**的价值以==近期(最开始)==获得的奖励(reward)为主。
  • 如果 γ \gamma γ 接近于 1,未来的奖励(reward)衰减比较慢,则**折扣回报(Discounted return)**的价值以远期奖励为主。

​ 通过控制 γ ,能够控制智能体学到的策略,若减小 γ ,会让智能体变得更加短视(更加注重最近一些的奖励 reward);若 γ 较大,会让智能体变得更加远视(更加注重长远的奖励 reward)

9. Episode

在这里插入图片描述

​ 当智能体按照策略(policy)与环境交互时,可能会在某些终端状态(terminal states)停止。由此产生的轨迹(trajectory)称为一集(an episode)(或一次试验 trail)。

​ 例如:episode
s 1 → r = 0 a 2 s 2 → r = 0 a 3 s 5 → r = 0 a 3 s 8 → r = 1 a 2 s 9 s_1 \xrightarrow[r=0]{a_2} s_2 \xrightarrow[r=0]{a_3} s_5 \xrightarrow[r=0]{a_3} s_8 \xrightarrow[r=1]{a_2} s_9 s1a2 r=0s2a3 r=0s5a3 r=0s8a2 r=1s9
通常假定一集(An episode)是一个有限的轨迹(finite trajectory),有 episodes 的任务称为偶发任务(episodic tasks)

有些任务可能没有结束状态(have no terminal states),这意味着与环境的交互永远不会结束。这类任务被称为持续性任务(continuing tasks)。

在 "网格世界 "的例子中,我们是否应该在到达目标后停止?还是像刚才计算折扣回报( discounted return )的时候还可以继续让智能体执行策略,然后一直停到 s 9 s_9 s9 状态?

事实上,我们可以通过将偶发任务(episodic tasks)转换为持续任务(continuing tasks),用统一的数学方法来处理偶发任务和持续任务。

转换的两种方法:

  • 方案 1:将目标状态(target state)视为特殊的吸收状态(absorbing state)(absorbing state 就是在设置它的 state transition probability 的时候,如果当前状态就是 target 状态,不论采取什么样的 action 都会再回到这个状态;或者在这个状态的时候没有其他的 action ,可以修改 action space ,让它的 action 只有留在原地这样的一个 action)。一旦智能体达到吸收状态(absorbing state),就永远不会离开。因此它之后得到的所有奖励(reward ) r = 0 r = 0 r=0
  • 方案 2:将目标状态(target state)视为有策略的正常状态(a normal state with a policy)。如果策略好的话,智能体能够一直留在那里,收集正的收益(reward) ,策略不好的话智能体仍然可能离开目标状态,并在进入目标状态时获得 r = + 1 r = +1 r=+1 的收益。

我们在本课程中将考虑方案 2,这样我们就不需要将目标状态(target state)与其他状态区分开来,而可以将其视为正常状态(a normal state)。

三. 在马尔可夫决策过程(MDP)的框架下将概念正式描述出来

1. 马尔可夫决策过程(Markov decision process) 的关键要素:

(1)集合(Sets)
  • 状态(即 state space): 状态 S 的集合。
  • 行动(即 action space): 与状态 s ∈ S s \in S sS 相关联的行动集 A ( s ) A(s) A(s)
  • 奖励: 奖励 R ( s , a ) R(s,a) R(s,a)的集合 (从状态 s 出发,选择动作 a,即 take action a ,得到的 reward 一定来源于一个集合)
(2)概率分布(Probability distribution (or called system model))
  • 状态转换概率: 在状态 s s s下,采取行动 a a a,转换到状态 s ′ s' s 的概率为 p ( s ′ ∣ s , a ) p(s'|s, a) p(ss,a)
  • 奖励概率: 在状态 s s s下,采取行动 a a a,获得奖励 $ r $ 的概率为 $ p(r|s, a) $
(3)策略(policy)—— 对应 Markov decision process 中的 decision

​ 策略:在状态 s s s 下,选择行动 a a a 的概率为 π ( a ∣ s ) \pi(a|s) π(as)

(4)马尔可夫性质:无记忆性质(Markov property: memoryless property)—— 对应 Markov decision process 中的 Markov

p ( s t + 1 ∣ a t + 1 , s t , … , a 1 , s 0 ) = p ( s t + 1 ∣ a t + 1 , s t ) p ( r t + 1 ∣ a t + 1 , s t , … , a 1 , s 0 ) = p ( r t + 1 ∣ a t + 1 , s t ) p(s_{t+1}|a_{t+1},s_t,\dots,a_1,s_0) = p(s_{t+1}|a_{t+1},s_t) \\ p(r_{t+1}|a_{t+1},s_t,\dots,a_1,s_0) = p(r_{t+1}|a_{t+1},s_t) p(st+1at+1,st,,a1,s0)=p(st+1at+1,st)p(rt+1at+1,st,,a1,s0)=p(rt+1at+1,st)

​ 这是与历史无关的一个性质。

​ 比如最开始的状态是 s 0 s_0 s0,然后我采取了一个 action a 0 a_0 a0,慢慢的我走到 s t s_t st 的时候,我采取了一个 action 是 a t + 1 a_{t+1} at+1,这时候我跳到下一个状态 s t + 1 s_{t+1} st+1 的概率 等于 完全不考虑这些历史,也不管之前在什么地方,反正现在在 s t s_t st,现在 take action a t + 1 a_{t+1} at+1,会跑到 s t + 1 s_{t+1} st+1 的概率。

All the concepts introduced in this lecture can be put in the framework in MDP

2. 马尔可夫过程(Markov process)

​ 网格世界(The grid world)可以抽象为一个更通用的模型,即马尔可夫过程(Markov process)。

在这里插入图片描述

​ 圆圈代表状态(states),带箭头的链接代表采取 action 后的状态转换(state transition)。

3. 马尔可夫过程(Markov process)与马尔可夫决策过程(Markov decision process) 的关系

一旦给出策略,即策略确定下来,那么 policy 就和整个系统融为一体了,马尔可夫决策过程(Markov decision process)就变成了马尔可夫过程(Markov process)!

四. 总结

​ 通过使用网格世界的示例,我们展示了以下关键概念:

​ By using grid-world examples, we demonstrated the following key concepts:

  • State
  • Action
  • State transition, state transition probability p ( s ′ ∣ s , a ) p(s' |s, a) p(ss,a)
  • Reward, reward probability p ( r ∣ s , a ) p(r|s, a) p(rs,a)
  • Trajectory, episode, return, discounted return
  • Markov decision process

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

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

相关文章

Spring AOP + 自定义注解 实现公共字段的填充

Spring AOP 自定义注解 实现公共字段的填充 代码冗,不利于后期维护. 定义操作这些字段的方法类型 实现步骤: 自定义注解AutoFill,用于表示操作这些公共字段的方法自定义切面类AutoFillAspect,统一拦截,通过反射获取方法入参,并填充公共字段…

【THM】Burp Suite:Other Modules(其他模块)-初级渗透测试

介绍 除了广泛认可的Repeater和Intruder房间之外,Burp Suite 还包含几个鲜为人知的模块。这些将成为这个房间探索的重点。 重点将放在解码器、比较器、排序器和组织器工具上。它们促进了编码文本的操作,支持数据集的比较,允许分析捕获的令牌内的随机性,并帮助您存储和注释…

9、鸿蒙学习-开发及引用静态共享包(API 9)

HAR(Harmony Archive)是静态共享包,可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。…

MongoDB 6.1 及以上版本使用配置文件的方式启动报错 Unrecognized option: storage.journal.enabled

如果你使用的 MongoDB 的版本大于等于 6.1,并且在 MongoDB 的配置文件中编写了如下内容 storage:journal:# 启用或禁用持久性日志以确保数据文件保持有效和可恢复# true 启用;false 不启用# 64 位系统默认启用,启用后 MongoDB 可以在宕机后根…

Linux多进程通信(1)——无名管道及有名管道使用例程

管道是半双工通信,如果需要 双向通信,则需要建立两个管道, 无名管道:只能父子进程间通信,且是非永久性管道通信结构,当它访问的进程全部终止时,管道也随之被撤销 有名管道:进程间不需…

RK3568驱动指南|第十四篇 单总线-第162章DS18B20驱动读时序编写

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

Golang 开发实战day06 - Boolean Conditional

Golang 教程06 - Boolean & Conditional 1. Boolean & Conditional 1.1 什么是布尔类型? 想象一下,你正在玩一个古老的游戏,只有两个选项:是或否。在 Golang 中,这就是布尔类型,用 bool 关键字表…

【Linux实验室】DNS域名解析服务——超详细实验操作!

DNS域名解析 DNS域名解析服务——超详细实验操作!!!序言DNS 基本概述分布式、层次数据库DNS 层次结构DNS 查询步骤DNS 查询类型DNS服务器类型DNS 缓存反向 DNS 查询如何检查 DNS 记录是否生效 Bind解析服务Bind简介bind的服务类型 DNS域名解析…

深入解析实时数仓Doris:Rollup上卷表与查询

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 一、基本概念二、Aggregate 和 Unique 模型中的 ROLLUP三、Duplicate 模型中的 ROLLUP四、ROLLUP 调整前缀索引五、ROLLUP使…

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

写在前面 关于数据科学环境的建立,可以参考我的博客: 【深耕 Python】Data Science with Python 数据科学(1)环境搭建 往期数据科学博文: 【深耕 Python】Data Science with Python 数据科学(2&#xf…

每日面经分享(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件,编写以下测试脚本 import pytest import requests# 测试用例1:验证登录成功的情况 # 第一个测试用例验证登录成功的情况,发送有效的用户名和密…

iOS系统文件备份与还原:保护和管理手机中的关键数据

​ 目录 引言 用户登录工具和连接设备 查看设备信息,电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同,无法直接访问系统文件…

Chatgpt掘金之旅—有爱AI商业实战篇|文案写作|(三)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、前言 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&…

是否应该升级到ChatGPT 4.0?深度对比ChatGPT 3.5与4.0的差异

如果只是想简单地体验AI的魅力,感受大模型的独特之处,或是玩一玩文字游戏,那么升级至ChatGPT 4.0可能并非必需。然而,若你期望将AI作为提升工作学习效率的得力助手,那么我强烈建议你升级到ChatGPT 4.0。 如果你不知道…

Linux和Windows安装PHP依赖管理工具Composer

Composer 是 PHP 的一个依赖管理工具。它允许申明项目所依赖的代码库,会在项目中安装它们。 Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的…

【Springboot整合系列】SpringBoot整合WebService

目录 Web服务介绍Web服务的两种类型Web服务架构Web服务的主要特点Web服务使用场景Web服务标准和技术 WebService介绍WebService的作用适用场景不适用场景 WebService的原理三个角色相关概念 WebService开发框架代码实现服务端1.引入依赖2.实体类3.业务层接口接口实现类 4.配置类…

python对接百度云车牌识别

注册百度智能云,选择产品服务。 https://console.bce.baidu.com/ 每天赠送200次,做开发测试足够了。 在应用列表复制 AppID , API Key ,Secret Key 备用。 SDK下载地址 https://ai.baidu.com/sdk#ocr 下载SDK文件,解压,…

matlab中旋转矩阵函数

文章目录 matlab里的旋转矩阵、四元数、欧拉角四元数根据两向量计算向量之间的旋转矩阵和四元数欧拉角转旋转矩阵旋转矩阵转欧拉角旋转矩阵转四元数参考链接 matlab里的旋转矩阵、四元数、欧拉角 旋转矩阵dcmR四元数quatq[q0,q1,q2,q3]欧拉角angle[row,pitch,yaw] % 旋转矩阵…

前端跨页面通信方案介绍

在浏览器中,我们可以同时打开多个Tab页,每个Tab页可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab页面之间同步页面的数据、信息或状态。这就是本文说说…

算法学习——LeetCode力扣动态规划篇2(343. 整数拆分、96. 不同的二叉搜索树、416. 分割等和子集、1049. 最后一块石头的重量 II)

算法学习——LeetCode力扣动态规划篇2 343. 整数拆分 343. 整数拆分 - 力扣(LeetCode) 描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得…