当前位置:首页 » 操作系统 » 最新的优化算法

最新的优化算法

发布时间: 2023-03-25 07:24:40

A. 优化算法

动量法、AdaGrad、RMSProp、AdaDelta、Adam

在7.2节(梯度下降和随机梯度下降)中我们提到,目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向 仅仅取决于自变量当前位置,这可能会带来一些问题

可以看到,同一位置上,目标函数在竖直方向( 轴方向)比在水平方向( 轴方向)的斜率的绝对值更大。因此,给定学习率,梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。那么,我们 需要一个较小的学习率 从而避免自变量在竖直方向上越过目标函数最优解。然而,这会造成自变量在水平方向上 朝最优解移动变慢

试着将学习率调大一点,此时自变量在竖直方向不断越过最优解并逐渐发散。

动量法的提出是为了解决梯度下降的上述问题。

其中,动量超参数 满足 。当 时,动量法等价于小批量随机梯度下降。

因此,在实际中,我们常常将 看作是最近 个时间步的 的值的加权平均。

现在,我们对动量法的速度变量做变形:

优化算法中,⽬标函数⾃变量的每⼀个元素在相同时间步都使⽤同⼀个学习率来⾃我迭代。在“动量法”⾥我们看到当x1和x2的梯度值有较⼤差别时,需要选择⾜够小的学习率使得⾃变量在梯度值较⼤的维度上不发散。但这样会导致⾃变量在梯度值较小的维度上迭代过慢。动量法依赖指数加权移动平均使得⾃变量的更新⽅向更加⼀致,从而降低发散的可能。 本节我们介绍AdaGrad算法,它根据⾃变量在每个维度的梯度值的⼤小来调整各个维度上的学习率,从而避免统⼀的学习率难以适应所有维度的问题。

AdaGrad算法会使⽤⼀个小批量随机梯度gt按元素平⽅的累加变量st。在时间步0,AdaGrad将s0中每个元素初始化为0。在时间步t,⾸先将小批量随机梯度gt按元素平⽅后累加到变量st:

其中⊙是按元素相乘。接着,我们将⽬标函数⾃变量中每个元素的学习率通过按元素运算重新调整⼀下:

其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,如10的-6次方。这⾥开⽅、除法和乘法的运算都是按元素运算的。这些按元素运算使得⽬标函数⾃变量中 每个元素都分别拥有⾃⼰的学习率

需要强调的是,小批量随机梯度按元素平⽅的累加变量st出现在学习率的分⺟项中。因此,

然而,由于st⼀直在累加按元素平⽅的梯度,⾃变量中每个元素的学习率在迭代过程中⼀直在降低(或不变)。 所以,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到⼀个有⽤的解

当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于 学习率过小 ,可能较难找到⼀个有⽤的解。为了解决这⼀问题,RMSProp算法对AdaGrad算法做了⼀点小小的修改。

不同于AdaGrad算法⾥状态变量st是 截⾄时间步t所有小批量随机梯度gt按元素平⽅和 ,RMSProp算法将这些梯度 按元素平⽅做指数加权移动平均 。具体来说,给定超参数0 ≤ γ < 1,RMSProp算法在时间步t > 0计算:

和AdaGrad算法⼀样,RMSProp算法将⽬标函数⾃变量中每个元素的学习率通过按元素运算重新调整,然后更新⾃变量:

其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,如10的-6次方。因为RMSProp算法的状态变量st是对平⽅项gt ⊙ gt的指数加权移动平均, 所以可以看作是最近1/(1 − γ)个时间步的小批量随机梯度平⽅项的加权平均。如此⼀来,⾃变量每个元素的学习率在迭代过程中就不再⼀直降低(或不变)。

除了RMSProp算法以外,另⼀个常⽤优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有⽤解的问题做了改进。有意思的是,AdaDelta算法没有学习率这⼀超参数。

AdaDelta算法也像RMSProp算法⼀样,使⽤了小批量随机梯度gt按元素平⽅的指数加权移动平均变量st。在时间步0,它的所有元素被初始化为0。给定超参数0 ≤ ρ < 1(对应RMSProp算法中的γ),在时间步t > 0,同RMSProp算法⼀样计算:

与RMSProp算法不同的是,AdaDelta算法还维护⼀个 额外的状态变量∆xt ,其元素同样在时间步0时被初始化为0。我们使⽤∆xt−1来计算⾃变量的变化量:

最后,我们使⽤∆xt来记录⾃变量变化量 按元素平⽅的指数加权移动平均:

Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。
Adam算法使⽤了 动量变量vt 和RMSProp算法中 小批量随机梯度按元素平⽅的指数加权移动平均变量st ,并在时间步0将它们中每个元素初始化为0。给定超参数0 ≤ β1 < 1(算法作者建议设为0.9),时间步t的动量变量vt即小批量随机梯度gt的指数加权移动平均:

接下来,Adam算法使⽤以上 偏差修正 后的变量 v ˆ t s ˆ t ,将模型参数中每个元素的学习率通过按元素运算重新调整:

其中 η 是学习率, ϵ 是为了维持数值稳定性而添加的常数,如10的-8次方。和AdaGrad算法、RMSProp算法以及AdaDelta算法⼀样,⽬标函数⾃变量中每个元素都分别拥有⾃⼰的学习率。最后,使⽤ 迭代⾃变量:

B. 大数据最常用的算法有哪些

奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。

大数据等最核心的关键技术:32个算法

1、A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。

2、集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。

3、二分查找(Binary Search)——在线性数组中找特定值的算法,每个步骤去掉一半不符合要求的数据。

