function [fitnessgbest,gen,record] = test_Original( maxgen,popmax,popmin ,index,esp)
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
%% 原算法
%tic;
gen=maxgen;
%esp=10^-15;
Dim = 2; %维度(自变量的个数)
%index=1; %测试函数索引(对应表里面的函数)
wmax=0.9;
wmin=0.4;
cmax=1.5;
cmin=0.5;
%maxgen = 50; %迭代次数50
sizepop = 100; %种群规模100
Vmax = 20; %粒子移动最大速度5
Vmin = -20; %粒子移动最小速度-5
%popmax = 100; %自变量最大取值(搜索范围)
%popmin = 50; %自变量最小取值
pc=0.7;
pm=0.3;
N=pc*sizepop;
M=pm*sizepop;
record=zeros(1,maxgen);
%% 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = (popmax-popmin)*rand(1,Dim)+popmin; %初始种群
V(i,:) = (Vmax-Vmin)*rand(1,Dim)+Vmin; %初始化速度
% 计算适应度
fitness(i) = fun(pop(i,:),index); %计算适应度(这里设定的是结果的值越小=适应度越低)
end
%% 个体极值和群体极值
[bestfitness bestindex] = min(fitness); %bestindex:全局最优粒子索引
gbest = pop(bestindex,:); %全局最佳位置
pbest = pop; %个体最佳
fitnesspbest = fitness; %个体最佳适应度值
fitnessgbest = bestfitness; %全局最佳适应度值
%% 迭代寻优
for i = 1:maxgen %代数更迭
for j = 1:sizepop %遍历个体
% 速度更新
w=wmax-(wmax-wmin)*i/maxgen;
c1=cmax-(cmax-cmin)*i/maxgen;
c2=cmax-(cmax-cmin)*i/maxgen;
V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:));
%速度边界处理
V(j,find(V(j,:)>Vmax)) = Vmax;
V(j,find(V(j,:)<Vmin)) = Vmin;
% 种群更新
pop(j,:) = pop(j,:) + V(j,:);
%位置边界处理
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;
% 适应度值更新
fitness(j) = fun(pop(j,:),index);%计算函数值
end
for j = 1:sizepop
% 个体最优更新
if fitness(j) < fitnesspbest(j)
pbest(j,:) = pop(j,:);
fitnesspbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) < fitnessgbest
gbest = pop(j,:);
fitnessgbest = fitness(j);
for j=1:sizepop
GApop(j,:)=pop(j,:);
[n m]=size(GApop);
end
c=randperm(sizepop);
b=c(1:N);
e=b';
for z=1:N
GApop1(z,:)=GApop(e(z),:);
end
[n1 m1]=size(GApop1);
thebest=gbest'*ones(1,n1);
GApops=0.5*GApop1+0.5*thebest';
%进行变异操作
% max1=max(max(gbest));
% min1=min(min(gbest));
% max2=round(max1);
% min2=round(min1);
c3=randperm(sizepop);
b1=c3(1:M);
e1=b1';
for z=1:M
GApop2(z,:)=GApop(e1(z),:);
end
GApops1=GApop2+randi([popmin,popmax],M,Dim);
GApops2=[GApops;GApops1];
pop=GApops2;
end
record(1,i)=fitnessgbest; %采取1/fitnessgbest是因为我们设定了值越小,适应度越大。
if fitnessgbest<=esp
gen=i;
esp=-inf;
end
end
%toc;
end
%
% end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1:在基本的粒子群中加入了遗传算法中交叉变异操作,通过交叉因子更新当前粒子群的空间位置,这个过程产生新的粒子群更加符合目标优化函数,得到了更好的适应度,进而提高了经典的粒子群算法的局部搜索能力;利用变异因子对影响新的粒子种群的产生,提高粒子的多样性和全局搜索能力。 2:经典的粒子群算法的寻优性能在很大程度上依赖于其惯性权重、学习因子参数的设置选择。由此,初始粒子的每一次迭代都进行了空间位置、速度的更新,忽略了不同代粒子间的差异性,应用了统一的固定参数 。针对于这一问题在参数设置上:采用了线性递减的参数设置以及非线性递减的参数设置,两种方案。 3:作图代码对上述几种情况的改进,进行作图分析,清晰比较结果。
资源推荐
资源详情
资源评论
收起资源包目录
遗传-粒子群算法.zip (7个子文件)
pso4.m 3KB
fun.m 679B
pso3.m 3KB
pso2.m 2KB
作图.m 323B
调用过程.m 331B
pso1.m 2KB
共 7 条
- 1
空集是我
- 粉丝: 1637
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页