强化学习(二)马尔科夫决策过程(MDP)

1. 简介

  • 马尔可夫决策过程正式地描述了强化学习的环境
  • 其中环境是完全可观测的
  • 即当前状态完全表征了这个过程
  • 几乎所有的强化学习问题都可以形式化为马尔可夫决策过程,例如:
    • 最优控制主要处理连续的马尔可夫决策过程
    • 部分可观察的问题可以转化为马尔可夫决策过程
    • 赌场问题是具有单一状态的马尔可夫决策过程

2. 马尔科夫性(Markov property)

当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质。具有马尔可夫性质的过程通常称之为马尔可夫过程。

用式子来表示:

P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S 1 , ⋯ , S t ] P[S_{t+1}|S_t]=P[S_{t+1}|S_1,\cdots,S_t] P[St+1St]=P[St+1S1,,St]

或者:

P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] \mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]

状态转移矩阵 P \mathcal{P} P 定义了从 s s s 的所有状态到所有后继状态 s ′ s' s 的转移概率,每一行的和都是1

3. 马尔可夫过程(Markov Process)

马尔科夫过程是一个无记忆的随机过程,比如一系列遵循马尔科夫性的随机状态 S 1 , S 2 , ⋯ S_1,S_2,\cdots S1,S2,

定义:马尔可夫过程(也称为马尔可夫链)是一个元组 ⟨ S , P ⟩ \left\langle S,\mathcal{P}\right \rangle S,P,其中:

  • S S S 是一个有限的状态集合
  • P \mathcal{P} P 是一个状态转移矩阵, P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] \mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]

例子:学生马尔可夫链

这个马尔科夫链从 S 1 = C 1 S_1=C1 S1=C1 开始, S 1 , S 2 , ⋯ , S T S_1,S_2,\cdots,S_T S1,S2,,ST 举例如下:

C 1 , C 2 , C 3 , P a s s , S l e e p C1,C2,C3,Pass,Sleep C1,C2,C3,Pass,Sleep
C 1 , F B , F B , C 1 , C 2 , S l e e p C1,FB,FB,C1,C2,Sleep C1,FB,FB,C1,C2,Sleep
C 1 , C 2 , C 3 , P u b , C 2 , C 3 , P a s s , S l e e p C1,C2,C3,Pub,C2,C3,Pass,Sleep C1,C2,C3,Pub,C2,C3,Pass,Sleep
C 1 , F B , F B , C 1 , C 2 , C 3 , P u b , C 1 , F B , F B , F B , C 1 , C 2 , C 3 , P u b , C 2 , S l e e p C1,FB,FB,C1,C2,C3,Pub,C1,FB,FB,FB,C1,C2,C3,Pub,C2,Sleep C1,FB,FB,C1,C2,C3,Pub,C1,FB,FB,FB,C1,C2,C3,Pub,C2,Sleep

学生马尔可夫链的转移矩阵:

4. 马尔可夫奖励过程(Markov Reward Process)

马尔可夫奖励过程是一个元组 ⟨ S , P , R , γ ⟩ \left\langle S,\mathcal{P},\mathcal{R},\gamma\right \rangle S,P,R,γ

  • S S S 是一个有限的状态集合
  • P \mathcal{P} P 是一个状态转移矩阵, P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] \mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]
  • R \mathcal{R} R 是一个奖励函数, R s = E [ R t + 1 ∣ S t = s ] \mathcal{R}_s=\mathbb{E}[R_{t+1}|S_t=s] Rs=E[Rt+1St=s]
  • γ \gamma γ 是一个折扣系数, γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]

例子:学生马尔可夫奖励过程(Student MRP)

G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + ⋯ = ∑ k = 0 ∞ γ k R t + k + 1 G_t=R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} + \cdots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} Gt=Rt+1+γRt+2+γ2Rt+3+=k=0γkRt+k+1 代表收获(return),是一个MDP中从某一个状态 S t S_t St 开始采样直到终止状态时所有奖励的有衰减的和。