4、分支界定算法(Branch and Bound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。

5、Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。

6、数据压缩——采取特定编码方案,使用更少的字节数(或是其他信息承载单元)对信息编码的过程,又叫来源编码。

7、Diffie-Hellman密钥交换算法——一种加密协议,允许双方在事先不了解对方的情况下,在不安全的通信信道中,共同建立共享密钥。该密钥以后可与一个对称密码一起,加密后续通讯。

8、Dijkstra算法——针对没有负值权重边的有向图,计算其中的单一起点最短算法。

9、离散微分算法(Discrete differentiation)。

10、动态规划算法(Dynamic Programming)——展示互相覆盖的子问题和最优子架构算法

11、欧几里得算法(Euclidean algorithm)——计算两个整数的最大公约数。最古老的算法之一,出现在公元前300前欧几里得的《几何原本》。

12、期望-最大算法(Expectation-maximization algorithm,又名EM-Training)——在统计计算中,期望-最大算法在概率模型中寻找可能性最大的参数估算值,其中模型依赖于未发现的潜在变量。EM在两个步骤中交替计算,第一步是计算期望,利用对隐藏变量的现有估计值,计算其最大可能估计值;第二步是最大化,最大化在第一步上求得的最大可能值来计算参数的值。

13、快速傅里叶变换(Fast Fourier transform,FFT)——计算离散的傅里叶变换(DFT)及其反转。该算法应用范围很广,从数字信号处理到解决偏微分方程,到快速计算大整数乘积。

14、梯度下降(Gradient descent)——一种数学上的最优化算法。

15、哈希算法(Hashing)。

16、堆排序(Heaps)。

17、Karatsuba乘法——需要完成上千位整数的乘法的系统中使用,比如计算机代数系统和大数程序库,如果使用长乘法,速度太慢。该算法发现于1962年。

18、LLL算法(Lenstra-Lenstra-Lovasz lattice rection)——以格规约(lattice)基数为输入,输出短正交向量基数。LLL算法在以下公共密钥加密方法中有大量使用:背包加密系统(knapsack)、有特定设置的RSA加密等等。

19、最大流量算法(Maximum flow)——该算法试图从一个流量网络中找到最大的流。它优势被定义为找到这样一个流的值。最大流问题可以看作更复杂的网络流问题的特定情况。最大流与网络中的界面有关,这就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一个流网络中的最大流。

20、合并排序(Merge Sort)。

21、牛顿法(Newton’s method)——求非线性方程(组)零点的一种重要的迭代法。

22、Q-learning学习算法——这是一种通过学习动作值函数(action-value function)完成的强化学习算法,函数采取在给定状态的给定动作,并计算出期望的效用价值,在此后遵循固定的策略。Q-leanring的优势是,在不需要环境模型的情况下,可以对比可采纳行动的期望效用。

23、两次筛法(Quadratic Sieve)——现代整数因子分解算法,在实践中,是目前已知第二快的此类算法(仅次于数域筛法Number Field Sieve)。对于110位以下的十位整数,它仍是最快的,而且都认为它比数域筛法更简单。

24、RANSAC——是“RANdom SAmple Consensus”的缩写。该算法根据一系列观察得到的数据,数据中包含异常值,估算一个数学模型的参数值。其基本假设是:数据包含非异化值,也就是能够通过某些模型参数解释的值,异化值就是那些不符合模型的数据点。

25、RSA——公钥加密算法。首个适用于以签名作为加密的算法。RSA在电商行业中仍大规模使用,大家也相信它有足够安全长度的公钥。

26、Sch?nhage-Strassen算法——在数学中,Sch?nhage-Strassen算法是用来完成大整数的乘法的快速渐近算法。其算法复杂度为:O(N log(N) log(log(N))),该算法使用了傅里叶变换。

27、单纯型算法(Simplex Algorithm)——在数学的优化理论中,单纯型算法是常用的技术,用来找到线性规划问题的数值解。线性规划问题包括在一组实变量上的一系列线性不等式组,以及一个等待最大化(或最小化)的固定线性函数。

28、奇异值分解(Singular value decomposition,简称SVD)——在线性代数中,SVD是重要的实数或复数矩阵的分解方法,在信号处理和统计中有多种应用,比如计算矩阵的伪逆矩阵(以求解最小二乘法问题)、解决超定线性系统(overdetermined linear systems)、矩阵逼近、数值天气预报等等。

29、求解线性方程组(Solving a system of linear equations)——线性方程组是数学中最古老的问题,它们有很多应用,比如在数字信号处理、线性规划中的估算和预测、数值分析中的非线性问题逼近等等。求解线性方程组,可以使用高斯—约当消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。

30、Strukturtensor算法——应用于模式识别领域,为所有像素找出一种计算方法,看看该像素是否处于同质区域( homogenous region),看看它是否属于边缘,还是是一个顶点。

31、合并查找算法(Union-find)——给定一组元素,该算法常常用来把这些元素分为多个分离的、彼此不重合的组。不相交集(disjoint-set)的数据结构可以跟踪这样的切分方法。合并查找算法可以在此种数据结构上完成两个有用的操作:

查找:判断某特定元素属于哪个组。

合并:联合或合并两个组为一个组。

32、维特比算法(Viterbi algorithm)——寻找隐藏状态最有可能序列的动态规划算法,这种序列被称为维特比路径,其结果是一系列可以观察到的事件,特别是在隐藏的Markov模型中。

以上就是Christoph博士对于最重要的算法的调查结果。你们熟悉哪些算法?又有哪些算法是你们经常使用的?

C. 优化算法

  SGD算法中的一个关键参数是学习率。之前,我们介绍的SGD使用固定的学习率。在实践中,有必要随着时间的推移逐渐降低学习率,因此我们将第 k 步迭代的学习率记作 ϵ k 。
  这是因为SGD中梯度估计引入的噪声源(m 个训练样本的随机采样)并不会在极小点处消失。相比之下,当我们使用批量梯度下降到达极小点时,整个代价函数的真实梯度会变得很小,之后为 0,因此批量梯度下降可以使用固定的学习率。保证SGD收敛的一个充分条件是

  若 ϵ 0 太大,学习曲线将会剧烈振荡,代价函数值通常会明显增加。温和的振荡是良好的,容易在训练随机代价函数(例如使用Dropout的代价函数)时出现。如果学习率太小,那么学习过程会很缓慢。如果初始学习率太低,那么学习可能会卡在一个相当高的代价值。通常,就总训练时间和最终代价值而言,最优初始学习率会高于大约迭代 100 次左右后达到最佳效果的学习率。因此,通常最好是检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率,但又不能太大导致严重的震荡。

  虽然随机梯度下降仍然是非常受欢迎的优化方法,但其学习过程有时会很慢。动量方法 (Polyak, 1964) 旨在加速学习,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。动量的效果如图8.5所示

  受 Nesterov 加速梯度算法 (Nesterov, 1983, 2004) 启发,提出了动量算法的一个变种。这种情况的更新规则如下:

  其中参数 α 和 ϵ 发挥了和标准动量方法中类似的作用。Nesterov 动量和标准动量之间的区别体现在梯度计算上。Nesterov 动量中,梯度计算在施加当前速度之后。因此,Nesterov 动量可以解释为往标准动量方法中添加了一个校正因子。完整的Nesterov动量算法如算法3.2所示

  初始点能够决定算法是否收敛,有些初始点十分不稳定,使得该算法会遭遇数值困难,并完全失败。当学习收敛时,初始点可以决定学习收敛得多快,以及是否收敛到一个代价高或低的点。此外,差不多代价的点可以具有区别极大的泛化误差,初始点也可以影响泛化。
  也许完全确知的唯一特性是初始参数需要在不同单元间 ‘‘破坏对称性’’。如果具有相同激活函数的两个隐藏单元连接到相同的输入,那么这些单元必须具有不同的初始参数。如果它们具有相同的初始参数,然后应用到确定性损失和模型的确定性学习算法将一直以相同的方式更新这两个单元。即使模型或训练算法能够使用随机性为不同的单元计算不同的更新(例如使用Dropout的训练),通常来说,最好还是初始化每个单元使其和其他单元计算不同的函数。这或许有助于确保没有输入模式
丢失在前向传播的零空间中,没有梯度模式丢失在反向传播的零空间中。每个单元计算不同函数的目标促使了参数的随机初始化。我们可以明确地搜索一大组彼此互不相同的基函数,但这经常会导致明显的计算代价。例如,如果我们有和输出一样多的输入,我们可以使用 Gram-Schmidt 正交化于初始的权重矩阵,保证每个单元计算彼此非常不同的函数。在高维空间上使用高熵分布来随机初始化,计算代价小并且不太可能分配单元计算彼此相同的函数。
  通常情况下,我们可以为每个单元的偏置设置启发式挑选的常数,仅随机初始化权重。额外的参数(例如用于编码预测条件方差的参数)通常和偏置一样设置为启发式选择的常数。
  我们几乎总是初始化模型的权重为高斯或均匀分布中随机抽取的值。高斯或均匀分布的选择似乎不会有很大的差别,但也没有被详尽地研究。然而,初始分布的大小确实对优化过程的结果和网络泛化能力都有很大的影响。
  更大的初始权重具有更强的破坏对称性的作用,有助于避免冗余的单元。它们也有助于避免在每层线性成分的前向或反向传播中丢失信号——矩阵中更大的值在矩阵乘法中有更大的输出。如果初始权重太大,那么会在前向传播或反向传播中产生爆炸的值。在循环网络中,很大的权重也可能导致混沌(chaos)(对于输入中很小的扰动非常敏感,导致确定性前向传播过程表现随机)。在一定程度上,梯度爆炸问题可以通过梯度截断来缓解(执行梯度下降步骤之前设置梯度的阈值)。较大的权
重也会产生使得激活函数饱和的值,导致饱和单元的梯度完全丢失。这些竞争因素决定了权重的理想初始大小。
  也有助于避免在每层线性成分的前向或反向传播中丢失信号——矩阵中更大的值在矩阵乘法中有更大的输出。如果初始权重太大,那么会在前向传播或反向传播中产生爆炸的值。在循环网络中,很大的权重也可能导致混沌(chaos)(对于输入中很小的扰动非常敏感,导致确定性前向传播过程表现随机)。在一定程度上,梯度爆炸问题可以通过梯度截断来缓解(执行梯度下降步骤之前设置梯度的阈值)。较大的权重也会产生使得激活函数饱和的值,导致饱和单元的梯度完全丢失。这些竞争因素决定了权重的理想初始大小。
  有些启发式方法可用于选择权重的初始大小。一种初始化 m 个输入和 n 输出的全连接层的权重的启发式方法是从分布 U(−1/√ m ,
1/√ m ) 中采样权重,而 Glorot and Bengio 建议使用标准初始化

  后一种启发式方法初始化所有的层,折衷于使其具有相同激活方差和使其具有相同梯度方差之间。这假设网络是不含非线性的链式矩阵乘法,据此推导得出。现实的神经网络显然会违反这个假设,但很多设计于线性模型的策略在其非线性对应中的效果也不错。
  数值范围准则的一个缺点是,设置所有的初始权重具有相同的标准差,例如1/√ m ,会使得层很大时每个单一权重会变得极其小。Martens (2010) 提出了一种被称为稀疏初始化(sparse initialization)的替代方案,每个单元初始化为恰好有 k 个非零权重。这个想法保持该单元输入的总数量独立于输入数目 m,而不使单一权重元素的大小随 m 缩小。稀疏初始化有助于实现单元之间在初始化时更具多样性。但是,获得较大取值的权重也同时被加了很强的先验。因为梯度下降需要很长时间缩小 ‘‘不正确’’ 的大值,这个初始化方案可能会导致某些单元出问题,例如maxout单元有几个过滤器,互相之间必须仔细调整。

  Delta-bar-delta 算法 (Jacobs, 1988) 是一个早期的在训练时适应模型参数各自学习率的启发式方法。该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导保持相同的符号,那么学习率应该增加。如果对于该参数的偏导变化了符号,那么学习率应减小。当然,这种方法只能应用于全批量优化中。

  AdaGrad 算法,如算法8.4所示,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根 (Duchi et al., 2011)。具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。

  在凸优化背景中,AdaGrad 算法具有一些令人满意的理论性质。然而,经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrad在某些深度学习模型上效果不错,但不是全部。

  RMSProp 算法 (Hinton, 2012) 修改 AdaGrad 以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。AdaGrad旨在应用于凸问题时快速收敛。当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。AdaGrad 根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小了。RMSProp 使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛,它就像一个初始化于该碗状结构的 AdaGrad 算法实例。
  RMSProp 的标准形式如算法8.5所示,结合 Nesterov 动量的形式如算法8.6所示。相比于 AdaGrad,使用移动平均引入了一个新的超参数ρ,用来控制移动平均的长度范围。经验上,RMSProp 已被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习从业者经常采用的优化方法之一。

  Adam (Kingma and Ba, 2014) 是另一种学习率自适应的优化算法,最好被看作结合 RMSProp 和具有一些重要区别的动量的变种。首先,在 Adam 中,动量直接并入了梯度一阶矩(指数加权)的估计。将动量加入 RMSProp 最直观的方法是将动量应用于缩放后的梯度。结合缩放的动量使用没有明确的理论动机。其次,Adam 包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计(算法8.7)。RMSProp 也采用了(非中心的)二阶矩估计,然而缺失了修正因子。因此,不像 Adam,RMSProp 二阶矩估计可能在训练初期有很高的偏置。Adam 通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。

  目前,最流行并且使用很高的优化算法包括 SGD、具动量的 SGD、RMSProp、具动量的 RMSProp、AdaDelta 和 Adam。

D. 优化算法笔记(十六)混合蛙跳算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
混合蛙跳算法(Shuffled Frog Leaping Algorithm)是根据青蛙在石块上觅食时的种群分布变化而提出的算法。算法提出于2003年,时间有点久远,但相关的论文并不是特别多,仍有较大的研究和改进空间。
混合蛙跳算法中,每个青蛙的位置代表了一个可行解。青蛙所在的池塘中有数块石块,每一代,青蛙们会被分配到石块上。在这一代中,只有石块上位置最差的青蛙会跳动。该青蛙首先会向着同一个石块上的最优位置的青蛙跳动,如果新的位置比原位置差则向则全局最优位置跳动,若该位置仍旧比原位置差则在解空间内随机跳动一次。可以看出每只跳动青蛙在每代中至少跳动一次,至多跳动三次,但由于每次跳动的青蛙数量等于石块数,故当石块数<青蛙数/3时,每代总跳动次数小于青蛙总数。
(查找文献追根溯源的时候看到了一个有趣的现象,原始的提出论文提出于2000年(Shuffled frog leaping algorithm:a memetic meta-heuristic for combinatorial optimization.)但是到2006年才出版,而2003年的论文(Optimization of Water Distribution Network Design Using the Shuffled Frog Leaping Algorithm)引用了2000年的原始论文,并标注为出版中。到了2006年出版时,原始论文引用了2003年发表的那篇论文,即这两篇论文相互引用,真是奇妙。估计是原始论文被拒了后又修改了结果到2006年才发表。)

这次的主角就是青蛙了。(没有石块就用荷叶代替吧)。

每一只青蛙只有两个属性:位置,当前位置的适应度值。
池塘中一共有m片荷叶,青蛙总数为n。
每一代中,将所有的青蛙按位置从优到劣排列,并依此放置在m个荷叶上。举个栗子,有5片荷叶(m1-m5)和21只青蛙(f1-f21,按适应度值从优到劣排列)。

即m1荷叶上的青蛙有{f1,f6,f11,f16,f21},m2荷叶上的青蛙有{f2,f7,f12,f17},依此类推。
每代中最差的青蛙会首先向着当前荷叶上最优位置的青蛙跳动,即该代中f21会向着f1跳动,f17向着f2跳动,f18向着f3跳动,f19向着f4跳动,f20向着f5跳动。
如果f21、f17、f18、f19、f20这五只青蛙没有找到优于自己当前位置的位置,则它们会向着全局最优位置的青蛙f1跳动,如果新的位置仍然差于自己的原位置,则该青蛙跳到一个随机的位置。

在D维空间内青蛙f1的位置 ,其适应度值为 。

(1)青蛙f17向f2跳动后的新位置为 :

若 优于 则青蛙f17跳到 ,否则跳到(2)。

(2)由于f1在全局最优位置,故在这一步,f17会向f1跳动:

优于 则青蛙f17跳到 ,否则跳到(3)。

(3)f17会跳到解空间内的随机位置:

若 优于 则青蛙f17跳到 。

可以看出混合蛙跳算法的流程灰常的简单,跳动的算子也非常的简单,而且每次跳动的青蛙的数量等于荷叶的数量,所有其迭代次数会快于多数其他的优化算法。
我自己特别喜欢这个优化算法,总能从中体会出分治的思想。下面我们来看看实验,看看其效果如何。

适应度函数 。
实验一:

荷叶数为1的图像及结果如下:

荷叶数为2的图像及结果如下:

荷叶数为3的图像及结果如下:

荷叶数为4的图像及结果如下:

从上述的四个实验可以看出,随着荷叶数的增加,算法的收敛速度在不断的加快。同时,随着荷叶数的增加,每代青蛙跳动的次数也在不断的增加。荷叶数为1时,每代青蛙总共会跳动1-3次,荷叶数为2时每代青蛙总共跳动2-6次,当荷叶数为10时,每代青蛙会跳动10-30次。由于每片荷叶上至少得有2只青蛙,所以荷叶数最多为总群数的一半。
算法的效果比较稳定,但好像没有体现出其跳出局部最优能力,在种群收敛后其全搜索能力较弱,大多在进行局部搜索。
看了看算法的结构,其跳出局部最优操作为第三段跳动,而这次跳动仍旧按照贪心算法跳到优于当前位置的随机位置。现在我将其增强为:如果进行了第三段跳动(随机跳动),则无论该位置的好坏,青蛙都将跳到该随机位置。

实验二: 永远接受公式(3)得到的随机位置

可以看出在种群收敛后,仍然会有一些个体随机出现在解空间内,并继续收敛。比较结果可以看出实验二的结果中的最优值不如实验一,但是其均值和最差值均优于实验一,说明对原算法进行修改后算法更加稳定,且算法的性能和全局搜索能力有一定的提升,算法跳出局部最优能力更强。

混合蛙跳算法是提出近20年,其实现的方式与分治的思想有异曲同工之处。由于每次都更新的是每片荷叶上的最差位置的青蛙,故群体不容易集中于较小的范围。同时由于“三段跳”的操作,让混合蛙跳算法有了一定的跳出局部最优能力。其全局搜索能力和局部搜索能力应该差不多,当最差的部分青蛙跳走后,次差的部分青蛙则会变成了最差的青蛙,此时群体不会过分集中。当群体相对分散时,为搜索范围较大的全局搜索,反之为搜索范围较小的局部搜索,由于收敛速度不算很快,所以进行全局搜索和局部搜索的时间相对均衡。
混合蛙跳算法的流程非常简单,几乎可以说是流程最简单的优化算法。其中的算子也很简单,优化的能力由种群的结构提供。算法的文章中比较了 “模因” “基因” ,模因类似与思想,其传播可以在同代中快速传播,比如音乐,几分钟就可以传播给其他人,而基因则只能有父母辈传递给子女背,传递的时间比较久。这也决定了混合优化算法的最重要的部分在于其群体的结构而不是其中的优化算子,实验说明这样的效果也不错,简单明了的算法也能有不错的效果。

参考文献
Eusuff M , Lansey K , Pasha F . Shuffled frog-leaping algorithm: a memetic meta-heuristic for discrete optimization[J]. Engineering Optimization, 2006, 38(2):129-154. 提取码:ttgx

Eusuff, M.M. and Lansey, K.E., Optimization of water distribution network design using the shuffled frog leaping algorithm (SFLA). J.Water Resources Planning Mgmt,Am. Soc. Civ. Engrs, 2003, 129(3), 210–225. 提取码:cyu8

以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(十五)蝙蝠算法
下一篇 优化算法笔记(十七)万有引力算法

优化算法matlab实现(十六)混合蛙跳算法matlab实现

E. 优化算法笔记(三十四)鸽群算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
鸽群算法是根据鸽子依据磁场而拥有高超识途技巧提出的优化算法。算法提出于2014年(到底是08年还是14年?引用显示08),也算有些年头了。这也是一个由中国研究者提出的优化算法,可喜可贺。
鸽群算法中的个体和粒子群算法中的粒子结构类似,都由位置和速度组成。在鸽群算法中,鸽子的飞行行为根据迭代次数分为了两个阶段。简单来说,阶段一向着当前最优位置飞行,阶段二向着自身周围飞行。下面将详细描述其飞行步骤

本次的主角就是鸽子了。
鸽群中鸽子数量为N,每只鸽子的位置为 ,速度为 ,该位置的优劣由其适应度函数 计算得出。
在鸽群算法中,鸽子的行为依照迭代次数划分为两个阶段,阶段1占整个迭代次数的比例为NcRate,一般的NcRate取值为0.75。

迭代次数在 代内为阶段1。
在阶段1中,需要根据鸽子的位置与目标,计算出鸽子的速度。当前位置加上速度就得到了新的位置。

阶段2为迭代次数大于 的部分。
阶段2相对复杂,首先需要对群体进行排序,将群体均分为两组,较优的那组保持位置不变,同时提供其位置、适应度值作为参数,供较差的那组确定它们的新位置所在。

公式(3)求出了较优的那部分鸽子的重心所在,公式(4)则是让较差的部分鸽子向着较优部分鸽子的重心随机飞行了一段距离。

文章没有说明鸽群算法是否需要使用贪心算法,下面会各自进行一次实验看看效果。

适应度函数 。
实验一 : 无贪心步骤

从图像可以看出,算法的收敛速度和精度都不错。但是可以明显注意到在40代左右,聚集于右下最优位置附近的个体会有一个向中心聚集的过程,数了一下,刚好是10个个体。这应该是阶段2中较差的部分个体更新位置导致的。
本次试验阶段2时,可以认为其适应度函数几乎等于0,个体位置几乎到达90。则Nc计算公式如下:

可知个体会向着9处前进,并最终收敛到此处。可以看出阶段2中公式(3)设计欠妥(当然,当最优解在0处时,精度会有很大的提升)。公式(3)应去除分母中求和前的N/2。

从结果来看,鸽群算法还不错,但是性能好像不太稳定,毕竟只用了阶段1就计算出了结果,情有可原。
下面看看添加了贪心算法的实验。
实验二: 有贪心步骤

图像好像比实验一好了一些,但是并不能说明问题。实验一中存在的问题在实验二中仍然存在,只是由于贪心步骤的缘故,鸽群无法飞到差于自己的位置,阶段2仍然没有任何作用。

实验结果好像好了一丢丢,但几乎可以认为没有变化。

鸽群算法是受鸽子依据磁场识途的特性启发而提出的优化算法。算法的结构简单,主要分为两个阶段,其中阶段1为向着最优位置前进,阶段2则是较差个体向着较优群体中心前进(bushi)。
从实验中可以看出,原算法的公式设计有些许缺陷,进行修改后应该能够得到非常不错的结果。

参考文献

Haibin, Duan, Peixin, et al. Pigeon-inspired optimization: a new swarm intelligence optimizer for air robot path planning[J]. International Journal of Intelligent Computing & Cybernetics, 2008. 提取码:wjok
以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(三十三)黏菌算法
下一篇 优化算法笔记(三十五)天鹰算法

F. 常用优化器算法归纳介绍

优化器是神经网络训练过程中,进行梯度下降以寻找最优解的优化方法。不同方法通过不同方式(如附加动量项,学习率自适应变化等)侧重于解决不同的问题,但最终大都是为了加快训练速度。

这里就介绍几种常见的优化器,包括其原理、数学公式、核心思想及其性能;

核心思想: 即针对每次输入的训练数据,计算输出预测与真值的Loss的梯度;

从表达式来看,网络中参数的更新,是不断向着最小化Loss函数的方向移动的:

优点:
简单易懂,即对于相应的最优解(这里认为是Loss的最小函数),每次变量更新都是沿着局部梯度下降最快的方向,从而最小化损失函数。

缺点:

不同于标准梯度下降法(Gradient Descent)一次计算所有数据样本的Loss并计算相应的梯度,批量梯度下降法(BGD, Batch Gradient Descent)每次只取一个小批次的数据及其真实标签进行训练,称这个批次为mini-batch;

优点:

缺点:
随机梯度下降法的 batch size 选择不当可能导致模型难以收敛;由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。

我们会事先定义一个迭代次数 epoch,首先计算梯度向量 params_grad,然后沿着梯度的方向更新参数 params,learning rate 决定了我们每一步迈多大。

Batch gradient descent 对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值。

和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。

即训练时,每次只从一批训练样本中随机选取一个样本进行梯度下降;对随机梯度下降来说,只需要一次关注一个训练样本,一点点把参数朝着全局最小值的方向进行修改了。

整体数据集是个循环,其中对每个样本进行一次参数更新

缺点:

梯度下降速度比较慢,而且每次梯度更新时往往只专注与局部最优点,而不会恰好指向全局最优点;

单样本梯度更新时会引入许多噪声(跟训练目标无关的特征也会被归为该样本分类的特征);

SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。

当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

优点:

当处理大量数据时,比如SSD或者faster-rcnn等目标检测模型,每个样本都有大量候选框参与训练,这时使用随机梯度下降法能够加快梯度的计算。

随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况,那么可能只用其中部分的样本,就已经将 迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。缺点是SGD的噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。所以虽然训练速度快,但是准确度下降,并不是全局最优。虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的。

梯度更新规则:

MBGD 每一次利用一小批样本,即 n 个样本进行计算,这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

和 SGD 的区别是每一次循环不是作用于每个样本,而是具有 n 个样本的批次。

超参数设定值: n 一般取值在 50~256

缺点:(两大缺点)

鞍点就是:一个光滑函数的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。例如这个二维图形,像个马鞍:在x-轴方向往上曲,在y-轴方向往下曲,鞍点就是(0,0)。

为了应对上面的两点挑战就有了下面这些算法

核心思想:

不使用动量优化时,每次训练的梯度下降方向,都是按照当前批次训练数据计算的,可能并不能代表整个数据集,并且会有许多噪声,下降曲线波动较大:

添加动量项之后,能够有效减小波动,从而加快训练速度:

当我们将一个小球从山上滚下来时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。
加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

优点:

通过动量更新,参数向量会在有持续梯度的方向上增加速度;
使梯度下降时的折返情况减轻,从而加快训练速度;

缺点:

如果数据集分类复杂,会导致 和 时刻梯度 向量方向相差较大;在进行向量求和时,得到的 会非常小,反而使训练速度大大下降甚至模型难以收敛。

这种情况相当于小球从山上滚下来时是在盲目地沿着坡滚,如果它能具备一些先知,例如快要上坡时,就知道需要减速了的话,适应性会更好。

目前为止,我们可以做到,在更新梯度时顺应 loss function 的梯度来调整速度,并且对 SGD 进行加速。

核心思想:

自适应学习率优化算法针对于机器学习模型的学习率,采用不同的策略来调整训练过程中的学习率,从而大大提高训练速度。

这个算法就可以对低频的参数做较大的更新,对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性,例如识别 Youtube 视频里面的猫,训练 GloVe word embeddings,因为它们都是需要在低频的特征上有更大的更新。

Adagrad 的优点是减少了学习率的手动调节

式中, 表示第 个分类, 表示第 迭代同时也表示分类 累计出现的次数。 表示初始的学习率取值(一般为0.01)

AdaGrad的核心思想: 缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应地有较大的学习率,而具有小梯度的参数又较小的学习率。

缺点:

它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小。

这个算法是对 Adagrad 的改进,

和 Adagrad 相比,就是分母的 换成了过去的梯度平方的衰减平均值,指数衰减平均值

这个分母相当于梯度的均方根 root mean squared (RMS),在数据统计分析中,将所有值平方求和,求其均值,再开平方,就得到均方根值 ,所以可以用 RMS 简写:

其中 的计算公式如下, 时刻的依赖于前一时刻的平均和当前的梯度:

梯度更新规则:

此外,还将学习率 换成了 RMS[Δθ],这样的话,我们甚至都不需要提前设定学习率了:

超参数设定值: 一般设定为 0.9

RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。

RMSprop 和 Adadelta 都是为了解决 Adagrad 学习率急剧下降问题的,

梯度更新规则:

RMSprop 与 Adadelta 的第一种形式相同:(使用的是指数加权平均,旨在消除梯度下降中的摆动,与Momentum的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率η)

超参数设定值:

Hinton 建议设定 为 0.9, 学习率 为 0.001。

这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum

除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值:

如果 和 被初始化为 0 向量,那它们就会向 0 偏置,所以做了偏差校正,通过计算偏差校正后的 和 来抵消这些偏差:

梯度更新规则:

超参数设定值:
建议

示例一

示例二

示例三

上面情况都可以看出,Adagrad, Adadelta, RMSprop 几乎很快就找到了正确的方向并前进,收敛速度也相当快,而其它方法要么很慢,要么走了很多弯路才找到。

由图可知自适应学习率方法即 Adagrad, Adadelta, RMSprop, Adam 在这种情景下会更合适而且收敛性更好。

如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。

RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。

Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,

随着梯度变的稀疏,Adam 比 RMSprop 效果会好。

整体来讲,Adam 是最好的选择。

很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。

如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

各种优化器Optimizer原理:从SGD到AdamOptimizer

深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

G. 智能优化算法:灰狼优化算法

@[toc]
摘要:受 灰 狼 群 体 捕 食 行 为 的 启 发,Mirjalili等[1]于 2014年提出了一种新型群体智能优化算法:灰狼优化算法。GWO通过模拟灰狼群体捕食行为,基于狼群群体协作的机制来达到优化的目的。 GWO算法具有结构简单、需要调节的参数少,容易实现等特点,其中存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。

灰狼属于犬科动物,被认为是顶级的掠食者,它们处于生物圈食物链的顶端。灰狼大多喜欢群居,每个群体中平均有5-12只狼。特别令人感兴趣的是,它们具有非常严格的社会等级层次制度,如图1所示。金字塔第一层为种群中的领导者,称为 α 。在狼群中 α 是具有管理能力的个体,主要负责关于狩猎、睡觉的时间和地方、食物分配等群体中各项决策的事务。金字塔第二层是 α 的智囊团队,称为 β 。 β 主要负责协助α 进行决策。当整个狼群的 α 出现空缺时,β 将接替 α 的位置。 β 在狼群中的支配权仅次于 α,它将 α 的命令下达给其他成员,并将其他成员的执行情况反馈给 α 起着桥梁的作用。金字塔第三层是 δ ,δ 听从 α 和 β 的决策命令,主要负责侦查、放哨、看护等事务。适应度不好的 α 和 β 也会降为 δ 。金字塔最底层是 ω ,主要负责种群内部关系的平衡。

<center>图1.灰狼的社会等级制度

此外,集体狩猎是灰狼的另一个迷人的社会行为。灰狼的社会等级在群体狩猎过程中发挥着重要的作用,捕食的过程在 α 的带领下完成。灰狼的狩猎包括以下 3个主要部分:
1)跟踪、追逐和接近猎物;
2)追捕、包围和骚扰猎物,直到它停止移动;
3)攻击猎物

