【强化学习的数学原理-赵世钰】课程笔记(十)Actor-Critic 方法

目录

一.最简单的 actor-critic(QAC):The simplest actor-critic (QAC)

二.Advantage actor-critic (A2C)

三.Off-policy actor-critic 方法

四. Deterministic actor critic(DPG)


Actor-Critic 方法把基于 value 的方法,特别是 value function approximation 引入到 policy gradient 当中,我们就得到了 actor critic

Actor-Critic 方法仍然是策略梯度(policy gradient)方法,和我们上节课学的 policy gradient 的方法是一种方法。

  • - 它们强调的是将策略梯度和基于价值的方法结合在一起的结构。

什么是 "Actor "和 "Critic"?

  • - 这里的 "Actor "指的是策略更新,actor 对应的是策略,也就是它是来更新策略的一个东西或者是一个过程。之所以称为 "Actor",是因为策略是用来 take action 采取行动的,那么 take action 的这个东西就可以对应这个 actor。
  • - Critic 的字面意思是评论家,批评家。这里的 "Critic "是在做策略评估(policy evaluation)或价值估计(value estimation),也就是我有一个策略,我需要评估一下这个策略是好还是不好,那怎么评估呢,其实就是根据 value estimation,也就是我去估计它的 action value 或者 state value。之所以称其为 "Critic",是因为它通过评估政策来对其进行批判。

课程大纲:

1.最简单的 actor-critic(QAC):The simplest actor-critic (QAC)

2.Advantage actor-critic (A2C):这个的思想是通过引入一个偏置量来减少估计的方差

3.Off-policy actor-critic:如何把 on-policy 的 AC 方法转化成一个 off-policy 的 AC 方法,这里会用到一个关键技术,就是重要性采样

前三节的 policy 都是 stochastic 的

4.Deterministic actor-critic (DPG):第四节会介绍 deterministic actor-critic 的方法


一.最简单的 actor-critic(QAC):The simplest actor-critic (QAC)

回顾上节课介绍的 policy gradient 方法,Actor-Critic 方法本身就是策略梯度(policy gradient)方法

  • 上面的最后一个表达式很重要,通过这个表达式我们就可以知道哪些是 actor 哪些是 critic,actor 和 critic 究竟是怎样结合起来的
  • 上面的最后一个表达式的算法就是 actor,因为这个算法在更新策略,θ 是策略的参数,θ 变化了策略自然也就变化了,所以 actor 是更新策略的一个算法
  • critic 就是来估计 qt 的一个算法,因为你要更新这个策略需要 qt,qt 是 qπ 的近似,所以 critic 的作用就是对当前的这样一个策略进行评估,计算出来它所对应的 action value
  • 通过这个式子,我们清晰的看到了 actor 和 critic,以及 policy based 和 value based 方法是怎么结合起来的

如何获得 qt(st, at)?

到目前为止,我们已经研究了两种估计 action value 的方法:

第一种上节课介绍了:

  • - 蒙特卡洛方法:如果要计算 qt(st, at) ,就从后面得到一个 episode,然后计算那个 episode 对应的 return,我就让那个 return 认为是 qt(st, at) 的一个近似值。 如果这个 qt(st, at) 是这样计算的,是使用 MC 计算的,相应的算法称为 REINFORCE 或蒙特卡罗策略梯度(Monte Carlo policy gradient)。
  • - 我们在上一讲中介绍过。

第二种这节课会介绍:

  • - TD 学习: 如果使用TD学习来估计 qt,这类算法通常被称为行为批判算法(actor-critic)。
  • - 我们将在本讲座中介绍。


介绍第一个 actor-critic 的算法:
 

这里的 critic 对应 Sarsa 算法,并且结合了 value function approximation,这个 Sarsa 算法对应了一个 function,它的参数是 w,w 被更新之后我们就得到了一个新的 q,把这个 q 带入 Actor 里面,就得到了一个新的策略对应的 θt+1,这个新的策略会用到下一步当中去生成新的数据

  • 出了MC,TD还有神经网络啊,为什么没有说呢?
  • TD就是用的神经网络拟合q的啊,不然怎么会有q(w)呢
  • 神经网络体现在theta上...
  • 现在在讲原理,神经网络是个函数估计器,你觉得是一码事么?
  • 对神经网络求梯度并不难,这里知道可以求就行了
  • w就可以表示是神经网络的参数吧

