基于“蘑菇书”的强化学习知识点(四):贝尔曼方程
贝尔曼方程
- 摘要
- 贝尔曼方程(Bellman Equation)详解
- 1. 核心思想
- 2. 基本概念
- 3. 贝尔曼方程的两种形式
- (1) 状态值函数的贝尔曼方程
- (2) 动作值函数的贝尔曼方程
- 4. 贝尔曼最优方程(Bellman Optimality Equation)
- 5. 示例:网格世界(Grid World)
- 详细解释与分步计算示例
- 5.1 环境设定
- 5.2 贝尔曼方程的目标
- 5.3 状态转移分析
- 5.4 贝尔曼方程展开
- 5.5 建立其他状态的方程
- 5.6 联立方程求解
- 迭代1:所有状态值初始化为0
- 迭代2:更新其他状态值
- **迭代3**:继续更新
- 5.7 结果解释
- 总结
- 6. 贝尔曼方程的意义
- 总结
摘要
本系列知识点讲解基于蘑菇书EasyRL中的内容进行详细的疑难点分析!具体内容请阅读蘑菇书EasyRL!
对应蘑菇书EasyRL——2.2.2 贝尔曼方程
贝尔曼方程(Bellman Equation)详解
贝尔曼方程是强化学习中的核心数学工具,用于递归地分解状态或动作的价值,将当前决策的即时奖励与未来状态的长期价值相结合。它是动态规划(Dynamic Programming)和强化学习算法(如 Q-learning、策略迭代)的理论基础。
1. 核心思想
贝尔曼方程的核心思想是:
一个状态(或动作)的价值 = 即时奖励 + 未来奖励的折扣期望值
通过递归地将复杂问题拆解为子问题,最终形成可计算的表达式。
2. 基本概念
- 状态值函数(State Value Function):
表示在策略 π \pi π 下,从状态 s s s 出发的长期预期累积奖励,记为 V π ( s ) V^\pi(s) Vπ(s)。 - 动作值函数(Action Value Function):
表示在策略 π \pi π 下,从状态 s s s 执行动作 a a a 后的长期预期累积奖励,记为 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a)。 - 折扣因子(Discount Factor):
记为 γ ∈ [ 0 , 1 ] \gamma \in [0, 1] γ∈[0,1],用于权衡即时奖励与未来奖励的重要性(通常 γ < 1 \gamma < 1 γ<1 避免无限累积)。
3. 贝尔曼方程的两种形式
(1) 状态值函数的贝尔曼方程
V π ( s ) = E π [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) ] V^\pi(s) = \mathbb{E}_\pi \left[ R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) V^\pi(s') \right] Vπ(s)=Eπ[R(s,a)+γs′∑P(s′∣s,a)Vπ(s′)]
- 解释:
当前状态 s s s 的价值等于:- 即时奖励 R ( s , a ) R(s, a) R(s,a)(执行动作 a a a 后的直接收益);
- 加上所有可能下一状态 s ′ s' s′ 的未来奖励期望值,按转移概率 P ( s ′ ∣ s , a ) P(s' \mid s, a) P(s′∣s,a) 加权,并乘以折扣因子 γ \gamma γ。
(2) 动作值函数的贝尔曼方程
Q π ( s , a ) = R ( s , a ) + γ E π [ ∑ s ′ P ( s ′ ∣ s , a ) ∑ a ′ π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) ] Q^\pi(s, a) = R(s, a) + \gamma \mathbb{E}_\pi \left[ \sum_{s'} P(s' \mid s, a) \sum_{a'} \pi(a' \mid s') Q^\pi(s', a') \right] Qπ(s,a)=R(s,a)+γEπ[s′∑P(s′∣s,a)a′∑π(a′∣s′)Qπ(s′,a′)]
- 解释:
动作 a a a 在状态 s s s 下的价值等于:- 即时奖励 R ( s , a ) R(s, a) R(s,a);
- 加上所有可能下一状态 s ′ s' s′ 和动作 a ′ a' a′ 的未来奖励期望值,按转移概率和策略概率加权。
4. 贝尔曼最优方程(Bellman Optimality Equation)
贝尔曼最优方程描述了在最优策略 π ∗ \pi^* π∗ 下的值函数关系:
V ∗ ( s ) = max a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ∗ ( s ′ ) ] V^*(s) = \max_a \left[ R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) V^*(s') \right] V∗(s)=amax[R(s,a)+γs′∑P(s′∣s,a)V∗(s′)] Q ∗ ( s , a ) = R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) max a ′ Q ∗ ( s ′ , a ′ ) Q^*(s, a) = R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) \max_{a'} Q^*(s', a') Q∗(s,a)=R(s,a)+γs′∑P(s′∣s,a)a′maxQ∗(s′,a′)
- 核心思想:
最优策略会选择使当前动作的即时奖励 + 未来最大可能奖励最大化的动作。
5. 示例:网格世界(Grid World)
详细解释与分步计算示例
为了更清晰地说明网格世界例子中 V π ( s 0 ) ≈ 2.1 V^\pi(s_0) \approx 2.1 Vπ(s0)≈2.1 的计算过程,我们完全通过文字描述和公式推导来展示,无需依赖图片。
5.1 环境设定
- 网格布局:
一个 3x3 的网格,状态编号如下(按行优先):s6 | s7 | s8(终点,奖励+10) s3 | s4 | s5 s0 | s1 | s2- 初始状态:机器人位于中心 s 0 s_0 s0。
- 终点状态: s 8 s_8 s8,到达后回合结束,奖励+10。
- 其他移动:每步奖励为-1(惩罚机器人移动耗时)。
- 动作:上、下、左、右。若移动导致出界,则留在原地。
- 策略:随机策略(各方向概率均为 25%)。
- 折扣因子: γ = 0.9 \gamma = 0.9 γ=0.9。
5.2 贝尔曼方程的目标
计算在随机策略下,状态 s 0 s_0 s0 的值函数 V π ( s 0 ) V^\pi(s_0) Vπ(s0)。根据贝尔曼方程:
V π ( s ) = ∑ a π ( a ∣ s ) [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) ] V^\pi(s) = \sum_a \pi(a|s) \left[ R(s,a) + \gamma \sum_{s'} P(s'|s,a) V^\pi(s') \right] Vπ(s)=a∑π(a∣s)[R(s,a)+γs′∑P(s′∣s,a)Vπ(s′)]
对于随机策略, π ( a ∣ s ) = 0.25 \pi(a|s) = 0.25 π(a∣s)=0.25(四个方向概率均等)。
5.3 状态转移分析
从 s 0 s_0 s0 出发的四个动作:
- 向上:移动到 s 3 s_3 s3,奖励-1。
- 向下: s 0 s_0 s0 的下方是网格外,因此留在 s 0 s_0 s0,奖励-1。
- 向左: s 0 s_0 s0 的左方是网格外,因此留在 s 0 s_0 s0,奖励-1。
- 向右:移动到 s 1 s_1 s1,奖励-1。
因此,从 s 0 s_0 s0 出发的所有可能转移为:
{ s 0 → 上 s 3 , R = − 1 s 0 → 下 s 0 , R = − 1 s 0 → 左 s 0 , R = − 1 s 0 → 右 s 1 , R = − 1 \begin{cases} s_0 \xrightarrow{\text{上}} s_3, & R = -1 \\ s_0 \xrightarrow{\text{下}} s_0, & R = -1 \\ s_0 \xrightarrow{\text{左}} s_0, & R = -1 \\ s_0 \xrightarrow{\text{右}} s_1, & R = -1 \\ \end{cases} ⎩ ⎨ ⎧s0上s3,s0下s0,s0左s0,s0右s1,R=−1R=−1R=−1R=−1
5.4 贝尔曼方程展开
将贝尔曼方程应用于 s 0 s_0 s0:
V π ( s 0 ) = 0.25 [ ( − 1 + 0.9 V π ( s 3 ) ) ] + 0.25 [ ( − 1 + 0.9 V π ( s 0 ) ) ] + 0.25 [ ( − 1 + 0.9 V π ( s 0 ) ) ] + 0.25 [ ( − 1 + 0.9 V π ( s 1 ) ) ] V^\pi(s_0) = 0.25 \left[ (-1 + 0.9 V^\pi(s_3)) \right] + 0.25 \left[ (-1 + 0.9 V^\pi(s_0)) \right] + 0.25 \left[ (-1 + 0.9 V^\pi(s_0)) \right] + 0.25 \left[ (-1 + 0.9 V^\pi(s_1)) \right] Vπ(s0)=0.25[(−1+0.9Vπ(s3))]+0.25[(−1+0.9Vπ(s0))]+0.25[(−1+0.9Vπ(s0))]+0.25[(−1+0.9Vπ(s1))]
化简后:
V π ( s 0 ) = 0.25 × 4 × ( − 1 ) + 0.25 × 0.9 [ V π ( s 3 ) + V π ( s 0 ) + V π ( s 0 ) + V π ( s 1 ) ] V^\pi(s_0) = 0.25 \times 4 \times (-1) + 0.25 \times 0.9 \left[ V^\pi(s_3) + V^\pi(s_0) + V^\pi(s_0) + V^\pi(s_1) \right] Vπ(s0)=0.25×4×(−1)+0.25×0.9[Vπ(s3)+Vπ(s0)+Vπ(s0)+Vπ(s1)]
V π ( s 0 ) = − 1 + 0.225 [ V π ( s 3 ) + V π ( s 0 ) + V π ( s 0 ) + V π ( s 1 ) ] V^\pi(s_0) = -1 + 0.225 \left[ V^\pi(s_3) + V^\pi(s_0) + V^\pi(s_0) + V^\pi(s_1) \right] Vπ(s0)=−1+0.225[Vπ(s3)+Vπ(s0)+Vπ(s0)+Vπ(s1)]
5.5 建立其他状态的方程
为了求解 V π ( s 0 ) V^\pi(s_0) Vπ(s0),需为其他相关状态(如 s 1 , s 3 , s 5 s_1, s_3, s_5 s1,s3,s5)建立方程。
(1) 状态 s 1 s_1 s1 的方程
-
动作分析:
- 向上:移动到 s 4 s_4 s4,奖励-1。
- 向下:出界,留在 s 1 s_1 s1,奖励-1。
- 向左:移动到 s 0 s_0 s0,奖励-1。
- 向右:移动到 s 2 s_2 s2,奖励-1。
-
贝尔曼方程:
V π ( s 1 ) = − 1 + 0.225 [ V π ( s 4 ) + V π ( s 1 ) + V π ( s 0 ) + V π ( s 2 ) ] V^\pi(s_1) = -1 + 0.225 \left[ V^\pi(s_4) + V^\pi(s_1) + V^\pi(s_0) + V^\pi(s_2) \right] Vπ(s1)=−1+0.225[Vπ(s4)+Vπ(s1)+Vπ(s0)+Vπ(s2)]
(2) 状态 s 3 s_3 s3 的方程
-
动作分析:
- 向上:移动到 s 6 s_6 s6,奖励-1。
- 向下:移动到 s 0 s_0 s0,奖励-1。
- 向左:出界,留在 s 3 s_3 s3,奖励-1。
- 向右:移动到 s 4 s_4 s4,奖励-1。
-
贝尔曼方程:
V π ( s 3 ) = − 1 + 0.225 [ V π ( s 6 ) + V π ( s 0 ) + V π ( s 3 ) + V π ( s 4 ) ] V^\pi(s_3) = -1 + 0.225 \left[ V^\pi(s_6) + V^\pi(s_0) + V^\pi(s_3) + V^\pi(s_4) \right] Vπ(s3)=−1+0.225[Vπ(s6)+Vπ(s0)+Vπ(s3)+Vπ(s4)]
(3) 状态 s 5 s_5 s5 的方程
-
动作分析:
- 向上:移动到 s 8 s_8 s8,奖励+10(终止状态)。
- 向下:移动到 s 2 s_2 s2,奖励-1。
- 向左:移动到 s 4 s_4 s4,奖励-1。
- 向右:出界,留在 s 5 s_5 s5,奖励-1。
-
贝尔曼方程:
V π ( s 5 ) = 0.25 [ ( 10 + 0.9 × 0 ) ] + 0.25 [ ( − 1 + 0.9 V π ( s 2 ) ) ] + 0.25 [ ( − 1 + 0.9 V π ( s 4 ) ) ] + 0.25 [ ( − 1 + 0.9 V π ( s 5 ) ) ] V^\pi(s_5) = 0.25 \left[ (10 + 0.9 \times 0) \right] + 0.25 \left[ (-1 + 0.9 V^\pi(s_2)) \right] + 0.25 \left[ (-1 + 0.9 V^\pi(s_4)) \right] + 0.25 \left[ (-1 + 0.9 V^\pi(s_5)) \right] Vπ(s5)=0.25[(10+0.9×0)]+0.25[(−1+0.9Vπ(s2))]+0.25[(−1+0.9Vπ(s4))]+0.25[(−1+0.9Vπ(s5))]
由于 s 8 s_8 s8 是终止状态,其值函数 V π ( s 8 ) = 0 V^\pi(s_8) = 0 Vπ(s8)=0,因此:
V π ( s 5 ) = 0.25 × 10 + 0.25 × ( − 1 + 0.9 V π ( s 2 ) ) + 0.25 × ( − 1 + 0.9 V π ( s 4 ) ) + 0.25 × ( − 1 + 0.9 V π ( s 5 ) ) V^\pi(s_5) = 0.25 \times 10 + 0.25 \times (-1 + 0.9 V^\pi(s_2)) + 0.25 \times (-1 + 0.9 V^\pi(s_4)) + 0.25 \times (-1 + 0.9 V^\pi(s_5)) Vπ(s5)=0.25×10+0.25×(−1+0.9Vπ(s2))+0.25×(−1+0.9Vπ(s4))+0.25×(−1+0.9Vπ(s5))
化简后:
V π ( s 5 ) = 2.5 + 0.225 [ V π ( s 2 ) + V π ( s 4 ) + V π ( s 5 ) ] − 0.75 V^\pi(s_5) = 2.5 + 0.225 \left[ V^\pi(s_2) + V^\pi(s_4) + V^\pi(s_5) \right] - 0.75 Vπ(s5)=2.5+0.225[Vπ(s2)+Vπ(s4)+Vπ(s5)]−0.75
V π ( s 5 ) = 1.75 + 0.225 [ V π ( s 2 ) + V π ( s 4 ) + V π ( s 5 ) ] V^\pi(s_5) = 1.75 + 0.225 \left[ V^\pi(s_2) + V^\pi(s_4) + V^\pi(s_5) \right] Vπ(s5)=1.75+0.225[Vπ(s2)+Vπ(s4)+Vπ(s5)]
5.6 联立方程求解
假设所有非终点状态的初始值函数为0,通过迭代法逐步逼近真实值。以下是简化后的迭代过程:
迭代1:所有状态值初始化为0
V 0 ( s 0 ) = 0 , V 0 ( s 1 ) = 0 , V 0 ( s 2 ) = 0 , V 0 ( s 3 ) = 0 , V 0 ( s 4 ) = 0 , V 0 ( s 5 ) = 0 V_0(s_0) = 0, \quad V_0(s_1) = 0, \quad V_0(s_2) = 0, \quad V_0(s_3) = 0, \quad V_0(s_4) = 0, \quad V_0(s_5) = 0 V0(s0)=0,V0(s1)=0,V0(s2)=0,V0(s3)=0,V0(s4)=0,V0(s5)=0
代入方程计算 V 1 ( s 0 ) V_1(s_0) V1(s0):
V 1 ( s 0 ) = − 1 + 0.225 × ( 0 + 0 + 0 + 0 ) = − 1 V_1(s_0) = -1 + 0.225 \times (0 + 0 + 0 + 0) = -1 V1(s0)=−1+0.225×(0+0+0+0)=−1
迭代2:更新其他状态值
类似地,计算 V 1 ( s 1 ) = − 1 V_1(s_1) = -1 V1(s1)=−1, V 1 ( s 3 ) = − 1 V_1(s_3) = -1 V1(s3)=−1, V 1 ( s 5 ) = 1.75 V_1(s_5) = 1.75 V1(s5)=1.75。
重新计算 V 2 ( s 0 ) V_2(s_0) V2(s0):
V 2 ( s 0 ) = − 1 + 0.225 × ( − 1 + − 1 + − 1 + − 1 ) = − 1 + 0.225 × ( − 4 ) = − 1.9 V_2(s_0) = -1 + 0.225 \times (-1 + -1 + -1 + -1) = -1 + 0.225 \times (-4) = -1.9 V2(s0)=−1+0.225×(−1+−1+−1+−1)=−1+0.225×(−4)=−1.9
迭代3:继续更新
经过多次迭代后,值函数逐渐收敛。最终,经过约10次迭代,得到近似解。(实际计算需解线性方程组或编程实现迭代,此处为简化说明)。
5.7 结果解释
- 正值含义:尽管每步奖励为-1,但机器人有一定概率(通过随机策略)到达终点 s 8 s_8 s8 获得+10奖励,因此长期期望累积奖励为正值。
- 折扣因子影响: γ = 0.9 \gamma = 0.9 γ=0.9 表示未来奖励的权重较高,鼓励机器人尽快到达终点。
- 策略优化方向:若采用确定性策略(如始终向右或向上),值函数会更高。
总结
- 明确状态转移和奖励机制;
- 为每个状态建立贝尔曼方程;
- 通过迭代法或矩阵求逆解线性方程组。
实际应用中,通常使用动态规划(如策略迭代)或时序差分学习(如 Q-learning)自动完成这一过程。
6. 贝尔曼方程的意义
- 理论价值:为值函数提供了递归定义,使强化学习问题可解。
- 实际应用:
- 动态规划:通过迭代更新值函数(如策略迭代、值迭代)。
- 时序差分学习(TD Learning):结合贝尔曼方程进行在线学习(如 Q-learning)。
- 深度强化学习:用神经网络逼近值函数(如 DQN)。
总结
贝尔曼方程是强化学习中连接即时奖励与长期价值的桥梁,通过递归分解问题,为策略评估和优化提供了数学基础。理解它是掌握 Q-learning、策略梯度等算法的关键步骤。
相关文章:
基于“蘑菇书”的强化学习知识点(四):贝尔曼方程
贝尔曼方程 摘要贝尔曼方程(Bellman Equation)详解1. 核心思想2. 基本概念3. 贝尔曼方程的两种形式(1) 状态值函数的贝尔曼方程(2) 动作值函数的贝尔曼方程 4. 贝尔曼最优方程(Bellman Optimality Equation)5. 示例:网…...
Guided Decoding (借助FSM,有限状态自动机)
VLLM对结构化输出的支持: vllm/docs/source/features/structured_outputs.md at main vllm-project/vllm GitHub VLLM对tool call的支持: vllm/docs/source/features/tool_calling.md at main vllm-project/vllm GitHub 以上指定输出格式…...
ComfyUI工作流 图像反推生成人像手办人像参考(SDXL版)
文章目录 图像反推生成人像手办人像参考SD模型Node节点工作流程效果展示开发与应用图像反推生成人像手办人像参考 本工作流旨在通过利用 Stable Diffusion XL(SDXL)模型和相关辅助节点,实现高效的人像参考生成和手办设计。用户可通过加载定制的模型、LORA 调整和控制节点对…...
C++11新特性之long long超长整形
1.介绍 long long 超长整形是C11标准新添加的,用于表示更大范围整数的类型。 2.用法 占用空间:至少64位(8个字节)。 对于有符号long long 整形,后缀用“LL”或“II”标识。例如,“10LL”就表示有符号超长整…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.5 高级索引应用:图像处理中的区域提取
2.5 高级索引应用:图像处理中的区域提取 目录/提纲 #mermaid-svg-BI09xc20YqcpUam7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BI09xc20YqcpUam7 .error-icon{fill:#552222;}#mermaid-svg-BI09xc20…...
响应式编程_01基本概念:前世今生
文章目录 引言响应式编程的技术优势全栈式响应式编程从传统开发模式到异步执行技术Web 请求与 I/O 模型异步调用的实现技术回调Future机制 响应式编程实现方法观察者模式发布-订阅模式数据流与响应式 响应式宣言和响应式系统 引言 大流量、高并发的访问请求的项目,…...
系统URL整合系列视频一(需求方案)
视频 系统URL整合系列视频一(需求方案) 视频介绍 (全国)某大型分布式系统Web资源URL整合需求实现方案讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格,控制粒度也越来越细。安全级别提高的同时也增…...
C#中的委托(Delegate)
什么是委托? 首先,我们要知道C#是一种强类型的编程语言,强类型的编程语言的特性,是所有的东西都是特定的类型 委托是一种存储函数的引用类型,就像我们定义的一个 string str 一样,这个 str 变量就是 string 类型. 因为C#中没有函数类型,但是可以定义一个委托类型,把这个函数…...
Ubuntu 24.04 安装 Poetry:Python 依赖管理的终极指南
Ubuntu 24.04 安装 Poetry:Python 依赖管理的终极指南 1. 更新系统包列表2. 安装 Poetry方法 1:使用官方安装脚本方法 2:使用 Pipx 安装 3. 配置环境变量4. 验证安装5. 配置 Poetry(可选)设置虚拟环境位置配置镜像源 6…...
爱普生L3153打印机无线连接配置流程
家里使用的是移动宽带中兴路由器,有WPS功能,进入192.168.1.1管理员页面,用户名user,密码在路由器背面(可以登录后修改密码)。在网络-WLAN网络配置-WPS中,点击push button,激活路由器…...
LabVIEW如何有效地进行数据采集?
数据采集(DAQ)是许多工程项目中的核心环节,无论是测试、监控还是控制系统,准确、高效的数据采集都是至关重要的。LabVIEW作为一个图形化编程环境,提供了丰富的功能来实现数据采集,确保数据的实时性与可靠性…...
D. Vessels
题目链接:Problem - 371D - Codeforces 题目大意:有n层容器用来装水, 当一层的水满了,就会向下溢出,进入下一层,最后一层的溢出将会在地上。现有两种操作 1.在p层的容器里加入x升水。 2.查询p层的水量为…...
vue声明周期及其作用
vue声明周期及其作用 1. 生命周期总览 2. beforeCreate 我们在new Vue()时,初始化一个Vue空的实例对象,此时对象身上只有默认的声明周期函数和事件,此时data,methods都未被初始化 3. created 此时,已经完成数据观测࿰…...
安全策略实验
安全策略实验 1.拓扑图 2.需求分析 需求: 1.VLAN 2属于办公区,VLAN 3属于生产区 2.办公区PC在工作日时间(周一至周五,早8到晚6)可以正常访问OA server其他时间不允许 3.办公区PC可以在任意时刻访问Web Server 4.生产…...
浅谈java并发编程
例子代码:纠结哥/java-learn - Gitee.com Java并发编程是指在Java中通过多线程技术让程序能够同时执行多个任务。通过并发编程,Java程序可以提高性能,尤其是在需要处理大量数据或多个任务时。Java并发编程有多种方式,可以通过直接…...
蓝桥杯C语言组:暴力破解
基于C语言的暴力破解方法详解 暴力破解是一种通过穷举所有可能的解来找到正确答案的算法思想。在C语言中,暴力破解通常用于解决那些问题规模较小、解的范围有限的问题。虽然暴力破解的效率通常较低,但它是一种简单直接的方法,适用于一些简单…...
[Go]一、Go语言基础
G:\Go\【物语终焉】21周搞定Go语言 1.环境安装 All releases - The Go Programming Language blog地址: https://www.liwenzhou.com/categories/Golang/ 图文教程: 从零开始搭建Go语言开发环境 | 李文周的博客 官网地址: 国内: https://studygolang.com/dl Go官网下载…...
React+Cesium基础教程(003):加载3D建筑物和创建标签
文章目录 03-加载3D建筑物和标签方式一方式二完整代码03-加载3D建筑物和标签 方式一 添加来自 OpenStreetMap 的建筑物模型,让场景更加丰富和真实: viewer.scene.primitives.add(new Cesium.createOsmBuildings() );方式二 使用 Cesium ion 资源:...
两晋南北朝 侨置州郡由来
侨置的核心思想是面向人管理 而不是面向土地 1. 北雍州 西晋于长安置雍州,永嘉之乱,没于刘、石。苻秦之乱,雍州流民南出樊沔,孝武于襄阳侨立雍州。此时称长安为北雍州。...
七. Redis 当中 Jedis 的详细刨析与使用
七. Redis 当中 Jedis 的详细刨析与使用 文章目录 七. Redis 当中 Jedis 的详细刨析与使用1. Jedis 概述2. Java程序中使用Jedis 操作 Redis 数据2.1 Java 程序使用 Jedis 连接 Redis 的注意事项2.2 Java程序通过 Jedis当中操作 Redis 的 key 键值对2.3 Java程序通过 Jedis 当中…...
Vue3学习笔记-事件-4
一、事件处理 使用v-on或者后面加事件: <template><button v-on:click"addCount()">{{count}}</button> </template> 二、事件传参 传event: 不传参时,默认自动接收 event 传自定义参数时,…...
艾瑞泽8车机安装软件
电脑安装搞机助手 车机打开工程模式/加密项 密码是序列号*802018 打开adb 电脑打开搞机助手/扩展功能/cmd命令行 把安装包放入adb 输入adb push F:\carapk\qq_music_car.apk /data/local/tmp 格式: adb push 电脑路径 adb路径 进入abd adb shell 进入指定文件夹 cd …...
c++ list的front和pop_front的概念和使用案例
在 C 中,std::list 是一种双向链表容器,提供了对序列中元素的快速插入和删除操作。以下是 std::list 容器的 front 和 pop_front 方法的概念和使用案例。 front 概念:front 成员函数返回对 std::list 容器中第一个元素的引用。如果列表为空…...
NLP深度学习 DAY5:Sequence-to-sequence 模型详解
Seq2Seq(Sequence-to-Sequence)模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译,但后来广泛应用于其他任务,如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…...
04树 + 堆 + 优先队列 + 图(D1_树(D17_综合刷题练习))
目录 1. 二叉树的前序遍历(简单) 1.1. 题目描述 1.2. 解题思路 方法一:递归(推荐使用) 方法二:非递归(扩展思路) 2. 二叉树的中序遍历(中等) 2.1. 题目…...
猫眼Java开发面试题及参考答案(上)
详细介绍项目,像项目中如何用 Redis,用到 Redis 哪些数据类型,项目中遇到哪些问题,怎么解决的 在我参与的一个电商项目中,Redis 发挥了至关重要的作用。这个电商项目主要是为用户提供商品浏览、购物车管理、订单处理等一系列功能。 在项目中使用 Redis 主要是为了提升系统…...
理解PLT表和GOT表
1 简介 现代操作系统都是通过库来进行代码复用,降低开发成本提升系统整体效率。而库主要分为两种,一种是静态库,比如windows的.lib文件,macos的.a,linux的.a,另一种是动态库,比如windows的dll文…...
总结11..
#include <stdio.h> #include <string.h> #define MAXN 1001 #define MAXM 1000001 int n, m; char maze[MAXN][MAXN]; int block[MAXN][MAXN]; // 标记每个格子所属的连通块编号 int blockSize[MAXN * MAXN]; // 记录每个连通块的大小 int dx[] {0, 0, 1, -1};…...
35.Word:公积金管理中心文员小谢【37】
目录 Word1.docx Word2.docx Word2.docx 注意本套题还是与上一套存在不同之处 Word1.docx 布局样式的应用设计页眉页脚位置在水平/垂直方向上均相对于外边距居中排列:格式→大小对话框→位置→水平/垂直 按下表所列要求将原文中的手动纯文本编号分别替换…...
FinRobot:一个使用大型语言模型的金融应用开源AI代理平台
“FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models” 论文地址:https://arxiv.org/pdf/2405.14767 Github地址:https://github.com/AI4Finance-Foundation/FinRobot 摘要 在金融领域与AI社区间&a…...