其中:

  • 折扣系数(或者叫衰减系数) γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1] 是未来奖励的当下价值
  • k + 1 k+1 k+1 个时间步后获得奖励的价值为 γ k R \gamma^kR γkR
  • 即时奖励的价值高于延迟奖励:
    • γ \gamma γ 接近0会导致“近视”评估
    • γ \gamma γ 接近1会导致“远视”评估

大多数马尔可夫奖励和决策过程是带有折扣的。为什么?

  • 数学上折扣奖励更方便
  • 避免循环马尔可夫过程中出现无限回报
  • 对未来的不确定性可能无法完全表示
  • 如果奖励是金钱,即时奖励可能比延迟奖励赚取更多利息
  • 动物/人类行为表现出对即时奖励的偏好
  • 有时可以使用不带折扣的马尔可夫奖励过程(即 γ = 1 \gamma=1 γ=1),比如所有的序列都一定会终止

例子:Student MRP Returns

初始状态为 S 1 = C 1 S_1=C1 S1=C1 γ = 1 2 \gamma=\frac{1}{2} γ=21

G 1 = R 2 + γ R 3 + ⋯ + γ T − 2 R T G_1=R_2+\gamma R_3+\cdots+\gamma^{T-2}R_T G1=R2+γR3++γT2RT

γ = 0 \gamma=0 γ=0 时学生MRP的状态价值函数:

γ = 0.9 \gamma=0.9 γ=0.9 时学生MRP的状态价值函数:

γ = 1 \gamma=1 γ=1 时学生MRP的状态价值函数:

马尔科夫奖励过程的贝尔曼方程

状态价值函数可以被分解为两部分:

  • 即时奖励 R t + 1 R_{t+1} Rt+1
  • 后续状态的折扣价值 γ v ( S t + 1 ) \gamma v(S_{t+1}) γv(St+1)

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 + γ ( R t + 2 + γ R t + 3 + … ) ∣ S t = s ] = E [ R t + 1 + γ G t + 1 ∣ S t = s ] = E [ R t + 1 + γ v ( S t + 1 ) ∣ S t = s ] \begin{align*} v(s) &= \mathbb{E} [G_t \mid S_t = s] \\ &= \mathbb{E} [R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \ldots \mid S_t = s] \\ &= \mathbb{E} [R_{t+1} + \gamma (R_{t+2} + \gamma R_{t+3} + \ldots) \mid S_t = s] \\ &= \mathbb{E} [R_{t+1} + \gamma G_{t+1} \mid S_t = s] \\ &= \mathbb{E} [R_{t+1} + \gamma v(S_{t+1}) \mid S_t = s] \end{align*} v(s)=E[GtSt=s]=E[Rt+1+γRt+2+γ2Rt+3+St=s]=E[Rt+1+γ(Rt+2+γRt+3+)St=s]=E[Rt+1+γGt+1St=s]=E[Rt+1+γv(St+1)St=s]

马尔科夫奖励过程(MRPs)的贝尔曼方程:

v ( s ) = E [ R t + 1 + γ v ( S t + 1 ∣ S t = s ) ] v(s)=\mathbb{E}[R_{t+1}+\gamma v(S_{t+1}|S_t=s)] v(s)=E[Rt+1+γv(St+1St=s)]