补充:

  • - critic 对应于 "SARSA+值函数逼近"(SARSA+value function approximation)。
  • - actor 对应于 policy update 算法,在上上页给出了。
  • - 该算法是 on policy 的(为什么 policy gradient 包括刚才介绍的 actor-critic 方法是 on policy 的?): 因为策略是随机的,1> π(a|s, θ) >0,所以无需使用 ε-greedy 等技术。

policy gradient 包括刚才介绍的 actor-critic 方法都是 on policy 的

  • - 这种特殊的 Actor-Critic 算法有时被称为 Q Actor-Critic 算法(QAC)。Q 对应那个 q value
  • - 这种算法虽然简单,却揭示了 Actor-Critic 的核心思想。如后面所示,它还可以扩展生成许多其他算法。


二.Advantage actor-critic (A2C)

接下来,我们将 QAC 扩展为 advantage actor-critic (A2C)

  • - 其核心思想是引入一个 baseline 以减少估计的方差。

性质:我们推导的策略梯度对于引入一个新的偏置不会发生变化

这里, baseline b(S) 是 S 的标量函数。

为什么 baseline 有效?

s为啥和theta无关呢,稳态的s分布应该和策略有关呀

  • 确实和策略有关,这里按书上第9章的记号应该写成d_pi(s)。但不影响结论,原因:在单步更新中策略是被冻结的
  • s是环境自己的东西和策略无关
  • state和策略没有关系,策略是进行state的选择并作出对应action,state space是客观存在的
  • a和s是没关系的,就算state是一堵墙在你前面,你照样有往上撞的action。但是pi和a,s有关
  • 他是S的函数;给定S,他有给定的值;这里不需要考虑S的概率分布问题

n(s)为啥可以不写成n(s|theta)呢

岂不是说有没有这个b(s),这个期望都是为0 ?

没有这个b(s)本来就是0啊

为什么 baseline 有用?

为什么要考虑这个 baseline,它究竟有什么用?

  • E[X] 与 b(S) 无关,无论取什么样的函数这个 E[X] 总保持不变
  • X 的方差 var(X) 与 b(S) 有关,取不同的 b 方差可能相差很大,baseline 对方差有影响

目标:是找一个最小的 baseline 使得方差最小,这样在采样的时候就有更小的误差

优点:当我们使用随机样本来近似 E[X] 时,估计方差也会很小。

在 REINFORCE 和 QAC 算法中、

  • - 没有基线 baseline。
  • - 或者,我们可以说 b = 0,但这并不能保证是一个好的基线 baseline。

最好的 baseline 是:

对于任意 s∈ S,能使 var(X) 最小化的最优 baseline 是

蓝色代表一个权重

  • - 虽然这一基线是最优的,但却很复杂。
  • - 在实际当中,我们我们可以去掉权重,选择次优基线,即直接求 q 的 expectation,这个公式就是在 s 对应的 state value:


下面看怎么把 baseline 引入到 actor-critic 的算法中

vπ 是 qπ 在某一个状态下的平均值,如果对应的某一个 action 比这个平均值大,那就说明这个 action 肯定是比较好的,它的 action value 比较大,有一定的优势

因为这里面有 expectation,那我们很自然的就要得到他的 stochastic version,也就是通过采样得到这样一个算法


算法可以被表示成:

上节课也说过,这种 stochastic gradient 的方法可以很好的平衡探索和利用

  • - 步长与相对值 δt 成比例,而不是与绝对值 qt 成比例,这样更合理。
  • - 它仍能通过分子分母很好地平衡探索和开发。

当 δt 比较大的时候,这个 step size 也会比较大,上面这个算法是在更新 π(at|st),如果 step size 比较大,会超那个方向走的比较多,因此 π(at|st) 在下一时刻就会变得比较大。意思就是这一时刻我已经知道这个 action 有比较大的 action value,那么下个时刻就要给他更多的概率去选择他,这个就是充分利用