在狩猎过程中,将灰狼围捕猎物的行为定义如下:

式(1)表示个体与猎物间的距离,式(2)是灰狼的位置更新公式。其中, 是目前的迭代代数, 和 是系数向量, 和 分别是猎物的位置向量和灰狼的位置向量。 和 的计算公式如下:

其中, 是收敛因子,随着迭代次数从2线性减小到0, 和 的模取[0,1]之间的随机数。

灰狼能够识别猎物的位置并包围它们。当灰狼识别出猎物的位置后,β 和 δ 在 α 的带领下指导狼群包围猎物。在优化问题的决策空间中,我们对最佳解决方案(猎物的位置)并不了解。因此,为了模拟灰狼的狩猎行为,我们假设 α ,β 和 δ 更了解猎物的潜在位置。我们保存迄今为止取得的3个最优解决方案,并利用这三者的位置来判断猎物所在的位置,同时强迫其他灰狼个体(包括 ω )依据最优灰狼个体的位置来更新其位置,逐渐逼近猎物。狼群内个体跟踪猎物位置的机制如图2所示。

<center>图2.GWO 算法中灰狼位置更新示意图

灰狼个体跟踪猎物位置的数学模型描述如下:

其中, 分别表示分别表示 α , β 和 δ 与其他个体间的距离。 分别代表 α , β 和 δ 的当前位置; 是随机向量, 是当前灰狼的位置。

