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
分享到:
相关推荐
**GAPSO算法详解** GAPSO,全称为“Global and Adaptive Particle Swarm Optimization”,即全球适应性粒子群优化算法。这是一种结合了遗传算法(Genetic Algorithm, GA)和粒子群优化算法(Particle Swarm ...
在C++中实现PSO算法,你需要理解以下几个核心概念: 1. **粒子**:在PSO中,每个解决方案被称为一个“粒子”,代表搜索空间中的一个可能解。每个粒子都有一个位置和速度,它们随着时间迭代而改变。 2. **位置...
在MATLAB中实现PSO算法,可以方便地解决各种优化问题,包括函数最值求解、参数优化等。 PSO算法的基本流程如下: 1. 初始化:首先,随机生成一定数量的粒子(也称为个体或解),每个粒子都有一个位置(Position)...
这些文件内容可能涉及了具体的算法实现细节,如初始化策略、速度更新规则、适应度函数的选择以及如何处理约束等问题。每种改进都试图在保持PSO简单性的同时,增强其在解决特定优化问题时的表现。理解并应用这些改进...
(转)简单的pso经典算法实现对图像的匹配,简单程序,适合初学者进行pso和匹配的学习 这几个m文件程序的主要目的是实现用智能算法的中的 粒子群的方法来对图像进行匹配,也就是最终找到实时图像 在基准图像中的坐标...
- MATLAB提供了一个内置的PSO工具箱(`psotb-beta-0.3`),包含了PSO算法的实现和示例。 - `PSO工具箱使用简介.doc`提供了详细的使用指南,包括如何调用函数、设置参数以及理解输出结果。 - `微粒群算法-曾建潮`...
PSO算法具有简单易实现、全局搜索能力强的特点,广泛应用于函数优化、机器学习、图像处理等领域。 **PSO算法的基本原理:** 1. **粒子**:在PSO算法中,每个待优化问题的可能解被抽象为一个“粒子”。 2. **速度**...
粒子群算法,也称粒子群优化算法(Partical Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法((Evolu2tionary Algorithm - EA)。PSO 算法属于进化算法的一种,和遗传算法相似,它也是从...
总的来说,这个MATLAB实现的PSO算法项目不仅提供了优化工具,还为学习和研究群体智能算法提供了一个实用的平台。通过实际运行和分析结果,我们可以深入理解PSO算法的工作机制,以及它在不同类型的优化问题中的表现。...
另一个文件"gaisanweipso.m","gaisanwei"可能是"改进的"的拼音缩写,表明这可能是一个改进版的PSO算法实现,可能包含了作者的独特优化或变体。 **粒子群优化算法(PSO)详解** 粒子群优化(PSO)是一种模拟自然界...
在提供的压缩包文件中,可能包含了一个简单的PSO实现,用于演示和学习PSO算法的基本工作原理。通过阅读和理解代码,初学者可以更深入地掌握PSO算法的实现细节,包括如何初始化粒子群、如何更新速度和位置,以及如何...
文件包含了5个文件,pso_class2是基本的pso算法,适合初学者阅读,是第一个笔记的代码文件。 PSO是函数文件,pso1,pso2分别是调用PSO函数的文件,体现了函数的便捷利用。是pso_class2的升级版本,对应了第二个PSO...
综上所述,PSO算法因其原理简洁和易于实现的特点,在解决0-1背包问题等组合优化问题上展现出其独特的魅力。通过上述的分析与讨论,我们可以了解到PSO算法解决0-1背包问题的基本思想、关键步骤和需要关注的问题。对于...
在给定的压缩包"一个pso算法流程及代码"中,可能包含了用某种编程语言(如Python、Matlab等)实现的PSO算法示例,包括初始化、评价、更新规则等关键步骤的源代码。这些代码可以帮助读者更好地理解PSO算法的工作机制...
总的来说,MATLAB中的PSO算法实现涉及到粒子群的初始化、适应度函数的定义、粒子更新规则的编程以及主程序的控制。这种优化算法在工程优化、机器学习参数调优等领域有广泛应用。对于初学者来说,理解并实现这样一个...
总的来说,MATLAB中的PSO算法实现是一个很好的学习和实践案例,它展示了如何运用群体智能解决优化问题。通过理解并分析`pso.m`文件,你可以深入了解PSO算法的运作机制,并将其应用于其他需要求解最优解的问题。
此程序包可能包含了完整的PSO算法实现,包括初始化、迭代过程和停止条件判断等功能,为理解和实践提供了很好的基础。通过深入理解算法原理,结合MATLAB编程,我们可以灵活地应用PSO算法解决各种复杂优化问题。
标题中的"GAPSO联合算法代码_pso-ga_ask2t_pso+GA_pso算法_GA算法"指的是一种融合了遗传算法(Genetic Algorithm, GA)和粒子群优化算法(Particle Swarm Optimization, PSO)的混合优化算法,称为GAPSO(GA-PSO)。...