`
hnjzsyjyj
  • 浏览: 27419 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一款PSO算法实现

阅读更多
package pso;
/**
 * 一个文件里写两个类原则上和分别在两个文件里写没有区别,只是
 * 在一个文件里,只有一个类是可以用public修饰的,这个类必须和
 * 文件同名。否则会报错“The public type must be defined in 
 * its own file”。
 * 而且,没有用public修饰的类不能被其它包里的类引用。
 * main方法要写在public的那个类中, 类名和文件名一致。
 * 
 */
import java.util.*;

public class Particle {
	public static void main(String[] args){
		PSO pso = new PSO();
		pso.Initialize();
		pso.Search();
		}
	}

/**
 * class Agent
 */
class Agent{ //Start class Agent
	public static int iPOSNum = 20;
	public static int iAgentDim = 20;
	private final int iRang = 30; 
	private final double w = 0.9;
	private final double delta1 = 1;
	private final double delta2 = 1;
	public double[] dpos = new double[iAgentDim];    //粒子的位置
	public double[] dpbest = new double[iAgentDim];  //粒子本身的最优位置
	public double[] dv = new double[iAgentDim];      //粒子的速度
	private double m_dFitness;   
	public double m_dBestfitness; //m_dBestfitness 粒子本身的最优解
	private Random random = new Random();
	public static double[] gbest = new double[iAgentDim]; 
	
	//==========构造Agent()函数==========
	public Agent(){ //对Start Agent(),粒子的位置和速度进行初始化
		for(int i = 0; i < iAgentDim; i++){
			dpos[i] = (random.nextDouble()-0.5)*2*iRang; //返回[-iRang,+iRang]之间的一个任意的值
			dv[i] = dpbest[i] = dpos[i];
			}
		} //End Agent()
	
	//==========定义UpdateFitness()函数==========
	public void UpdateFitness(){ //Start UpdateFitness()
		double sum1 = 0;
		double sum2 = 0;
		//计算Ackley 函数的值
		for(int i = 0; i < iAgentDim; i++ ){
			sum1 += dpos[i] * dpos[i];
			sum2 += Math.cos(2 * Math.PI * dpos[i]);
			}
		//m_dFitness 计算出的当前值
		m_dFitness = -20 * Math.exp(-0.2 * Math.sqrt((1.0/iAgentDim) * sum1))
		- Math.exp((1.0/iAgentDim) * sum2) + 20 + Math.E;
		if(m_dFitness < m_dBestfitness){
			m_dBestfitness = m_dFitness;
			for(int i = 0; i < iAgentDim; i++){
				dpbest[i] = dpos[i];
				}
			}
		} //End UpdateFitness()
	
	//==========定义UpdatePos()函数==========
	public void UpdatePos(){ //Start UpdatePos()
		for(int i = 0;i < iAgentDim;i++){
			dv[i] = w * dv[i] + delta1 * random.nextDouble()
			*(dpbest[i] - dpos[i]) + delta2 * random.nextDouble()
			* ( gbest[i]   - dpos[i]);
			dpos[i] = dpos[i] + dv[i];
			}
		} //End UpdatePos()
	} //End class Agent


/**
 * class PSO
 */
class PSO{//Start class PSO
	private Agent[] agent;
	private final int iStep = 1000;   //迭代次数
	private double m_dBestFitness;
	private int m_iTempPos;
	
	public PSO(){
		m_dBestFitness = 10000;
		agent = new Agent[Agent.iPOSNum];
		for(int i =0;i < Agent.iPOSNum;i++)
			agent[i] = new Agent();
		}
	public void Initialize(){
		for(int i = 0;i < Agent.iPOSNum;i++){
			agent[i].m_dBestfitness = 10000;
			agent[i].UpdateFitness();
			}
		}
	public void Search(){ //Start Search()
		int k = 0;
		while(k < iStep){//Start while(k < iStep)
			m_iTempPos = 999;
			for(int i =0; i< Agent.iPOSNum;i++){
				if(agent[i].m_dBestfitness < m_dBestFitness){
					m_dBestFitness = agent[i].m_dBestfitness;
					m_iTempPos = i;
					}
				}
			if(m_iTempPos != 999){
				for(int i =0;i < Agent.iAgentDim;i++){
					Agent.gbest[i] = agent[m_iTempPos].dpbest[i];
					}
				}
			for(int i = 0; i < Agent.iPOSNum;i++){
				agent[i].UpdateFitness();
				agent[i].UpdatePos();
				}
			k++;
			} //End while(k < iStep)
		System.out.println("After " + k + " steps " + "the best value is " 
				+ m_dBestFitness );
		System.out.print("The best position is :");
		for(int i = 0;i < Agent.iAgentDim;i++){
			System.out.print(Agent.gbest[i] + " ");
			}
		}//End Search()
	}//End class PSO
分享到:
评论

相关推荐

    pso算法实现 图像匹配

    (转)简单的pso经典算法实现对图像的匹配,简单程序,适合初学者进行pso和匹配的学习 这几个m文件程序的主要目的是实现用智能算法的中的 粒子群的方法来对图像进行匹配,也就是最终找到实时图像 在基准图像中的坐标...

    PSO算法研究及其基于改进PSO算法的回归模型的参数估计

    PSO算法因其设计思想简单、操作实现容易、需要控制的参数少、能够实现分布式计算以及优化速度快而被广泛应用于函数优化、模式识别、神经网络训练等领域。本文对PSO算法的基本思想、拓扑结构、收敛性进行了较详细的...

    pso算法MATLAB算法

    粒子群算法,也称粒子群优化算法(Partical Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法((Evolu2tionary Algorithm - EA)。PSO 算法属于进化算法的一种,和遗传算法相似,它也是从...

    PSO基本算法以及优化,MATLAB代码

    文件包含了5个文件,pso_class2是基本的pso算法,适合初学者阅读,是第一个笔记的代码文件。 PSO是函数文件,pso1,pso2分别是调用PSO函数的文件,体现了函数的便捷利用。是pso_class2的升级版本,对应了第二个PSO...

    PSO算法MATLAB实现

    详细的粒子群算法代码,便于初学者学习和二次开发,有说明,运行PSO_MAIN.M主函数即可

    pso 算法的matlab实现

    这是关于PSO算法的matlab实现.希望对大家有用了.

    PSO算法C++实现

    对粒子群优化算法的c++实现 ,对粒子群优化算法的c++实现...

    PSO算法实例+MATLAB代码

    PSO算法实例+MATLAB代码

    MATLAB实现PSO算法-pso.rar

    MATLAB实现PSO算法-pso.rar 自己写的PSO程序,初学者,只包含了些基本的功能,效果大家自己看吧,共同学习~

    MATLAB实现PSO算法-2.fig

    MATLAB实现PSO算法-2.fig 自己写的PSO程序,初学者,只包含了些基本的功能,效果大家自己看吧,共同学习~

    matlab开发-PSO算法的简单示例

    matlab开发-PSO算法的简单示例。matlab函数用pso算法求目标函数的最小值

    pso算法基本概念和实现

    pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso算法基本概念pso...

    MATLAB实现PSO算法-1.fig

    MATLAB实现PSO算法-1.fig 自己写的PSO程序,初学者,只包含了些基本的功能,效果大家自己看吧,共同学习~

    PSO优化一元函数_pso算法_PSO_

    matlab解决PSO算法实现一元函数最小值问题

    pso.zip_PSO算法 MATLAB_pso算法

    该算法可以实现pso算法在matlab平台上的应用

    基于MATLAB的PSO算法

    用matlab实现的PSO算法,并用Griewank函数进行了测试

    粒子群优化算法PSO的c++的实现

    粒子群优化算法PSO的c++的实现 粒子群优化算法PSO的c++的实现 粒子群优化算法PSO的c++的实现 粒子群优化算法PSO的c++的实现 粒子群优化算法PSO的c++的实现 粒子群优化算法PSO的c++的实现 粒子群优化算法PSO的c++的...

    PSO优化二元函数_pso算法_PSO_PSO二元函数_

    matlab实现PSO算法解决二元函数最小值问题

Global site tag (gtag.js) - Google Analytics