📄 particle.java
字号:
package mtpso;
import java.util.Random;
/**
* 粒子群中的粒子
*
* @author qingyun yang //yqy409@tom.com
*/
public abstract class Particle {
//粒子的位置
public double[] position;
//粒子暂时的位置
public double[] temppos;
//粒子的速度
public double[] velocity;
//局部最优位置
public double[] pbestx;
//粒子的适应度
public double fitness = Double.MAX_VALUE;
//最大速度和最大位置
public double maxv, maxx;
//最初位置的左、右边界
public double leftrange, rightrange;
//粒子的维数
public int dim;
//随机数生成器
public Random randGenerator = null;
public Particle(Random rand, int dim, double l_range, double r_range, double v_max, double x_max) {
super();
randGenerator = rand;
this.dim = dim;
leftrange = l_range;
rightrange = r_range;
maxv = v_max;
maxx = x_max;
position = new double[dim];
velocity = new double[dim];
pbestx = new double[dim];
temppos = new double[dim];
}
/**
* 计算粒子的适应度
*/
public double evaluate(Problem prob) {
return prob.evaluate(this);
}
public void copyPosition(Particle p){
System.arraycopy(this.position, 0, p.position, 0, position.length);
}
public boolean equalPosition(Particle p){
for(int i = 0 ; i < position.length ; i++){
if(position[i] != p.position[i]){
return false;
}
}
return true;
}
/**
* 初始化粒子
*/
public void initialize() {
for(int i = 0 ; i < dim ; i++) {
//初始化速度
position[i] = (rightrange - leftrange) * randGenerator.nextDouble() + leftrange;
//保存局部最优
pbestx[i] = position[i];
//初始化速度
velocity[i] = maxv * randGenerator.nextDouble();
if(randGenerator.nextDouble() > 0.5) {
velocity[i] = -velocity[i];
}
}
}
public void storeBest() {
System.arraycopy(position, 0, pbestx, 0, dim);
}
public void storePosition() {
System.arraycopy(temppos, 0,position, 0, dim);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -