2022年二维粒子群算法的matlab源程序 .pdf

上传人:C****o 文档编号:39706779 上传时间:2022-09-07 格式:PDF 页数:11 大小:64.36KB
返回 下载 相关 举报
2022年二维粒子群算法的matlab源程序 .pdf_第1页
第1页 / 共11页
2022年二维粒子群算法的matlab源程序 .pdf_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《2022年二维粒子群算法的matlab源程序 .pdf》由会员分享,可在线阅读,更多相关《2022年二维粒子群算法的matlab源程序 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、%function pso F=pso_2D()%FUNCTION PSO -USE Particle Swarm Optimization Algorithm%global present;%close all;clc;clear all;pop_size=10;%pop_size 种群大小/粒子数量part_size=2;%part_size 粒子大小/粒子的维数gbest=zeros(1,part_size+1);%gbest 当前搜索到的最小的值max_gen=200;%max_gen 最大迭代次数%best=zeros(part_size,pop_size*part_size);%x

2、uan region=zeros(part_size,2);%设定搜索空间范围-解空间region=10*-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;%每一维设定不同范围(称之为解空间,不是可行域空间)rand(state,sum(100*clock);%重置随机数发生器状态%当前种群的信息矩阵,逐代进化的群体%当前位置,随机初始化%一个 10*3的随机的矩阵(初始化所有粒子的所有维数的位置值),其中最后一列为arr_present=ini_pos(pop_size,part_size);%初始化当前速度%一个 10*2的随机的矩阵(初始

3、化所有粒子的所有维数的速度值)v=ini_v(pop_size,part_size);%不是当前种群,可看作是一个外部的记忆体,存储每个粒子历史最优值(2 维数值):根据适应度更新!名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 11 页 -%注意:pbest数组 10*3 最后一列保存的是适应度pbest=zeros(pop_size,part_size+1);%pbest:粒子以前搜索到的最优值,最后一列包括这些值的适应度%1*80 保存每代的最优值best_record=zeros(part_size+1,max_gen);%best_record数组:记录每一代的最好的粒

4、子的适应度w_max=0.9;%w_max权系数最大值w_min=0.2;%w_min权系数最小值v_max=2;%最大速度,为粒子的范围宽度c1=2;%学习因子1 c2=2;%学习因子2%计算原始种群的适应度,及初始化%注意:传入的第一个参数是当前的粒子群体,ini_fit函数计算每个粒子的适应度%arr_present(:,end)是最后一列,保存每个粒子的适应值,是这样的!xuan arr_present(:,end)=ini_fit(arr_present,pop_size,part_size);%数组赋值,初始化每个粒子个体的历史最优值,以后会更新的pbest=arr_present

5、;%初始化各个粒子最优值%找到当前群体中适应度最小的(在最后一列中寻找),best_value%改为 max,表示关联度最大best_value best_index=max(arr_present(:,end);%初始化全局最优,即适应度为全局最小的值,根据需要也可以选取为最大值%唯一的全局最优值,是当前代所有粒子中最好的一个gbest=arr_present(best_index,:);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 11 页 -%因为是多目标,因此这个-%只是示意性的画出3 维的%x=-3:0.01:3;%y=-3:0.01:3;%X,Y=meshgrid(

6、x,y);%Z1=(-10)*exp(-0.2)*sqrt(X2+Y2);%Z2=(abs(X)0.8+abs(Y)0.8+5*sin(X3)+5*sin(Y3);%z1=(x,y)(-10)*exp(-0.2)*sqrt(x2+y2);%z2=(x,y)(abs(x)0.8+abs(y)0.8+5*sin(x3)+5*sin(y3);%ezmeshc(z1);grid on;%ezmeshc(z2);grid on;%开始进化,直到最大代数截至for i=1:max_gen%grid on;%三维图象%多维图象是画不出来的%ezmesh(z),hold on,grid on;%画出粒子群%p

7、lot3(arr_present(:,1),arr_present(:,2),arr_present(:,3),*),hold off;%drawnow%flush%pause(0.01);w=w_max-(w_max-w_min)*i/max_gen;%线形递减权重名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 11 页 -%当前进化代数:对于每个粒子进行更新和评价-for j=1:pop_size v(j,:)=w.*v(j,:)+c1.*rand.*(pbest(j,1:part_size)-arr_present(j,1:part_size).+c2.*rand.*(gb

8、est(1:part_size)-arr_present(j,1:part_size);%粒子速度更新(a)%判断v的大小,限制v的绝对值小于20 for k=1:part_size if abs(v(j,k)20 rand(state,sum(100*clock);v(j,k)=20*rand();end end%前几列是位置信息 arr_present(j,1:part_size)=arr_present(j,1:part_size)+v(j,1:part_size);%粒子位置更新(b)%最后一列是适应度 arr_present(j,end)=fitness(part_size,arr_

9、present(j,1:part_size);%适应度更新(保存至最后一列)%适应度评价与可行域限制 if(arr_present(j,end)pbest(j,end)&(Region_in(arr_present(j,:),region)%根据条件更新pbest,如果是最小的值为小于号,相反则为大于号 pbest(j,:)=arr_present(j,:);%更新个体的历史极值 end end 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 11 页 -%以下更新全局的极值 best best_index=max(arr_present(:,end);%如果是最小的值为 min

10、,相反则为max if bestgbest(end)&(Region_in(arr_present(best_index,:),region)%如果当前最好的结果比以前的好,则更新最优值gbest,如果是最小的值为小于号,相反则为大于号 gbest=arr_present(best_index,:);%全局的极值 end%-混沌-xlhd=gbest(1:part_size);if(1)for p=1:25%次数%1生成 cxl=rand(1,part_size);for j=1:part_size if cxl(j)=0 cxl(j)=0.1;end if cxl(j)=0.25 cxl(j

11、)=0.26;end if cxl(j)=0.5 cxl(j)=0.51;end if cxl(j)=0.75 cxl(j)=0.76;end if cxl(j)=1 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 11 页 -cxl(j)=0.9;end end%2映射 al=-30;bl=30;rxl=al+(bl-al)*cxl;%3搜索 bate=0.1;xlhd=xlhd+bate*rxl;if fitness(part_size,xlhd)gbest(end)gbest(1:part_size)=xlhd;gbest(end)=fitness(part_size,xl

12、hd);end%4更新for j=1:part_size cxl(j)=4*cxl(j)*(1-cxl(j);end end end%-混沌-%当前代的最优粒子的适应度(取自)保存 best_record(:,i)=gbest;%gbest:一个行向量end pso=gbest;%最优个体display(gbest);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 11 页 -figure;plot(best_record(end,:);%最优解与代数的进化关系图best=zeros(part_size,max_gen);for i=1:part_size-1 best(i,:)

13、=best_record(i,:);end pareto1=zeros(1,max_gen);pareto2=zeros(1,max_gen);for i=1:max_gen pareto1(i)=f1(part_size,best(:,i);pareto2(i)=f2(part_size,best(:,i);end figure;i=1:max_gen;%plot(i,pareto1(i),r*,i,pareto2(i),g*);plot(pareto1(i),pareto2(i),r+);xlabel(f1);ylabel(f2);title(Pareto曲线);%figure;%plot

14、(,f2(best_record),);%movie2avi(F,pso_2D1.avi,compression,MSVC);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 11 页 -%子函数%-%-%返回随机的位置function ini_present=ini_pos(pop_size,part_size)ini_present=10*3*rand(pop_size,part_size+1);%初始化当前粒子位置,使其随机的分布在工作空间%返回一个随机的矩阵,10*(2+1),最后一列将用来保存适应度%返回随机的速度function ini_velocity=ini_v(p

15、op_size,part_size)ini_velocity=20*(rand(pop_size,part_size);%初始化当前粒子速度,使其随机的分布在速度范围内%判断是否处于范围内function flag=Region_in(pos_present,region)m n=size(pos_present);%1*11 n 返回解的维数10 flag=1;for j=1:n-1 flag=flag&(pos_present(1,j)=region(j,1)&(pos_present(1,j)m2)%-应该取大于呢还是小于 m2=abs(y0(i)-y1(i);end end for i

16、=1:tn kesa(i)=(m1+rou*m2)/(abs(y0(i)-y1(i)+rou*m2);名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 11 页 -gama=gama+kesa(i);end gama=gama/tn;%可行解的判决函数 gn 为约束条件的个数(暂时未用)n 为解(粒子)的维数function bool=feasible(x,n)r=0;%for i=1:gn r=max(0,g1(n,x),g2(n,x);%判断约束条件%end if(r0)bool=0;%不可行解else bool=1;%可行解end 我正在玩搜狐微博,快来“关注”我,了解我的最新动态吧。http:/ 11 页,共 11 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