v ( s ) = R s + γ ∑ s ′ ∈ S P s s ′ v ( s ′ ) v(s)=\mathcal{R}_s+\gamma \sum_{s'\in\mathcal{S}}\mathcal{P}_{ss'}v(s') v(s)=Rs+γsSPssv(s)

例子:Student MRP的贝尔曼方程

这里的 γ = 1 \gamma=1 γ=1,并且已经知道了Pub的状态价值为0.8,Pass的状态价值为10

贝尔曼方程的矩阵形式:

v = R + γ P v v=\mathcal{R}+\gamma \mathcal{P}v v=R+γPv

其中 v v v 是每个状态都有一个对应元素的列向量:

求解贝尔曼方程:

贝尔曼方程是一个线性方程,可以被直接求解:

v = R + γ P v ( I − γ P ) v = R v = ( I − γ P ) − 1 R \begin{align*} v &= \mathcal{R} + \gamma \mathcal{P} v \\ (I - \gamma \mathcal{P}) v &= \mathcal{R} \\ v &= (I - \gamma \mathcal{P})^{-1} \mathcal{R} \end{align*} v(IγP)vv=R+γPv=R=(IγP)1R

对于n个状态的计算复杂度为 O ( n 3 ) O(n^3) O(n3)

因为计算复杂度比较大,直接求解只可能在小规模的马尔科夫奖励过程中实现,在大规模马尔科夫奖励过程中可以使用很多迭代的方法,比如:

  • 动态规划(Dynamic Programming)
  • 蒙特卡洛法(Monte-Carlo evaluation)
  • 时序差分法(Temporal-Difference)

5. 马尔科夫决策过程 Markov Decision Process

马尔科夫决策过程(MDP)就是带有决策的马尔科夫奖励过程(MRP),它是一个所有状态都符合马尔科夫性质的环境。

马尔科夫决策过程是一个元组 ⟨ S , A , P , R , γ ⟩ \left\langle \mathcal{S},\mathcal{A},\mathcal{P},\mathcal{R},\gamma\right \rangle S,A,P,R,γ

  • S \mathcal{S} S是一个有限的状态集合
  • A \mathcal{A} A 是一个有限的动作集合
  • P \mathcal{P} P 是一个状态转移概率矩阵, P s s ′ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] \mathcal{P}_{ss'}^{a}=\mathbb{P}[S_{t+1}=s'|S_t=s,A_t=a] Pssa=P[St+1=sSt=s,At=a]
  • R \mathcal{R} R 是一个奖励函数, R = E [ R t + 1 ∣ S t = s , A t = a ] \mathcal{R}=\mathbb{E}[R_{t+1}|S_t=s,A_t=a] R=E[Rt+1St=s,At=a]
  • γ \gamma γ 是一个折扣率, γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]

例子:学生马尔科夫决策过程

策略 π \pi π是给定状态下动作的概率分布

π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \pi(a|s)=\mathbb{P}[A_t=a|S_t=s] π(as)=P[At=aSt=s]

  • 策略完全定义了一个agent的行为
  • MDP的策略只依赖当前状态(不依赖历史状态)
  • 比如,策略是静态的,与时间无关, A t ∼ π ( ⋅ ∣ S t ) , ∀ t > 0 A_t \sim \pi(\cdot \mid S_t), \forall t > 0 Atπ(St),t>0

给定一个MDP ⟨ S , A , P , R , γ ⟩ \left\langle \mathcal{S},\mathcal{A},\mathcal{P},\mathcal{R},\gamma\right \rangle S,A,P,R,γ 和一个策略 π \pi π,状态序列 S 1 , S 2 , ⋯ S_1,S_2,\cdots S1,S2, 是一个马尔科夫过程 ⟨ S , P π ⟩ \left\langle \mathcal{S}, \mathcal{P}^{\pi} \right \rangle S,Pπ,状态和奖励序列 S 1 , R 2 , S 2 , ⋯ S_1,R_2,S_2,\cdots S1,R2,S2, 是一个马尔科夫奖励过程 ⟨ S , P π , R π , γ ⟩ \left\langle \mathcal{S},\mathcal{P}^{\pi},\mathcal{R}^{\pi},\gamma\right \rangle S,Pπ,Rπ,γ,则有:

P s , s ′ π = ∑ a ∈ A π ( a ∣ s ) P s s ′ a \mathcal{P}^\pi_{s,s'} = \sum_{a \in \mathcal{A}} \pi(a \mid s) \mathcal{P}^a_{ss'} Ps,sπ=aAπ(as)Pssa

R s π = ∑ a ∈ A π ( a ∣ s ) R s a \mathcal{R}^\pi_s = \sum_{a \in \mathcal{A}} \pi(a \mid s) \mathcal{R}^a_s Rsπ=aAπ(as)Rsa

价值函数:

一个MDP的状态价值函数 v π ( s ) v_{\pi}(s) vπ(s) 是从状态 s s s 开始依据策略 π \pi π 的收获( G t G_t Gt)的期望:

v π ( s ) = E π [ G t ∣ S t = s ] v_{\pi}(s)=\mathbb{E}_{\pi}[G_t|S_t=s] vπ(s)=Eπ[GtSt=s]