式(6)分别定义了狼群中 ω 个体朝向 α ,β 和 δ 前进的步长和方向,式(7)定义了 ω 的最终位置。

当猎物停止移动时,灰狼通过攻击来完成狩猎过程。为了模拟逼近猎物, 的值被逐渐减小,因此 的波动范围也随之减小。换句话说,在迭代过程中,当 的值从2线性下降到0时,其对应的 的值也在区间[-a,a]内变化。如图3a所示,当 的值位于区间内时,灰狼的下一位置可以位于其当前位置和猎物位置之间的任意位置。当 时,狼群向猎物发起攻击(陷入局部最优)。

灰狼根据 α ,β 和 δ 的位置来搜索猎物。灰狼在寻找猎物时彼此分开,然后聚集在一起攻击猎物。基于数学建模的散度,可以用 大于1 或小于-1 的随机值来迫使灰狼与猎物分离,这强调了勘探(探索)并允许 GWO 算法全局搜索最优解。如图3b所示, 强迫灰狼与猎物(局部最优)分离,希望找到更合适的猎物(全局最优)。GWO 算法还有另一个组件 来帮助发现新的解决方案。由式(4)可知, 是[0,2]之间的随机值。 表示狼所在的位置对猎物影响的随机权重, 表示影响权重大,反之,表示影响权重小。这有助于 GWO算法更随机地表现并支持探索,同时可在优化过程中避免陷入局部最优。另外,与 不同 是非线性减小的。这样,从最初的迭代到最终的迭代中,它都提供了决策空间中的全局搜索。在算法陷入了局部最优并且不易跳出时, 的随机性在避免局部最优方面发挥了非常重要的作用,尤其是在最后需要获得全局最优解的迭代中。

