强化学习笔记


马尔科夫决策过程

  • markov chain: S \mathcal{S} S

  • MRP: S , R \mathcal{S,R} SR

  • MDP: S , A ( s ) , R , P \mathcal{S,A(s),R,P} SA(s)RP P : p = P r { S t + 1 = s ′ , R t + 1 = r ∣ S t = s , A t = a } \mathcal{P}:p=Pr\{S_{t+1}=s',R_{t+1}=r|S_t = s,At = a\} P:p=Pr{St+1=s,Rt+1=rSt=s,At=a}

  • 状态转移函数: p ( s ′ ∣ s , a ) = ∑ r ∈ R p ( s ′ , r ∣ s , a ) \mathcal{p(s'|s,a) = \sum_{r\in R}{p(s',r|s,a)}} p(ss,a)=rRp(s,rs,a)
    在这里插入图片描述

  • π \pi π(policy):
    { a = π ( s ) 确定性策略 π ( a ∣ s ) = P r { A t = a ∣ S t = s } 随机性策略 \begin{cases} {a = \pi(s)}& \text{确定性策略}\\ {\pi(a|s )= Pr\{A_t = a|S_t = s}\}& \text{随机性策略} \end{cases} {a=π(s)π(as)=Pr{At=aSt=s}确定性策略随机性策略

  • G ( R e t u r n ) G(Return) G(Return) γ ( d i s c o u n t ) \gamma(discount) γ(discount):
    G t = R t + 1 + γ R t + 1 . . . + γ T − 1 R T = ∑ i = 0 ∞ γ i R t + i + 1 , γ ∈ [ 0 , 1 ] G_t = R_{t+1} + \gamma R_{t+1}...+\gamma^{T-1} R_T = \sum_{i=0}^{\infty}{\gamma_i R_{t+i+1}},\gamma \in[0,1] Gt=Rt+1+γRt+1...+γT1RT=i=0γiRt+i+1γ[0,1]

  • 价值函数:
    { v π ( s ) = E π { G t ∣ S t = s } 状态价值函数 q π ( s , a ) = E π { G t ∣ S t = s , A t = a } 状态动作价值函数 \begin{cases} {v_\pi(s) = E_\pi \{G_t | S_t =s\}}& \text{状态价值函数}\\ {q_\pi(s,a) = E_\pi \{G_t | S_t =s,A_t = a\}}& \text{状态动作价值函数} \end{cases} {vπ(s)=Eπ{GtSt=s}qπ(s,a)=Eπ{GtSt=s,At=a}状态价值函数状态动作价值函数
    ⇒ \Rightarrow 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)
    ⇒ \Rightarrow q π ( s ) = ∑ s ′ , r { p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] } q_\pi(s) = \sum_{s',r}\{p(s',r|s,a) [r+\gamma v_\pi(s')]\} qπ(s)=s,r{p(s,rs,a)[r+γvπ(s)]}

  • B e l l m a n E x p e c t a t i o n E q u a t i o n Bellman\ Expectation\ Equation Bellman Expectation Equation
    { v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] q π ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ ∑ a ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) ] \begin{cases} {v_\pi(s) = \sum_{a \in A}{\pi(a|s) \sum_{s',r}{p(s',r|s,a)[r+\gamma v_\pi(s')]}}}\\ {q_\pi(s,a) = \sum_{s',r}{p(s',r|s,a)[r+\gamma \sum_{a \in A}{\pi (a'|s') q_{\pi}(s',a')]}}} \end{cases} {vπ(s)=aAπ(as)s,rp(s,rs,a)[r+γvπ(s)]qπ(s,a)=s,rp(s,rs,a)[r+γaAπ(as)qπ(s,a)]

  • 最优价值函数
    { v ∗ ( s ) = m a x a v π ( s ) 最优状态价值函数 q ∗ ( s , a ) = m a x a q π ( s , a ) 最优状态动作价值函数 \begin{cases} {v_*(s) = \underset{a}{max}v_\pi(s)}& \text{最优状态价值函数}\\ {q_*(s,a) = \underset{a}{max}q_\pi(s,a)}& \text{最优状态动作价值函数} \end{cases} v(s)=amaxvπ(s)q(s,a)=amaxqπ(s,a)最优状态价值函数最优状态动作价值函数

  • B e l l m a n O p t i m a l i t y E q u a t i o n Bellman\ Optimality\ Equation Bellman Optimality Equation
    { v ∗ ( s ) = m a x a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] q π ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ m a x a q ∗ ( s ′ , a ′ ) ] \begin{cases} {v_*(s) = \underset{a}{max} \sum_{s',r}p(s',r|s,a) [r+\gamma v_\pi(s')]}\\ {q_\pi(s,a) = \sum_{s',r}{p(s',r|s,a) [r + \gamma \underset{a}{max} q_* (s',a')]}} \end{cases} v(s)=amaxs,rp(s,rs,a)[r+γvπ(s)]qπ(s,a)=s,rp(s,rs,a)[r+γamaxq(s,a)]


动态规划

策略迭代 { 策略评估 : 已知 p ( s ′ , a ∣ s , a ) , ∀ π , d o q π ( s , a ) 策略改进 : f i n d π ′ , s . t . π ′ ⩾ π {策略迭代}\begin{cases} {策略评估:} {已知p(s',a|s,a),\forall \pi, do\ q_\pi(s,a)} \\ {策略改进:} {find\ \pi',s.t.\ \pi'\geqslant \pi} \end{cases} 策略迭代{策略评估:已知p(s,as,a),π,do qπ(s,a)策略改进:find π,s.t. ππ
价值迭代:极端情况下的策略迭代

策略迭代:

  1. 解析解: v π ( s ) = r π ( s ) + γ ∑ s ′ P π ( s , s ′ ) v π ( s ) = ( I − γ P π ) − 1 γ π , O ( ∣ s ∣ 3 ) v_\pi(s) = r_\pi(s) +\gamma \sum_{s'}{P_\pi(s,s')v_\pi(s)} = (I - \gamma P_\pi)^{-1} \gamma_\pi,O(|s|^3) vπ(s)=rπ(s)+γsPπ(s,s)vπ(s)=(IγPπ)1γπO(s3)
  2. 数值解:迭代策略评估
    构造数列 v k , s . t . lim ⁡ k → ∞ v k = v π {v_k},s.t. \lim\limits_{k\rightarrow \infty}{v_k} = v_\pi vks.t.klimvk=vπ
    迭代公式: v k + 1 = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] v_{k+1} = \sum_{a}{\pi(a|s) \sum_{s',r}{p(s',r|s,a)[r+\gamma v_k(s')]}} vk+1=aπ(as)s,rp(s,rs,a)[r+γvk(s)]
    v π = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] v_{\pi} = \sum_{a}{\pi(a|s) \sum_{s',r}{p(s',r|s,a)[r+\gamma v_\pi(s')]}} vπ=aπ(as)s,rp(s,rs,a)[r+γvπ(s)] (由不动点定理 ⇒ v k → v π \Rightarrow{v_k} \rightarrow v_\pi vkvπ)

策略改进:

在这里插入图片描述

  • 策略改进定理:给定 π , π ′ , i f ∀ s ∈ S , t h e n v π ( s ) ⩽ q π ( s , π ′ ( s ) ) , s o ∀ s ∈ S , v π ( s ) ⩽ v π ′ ( s ) \pi,\pi',if\ \forall s \in S,then\ v_\pi(s) \leqslant q_\pi(s,\pi'(s)),so\ \forall s \in S,v_\pi(s) \leqslant v_\pi'(s) π,π,if sS,then vπ(s)qπ(s,π(s)),so sS,vπ(s)vπ(s)
  • G r e e d y P o l i c y : ∀ s ∈ S , s . t . π ′ ( s ) = a r g m a x a q π ( s , a ) Greedy\ Policy:\forall s \in S,\ s.t.\ \pi'(s) = arg\underset{a}{max}q_\pi(s,a) Greedy Policy:sS, s.t. π(s)=argamaxqπ(s,a)
    由策略改进定理可知: ∀ s ∈ S , v π ′ ( s ) ⩾ v π ( s ) \forall s \in S,v_\pi'(s) \geqslant v_\pi(s) sS,vπ(s)vπ(s)
  • 问题:迭代中套迭代, π 1 → v π 1 → π 2 → v π 2 . . . π ∗ → v ∗ \pi_1 \rightarrow v_{\pi1} \rightarrow\pi_2 \rightarrow v_{\pi2} ... \pi_*\rightarrow v_* π1vπ1π2vπ2...πv
    在这里插入图片描述

解决:截断策略评估(策略评估只进行半步), π 1 → v 1 ( s ) \pi_1 \rightarrow v_1(s) π1v1(s)
可简化为: v k + 1 = m a x a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] v_{k+1} =\underset{a}{max}\sum_{s',r}{p(s',r|s,a)[r+\gamma v_k(s')]} vk+1=amaxs,rp(s,rs,a)[r+γvk(s)]
迭代序列:
v 1 ( s 1 ) , v 1 ( s 2 ) , . . . , v 1 ( s ∣ s ∣ ) , v_1(s_1),v_1(s_2),...,v_1(s_{|s|}), v1(s1)v1(s2)...v1(ss)
v 2 ( s 1 ) , v 2 ( s 2 ) , . . . , v 2 ( s ∣ s ∣ ) , v_2(s_1),v_2(s_2),...,v_2(s_{|s|}), v2(s1)v2(s2)...v2(ss)
. . . ... ...
v k ( s 1 ) , v k ( s 2 ) , . . . , v k ( s ∣ s ∣ ) , v_k(s_1),v_k(s_2),...,v_k(s_{|s|}), vk(s1)vk(s2)...vk(ss)
当状态空间 S S S维度较高时,价值迭代人计算量巨大

  • 就地策略迭代:随机选取 ∀ s \forall s s,对其 v k ( s ) v_k(s) vk(s)更新,完成策略评估
  • 广义策略迭代(GPI)

蒙特卡洛方法

用采样的方法解决动态特性未知的问题

用MC做策略评估

v π ( s ) = E π [ G t ∣ S t = s ] ≈ 1 N ∑ i = 1 G t i v_\pi(s) = E_\pi[G_t|S_t = s] \approx \frac{1}{N}\sum_{i=1}{G_t^i} vπ(s)=Eπ[GtSt=s]N1i=1Gti(大数定律)

  • 首次访问型MC预测
    初始化: v ( s ) , R e t u r n ( s ) , f o r ∀ s ∈ S v(s),Return(s),for\ \forall s \in S v(s),Return(s),for sS
    循环(每幕):
    \qquad π \pi π生成一幕序列: S 0 , A 0 , R 1 , S 1 , A 1 , R 3 , . . . , S T − 1 , A T − 1 , R T , S T S_0,A_0,R_1,S_1,A_1,R_3,...,S_{T-1},A_{T-1},R_T,S_T S0,A0,R1,S1,A1,R3,...,ST1,AT1,RT,ST
    \qquad 循环每幕, t = T − 1 , T − 2 , . . . , 0 t = T-1,T-2,...,0 t=T1,T2,...,0
    \qquad S t S_t St未曾出现在 S 0 : t − 1 S_{0:t-1} S0:t1:
    \qquad \qquad G G G加入到 R e t u r n ( S t ) Return(S_t) Return(St)
    \qquad \qquad v s ( t ) ← a v e r a g e ( R e t u r n ( S t ) ) v_s(t) \leftarrow average(Return(S_t)) vs(t)average(Return(St))
    q π ( s , a ) q_\pi(s,a) qπ(s,a)而言,若要用MC做策略评估。须
    { 无限多幕 试探性出发假设 ( 保证每一对 s , a 都有非零的概率被选中作为一幕的起点 ) \begin{cases} {无限多幕} \\ {试探性出发假设(保证每一对s,a都有非零的概率被选中作为一幕的起点)} \end{cases} {无限多幕试探性出发假设(保证每一对s,a都有非零的概率被选中作为一幕的起点)

基于试探性出发假设的MC控制(策略迭代)

{ 策略评估: I . 无限幕, I I . 试探性出发假设 策略改进: π k + 1 ( s ) = a r g m a x a q π k ( s , a ) \begin{cases} 策略评估:I.无限幕,II.试探性出发假设\\ 策略改进:\pi_{k+1}(s) = arg\underset{a}{max}q_{\pi_{k}}(s,a) \end{cases} {策略评估:I.无限幕,II.试探性出发假设策略改进:πk+1(s)=argamaxqπk(s,a)
π 0 → q 0 → π 1 → q 1 . . . \pi_0 \rightarrow q_0 \rightarrow \pi_1 \rightarrow q_1... π0q0π1q1...(只选一幕做评估)
q π k ( s , π k + 1 ( s ) ) = q π k ( s , a r g m a x a q π k ( s , a ) ) = m a x a q π ( s , a ) ⩾ ∑ a π k ( a ∣ s ) q π k ( s , a ) = v π k ( s , a ) q_{\pi_k}(s,\pi_{k+1}(s)) = q_{\pi_k}(s,arg\underset{a}{max}q_{\pi_k}(s,a)) =\underset{a}{max}q_\pi(s,a) \geqslant \sum_{a}{\pi_k(a|s)q_{\pi_k}(s,a)}=v_{\pi_k(s,a)} qπk(s,πk+1(s))=qπk(s,argamaxqπk(s,a))=amaxqπ(s,a)aπk(as)qπk(s,a)=vπk(s,a)
由策略改进定理: π k + 1 ⩾ π k \pi_{k+1} \geqslant \pi_k πk+1πk

同轨 VS 离轨

  • 如何避免试探性出发假设(b为软性策略)
    { 行动策略 b : 用样本生成的策略,且必须为软性策略  ∀ s ∈ S , a ∈ A ( s ) , 有 b ( a ∣ s ) > 0 目标策略 π : 待改进、待评估的策略 \begin{cases} 行动策略b:用样本生成的策略,且必须为软性策略\ \forall s \in S,a \in A(s),有b(a|s) >0 \\ 目标策略\pi:待改进、待评估的策略 \end{cases} {行动策略b:用样本生成的策略,且必须为软性策略 sS,aA(s),b(as)>0目标策略π:待改进、待评估的策略

{ 同轨策略方法: π = b , b 为软性策略 离轨策略方法: π ≠ b (采样困难,用重要性采样) \begin{cases} 同轨策略方法:\pi = b,b为软性策略\\ 离轨策略方法:\pi \not= b(采样困难,用重要性采样) \end{cases} {同轨策略方法:π=bb为软性策略离轨策略方法:π=b(采样困难,用重要性采样)

  • 重要性采样:
    E p [ f ( x ) ] = ∫ p ( x ) f ( x ) d x = ∫ p ( x ) q ( x ) q ( x ) f ( x ) d x = ∫ [ p ( x ) q ( x ) f ( x ) ] q ( x ) d x = E q [ p ( x ) q ( x ) f ( x ) ] ≈ 1 N ∑ i = 1 N p ( x ) q ( x ) f ( x ) E_p[f(x)] = \int p(x)f(x)dx = \int \frac{p(x)}{q(x)} q(x)f(x)dx = \int [\frac{p(x)}{q(x)} f(x)]q(x)dx = E_q[\frac{p(x)}{q(x)}f(x)] \approx \frac{1}{N} \sum_{i=1}^{N}\frac{p(x)}{q(x)}f(x) Ep[f(x)]=p(x)f(x)dx=q(x)p(x)q(x)f(x)dx=[q(x)p(x)f(x)]q(x)dx=Eq[q(x)p(x)f(x)]N1i=1Nq(x)p(x)f(x)

同轨策略的MC控制

  • ε − \varepsilon- ε贪心策略(设计软性策略)
    给定 π , q π ( s , a ) , π ′ ( a ∣ s ) = { 1 − ε + ε ∣ A ∣ , i f a = a ∗ = a r g m a x q π ( s , a ) a ε ∣ A ∣ , o t h e r w i s e \pi,q_\pi(s,a),\pi'(a|s)= \begin{cases} {1- \varepsilon + \frac{\varepsilon}{|A|},}&{if\ a= a^*=arg\underset{a}{maxq_\pi(s,a)}}\\ {\frac{\varepsilon}{|A|},}&{otherwise} \end{cases} π,qπ(s,a),π(as)= 1ε+Aε,Aεif a=a=argamaxqπ(s,a)otherwise
    兼顾大部分情况选最优,小部分情况选平均
    在这里插入图片描述

离轨策略的MC策略评估(用b分布采样)

π , b \pi,b π,b固定且已知,用行动策略 b b b做试探性采样,基于行动策略改进目标策略 π \pi π;解决同轨策略不能学习到最优策略的问题
在这里插入图片描述

v π ( s ) = E b [ ρ t : T − 1 G t ∣ S t = s ] v_\pi(s) = E_b[\rho_{t:T-1}G_t | S_t = s] vπ(s)=Eb[ρt:T1GtSt=s]
ρ t : T − 1 = ∏ k = t T − 1 π ( A k ∣ S k ) b ( A k ∣ S k ) \rho_{t:T-1} = \prod_{k=t}^{T-1} \frac{\pi(A_k|S_k)}{b(A_k|S_k)} ρt:T1=k=tT1b(AkSk)π(AkSk),重要度比列因子,此更新方式为全量更新方式,需维护每一幕完整的 G t G_t Gt

在这里插入图片描述

离轨策略的MC控制

增量更新:
{ C = C + W V = V + W C ( G − V ) \begin{cases} C=C+W\\ V = V + \frac{W}{C}(G-V) \end{cases} {C=C+WV=V+CW(GV)
在这里插入图片描述

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

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

相关文章

在 Redis 中处理键值 | Navicat

Redis 是一个键值存储系统,允许我们将值与键相关联起来。与关系型数据库不同的是, 在Redis 中,不需要使用数据操作语言 (DML) 和查询语法,那么我们如何进行数据的写入、读取、更新和删除操作呢?…

怎么检测UI卡顿?(线上及线下)

什么是UI卡顿? 在Android系统中,我们知道UI线程负责我们所有视图的布局,渲染工作,UI在更新期间,如果UI线程的执行时间超过16ms,则会产生丢帧的现象,而大量的丢帧就会造成卡顿,影响用…

prometheus + grafana进行服务器资源监控

在性能测试中,服务器资源是值得关注一项内容,目前,市面上已经有很多的服务器资 源监控方法和各种不同的监控工具,方便在各个项目中使用。 但是,在性能测试中,究竟哪些指标值得被关注呢? 监控有…

springcloud-gateway简述

Spring Cloud Gateway 是一个用于构建 API 网关的项目&#xff0c;它是 Spring Cloud 生态系统中的一部分&#xff0c;旨在为微服务架构提供动态路由、负载均衡、安全性和监控等功能。 网关工程对应pom文件 <?xml version"1.0" encoding"UTF-8"?>…

【ag-grid-vue】基本使用

ag-grid是一款功能和性能强大外观漂亮的表格插件&#xff0c;ag-grid几乎能满足你对数据表格所有需求。固定列、拖动列大小和位置、多表头、自定义排序等等各种常用又必不可少功能。关于收费的问题&#xff0c;绝大部分应用用免费的社区版就够了&#xff0c;ag-grid-community社…

在线设计APP ui的网站,分享这7款

在数字时代&#xff0c;用户界面&#xff08;UI&#xff09;设计变得非常重要&#xff0c;因为良好的UI设计可以改善用户体验&#xff0c;增强产品吸引力。随着科学技术的发展&#xff0c;越来越多的应用在线设计网站出现&#xff0c;为设计师和团队提供了一种新的创作方式。本…

【大数据知识】大数据平台和数据中台的定义、区别以及联系

数据行业有太多数据名词&#xff0c;例如大数据、大数据平台、数据中台、数据仓库等等。但大家很容易混淆&#xff0c;也很容易产生疑问&#xff0c;今天我们就来简单聊聊大数据平台和数据中台的定义、区别以及联系。 大数据平台和数据中台的定义 大数据平台&#xff1a;一个…

阿里云大数据实战记录8:拆开 json 的每一个元素,一行一个

目录 一、前言二、目标介绍三、使用 pgsql 实现3.1 拆分 content 字段3.2 拆分 level 字段3.3 拼接两个拆分结果 四、使用 ODPS SQL 实现4.1 拆分 content 字段4.2 拆分 level 字段4.3 合并拆分 五、使用 MySQL 实现六、总结 一、前言 商业场景中&#xff0c;经常会出现新的业…

JUC并发编程--------基础篇

一、多线程的相关知识 栈与栈帧 我们都知道 JVM 中由堆、栈、方法区所组成&#xff0c;其中栈内存是给谁用的呢&#xff1f;其实就是线程&#xff0c;每个线程启动后&#xff0c;虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xf…

极智嘉(Geek+)再获重磅荣誉,持续力领跑智慧物流行业发展

近日&#xff0c;全球仓储机器人引领者极智嘉(Geek)再度传来好消息&#xff0c;凭借着全球化的专业服务能力和稳健增长的亮眼海外成绩&#xff0c;一举荣登“2023出海品牌服务商”价值榜&#xff0c;成为唯一登榜的物流机器人企业。 作为率先出海的物流机器人企业&#xff0c…

博客系统后端(项目系列2)

目录 前言 &#xff1a; 1.准备工作 1.1创建项目 1.2引入依赖 1.3创建必要的目录 2.数据库设计 2.1博客数据 2.2用户数据 3.封装数据库 3.1封装数据库的连接操作 3.2创建两个表对应的实体类 3.3封装一些必要的增删改查操作 4.前后端交互逻辑的实现 4.1博客列表页 …

十年测试工程师叙述自动化测试学习思路

自动化测试介绍 自动化测试(Automated Testing)&#xff0c;是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架&#xff0c;编写自动化测试用例&#xff0c;来模拟手工测试过程。比如说&#xff0c;在项目迭代过程中&#xff0c;持…

C++中的虚继承、多态以及模板的介绍

菱形继承 概念 菱形继承又称为钻石继承&#xff0c;由公共基类派生出多个中间子类&#xff0c;又由中间子类共同派生出汇聚子类。汇聚子类会得到中间子类从公共基类继承下来的多份成员 格式 A --------公共基类/ \B C ------- 中间子类\ /D -----…

2023.8.28日论文阅读

文章目录 NestFuse: An Infrared and Visible Image Fusion Architecture based on Nest Connection and Spatial/Channel Attention Models(2020的论文)本文方法 LRRNet: A Novel Representation Learning Guided Fusion Network for Infrared and Visible Images本文方法学习…

对于Android开发,我们为何要学Jetpack Compose?

概述 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它可简化并加快 Android 上的界面开发&#xff0c;使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;快速让应用生动而精彩。Compose 使用全新的组件——可组合项 (Composable) 来布局界面&#xff0c…

内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

Mysql 基本概念

数据库的组成 数据 数据是描述事务的符号记录&#xff1b;包括数字、文字、图形、图像、声音、档案记录等 以“记录“形式按统一的格式进行存储 表 将不同的记录以行和列的方式组合成了表 用来存储具体数据 数据库 它就是所有不同属性表的集合 以一定的组织方式存储的…

算法 for GAMES

栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…

Ant Design组件动态嵌套表单制作

使用Ant Design组件我们需要使用Form.List对表单进行操作 1.首先将Form.List放入form组件中&#xff0c;并name命名&#xff0c; 2.设置一个命名为数组&#xff0c;添加编辑和删除事件 3.以刚刚设置的数组设置map循环&#xff0c;可以在循环的的括号可以设置对嵌套表单控制 4.…