动作价值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 是是从状态 s s s 开始依据策略 π \pi π 采取动作 a a a 的期望:

q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] q_{\pi}(s,a)=\mathbb{E}_{\pi}[G_t|S_t=s,A_t=a] qπ(s,a)=Eπ[GtSt=s,At=a]

例子:Student MDP的状态价值函数

Bellman期望方程 Bellman Expectation Equation

MDP下的状态价值函数和动作价值函数与MRP下的价值函数类似,可以改用下一时刻状态价值函数或动作价值函数来表达,具体方程如下:

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(S_{t+1}) \mid S_t = s \right] vπ(s)=Eπ[Rt+1+γvπ(St+1)St=s]

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(S_{t+1}, A_{t+1}) \mid S_t = s, A_t = a \right] qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)St=s,At=a]

根据动作价值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 和状态价值函数 v π ( s ) v_{\pi}(s) vπ(s) 的定义,我们很容易得到他们之间的转化关系公式:

利用上贝尔曼方程,我们也很容易用状态价值函数表示动作价值函数
,即:

当然,也可以做一层推算:

例子:Student MDP的贝尔曼期望方程

图中计算Pass的状态价值所用方程:

v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) ) v_\pi(s) = \sum_{a \in \mathcal{A}} \pi(a \mid s) \left( \mathcal{R}^a_s + \gamma \sum_{s' \in \mathcal{S}} \mathcal{P}^a_{ss'} v_\pi(s') \right) vπ(s)=aAπ(as)(Rsa+γsSPssavπ(s))

因为不是从Pub来推理Pass,而是从Pub的上一层 Class 1,Class 2和Class 3来推理,所以不用知道Pub的状态价值就可以计算。同理因为Sleep没有上一层,所以只需要用它的奖励就可以计算Pass的价值。

贝尔曼期望方程的矩阵形式:

Bellman期望方程可以用诱导MRP简洁地表示:

v π = R π + γ P π v π v_{\pi}=\mathcal{R}^{\pi}+\gamma \mathcal{P}^{\pi}v_{\pi} vπ=Rπ+γPπvπ

可以直接求解:

v π = ( I − γ P π ) − 1 R π v_\pi = (I - \gamma \mathcal{P}^\pi)^{-1} \mathcal{R}^\pi vπ=(IγPπ)1Rπ

6. 最优价值函数

定义:

最优状态价值函数 v ∗ ( s ) v_{*}(s) v(s) 指的是在所有策略产生的状态价值函数中,使状态s价值最大的那个函数:

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

最优动作价值函数 q ∗ ( s , a ) q_{*}(s,a) q(s,a) 指的是在所有策略产生的动作价值函数中,使状态动作对 ⟨ s , a ⟩ \left\langle s,a \right \rangle s,a价值最大的那个函数:

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

最优价值函数明确了MDP的最优可能表现,当我们知道了最优价值函数,也就知道了每个状态的最优价值,这时便认为这个MDP得到了解决。

例子:Student MDP的最优价值函数

例子:Student MDP的最优动作价值函数

最优策略

定义策略的部分排序:

π ≥ π ′ if  v π ( s ) ≥ v π ′ ( s ) , ∀ s \pi \geq \pi' \ \text{if} \ v_{\pi}(s) \geq v_{\pi'}(s),\ \forall s ππ if vπ(s)vπ(s), s

定理:

对于任意马尔可夫决策过程(Markov Decision Process, MDP):

  • 存在一个最优策略 π ∗ \pi_{*} π,它优于或等于所有其他策略,即 π ∗ ≥ π , ∀ π \pi_{*}\geq\pi,\ \forall \pi ππ, π
  • 所有最优策略都能达到最优状态价值函数,即 v π ∗ ( s ) = v ∗ ( s ) v_{\pi_{*}}(s)=v_{*}(s) vπ(s)=v(s)
  • 所有最优策略都能达到最优动作-价值函数,即 q π ∗ ( s , a ) = q ∗ ( s , a ) q_{\pi}{*}(s,a)=q_{*}(s,a) qπ(s,a)=q(s,a)

寻找最优策略

可以通过最大化最优行为价值函数来找到最优策略:

π ∗ ( a ∣ s ) = { 1 if  a = arg ⁡ max ⁡ a ∈ A q ∗ ( s , a ) 0 otherwise \pi_*(a|s) = \begin{cases} 1 & \text{if } a = \underset{a \in \mathcal{A}}{\arg\max}\ q_*(s, a) \\ 0 & \text{otherwise} \end{cases} π(as)= 10if a=aAargmax q(s,a)otherwise

  • 对于任何MDP问题,总存在一个确定性的最优策略;
  • 如果我们得到了最优动作价值函数 q ∗ ( s , a ) q_{*}(s,a) q(s,a),则表明我们已经找到了最优策略。

例子:Student MDP的最优策略

v ∗ v_{*} v的贝尔曼最优方程

最优值函数通过贝尔曼最优方程递归关联

Q ∗ Q_{*} Q的贝尔曼最优方程

v ∗ v_{*} v的贝尔曼最优方程(2)

Q ∗ Q_{*} Q的贝尔曼最优方程(2)

例子:Student MDP的贝尔曼最优方程

求解贝尔曼最优方程:

尔曼最优方程是非线性的,(一般情况下)没有封闭解,但有许多迭代求解方法来解决:价值迭代(Value Iteration)、策略迭代(Policy Iteration)、Q学习(Q-learning)、Sarsa等

还有一些马尔可夫决策过程(MDPs)的扩展,比如:

  • 无限和连续的马尔可夫决策过程(Infinite and continuous MDPs)
  • 部分可观测的马尔可夫决策过程(Partially observable MDPs)
  • 无折扣、平均奖励的马尔可夫决策过程(Undiscounted, average reward MDPs)

这里不做一一讲解

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

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

相关文章

Day16(贪心算法)——LeetCode45.跳跃游戏II763.划分字母区间

1 LeetCode45.跳跃游戏II 1.1 题目描述 与跳跃游戏类似,跳跃游戏II给定长为n的从0开始索引的整数数组nums,nums[i]是你在i处能向右跳跃的最大步数,求到达数组最后一个索引处需要跳跃的最少次数。   一个示例:nums[2,3,1,1,4]&a…

告别碎片化!两大先进分块技术如何提升RAG的语义连贯性?

研究动机 论文核心问题及研究背景分析 1. 研究领域及其重要性 研究领域:检索增强生成(Retrieval-Augmented Generation, RAG)系统,结合自然语言处理(NLP)与信息检索技术。重要性: RAG通过动态…

leetcode day37 474

474 一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:s…

二、信息时代社会结构的转变

到了信息时代,以及在核武器的前提下,上述的社会结构的逻辑,就有了一个根 本性的转变,就是暴力的成本和收益,都在下降。 暴力的成本在降低。比如说枪支,它的制造和分发都变得非常容易。现在我们都 知道有 3D 打印,它就好像工业时代的印刷机,印刷圣经或者书籍,使知识更加 普及和容…

Elasticsearch 堆内存使用情况和 JVM 垃圾回收

作者:来自 Elastic Kofi Bartlett 探索 Elasticsearch 堆内存使用情况和 JVM 垃圾回收,包括最佳实践以及在堆内存使用过高或 JVM 性能不佳时的解决方法。 堆内存大小是分配给 Elasticsearch 节点中 Java 虚拟机的 RAM 数量。 从 7.11 版本开始&#xff…

C++之类和对象:构造函数,析构函数,拷贝构造,赋值运算符重载

前提:如果一个类是空类,C中空类中真的什么都没有吗,不是的,编译器会自动生成6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 默认成员函数:构造函…

【专题五】位运算(1):常见位运算操作总结

📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;&#xff…

小草GrassRouter多卡聚合路由器聚合卫星、MESH网络应用解决方案

一、多网融合解决方案 卫星网络融合‌ 支持接入卫星通信模块,在无地面网络覆盖的极端场景(如偏远山区、海洋救援)下,形成“5G卫星”双链路冗余传输,卫星链路可作为核心通信备份,确保关键指令和视频数据实…

【Mybatis】Mybatis基础

文章目录 前言一、搭建MyBatis1.1 创建maven工程1.2 加入log4j日志功能1.3 MyBatis的增删改查1.4 核心配置文件详解 二、MyBatis获取参数值的两种方式2.1 单个字面量类型的参数2.2 多个字面量类型的参数2.3 map集合类型的参数2.4 实体类类型的参数2.5 使用Param标识参数 三、 M…

AI四大边界

大模型训练的边界并非由单一因素决定,而是技术、伦理、法律及实际应用需求共同作用的结果。以下从四个维度解析其边界来源: 一、技术边界:资源与能力的双重限制 计算资源瓶颈 成本与算力:大模型训练依赖海量GPU/TPU资源&#xff…

Twitter 工作原理|架构解析|社交APP逻辑

这是对Twitter 工作原理|架构解析|社交APP逻辑_哔哩哔哩_bilibili的学习,感谢up小凡生一 在两年半前,埃隆马斯克收购了Twitter,并且进行了一系列重大改革。今天我们来解析一下这个全球知名社交平台的架构。首先&#x…

Java基础学习内容大纲

Java基础学习内容大纲 第一阶段:建立编程思想 ​ Java概述:如何快速学习Java技术、Java历史、Java特点、Sublime、Java运行机制、JDK、转义字符、Java开发规范、Java API ​ 变量:数据类型、变量基本使用、数据类型转换 ​ 运算符:运算符介绍、算数运算符、关系运算符、…

如何对多维样本进行KS检验

对于形状为 ( 10000 , 1 , 304 ) (10000, 1, 304) (10000,1,304)的三维数据,若需使用scipy.stats.ks_2samp进行KS检验,可按以下步骤处理: 数据降维 KS检验要求输入为一维数组,需将三维数据展平或按特定维度聚合: • 方…

在 VMware 虚拟机中安装 Windows7

文章目录 前言1.安装VMware 虚拟机1. VMware虚拟机软件安装2. 虚拟机创建配置(超详细步骤)3. Windows7系统安装 3、安装 VMware tools4. VMware Tools安装与优化5. 总结与常见问题 前言 最近有不少朋友在问如何在电脑上同时使用多个操作系统&#xff0c…

直播预告|TinyVue 组件库高级用法:定制你的企业级UI体系

TinyVue 是一个跨端跨框架的企业级 UI 组件库,基于 renderless 无渲染组件设计架构,实现了一套代码同时支持 Vue2 和 Vue3,支持 PC 和移动端,包含 100 多个功能丰富的精美组件,可帮助开发者高效开发 Web 应用。 4 月 …

分治而不割裂—分治协同式敏捷工作模式

分治而不割裂:解密敏捷协同工作模式如何驱动大企业持续领跑 在数字化浪潮中,亚马逊仅用11天完成Prime Day全球技术架构升级,华为5G基站项目组创造过单周迭代47个功能模块的纪录,这些商业奇迹的背后,都隐藏着一个共性秘…

Python列表全面解析:从基础到高阶操作

一、为什么需要列表? 在Python中,列表是可变有序序列,用于存储多个元素的容器。相较于单一变量存储独立值,列表能更高效地管理批量数据,其特点包括: ​引用存储:列表元素存储的是对象的引用​…

Spring知识点梳理

一、Spring(Spring Framework) 1、IOC(控制反转) 1)什么是IOC控制反转? 为了解藕,有反转就有“正转”,“正转”就是程序员手动 new对象;“反转”就是将对象的创建、对…

SpringBoot启动后自动执行方法的各种方式-笔记

1. SpringBoot启动后自动执行方法的各种方式 1.1 PostConstruct 注解 作用:在依赖注入完成后执行初始化方法。 适用场景:需要在Bean初始化时执行某些操作(如配置、预加载数据)。 注意:该方法在Bean初始化阶段执行&…

基础知识-java流steam

Java Stream 流详解 一、Stream 概述 #mermaid-svg-ZXmu5UZgAcGGq8EN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZXmu5UZgAcGGq8EN .error-icon{fill:#552222;}#mermaid-svg-ZXmu5UZgAcGGq8EN .error-text{fil…