⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 particle.java

📁 连续型粒子群算法的java实现
💻 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 + -