普通粒子群算法和优化方法

粒子群优化(PSO, particle swarm optimization) 是由Kennedy和Eberhart在1995年提出的一 种群智能优化方法。

优点:好理解容易实现,适合解决极值问题

缺点:容易过早收敛,容易陷入局部最优解,(如果初始点选的不好,可能就会被某个粒子带偏了= =http://www.likecs.com/)

(Java实现):

普通粒子群算法和优化方法

普通粒子群算法和优化方法

1 package pso; 2 3 import java.util.Random; 4 5 /** 6 * 粒子类 7 * 8 * @see dimension 9 * @author Flyuz 10 */ 11 public class Particle { 12 // 维数 13 public int dimension = 2; 14 // 粒子的位置 15 public double[] X = new double[dimension]; 16 // 粒子的速度 17 public double[] V = new double[dimension]; 18 // 局部最好位置 19 public double[] pbest = new double[dimension]; 20 // 最大速度 21 public double Vmax = 2; 22 // 最大位置 23 public double[] Xmax = { 2, 2 }; 24 // 最小位置 25 public double[] Xmin = { -2, -2 }; 26 // 适应值 27 public double fitness; 28 29 /** 30 * 根据当前位置计算适应值 本例子求式子最大值 31 * 32 * @return newFitness 33 */ 34 public double calculateFitness() { 35 36 double newFitness = 0; 37 if (X[0] == 0 && X[1] == 0) 38 newFitness = Math.exp((Math.cos(2 * Math.PI * X[0]) + Math.cos(2 * Math.PI * X[1])) / 2) - 2.71289; 39 else 40 newFitness = Math.sin(Math.sqrt(Math.pow(X[0], 2) + Math.pow(X[1], 2))) 41 / Math.sqrt(Math.pow(X[0], 2) + Math.pow(X[1], 2)) 42 + Math.exp((Math.cos(2 * Math.PI * X[0]) + Math.cos(2 * Math.PI * X[1])) / 2) - 2.71289; 43 return newFitness; 44 } 45 46 /** 47 * 初始化自己的位置和pbest 48 */ 49 public void initialX() { 50 for (int i = 0; i < dimension; i++) { 51 X[i] = new Random().nextDouble() * (Xmax[i] - Xmin[i]) + Xmin[i]; 52 pbest[i] = X[i]; 53 } 54 } 55 56 /** 57 * 初始化自己的速度 58 */ 59 public void initialV() { 60 for (int i = 0; i < dimension; i++) { 61 V[i] = new Random().nextDouble() * Vmax * 0.5; 62 } 63 } 64 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysyff.html