<center>图4.算法流程图

[1] Seyedali Mirjalili,Seyed Mohammad Mirjalili,Andrew Lewis. Grey Wolf Optimizer[J]. Advances in Engineering Software,2014,69.

[2] 张晓凤,王秀英.灰狼优化算法研究综述[J].计算机科学,2019,46(03):30-38.

https://mianbaoo.com/o/bread/Z5ecmZc=
文献复现:
文献复现:基于翻筋斗觅食策略的灰狼优化算法(DSFGWO)
[1]王正通,程凤芹,尤文,李双.基于翻筋斗觅食策略的灰狼优化算法[J/OL].计算机应用研究:1-5[2021-02-01]. https://doi.org/10.19734/j.issn.1001-3695.2020.04.0102 .

文献复现:基于透镜成像学习策略的灰狼优化算法(LIS-GWO)
[1]龙文,伍铁斌,唐明珠,徐明,蔡绍洪.基于透镜成像学习策略的灰狼优化算法[J].自动化学报,2020,46(10):2148-2164.

文献复现:一种优化局部搜索能力的灰狼算法(IGWO)
[1]王习涛.一种优化局部搜索能力的灰狼算法[J].计算机时代,2020(12):53-55.

文献复现:基于自适应头狼的灰狼优化算法(ALGWO)
[1]郭阳,张涛,胡玉蝶,杜航.基于自适应头狼的灰狼优化算法[J].成都大学学报(自然科学版),2020,39(01):60-63+73.

文献复现:基于自适应正态云模型的灰狼优化算法 (CGWO)
[1]张铸,饶盛华,张仕杰.基于自适应正态云模型的灰狼优化算法[J/OL].控制与决策:1-6[2021-02-08]. https://doi.org/10.13195/j.kzyjc.2020.0233 .

文献复现:改进非线性收敛因子灰狼优化算法
[1]王正通,尤文,李双.改进非线性收敛因子灰狼优化算法[J].长春工业大学学报,2020,41(02):122-127.

文献复现:一种基于收敛因子改进的灰狼优化算法
[1]邢燕祯,王东辉.一种基于收敛因子改进的灰狼优化算法[J].网络新媒体技术,2020,9(03):28-34.

文献复现:基于莱维飞行和随机游动策略的灰狼算法(GWOM )
[1]李阳,李维刚,赵云涛,刘翱.基于莱维飞行和随机游动策略的灰狼算法[J].计算机科学,2020,47(08):291-296.

文献复现:一种改进的灰狼优化算法(EGWO)
[1]龙文,蔡绍洪,焦建军,伍铁斌.一种改进的灰狼优化算法[J].电子学报,2019,47(01):169-175.

文献复现:改进收敛因子和比例权重的灰狼优化算法(CGWO)
[1]王秋萍,王梦娜,王晓峰.改进收敛因子和比例权重的灰狼优化算法[J].计算机工程与应用,2019,55(21):60-65+98.

