您现在的位置:首页 >> 智能优化 >> 内容

m基于PSO粒子群算法的重采样算法仿真,对比随机重采样,多项式重采样,分层重采样,系统重采样,残差重

时间:2022/12/10 18:26:48 点击:

  核心提示:02_070m,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y52Vm5xq

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览







3.算法概述

    重采样的主要方法有随机重采样,多项式重采样,分层重采样,系统重采样,残差重采样,MSV重采样等。

a.随机采样是一种利用分层统计思想设计出来的,将空间均匀划分,粒子打点后会产生高集中的均匀分布区,将各分布区的粒子点进行权重累计并解算(例如求平均权重),生成若干个区间权重,使用该信息进行求解。其理解起来的几何思想就是给粒子点做索引编号,对应较多的索引编号将会保留,而较少的就会被淘汰。随机采样可能会因为存在多个权重接近的均匀区而产生求解方向错误,甚至陷入局部最优。以下给出一段随机采样的matlab代码。[1]随后几种其他重采样方法代码不再展示。

b.多项式采样是1993年提出的改进,基本解决了粒子滤波的粒子退化问题。其基本形式与推进思想与随机采样相似,不同在于多项式采样会不断记录并复制计算相似或相同结果的权重累计值,从而得到最优的发展结果。

c.系统重采样是2000年提出的,这种算法与多项式采样算法较为近似,即将原有的权重空间分层,在每一层中抽取粒子,而系统重采样产生了一个随机数来供所有层使用,其结果更加均匀。

d.残差重采样法是1998年提出的,它以多项式重采样法为基础,其基本思想是直接保留原有的权重大的粒子,剩下的不足部分随机选取重新赋权的粒子补充。

e.分层采样是分别对每个类别进行随机采样。分层采样往往是为保证在采样空间或类型选取上的均匀性及代表性所采用的方法。分层的依据可因精度评价的目标而异,常用的分层有地理区、自然生态区、行政区域或分类后的类别等。

f.最小采样方差(MSV:minimum sampling variance)最优重采样方法,在满足渐近无偏性的前提下获得最小采样方差.方法:给出三种"重采样同分布"测度方法:Kullback-Leibler偏差,Kolmogorov-Smirnov统计和采样方差(sampling variance).所提出的最小采样方差重采样放宽了无偏性条件,仅满足渐近无偏,但获得了最小采样方差(参见定理2-4论证以及仿真性能对比).

4.部分源码

clc;

clear all;

close all;

warning off;

addpath 'func\';

for ij = 1:100

    rng(ij);  

ij 

global NUM;  

global NOISE;

global XY_pso;

%粒子滤波学习因子 

c1   = 0.3;             

c2   = 0.3;  

%惯性权重

w    = 0.75;    

%粒子数量

N    = 100;  

ITER = 200;    

wmax = 0.9;                      

wmin = 0.4;

D    = 2;     

NUM  = 7;    

BS = [0,        0,          1.5,          1.5,        0,         -1.5,       -1.5;

      0,  sqrt(3),  0.5*sqrt(3), -0.5*sqrt(3), -sqrt(3), -0.5*sqrt(3), 0.5*sqrt(3)];

for i = 1:NUM

    X_(1,i) = BS(1,i);

    X_(2,i) = BS(2,i);

end 

R        = 3000;

XY_robot = R/3+2*R/3*rand(1,D);%定义真实位置

XY_pso   = R*X_;

for i = 1:NUM

    R0(i) = sqrt((XY_pso(1,i) - XY_robot(1))^2 + (XY_pso(2,i) - XY_robot(2))^2);

end

for i = 1:NUM-1

    R_n(i)=R0(i+1)-R0(1);

end

NOISE = R_n+10*randn(1,NUM-1);

%50的时候产生强干扰

if ij >= 50 & ij <= 60

NOISE = R_n+200-20*(ij-50)*ones(1,NUM-1);

end

%粒子初始化

x     = rand(N,D);

v     = rand(N,D);

for i=1:N

    p(i)   = fitness(x(i,:));

    y(i,:) = x(i,:);

end

pg = x(N,:);   

for i=1:(N-1)

    if fitness(x(i,:))<fitness(pg)

        pg=x(i,:);

    end

end

%开始粒子滤波

for t=1:ITER

    for j=1:N

        fv(j)=fitness(x(j,:));

    end

    fvag = sum(fv)/N;         

    fmin = sum(fv);      

    %自适应权重计算公式

    for i=1:N

        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 x(i,1)<0

           x(i,1)=0;

        end

        if x(i,2)<0

           x(i,2)=0;

        end        

        if x(i,1)>=R

           x(i,1)=R;

        end

        if x(i,2)>=R

           x(i,2)=R;

        end          

        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

    %分层重采样算法

    x    = resample0(1:N,p',x); %重采样

end

xm = pg';

fv = fitness(pg);

%计算误差

ERR(ij) = abs([(XY_robot(1)-xm(1))+(XY_robot(2)-xm(2))]/2);

%这里用简化方式效果更好些

ERR2(ij)= N/(ERR(ij)+1);

end

02_070m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168