您现在的位置:首页 >> ★免费资源 >> 源码下载 >> 内容

MATLAB代做-python代做-FPGA代做-PSO算法

时间:2019-6-1 3:45:14 点击:

  核心提示:MATLAB代做-python代做-FPGA代做-PSO算法...
function [PSOarr_present PSOgbest PSOgbestrecord]=psozlb()
clc;
clear all;
pop_size=100;%种群大小,即粒子数量
part_size=2;%粒子维数
max_gen=2000;%  最大迭代次数
%region=zeros(part_size,2);%设定解空间范围
%region=100*[-3,3;-3,3];%每一维设定不同的范围,因为粒子是5维,共有2个目标函数
%rand('twister',sum(100*clock));%重置随机数发生器状态
%初始化当前位置和速度
arr_present=ini_pos(pop_size,part_size);%arr_present也是part_size+1列,最后一列是对应向量的适应度函数
v=ini_v(pop_size,part_size);
w_max=0.9;%权重系数的最大值
w_min=0.4;%权重系数的最小值
c0=1;
%计算原始种群的适应度,及初始化
pbest=arr_present(:,1:part_size);%初始化各个粒子的最优值
pbest1(:,1:part_size+2)=arr_present(:,1:part_size+2);%个体极值是没有任何关系的,只是在更新速度的时候用的个体极值是他们的线性关系的组合,但是那个全局极值是没有任何实际含义的
pbest2=pbest1;
gbest(1,1:part_size)=rand(1,part_size);
a=gbest(1,1:part_size);
gbest(1,part_size+1)=fitness1(a);
gbest(1,part_size+2)=fitness2(a);%这个gbest尽管没有没有实际含义,最后可以用这个作为最优解
gbest1(1,1:part_size)=gbest(1,1:part_size);
x=gbest;
gbest1(1,part_size+1)=fitness1(x);
gbest2=gbest1;
recordgbest=gbest;

%开始进化,直到最大代数截止
for i=1:max_gen
    grid on;
    w=w_max-(w_max-w_min)*i/max_gen;%线性递减权重
    c1=c0+i/max_gen;%c是加速因子定义,用了这个以后,粒子收敛的速度更快
    %)当前进化代数,对粒子进行更新和评价
    for j=1:pop_size
        v(j,:)=w.*v(j,:)+c1.*rand.*(pbest(j,1:part_size)-arr_present(j,1:part_size))+c1.*rand.*(gbest(1,1:part_size)-arr_present(j,1:part_size));%gbest适应值有值了,可是对应的自变量向量如何选择呢???????
        %判断v的大小,限制v的绝对值小于5
        %c=find(abs(v)>5);%最大速度设置,找出速度大于5的向量的标号
        %v(c)=sign(v(c))*5;%如果速度大于5,就设置成5
        arr_present(j,1:part_size)=arr_present(j,1:part_size)+v(j,1:part_size);%粒子位置更新
        x=arr_present(j,1:part_size);
        arr_present(j,part_size+1)=fitness1(x);%适应度1,保存到最后一列
        arr_present(j,part_size+2)=fitness2(x);%适应度1,保存到最后一列
        if arr_present(j,part_size+1)<pbest1(j,part_size+1)
            pbest1(j,:)=arr_present(j,1:part_size+2);
            pbest(j,1:part_size)=pbest1(j,1:part_size)*(1-i/max_gen)+pbest2(j,1:part_size)*i/max_gen; 
            %pbest(j,1:part_size)=pbest1(j,1:part_size)*1/2+pbest2(j,1:part_size)*1/2; 
        end
        if arr_present(j,part_size+2)<pbest2(j,end)
            pbest2(j,:)=arr_present(j,1:part_size+2);
            pbest(j,1:part_size)=pbest1(j,1:part_size)*(1-i/max_gen)+pbest2(j,1:part_size)*i/max_gen; 
            %pbest(j,1:part_size)=pbest1(j,1:part_size)*1/2+pbest2(j,1:part_size)*1/2; 
        end
        if arr_present(j,part_size+1)<gbest1(part_size+1)
            if x(1)>=-10&&x(1)<=10&&x(2)>=-10&&x(2)<=10%%??
                gbest1=arr_present(j,1:part_size+1);%#ok<AGROW> %更新全局极值是通过当前位置来的,而不是通过个体极值来的
                gbest(1,1:part_size)=gbest1(1,1:part_size)* i/max_gen+gbest2(1,1:part_size)*( 1-i/max_gen);%gbest只有位置维数的列数,没有适配值
                a=gbest(1,1:part_size);
                gbest(1,part_size+1)=fitness1(a);
                gbest(1,part_size+2)=fitness2(a);%这个gbest尽管没有没有实际含义,最后可以用这个作为最优解
            end
        end
         if arr_present(j,part_size+2)<gbest2(part_size+1)
             if x(1)>=-10&&x(1)<=10&&x(2)>=-10&&x(2)<=10
                 gbest2(1:part_size)=arr_present(j,1:part_size);
                gbest2(part_size+1)=arr_present(j,part_size+2);%更新全局极值是通过当前位置来的,而不是通过个体极值来的
                gbest(1,1:part_size)=gbest1(1,1:part_size)* i/max_gen+gbest2(1,1:part_size)*( 1-i/max_gen);%gbest只有位置维数的列数,没有适配值
                a=gbest(1,1:part_size);
                gbest(1,part_size+1)=fitness1(a);
                gbest(1,part_size+2)=fitness2(a);%这个gbest尽管没有没有实际含义,最后可以用这个作为最优解
             end
         end
    end
    recordgbest(i,:)=gbest;
end
best_recordf1=recordgbest(:,part_size+1);
best_recordf2=recordgbest(:,part_size+2);
for k=1:pop_size
    pg=arr_present(1,:);
    if pg(1,part_size+1)>=arr_present(k,part_size+1)&&pg(1,part_size+2)>=arr_present(k,part_size+2)
       pg=arr_present(k,:); %最后得到的所有粒子的位置中最好的位置
    end
end
PSOgbest=gbest;
PSOarr_present=arr_present;
PSOgbestrecord=pg;
best_recordf3=arr_present(:,part_size+1);
best_recordf4=arr_present(:,part_size+2);
best_recordf5=arr_present(:,1);
best_recordf6=arr_present(:,2);
subplot(1,3,1),plot(best_recordf1,best_recordf2,'.r',pbest1(:,part_size+1),pbest1(:,part_size+2),'.b',pbest2(:,part_size+1),pbest2(:,part_size+2),'.g');%gbest对应的历史最优值组成的曲线
subplot(1,3,2),plot(best_recordf3,best_recordf4,'.b');%粒子迭代完之后的对应的两个目标函数值对应曲线
subplot(1,3,3),plot(best_recordf5,best_recordf6,'.b');%二维函数中粒子迭代完之后对应的位置
grid on;

 

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:









    
    

Tags:PSO算法 
作者:PSO算法 来源:PSO算法
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|python代做|matlab淘宝代做|matlab代写(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment