1

我在java中使用粒子群优化(PSO)。我对我们的工作知之甚少。因为,我正在申请生物信息学中的多序列比对。

我们需要找到对齐这些序列的位置和速度。我需要关于 PSO 的详细解释和参考,以及在 PSO 中计算速度和位置的需要。如果可能的话,我需要简单的例子来解释 Java 中的 PSO。实际上,我需要了解它如何优化问题。

public class Position {
 private double x;
 private double y;

 public Position(double x, double y) {
 this.x = x;
 this.y = y;
 }

 public double getX() {
 return x;
 }

 public void setX(double x) {
 this.x = x;
 }

 public double getY() {
 return y;
 }

 public void setY(double y) {
 this.y = y;
 }
}

这是用 getter 和 setter 表示粒子位置的类

就像其他课程一样,这里也有

4

2 回答 2

5

粒子群优化:

  1. 在搜索空间的随机位置随机初始化一组粒子;
  2. 评估所有位置并更新全局最佳位置和个人最佳位置;
  3. 根据全局最佳位置的相对位置、粒子的当前速度、粒子的个人最佳位置和一些随机向量更新每个速度;
  4. 转到 2。
于 2012-01-15T20:22:09.213 回答
3

总体概述

粒子群优化 (PSO) 是一种基于种群的随机搜索方法。种群中每个个体或粒子的位置代表了优化问题的可能解决方案。

搜索空间中给定位置的好坏/得分由目标函数衡量,目标函数是被优化的函数。

粒子在搜索空间中移动以寻找最优解。

粒子在搜索中移动的方式就是魔法发生的地方。假设您使用的是惯性权重模型,这由三个不同的因素控制:惯性分量、社会分量和认知分量。

惯性分量本质上引入了一种动量形式,因此粒子的运动从一次迭代到下一次迭代不会太不稳定。认知组件允许粒子记忆其先前在哪里找到了影响其运动方向的良好解决方案。社交组件允许其他群体成员的知识(即群体的其他成员找到好的解决方案的地方)来影响粒子的运动。

更新方程

在迭代t中,给定粒子的位置由x(t)表示。其下一次迭代的新位置根据以下公式计算:

x(t+1) = x(t) + v(t+1)

其中v(t+1)表示粒子在下一次迭代中的速度。请注意,上面的每个值都是向量。这些向量的长度将等于问题维数/目标函数的输入变量数。(为我糟糕的符号道歉;我没有足够的声誉来发布漂亮的方程式)。粒子的速度根据以下公式计算:

v(t+1) = w*v(t) + c1*r1*(pBest(t) - x(t)) + c2*r2*(gBest(t) - x(t))

前面描述的三个不同的组成部分(惯性、认知和社会)分别由上述等式中的三个项之一表示。

w称为惯性权重,调节动量分量的影响。c1c2是认知和社会加速系数,它们分别调节认知和社会成分的重要性。r1 和 r2 是随机数向量(从 0 到 1 之间的 unifrom 分布中采样),用于缩放差异向量的每个分量。

第一个差分向量(pBest(t) - x(t))允许粒子移动到其个人最佳/pBest - 粒子迄今为止遇到的最佳位置。(为了实现该算法,因此粒子有必要检查它遇到的每个位置并保存它,如果它是迄今为止最好的)。

第二个差分向量(gBest(t) - x(t))允许粒子使用来自群体中其他粒子的信息。在这个表达式中,gBest(t)表示到目前为止 swarm 找到的最佳位置。(所以为了实现,在每次迭代之后,应该检查所有粒子的分数,以便保存最好的粒子以供将来使用)。

粒子根据这些方程在搜索空间中移动多次迭代,直到希望它们都收敛到同一点。然后可以将全局最佳作为算法产生的最终解决方案。

希望这能让 PSO 的内部工作更加清晰。在每次迭代中,每个粒子都会朝着由其个人最佳和全局最佳决定的方向移动。假设目标函数的最优值在这两个点附近,那么粒子很可能最终会遇到越来越好的解。

其他注意事项

请注意,上述过程有许多不同的变化。例如,可以只允许在群体粒子的一个子集之间共享知识。给定粒子可以与之通信的粒子子集称为其邻域。然后粒子将朝着在其附近找到的最佳解决方案的方向移动,即“局部最佳”而不是全局最佳。

此外,还有许多其他可能的陷阱,例如wc1c2的值。尽管在这里可以做一些花哨的事情,但一般的经验法则是设置:

w = 0.729844

c1 = c2 = 1.49618

正如http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=870279&tag=1所建议的那样导致收敛行为(即,所有粒子最终将收敛到大致相同的点)。

通常,粒子在整个搜索空间中随机初始化。尽管也可以随机初始化它们的速度,但这不是必需的,并且可能会导致不同的行为,因此只需将速度作为 0 向量开始就可以了。

一些人还建议使用速度钳制(其中每个速度分量的上下都以某个最大值和最小值为界;如果粒子的速度超过该值,则将其钳制为最大/最小值)。如果w、c1c2选择正确并且 gBest 和 pBest 仅在它们在搜索空间的范围内时更新,这通常是不必要的。

于 2015-01-21T12:40:58.920 回答