clc
clear
close all
warning off
set(0,'defaultfigurecolor','w')
%x y
xmax = [5.12 5.12];
xmin = [-5.12 -5.12];
vmax = 0.2*xmax;
vmin = -vmax;
fun = @shubert;
m=2;
%程序初始化
% global popsize; %种群规模
gen=20; %设置进化代数
popsize=300; %设置种群规模大小
best_in_history(gen)=inf; %初始化全局历史最优解
best_in_history(:)=inf; %初始化全局历史最优解
best_fitness=inf;
fz = zeros(gen,5);
%设置种群数量
pc=0.5; %交叉概率选择,0和1之间
pm=0.1; %变异概率选择,0和1之间
pop1 = zeros(popsize,m);
pop2 = zeros(popsize,m);
pop3 = zeros(popsize,m);
pop6 = zeros(gen,m);%存储解码后的每代最优粒子
pop7 = zeros(popsize,m);%存储更新解码后的粒子的位置
for ii1=1:popsize
pop1(ii1,:)=funx(xmin,xmax,m); %初始化种群中的粒子位置,
pop3(ii1,:)=pop1(ii1,:); %初始状态下个体最优值等于初始位置
pop2(ii1,:)=funv(vmax,m); %初始化种群微粒速度,
pop4(ii1,1)=inf;
pop5(ii1,1)=inf;
end
pop0=pop1;
xmax = [5.12 5.12];
xmin = [-5.12 -5.12];
c1=2;
c2=2;
gbest_x=pop1(end,:);
% pop1(1:size(num,1),:) = num; %全局最优初始值为种群第一个粒子的位置
for exetime=1:gen
ww = 0.7*(gen-exetime)/gen+0.2;
for ii4=1:popsize
pop2(ii4,:)=(ww*pop2(ii4,:)+c1*rand(1,m).*(pop3(ii4,:)-pop1(ii4,:))+c2*rand(1,m).*(gbest_x-pop1(ii4,:))); %更新速度
for jj = 1:m
if pop2(ii4,jj)<vmin(jj)
pop2(ii4,jj)=vmin(jj);
elseif pop2(ii4,jj)>vmax(jj)
pop2(ii4,jj)=vmax(jj);
end
end
end
%更新粒子位置
for ii5=1:popsize
pop1(ii5,:)=pop1(ii5,:)+pop2(ii5,:);
for jj2 = 1:m
if pop1(ii5,jj2)>xmax(jj2)
pop1(ii5,jj2) = xmax(jj2);
elseif pop1(ii5,jj2)<xmin(jj2)
pop1(ii5,jj2)=xmin(jj2);
end
end
% if rand>0.85
% k=ceil(m*rand);
% pop1(ii5,k) = (xmax( k)-xmin(k)).*rand(1,1)+xmin(k);
% end
% if pop5(ii5)>sum(pop5)/popsize
% pop1(ii5,:) = (xmax(1,m)-xmin(1,m)).*rand(1,m)+xmin(1,m);
% end
end
for jj2 = 1:m
if pop1(ii5,jj2)>xmax(jj2)
pop1(ii5,jj2) = xmax(jj2);
elseif pop1(ii5,jj2)<xmin(jj2)
pop1(ii5,jj2)=xmin(jj2);
end
end
if exetime-1>0
plot(1:length(best_in_history(1:exetime-1)),best_in_history(1:exetime-1));
xlabel('迭代次数')
ylabel('适应度')
title('遗传算法粒子群GA-PSO算法')
hold on;
pause(0.1)
end
pop1(end,:) = gbest_x;
%计算适应值并赋值
for ii3=1:popsize
[my,mx] = fun2(pop1(ii3,:));
% [my,mx] = fun2(gbest_x,num,xmax,xmin);
pop5(ii3,1)=my;
pop7(ii3,:) = mx;
if pop4(ii3,1)>pop5(ii3,1) %若当前适应值优于个体最优值,则进行个体最优信息的更新
pop4(ii3,1)=pop5(ii3,1); %适值更新
pop3(ii3,:)=pop1(ii3,:); %位置坐标更新
end
end
%计算完适应值后寻找当前全局最优位置并记录其坐标
if best_fitness>min(pop4(:,1))
best_fitness=min(pop4(:,1)) ; %全局最优值
ag = [];
ag =find(pop4(:,1)==min(pop4(:,1)));
gbest_x(1,:)=(pop1(ag(1),:)); %全局最优粒子的位置
pop6(exetime,:) = pop7(ag(1),:);
else
fz(exetime,:) = fz(exetime-1,:);
if exetime>1
pop6(exetime,:) = pop6(exetime-1,:);
end
end
best_in_history(exetime)=best_fitness; %记录当前全局最优
meany = mean(pop5);
%变异
for hh = 1:popsize
if pop5(hh)>meany
if rand()>pm
k=ceil(m*rand());
pop1(hh,k) = (xmax( k)-xmin(k)).*rand(1,1)+xmin(k);
end
end
end
%交叉
pany = [];
for hh = 1:popsize
if pop5(hh)>meany
if isempty(pany)
pany =[pop1(hh,:) hh];
else
panx = [pop1(hh,:) hh];
if rand()>pc
k=ceil(m*rand());
pop1(pany(end),k) = panx(k);
pop1(panx(end),k) =pany(k);
pany = [];
end
end
end
end
end
x = -2:0.1:2;
y = -2:0.1:2;
x = -10:0.1:10;
y = -10:0.1:10;
[x,y] = meshgrid(x,y);
[m,n] = size(x);
z = zeros(m,n);
for ii = 1:m
for jj = 1:n
xx = [x(ii,jj) y(ii,jj)];
z(ii,jj) = shubertfun(xx);
end
end
figure
surf(x,y,z)
hold on
xlabel('x1')
ylabel('x2')
zlabel('z')
axis([-2 2 -2 2 -200 200])
% axis([-10 10 -10 10 -200 200])
% shading interp
title('Shubert Function')
set(gca,'fontsize',12)
colormap jet
plot(pop0(:,1),pop0(:,2),'ro','MarkerFaceColor','r')
xlabel('X')
ylabel('Y')
title('初始种群')
set(gca,'fontsize',12)
view([-130 40])
figure
surf(x,y,z)
hold on
xlabel('x1')
ylabel('x2')
zlabel('z')
axis([-2 2 -2 2 -200 200])
% axis([-10 10 -10 10 -200 200])
% shading interp
title('Shubert Function')
set(gca,'fontsize',12)
colormap jet
plot(pop1(:,1),pop1(:,2),'ro','MarkerFaceColor','r')
xlabel('X')
ylabel('Y')
title('收敛后的种群')
set(gca,'fontsize',12)
view([-130 40])
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
遗传算法优化粒子群算法,克服粒子群算法容易早熟,容易陷入局部最优的缺点,使粒子群局部寻优和全局寻优兼顾,并用改进的算法求解shubert函数,代码可以运行,并有注释,上传包含m文件,和运行结果
资源推荐
资源详情
资源评论
收起资源包目录
ga-pso优化求解shubert函数.rar (9个子文件)
2.jpg 15KB
1.jpg 41KB
funv.m 88B
gapso.m 5KB
fun3.m 1KB
shubertfun.m 243B
fun2.m 458B
3.jpg 42KB
funx.m 99B
共 9 条
- 1
资源评论
- crazygirl012023-09-12感谢资源主的分享,很值得参考学习,资源价值较高,支持!
- 2301_774852052024-01-31资源不错,对我启发很大,获得了新的灵感,受益匪浅。
神经网络机器学习智能算法画图绘图
- 粉丝: 2375
- 资源: 569
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功