文献复现:一种改进非线性收敛方式的灰狼优化算法研究(CGWO)
[1]谈发明,赵俊杰,王琪.一种改进非线性收敛方式的灰狼优化算法研究[J].微电子学与计算机,2019,36(05):89-95.

文献复现:一种基于Tent 映射的混合灰狼优化的改进算法(PSOGWO)
[1]滕志军,吕金玲,郭力文,许媛媛.一种基于Tent映射的混合灰狼优化的改进算法[J].哈尔滨工业大学学报,2018,50(11):40-49.

文献复现:基于差分进化与优胜劣汰策略的灰狼优化算法(IGWO)
[1]朱海波,张勇.基于差分进化与优胜劣汰策略的灰狼优化算法[J].南京理工大学学报,2018,42(06):678-686.

文献复现:基于 Iterative 映射和单纯形法的改进灰狼优化算法(SMIGWO)
[1]王梦娜,王秋萍,王晓峰.基于Iterative映射和单纯形法的改进灰狼优化算法[J].计算机应用,2018,38(S2):16-20+54.

文献复现:一种基于混合策略的灰狼优化算法(EPDGWO)
[1]牛家彬,王辉.一种基于混合策略的灰狼优化算法[J].齐齐哈尔大学学报(自然科学版),2018,34(01):16-19+32.