如果分母对应的策略比较小,他的 step size 也会比较大,所得到的下一时刻的 π 的概率也会比较大,也就是在上一时刻我选择这个 action 的概率是比较小的,那么下一时刻选择这个 action 的概率就会增大一些。就是给他更多的机会去选择他,这样增加探索


上节课的分子是 qt,现在变成了 δt。δt 比 qt 更好,因为我们在乎的不是 action value 的绝对值,而是他的相对值


此外,优势函数近似于 TD 误差:

这一近似值是合理的,因为

优点:只需一个网络即可逼近 vπ(s),而不需要两个网络来逼近 qπ(s,a) 和 vπ(s)。


它是 on-policy 的。由于策略 π(θt) 是随机的 stochastic,因此无需使用 ε-greedy 等技术。


三.Off-policy actor-critic 方法

到目前为止 AC 的方法还有 policy gradient 的方法,它们都是 on-policy 的。如果之前有一些经验了,我们想用这些经验怎么办呢?我们可以用 off policy 的 actor-critic 的方法。接下来会介绍重要性采样 important sampling 来把 on-policy 的算法转化成一个 off policy 的算法

- 我们可以将其转换为 off policy 的吗?

  • - 可以,通过重要性采样
  • - 重要性采样技术 important sampling 不仅适用于 AC,也适用于任何旨在估计期望值 expectation 的算法。包括前面的蒙特卡洛和 TD 都可以

转成 off policy 的算法的算法之后,我们就可以复用一些之前通过一些其他方法所得到的经验

On-Policy就是你用来探索生成数据的那个策略和你正在优化的策略是一样的,off-policy就是你探索的时候用一种策略但你实际上更新的是另外一个策略


如果我不知道 p0 的表达式,或者 p0 很复杂,我求不出来这个 E[X] 的时候,我能否通过采样的方式来求这个 E[X] 呢?


方法1:这个在我们介绍蒙特卡洛的时候介绍过

根据 X 的真实分布得到了一些 sample {xi},那么每个 sample 的期望和方差都和 X 的是相等的


方法2:

我的 sample 是在另一个分布 p1 下采样得到的


 问题:我有一个概率分布 p1,在这个 p1 下产生了一些 sample,我想用这些 sample 来估计在 p0 下的 expectation

为什么要这样做?

我们可能希望根据行为策略(behavior policy) β 的样本来估计 E_A∼π[∗],其中 π 是目标策略(target policy)。β 对应 p1,是来产生数据的,我要去估计在这个 π 分布下它的 expectation,所以 π 对应 p0

如何做?

如果直接对这些 sample 求平均,他最后。。。

我们可以利用重要性采样技术来实现这一目标。


+1 的概率是 0.8,-1 的概率是 0.2,可以明显的看到,我取 +1 它得到的采样是非常多的而取 -1 得到的采样比较少,虚线代表 xbar,对采样求平均后会趋向 0.6,对应它的 expectation。红色的线代表我同样用这些数据,但是我用了 important sampling 这样的技术,我就可以让她趋向于 p0 所对应的 expectation 就是 0


重要性采样:

这个权重被称为 importance weight

  • 当 p0 等于 p1 的时候,权重等于1
  • 当 p0 大于 p1 的时候,权重大于1。直观解释是:我现在得到一个 xi,我发现 p0(xi) 比较大,这说明我在 p0 下采到 xi 的概率比较大;我发现 p1(xi) 比较小,这说明我在 p1 下很难采到 xi,我现在要计算 p0 下的 expectation,所以我需要很珍惜这个 xi 才对,因为他在 p1 下很难采到,而在我 p0 下很容易采到,所以我要给他比较大的重要性的权重,通过这样才能拉回来

这个P0和P1是已知的吗?

这里我咋没太懂呢,p0和p1的关系我也不知道啊

p1已知p0未知

都是已知的,但是p0不用于采样,需要用p1的采样更新p0

但是直接更新又不准确,因此需要做这个重要采样

