
正文
PSO算法源代码java pso算法源代码matlab PAPR
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java 中实现迭代 递减
package cn.liubing;
import java.util.*;
public class Particle {
public static void main(String[] args)
{
PSO pso = new PSO();
pso.Initialize();
pso.Search();
}
}
class Agent
{
public Agent() //对粒子PSO算法源代码java的位置和速度进行初始化
{
for(int i = 0; i iAgentDim; i++)
{
dpos[i] = (random.nextDouble()-0.5)*2*iRang; //返回[-iRang,+iRang]之间PSO算法源代码java的一个任意PSO算法源代码java的值
dv[i] = dpbest[i] = dpos[i];
}
}
public void 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];
}
}
}
public void 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];
}
}
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];
}
class PSO
{
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()
{
int k = 0;
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++;
}
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] + " ");
}
}
private Agent[] agent;
private final int iStep = 1000; //迭代次数
private double m_dBestFitness;
private int m_iTempPos;
}
相关问答
Q1: 粒子群优化算法(PSO)的matlab运行程序~~谢谢大家啦!
%不知道你具体的问题是什么,下面是一个最基本的pso算法解决函数极值问题,如果是一些大型的问题,需要对速度、惯性常数、和自适应变异做进一步优化,希望对你有帮助
function y = fun(x)
y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289;
%下面是主程序
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=200; % 进化次数
sizepop=20; %种群规模
Vmax=1;%速度限制
Vmin=-1;
popmax=5;%种群限制
popmin=-5;
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=5*rands(1,2); %初始种群
V(i,:)=rands(1,2); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:)); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)Vmax))=Vmax;
V(j,find(V(j,:)Vmin))=Vmin;
%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:);
pop(j,find(pop(j,:)popmax))=popmax;
pop(j,find(pop(j,:)popmin))=popmin;
%自适应变异(避免粒子群算法陷入局部最优)
if rand0.8
k=ceil(2*rand);%ceil朝正无穷大方向取整
pop(j,k)=rand;
end
%适应度值
fitness(j)=fun(pop(j,:));
%个体最优更新
if fitness(j) fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
yy(i)=fitnesszbest;
end
%% 结果分析
plot(yy)
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
Q2: 二进制PSO算法
PSO算法中每一粒子都被看是潜在PSO算法源代码java的最优解,具体实现思路是先将粒子初始化,对于每个粒子都有一个当前位置以及根据适应度值做粒子更新的速度(Kennedy et al.,1995),通过迭代计算得到最优解。PSO粒子速度计算和对应位置更新的原理如式(8.1)、式(8.2)所示:
高光谱遥感影像信息提取技术
式中:xid是粒子PSO算法源代码java;c1,c2是学习因子;w是惯性因子,是粒子速度保持更新之前粒子速度的能力;pid是目前单个粒子最优位置;pgd是整个粒子群目前得到的最优位置;rand是0~1之间的随机数。
二进制PSO首先将粒子初始化为0和1组成的序列。二进制PSO算法是对式(8.2)作些改变,其位置更新如式(8.3)所示(程志刚等,2007):
高光谱遥感影像信息提取技术
式中: 是 Sigmoid 函数。
Q3: 粒子群算法的算法介绍
如前所述,PSO模拟鸟群的捕食行为。设想这样一个场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。
PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 在找到这两个最优值时,粒子根据如下的公式来更新自己的速度和新的位置:
v[] = w * v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a)
present[] = present[] + v[] (b)
v[] 是粒子的速度, w是惯性权重,present[] 是当前粒子的位置. pbest[] and gbest[] 如前定义 rand () 是介于(0, 1)之间的随机数. c1, c2 是学习因子. 通常 c1 = c2 = 2.
程序的伪代码如下
For each particle
____Initialize particle
END
Do
____For each particle
________Calculate fitness value
________If the fitness value is better than the best fitness value (pBest) in history
____________set current value as the new pBest
____End
____Choose the particle with the best fitness value of all the particles as the gBest
____For each particle
________Calculate particle velocity according equation (a)
________Update particle position according equation (b)
____End
While maximum iterations or minimum error criteria is not attained
在每一维粒子的速度都会被限制在一个最大速度Vmax,如果某一维更新后的速度超过用户设定的Vmax,那么这一维的速度就被限定为Vmax
Q4: pso的并行算法
与大多数随机优化算法相似,当适应值评价函数的计算量比较大时,PSO算法的计算量会很大。为了解决该问题,研究者提出了并行PSO算法。与并行遗传算法类似,并行PSO算法也可以有三种并行群体模型:主从并行模型、岛屿群体模型和邻接模型。
Schutte采用同步实现方式,在计算完一代中所有点的适应值之后才进入下一代。这种并行方法虽然实现简单,但常常会导致并行效率很差。故而有人提出异步方式的并行算法,可以在对数值精度影响不大的条件下提高PSO算法的并行性能。这两种方式采用的都是主从并行模型,其中异步方式在求解上耦合性更高,更容易产生通信瓶颈。
Baskar提出一种两个子种群并行演化的并发PSO算法,其中一个子种群采用原始的PSO算法,另一个子种群采用基于适应值距离比的PSO算法(FDR-PSO);两个子种群之间频繁地进行信息交换。而El-Abd研究了在子种群中采用局部邻域版本的协作PSO算法,并研究了多种信息交换的方式及其对算法性能的影响。黄芳提出一种基于岛屿群体模型的并行PSO算法,并引入一种集中式迁移策略,提高了求解效率,同时改善了早收敛现象。
Li提出延迟交换信息的并行算法属于邻接模型,该算法可以提高速度,但可能使得解的质量变差。
Q5: 基于粒子群算法的TSP问题,JAVA实现,高分求源码,好的再加200
此消息也许对PSO算法源代码java你有所启发PSO算法源代码java,TSP-PSO下载 收藏√ [ 5 4 3 2 1 ] 所属分类: matlab 开发工具: matlab 文件大小: 33 KB 上传时间: 2009-06-13 下载次数: 625 提 供 者: 灞埚媷 详细说明:用混合粒子群算法求解TSP问题PSO算法源代码java,自带GUI界面,共有9中算法,可解决各种TSP问题,效果不错。-Using hybrid particle swarm algorithm to solve TSP problems, bring their own GUI interface, a total of 9 in the algorithm, to resolve the various TSP problems, good results.
[上传源码成为会员下载此文件] [成为VIP会员下载此文件]文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
TSP-PSO
.......\bayg29.txt
.......\burma14.txt
.......\ch130.txt
.......\ch150.txt
.......\dist.m
.......\eil51.txt
.......\fbnum.m
.......\fitness.asv
.......\fitness.m
.......\gr96.txt
.......\hs_err_pid160.log
.......\hs_err_pid528.log
.......\Oliver30.txt
.......\pr226.txt
.......\pr76.txt
.......\PSO.asv
.......\PSO.fig
.......\PSO.m
关于PSO算法源代码java和pso算法源代码matlab PAPR的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






