粒子群算法代码java 粒子群算法代码matlab

粒子群算法函数寻优,对目标函数进行最小值优化,函数变量范围为-1到1.具体函数几主程序见补充不知道你解决了没?我最近也在刚开始学习粒子群算法,此程序似乎只能对二维的计算,还有你的fun函数最后的;应用英文的
求粒子群算法MATLAB完整代码%%清空环境
clear
clc
tic
%% 参数初始化
% 粒子群算法中粒子群算法代码java的两个参数
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,:));% 染色体粒子群算法代码java的适应度
end
% 找最好粒子群算法代码java的染色体
[bestfitness bestindex] = min(fitness);
zbest = pop(bestindex,:);% 全局最佳
gbest = pop;% 个体最佳
fitnessgbest = fitness;% 个体最佳适应度值
fitnesszbest = bestfitness;% 全局最佳适应度值
%% 迭代寻优
【粒子群算法代码java 粒子群算法代码matlab】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);
pop(j,k) = rand;
end
% 适应度值
fitness(j) = fun(pop(j,:));
end
% 个体最优更新
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
yy(i) = fitnesszbest;
end
toc
%% 结果分析
plot(yy);
title(['适应度曲线' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');
ylabel('适应度');
fun函数如下
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)202.71289;
基于粒子群算法的TSP问题,JAVA实现,高分求源码,好的再加200此消息也许对你有所启发,TSP-PSO下载收藏√[54321 ]所属分类: matlab开发工具: matlab文件大小: 33 KB上传时间: 2009-06-13下载次数: 625提 供 者: 灞埚媷详细说明:用混合粒子群算法求解TSP问题 , 自带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
求粒子群算法路径寻优的源码怎么联系粒子群算法代码java你粒子群算法代码java,也没有联系方式
粒子群算法的算法介绍 如前所述 , 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
求大神给出基于粒子群算法的多目标搜索算法的完整程序 。。。从目标函数到最后 。。%% 该函数演示多目标perota优化问题
%清空环境
clc
clear
load data
%% 初始参数
objnum=size(P,1); %类中物品个数
weight=92;%总重量限制
%初始化程序
Dim=5;%粒子维数
xSize=50;%种群个数
MaxIt=200; %迭代次数
c1=0.8;%算法参数
c2=0.8;%算法参数
wmax=1.2;%惯性因子
wmin=0.1;%惯性因子
x=unidrnd(4,xSize,Dim);%粒子初始化
v=zeros(xSize,Dim);%速度初始化
xbest=x;%个体最佳值
gbest=x(1,:);%粒子群最佳位置
% 粒子适应度值
px=zeros(1,xSize);%粒子价值目标
rx=zeros(1,xSize);%粒子体积目标
cx=zeros(1,xSize);%重量约束
% 最优值初始化
pxbest=zeros(1,xSize); %粒子最优价值目标
rxbest=zeros(1,xSize); %粒子最优体积目标
cxbest=zeros(1,xSize);%记录重量,以求约束
% 上一次的值
pxPrior=zeros(1,xSize);%粒子价值目标
rxPrior=zeros(1,xSize);%粒子体积目标
cxPrior=zeros(1,xSize);%记录重量,以求约束
%计算初始目标向量
for i=1:xSize
for j=1:Dim %控制类别
px(i) = px(i) P(x(i,j),j);%粒子价值
rx(i) = rx(i) R(x(i,j),j);%粒子体积
cx(i) = cx(i) C(x(i,j),j);%粒子重量
end
end
% 粒子最优位置
pxbest=px;rxbest=rx;cxbest=cx;
%% 初始筛选非劣解
flj=[];
fljx=[];
fljNum=0;
%两个实数相等精度
tol=1e-7;
for i=1:xSize
flag=0;%支配标志
for j=1:xSize
if j~=i
if ((px(i)px(j))(rx(i)rx(j))) ||((abs(px(i)-px(j))tol)...
(rx(i)rx(j)))||((px(i)px(j))(abs(rx(i)-rx(j))tol)) || (cx(i)weight)
flag=1;
break;
end
end
end
%判断有无被支配
if flag==0
fljNum=fljNum 1;
% 记录非劣解
flj(fljNum,1)=px(i);flj(fljNum,2)=rx(i);flj(fljNum,3)=cx(i);
% 非劣解位置
fljx(fljNum,:)=x(i,:);
end
end
%% 循环迭代
for iter=1:MaxIt
% 权值更新
w=wmax-(wmax-wmin)*iter/MaxIt;
%从非劣解中选择粒子作为全局最优解
s=size(fljx,1);
index=randi(s,1,1);
gbest=fljx(index,:);
%% 群体更新
for i=1:xSize
%速度更新
v(i,:)=w*v(i,:) c1*rand(1,1)*(xbest(i,:)-x(i,:)) c2*rand(1,1)*(gbest-x(i,:));
%位置更新
x(i,:)=x(i,:) v(i,:);
x(i,:) = rem(x(i,:),objnum)/double(objnum);
index1=find(x(i,:)=0);
if ~isempty(index1)
x(i,index1)=rand(size(index1));
end
x(i,:)=ceil(4*x(i,:));
end
%% 计算个体适应度
pxPrior(:)=0;
rxPrior(:)=0;
cxPrior(:)=0;
for i=1:xSize
for j=1:Dim %控制类别
pxPrior(i) = pxPrior(i) P(x(i,j),j);%计算粒子i 价值
rxPrior(i) = rxPrior(i) R(x(i,j),j);%计算粒子i 体积
cxPrior(i) = cxPrior(i) C(x(i,j),j);%计算粒子i 重量
end
end
%% 更新粒子历史最佳
for i=1:xSize
%现在的支配原有的 , 替代原有的
if ((px(i)pxPrior(i))(rx(i)rxPrior(i))) ||((abs(px(i)-pxPrior(i))tol)...
(rx(i)rxPrior(i)))||((px(i)pxPrior(i))(abs(rx(i)-rxPrior(i))tol)) || (cx(i)weight)
xbest(i,:)=x(i,:);%没有记录目标值
pxbest(i)=pxPrior(i);rxbest(i)=rxPrior(i);cxbest(i)=cxPrior(i);
end
%彼此不受支配,随机决定
if ~( ((px(i)pxPrior(i))(rx(i)rxPrior(i))) ||((abs(px(i)-pxPrior(i))tol)...
(rx(i)rxPrior(i)))||((px(i)pxPrior(i))(abs(rx(i)-rxPrior(i))tol)) || (cx(i)weight) )...
~( ((pxPrior(i)px(i))(rxPrior(i)rx(i))) ||((abs(pxPrior(i)-px(i))tol)(rxPrior(i)rx(i)))...
||((pxPrior(i)px(i))(abs(rxPrior(i)-rx(i))tol)) || (cxPrior(i)weight) )
if rand(1,1)0.5
xbest(i,:)=x(i,:);
pxbest(i)=pxPrior(i);rxbest(i)=rxPrior(i);cxbest(i)=cxPrior(i);
end
end
end
%% 更新非劣解集合
px=pxPrior;
rx=rxPrior;
cx=cxPrior;
%更新升级非劣解集合
s=size(flj,1);%目前非劣解集合中元素个数
%先将非劣解集合和xbest合并
pppx=zeros(1,s xSize);
rrrx=zeros(1,s xSize);
cccx=zeros(1,s xSize);
pppx(1:xSize)=pxbest;pppx(xSize 1:end)=flj(:,1)';
rrrx(1:xSize)=rxbest;rrrx(xSize 1:end)=flj(:,2)';
cccx(1:xSize)=cxbest;cccx(xSize 1:end)=flj(:,3)';
xxbest=zeros(s xSize,Dim);
xxbest(1:xSize,:)=xbest;
xxbest(xSize 1:end,:)=fljx;
%筛选非劣解
flj=[];
fljx=[];
k=0;
tol=1e-7;
for i=1:xSize s
flag=0;%没有被支配
%判断该点是否非劣
for j=1:xSize s
if j~=i
if ((pppx(i)pppx(j))(rrrx(i)rrrx(j))) ||((abs(pppx(i)-pppx(j))tol) ...
(rrrx(i)rrrx(j)))||((pppx(i)pppx(j))(abs(rrrx(i)-rrrx(j))tol)) ...
|| (cccx(i)weight) %有一次被支配
flag=1;
break;
end
end
end
%判断有无被支配
if flag==0
k=k 1;
flj(k,1)=pppx(i);flj(k,2)=rrrx(i);flj(k,3)=cccx(i);%记录非劣解
fljx(k,:)=xxbest(i,:);%非劣解位置
end
end
%去掉重复粒子
repflag=0;%重复标志
k=1;%不同非劣解粒子数
flj2=[];%存储不同非劣解
fljx2=[];%存储不同非劣解粒子位置
flj2(k,:)=flj(1,:);
fljx2(k,:)=fljx(1,:);
for j=2:size(flj,1)
repflag=0;%重复标志
for i=1:size(flj2,1)
result=(fljx(j,:)==fljx2(i,:));
if length(find(result==1))==Dim
repflag=1;%有重复
end
end
%粒子不同 , 存储
if repflag==0
k=k 1;
flj2(k,:)=flj(j,:);
fljx2(k,:)=fljx(j,:);
end
end
%非劣解更新
flj=flj2;
fljx=fljx2;
end
%绘制非劣解分布
plot(flj(:,1),flj(:,2),'o')
xlabel('P')
ylabel('R')
title('最终非劣解在目标空间分布')
disp('非劣解flj中三列依次为P,R,C')
粒子群算法代码java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于粒子群算法代码matlab、粒子群算法代码java的信息别忘了在本站进行查找喔 。

    推荐阅读