概率是已知的


回答: 如果你能那么做,就不需要用 importance sampling,你用 importance sampling 是因为你不能那么做,也就是说我给一个 x,未能得到 p0(x),但是我不能去求他的 expectation。它适用于给定 x 时,计算 p0(x) 很容易,但计算期望却很困难的情况。
- 例如,我们这里考虑的是离散情况,但是连续情况的时候,这个时候就不能用求和了,要求积分,求积分的时候对 p0 的表达式有要求,很复杂的话可能计算不出来。更重要的情况是 p0 是用神经网络表达的,也就是你给我一个 x 我能够输出一个 p0(x),但是 p0 的表达式根本就没有,没有表达式就无法求积分。在这种情况下,用 importance sampling

我这里有疑问,不用积分的方式,用采样的方式求期望不行吗?

  • 可能是因为,虽然能得到p0(x)的值,但是因为p0表达式未知,所以生成服从p0(x)的采样依然很麻烦
  • 所以p0并不是实际分布,只是一个用神经网络估出来的分布?那感觉好不到哪去啊

因为生成样本是有成本的,如果像你想的这样去生成了就变回前面on-policy的算法了

个人觉得最后这个生成数据有成本的解释有道理,因为off-policy的一个优势就是可以利用上手头有的数据-->p1产生的数据

为什么要用神经网络代表一个分布呢?

在强化学习里,有 Π(a|s,\Theta),输入 s 和 a,我就通过这个神经网络能告诉你对应的概率



把重要性采样的技术用到 policy gradient 当中,去实现 off-policy 的学习。下面有两个步骤,第一个步骤要得到 gradient 的表达式是什么,在得到这个 gradient 的表达式之后,可以把它用到梯度上升的方法当中进行优化

与之前的 "on policy "情况一样,我们需要推导 "off policy "情况下的 policy gradient。
- 假设 β 是产生经验样本的 behavior policy。
- 我们的目的是利用这些样本更新 target policy π,使指标最大化


直接给出梯度的表达式 


有了这个梯度的表达式,我们就可以立刻应用到梯度上升的方法中去优化,这里我仍然可以加上一个 baseline 然后不改变梯度,常见的方法就是把 baseline 设为 state value


刚才是 true gradient,里面有 expectation,我不知道怎么求,就用 stochastic gradient 去代替,这个就是我们得到的 off policy 的 policy gradient 的算法

  • 当 δt 比较大的时候,这个 step size 也会比较大,下一时刻会增大π(at|st) ,使得选择 action 的概率大一些,这个就是充分利用。
  • 之前的分母上是 π,如果分母对应的策略 π(at|st) 比较小,他的 step size 也会比较大,所得到的下一时刻的 π(at|st) 的概率也会比较大,也就是在上一时刻我选择这个 action 的概率是比较小的,那么下一时刻选择这个 action 的概率就会增大一些。就是给他更多的机会去选择他,这样增加探索。但是在这里他不是 π,是 β,是一个固定的值,所以这时候里面就没有什么探索,就是充分利用,因为分母不可变

伪代码与 A2C 一样,区别就是这里有一个 behavior policy β,我产生经验采样的时候要根据 β 产生,后面的式子一模一样,除了在两处多了两个 importance weight


小结:介绍 QAC 的时候,主要突出的是 actor-critic 的思想是什么,介绍 A2C 的时候主要为了引入 baseline 来减少估计的方差,介绍 off policy actor critic 主要为了引入重要性采样这个方法

前三节的共同点是它的策略 π(a|s,\Theta) 一定是 >0 的,不会等于 0,也就是说它的除了一定是 stochastic 的策略,下面介绍一个很重要的的 deterministic actor critic


四. Deterministic actor critic(DPG)

到目前为止,策略梯度法中使用的策略都是随机策略,因为对于每个 (s, a), π(a|s, θ) > 0。

我们能在策略梯度法中使用确定性策略吗?

  • - 优点:可以处理连续行动。

