博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
粒子群算法
阅读量:3948 次
发布时间:2019-05-24

本文共 1991 字,大约阅读时间需要 6 分钟。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法示例:在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
粒子一开始调整的幅度大,越往后调整的幅度越小,来提高精度。
在这里插入图片描述
以下代码参考别人博客,链接如下(侵删):

手动模拟算法matlab代码:

function[xm,fv] = PSO(fitness,N,c1,c2,w,M,D)% c1,c2:学习因子% w:惯性权重% M:最大迭代次数% D:搜索空间维数% N:初始化群体个体数目% 初始化种群的个体(可以在这里限定位置和速度的范围)format long;for i = 1:N    for j=1:D        x(i,j) = randn; % 随机初始化位置        v(i,j) = randn; % 随机初始化速度    endend% 先计算各个粒子的适应度,并初始化pi和pgfor i=1:N    p(i) = fitness(x(i,:));    y(i,:) = x(i,:);end pg = x(N,:);  % pg为全局最优for i=1:(N-1)    if(fitness(x(i,:))

求解下列函数的最小值:

在这里插入图片描述

function F=fitness(x)F = 0;for i = 1:30    F = F+x(i)^2+x(i)-6;end

输入:

x = zeros(1,30);[xm1,fv1] = PSO(@fitness,50,1.5,2.5,0.5,100,30)

自适应权重算法:

function[xm,fv] = PSO_adaptation(fitness,N,c1,c2,wmax,wmin,M,D)% c1,c2:学习因子% wmax:惯性权重最大值% wmin:惯性权重最小值% M:最大迭代次数% D:搜索空间维数% N:初始化群体个体数目% 初始化种群的个体(可以在这里限定位置和速度的范围)for i = 1:N    for j=1:D        x(i,j) = randn; % 随机初始化位置        v(i,j) = randn; % 随即初始化速度    endend%先计算各个粒子的适应度,并初始化个体最优解pi和整体最优解pg %%初始化pi %for i = 1:N    p(i) = fitness(x(i,:)) ;    y(i,:) = x(i,:) ;end%初始化pg %pg = x(N,:) ;%得到初始的全局最优pg %for i = 1:(N-1)    if fitness(x(i,:)) < fitness(pg)        pg = x(i,:) ;    endend %主循环函数,进行迭代,直到达到精度的要求 %for t = 1:M    for j = 1:N        fv(j) = fitness(x(j,:)) ;    end    fvag = sum(fv)/N ;    fmin = min(fv);    for i = 1:N    %更新函数,其中v是速度向量,x为位置,i为迭代特征        if fv(i) <= fvag            w = wmin+(fv(i)-fmin)*(wmax-wmin)/(fvag-fmin) ;   %依据早熟收敛程度和适应度值进行调整        else            w = wmax ;        end        v(i,:) = w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)) ;        x(i,:) = x(i,:)+v(i,:) ;        if fitness(x(i,:)) < p(i)            p(i) = fitness(x(i,:)) ;            y(i,:) = x(i,:) ;        end        if p(i) < fitness(pg)            pg = y(i,:) ;        end    end     Pbest(t) = fitness(pg) ;end %给出最后的计算结果 %xm = pg' ;fv = fitness(pg) ; plot(Pbest)xlabel('进化次数') ;ylabel('适应度值') ;

在这里插入图片描述

function y = AdaptFunc(x)    y = ((sin(x(1)^2+x(2)^2))^2-cos(x(1)^2+x(2)^2)+1)/((1+0.1*(x(1)^2+x(2)^2))^2)-0.7;end
[xm,fv] = PSO_adaptation(@AdaptFunc,50,2,2,0.8,0.6,100,2)

转载地址:http://ligwi.baihongyu.com/

你可能感兴趣的文章
__FILE__和__FUNCTION__的使用
查看>>
创建、重命名文件
查看>>
文件大小保护
查看>>
先文件大小保护,再写文件
查看>>
目录创建
查看>>
日志文件系统的写日志函数
查看>>
删除目录下的文件
查看>>
删除指定目录下所有文件及目录
查看>>
判断文件夹名是否是合法YYYYMM格式
查看>>
检查日志文件系统
查看>>
读配置文本
查看>>
使用rapidxml创建XML
查看>>
使用rapidxml从xml文件中读取指定项(建议两层)
查看>>
char字符串转CString
查看>>
VS2008 定时器使用
查看>>
使用定时器实现线程控制
查看>>
UNICODE模式下使用rapidxml写XML文件
查看>>
ADO查询站SQLServer,字段类型
查看>>
拼SQL语句执行更新
查看>>
MFC中使用ADO 插入Oracle,数据类型
查看>>