文献复现:基于随机收敛因子和差分变异的改进灰狼优化算法(IGWO)
[1]徐松金,龙文.基于随机收敛因子和差分变异的改进灰狼优化算法[J].科学技术与工程,2018,18(23):252-256.

文献复现:一种基于差分进化和灰狼算法的混合优化算法(DEGWO)
[1]金星,邵珠超,王盛慧.一种基于差分进化和灰狼算法的混合优化算法[J].科学技术与工程,2017,17(16):266-269.

文献复现:协调探索和开发能力的改进灰狼优化算法(IGWO)
[1]龙文,伍铁斌.协调探索和开发能力的改进灰狼优化算法[J].控制与决策,2017,32(10):1749-1757.

文献复现:基于Cat混沌与高斯变异的改进灰狼优化算法(IGWO)
[1]徐辰华,李成县,喻昕,黄清宝.基于Cat混沌与高斯变异的改进灰狼优化算法[J].计算机工程与应用,2017,53(04):1-9+50.

文献复现:具有自适应搜索策略的灰狼优化算法(SAGWO)
[1]魏政磊,赵辉,韩邦杰,孙楚,李牧东.具有自适应搜索策略的灰狼优化算法[J].计算机科学,2017,44(03):259-263.

文献复现:采用动态权重和概率扰动策略改进的灰狼优化算法(IGWO)
[1]陈闯,Ryad Chellali,邢尹.采用动态权重和概率扰动策略改进的灰狼优化算法[J].计算机应用,2017,37(12):3493-3497+3508.

文献复现:具有自适应调整策略的混沌灰狼优化算法(CLSGWO)
[1]张悦,孙惠香,魏政磊,韩博.具有自适应调整策略的混沌灰狼优化算法[J].计算机科学,2017,44(S2):119-122+159.

文献复现:强化狼群等级制度的灰狼优化算法(GWOSH)
[1]张新明,涂强,康强,程金凤.强化狼群等级制度的灰狼优化算法[J].数据采集与处理,2017,32(05):879-889.

文献复现:一种新型非线性收敛因子的灰狼优化算法(NGWO)
[1]王敏,唐明珠.一种新型非线性收敛因子的灰狼优化算法[J].计算机应用研究,2016,33(12):3648-3653.

文献复现:重选精英个体的非线性收敛灰狼优化算法(EGWO)
[1]黎素涵,叶春明.重选精英个体的非线性收敛灰狼优化算法[J].计算机工程与应用,2021,57(01):62-68.

https://mianbaoo.com/o/bread/aZ2Wl54=

热点内容
安卓手机上网怎么连接电脑 发布:2025-05-20 08:28:30 浏览:548
福建公积金密码是什么 发布:2025-05-20 08:28:13 浏览:507
学习编程用什么软件好 发布:2025-05-20 08:27:28 浏览:599
我的世界电脑版服务器小游戏怎么下载 发布:2025-05-20 08:17:12 浏览:533
离线语音识别android 发布:2025-05-20 08:11:37 浏览:153
小鸟云如何去看客户服务器密码 发布:2025-05-20 07:58:51 浏览:898
怎么更改app的密码 发布:2025-05-20 07:54:32 浏览:784
汽车配置物品怎么处理 发布:2025-05-20 07:47:23 浏览:225
怎么修改华为wifi密码 发布:2025-05-20 07:45:12 浏览:41
php函数递归 发布:2025-05-20 07:39:36 浏览:781