之前讲的我们的策略是 π,输入是 s,输出是 π(a1|s, θ),...,π(a5|s, θ),通过输出层,它可以约束每一个输出都是严格 >0 的并且它们的和等于 1,这种表达方式就是我们之前一直用的,它的缺点是它对 action 的个数有要求,只能是有限个,因为它的输出,不可能输出无限个

如果我在一个状态 s 有无限个 action,这时候就可以用 deterministic 的情况

不能把之前得到的策略取最大值吗?

  • 把策略取最大值,策略不就又变成了表格的形式,如果状态是连续的做不到了

表示策略的方法

  • - 到目前为止,之前我们的策略都表示为 π(a|s, θ) ∈ [0, 1],它是在状态 s 我 take action a 的概率是多少,是从 0-1 的一个数值,这个可以表示 stochastic 的策略也可以表示 deterministic 的策略,它可以是随机的,也可以是确定的。如果是 deterministic 就等于 1
  • - 现在,确定性策略 deterministic policy 具体表示为

这个就变成了一个回归问题,输入状态输出动作

输出是a的分布?

  • 不是分布,就是明确指令
  • stochastic才是a的分布吧,deterministic是a的值了
  • - µ 是从状态空间 S 到动作空间 A 的映射,当在状态空间的点确定的时候,动作空间的点也就确定下来了。
  • - 在实际中,µ 可以用神经网络来表示,输入为 s,输出为 a,参数为 θ。
  • - 我们可以将 µ(s, θ) 简写为 µ(s),隐藏掉参数 θ。

下面的介绍分两步,第一步就是介绍梯度怎么计算,第二步就是把梯度用到梯度上升的方法中去优化,与前面介绍的思想一样,所以梯度优化的方法在强化学习中广泛使用


  • - 前面介绍的 policy gradient 定理仅适用于随机策略 stochastic policy。
  • - 如果策略必须是确定性的 deterministic,我们就必须推导出新的 policy gradient 定理。
  • - 其思想和过程是相似的。


- d0 的选取与 µ 无关,这种情况下的梯度更容易计算。
- d0 的选择有两种特殊但重要的情况。

  • - 第一种特殊情况是我只关心某一个状态,比如说我有一个任务,我每次开始这个任务,我都会从这个状态出发,那其它状态都无所谓,我只需要最大化从这个状态出发的 return 就可以。 d0(s0) = 1 和 d0(s != s0) = 0,其中 s0 是一个特定的起始状态。这时候的目标函数是 v_µ(s0),我只是最大化从 s0 出发的 return

  • - 第二种特殊情况是 d0 是一个 stationary distribution of a behavior policy,也就是我另外一个 behavior policy 比如说 β,在她下面的 stationary distribution,这个和 off policy 有关系。d0 是不同于 µ 的 behavior policy 的静态分布。

待会大家就会发现,这个 deterministic policy gradient 是 off policy 的天然的,我不需要用 importance sampling 把它转成 off policy 的,他自己就是 off policy


这个梯度和 stochastic 的梯度很不同,因为这里没有涉及到 A

与随机情况(stochastic case)有一个重要区别:

  • - 梯度不涉及行动 A 的分布(为什么?),这个 action A 最后会被替换成 µ(s),所以没有 action A,那自然也就没有 A 所谓的梯度
  • - 因此,确定性策略梯度法是 off policy 的。因为之后我会对 true gradient 求 stochastic gradient,也就是采样,我在进行采样的时候如果给定了一个 s,然后我要求得到一个 a,再得到 r_t+1 等等,这时候我不需要关心 a 到底是哪个策略得到的,因为 expectation 没有要求我必须按照哪一个策略得到,可以是任意的,所以这时候我就可以用一个 behavior policy,其他的任何一个策略都可以

根据 policy gradient,最大化 J(θ) 的梯度上升算法为

上面式子的 expectation 不能求出来,所以我用 stochastic gradient 来代替。相应的随机梯度上升算法是



备注

  • - 这是一种 off-policy 的方式,其中的 behavior policy β 可能与 µ 不同,µ 是 target policy。
  • - β 也可以与 µ 一致,那就是每次我得到一个 µ 之后,因为 µ 是确定性的,是不能探索的,所以我可以给他加上一些噪音,让动作左右摇摆一点,就可以有一定的探索性,然后去到下一个时刻去执行采样的任务,在那样的情况下就变成了 on-policy 的情况。β 也可以用 µ+noise 代替。
  • 本质上来说它是一个 off policy 的算法,所以他既可以用 on-policy 也可以用 off policy 的实现方式。
  • µ+noise 的方式与我们之前的 \epsilon-greedy 的方法类似,但是这里我们不能用,因为这里边他的 action 是连续的,我不能在其它有限的 action 上加一些比较小的概率

- 如何选择表示 q(s,a,w)的函数?

  • - 线性函数:q(s, a, w) = φT(s, a)w,其中 φ(s, a) 是特征向量,w 是参数。详情请参见 DPG 论文。它的问题在于,一个是我要选取这个 feature vector,再一个就是它是线性的,他对于逼近真实的 action value 的能力有限
  • - 神经网络:深度确定性策略梯度法(DDPG)。

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

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

相关文章

C语言中的控制语句(分支语句 if、switch、三目运算符)

程序执行的三大流程 顺序 : 从上向下, 顺序执行代码分支 : 根据条件判断, 决定执行代码的分支循环 : 让特定代码重复的执行 分支语句 条件语句用来根据不同的条件来执行不同的语句,C语言中常用的条件语句包括if语句和switch语句。 if 语句…

网络靶场实战-恶意程序自启动

简介 当恶意程序入侵目标为个人计算机时,相较于服务器,个人计算机对关机或重启操作更加频繁,关机时计算机所有的进程都会被结束,因此恶意程序需要配置自启动来使自己在每次开机时能够被运行。 本篇介绍一个恶意样本(b8090d7d12d…

Docker向harbor上传大镜像的413报错

文章目录 一、背景二、问题三、处理1.调整harbor相关大小2.正向代理的nginx参数 一、背景 最近遇到了个需求,某厂商的系统模块以容器模式部署在我们的内网环境中,厂商为我们提供了一个公网仓库,需要我们自己下载相关镜像。因此,获…

快速找到销售爆款!淘宝商品关键词搜索API接口为你开启财富之门

在如今的电商时代,淘宝作为中国最大的网络购物平台,吸引了数以亿计的用户。对于卖家而言,如何快速找到热销商品,成为其成功的关键。淘宝商品关键词搜索API接口就是为了满足这一需求而诞生的工具,联讯数据为卖家提供了全…

C# 动态加载dll

方式1 using System; using System.Reflection;class Program {static void Main(){string dllPath "path/to/your/library.dll"; // 替换为你的DLL文件路径Assembly myAssembly Assembly.LoadFile(dllPath);Type myType myAssembly.GetType("YourNamespace…

番外篇 | YOLOv8改进之在C2f中引入即插即用RepViTBlock模块 | CVPR2024清华RepViT

前言:Hello大家好,我是小哥谈。YOLOv8是一种基于深度学习的实时物体检测算法,其通过将物体检测任务转化为目标框回归问题,并使用卷积神经网络实现高效的特征提取和目标分类。然而,YOLOv8在处理一些复杂场景和小目标时可能存在一定的性能限制。为了克服YOLOv8的局限性,清华…

JMM与内存屏障

一、cpu多核并发缓存架构解析 JMM内存模型:java多线程内存模型跟cpu缓存模型类似,是基于cpu缓存模型来建立的,java线程内存模型是标准化的,屏蔽掉了底层不同计算机的区别 JMM数据原子操作 read(读取):从主内存读取数据…

算法题解记录17+++完全平方数

这是楼主第一次不靠题解,挑战动态规划的中等题目,虽然最终结果只超过了5%的人,不过我也很满意了。 本题楼主首先采用朴素的递归型动态规划,接着优化算法,使用借助HashMap存储临时数据的递归型动态规划,几次…

基于1-wire总线的多路温度监测系统

前言 在现代工业生产和环境监测中,温度是一个关键的参数,它直接影响到生产过程的稳定性和产品质量。为了确保温度控制在安全和有效的范围内,需要一种可靠且高效的多路温度监测系统。随着微电子技术和传感器技术的发展,基于1-Wire…

Redis key(BigKey、MoreKey)的存储策略

1. MoreKey 案例 1.1 大批量往 redis 里面 插入2000w 测试数据key (1) Linux Bash 下面执行&#xff0c;插入 100w rootspray:~# for((i1;i<100*10000;i)); do echo "set k$i v$i" >> /tmp/redisTest.txt; done; 查看 rootspray:~# more /tmp/redisTest.…

elementui单个输入框回车刷新整个页面

<!-- 搜索 --> <el-form :model"queryParams" ref"queryForm" :inline"true"><el-form-item label"名称" prop"nameLike"><el-input v-model"queryParams.nameLike" placeholder"请输入…

Arcgis Pro2.5安装教程(内含安装文件)

​最近处理的数据量大&#xff0c;发现arcmap这种老产品属实是不行了&#xff0c;相比于下一代的Arcgis Pro,不但运行速度慢&#xff0c;也容易遇到突然关闭的问题&#xff0c;之前基于团队的选择也没办法&#xff0c;最近实在是被数据搞得无语了&#xff0c;一鼓作气装上了Arc…

319_C++_使用QT自定义的对话框,既能选择文件也能选择文件夹,为什么使用QListView和QTreeView来达成目的?

解析 1: 在 Qt 中,QFileDialog::setOption 方法用于设置文件对话框的一些选项,以改变其行为或外观。QFileDialog::DontUseNativeDialog 是这些选项之一,当设置为 true 时,它会告诉 QFileDialog 不要使用操作系统提供的原生文件对话框,而是使用 Qt 自己实现的对话框样式。…

WAF攻防-漏洞发现协议代理池GobyAwvsXray

知识点 1、Http/s&Sock5协议 2、Awvs&Xray&Goby代理 3、Proxifier进程代理使用 4、Safedog&BT&Aliyun防护在漏洞发现中&#xff0c;WAF会对三个方向进行过滤拦截&#xff1a; 1、速度频率问题&#xff08;代理池解决&#xff09; 2、工具的指纹被识别&am…

MySQL查询重复数据获取最新数据

方法一&#xff1a; 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘se_jck的博客-CSDN博客 这个错误是由于 MySQL 的新版本中默认开启了ONLY_FULL_GROUP_BY模式&#xff0c;即在 GROUP BY 语句中的 SELECT 列表中&…

UE5不打包启用像素流 ubuntu22.04

首先查找引擎中像素流的位置&#xff1a; zkzk-ubuntu2023:/media/zk/Data/Linux_Unreal_Engine_5.3.2$ sudo find ./ -name get_ps_servers.sh [sudo] zk 的密码&#xff1a; ./Engine/Plugins/Media/PixelStreaming/Resources/WebServers/get_ps_servers.sh然后在指定路径中…

标准版配置的新增和使用

很多用户在使用标准版进行二开的时候&#xff0c;都会遇见需要增加配置的问题 这篇文章就详细的介绍了&#xff0c;怎么增加配置以及配置的调用 一、增加配置 1. 增加配置分类 在菜单维护-开发配置-配置分类中&#xff0c;点击添加配置分类 父级分类&#xff1a;选择此分类的…

基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子钟闹钟12/24小时制LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteu…

如何自动监控WordPress网站的运行状态

近来有不少Hostease的客户来咨询关于监控网站在线情况的方法&#xff0c;确实&#xff0c;尽管我们采取了各方面的措施来维护和保护WordPress网站&#xff0c;网站依然有可能由于一些不可控的原因关闭&#xff0c;这种情况往往事发突然&#xff0c;如果没有提前做好准备&#x…

评分卡制作过程中关键参数设定的思考

评分卡制作过程中关键参数设定的思考 评分卡、列线图和网络APP都是预测模型进入生产场景的形式。评分卡&#xff0c;常用于银行或金融机构的贷款审批过程中。其原理在于通过一系列与借款人相关的因素&#xff08;如年龄、收入、职业、信用记录等&#xff09;来为每个人打分&am…