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

news2024/11/17 10:34:09

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

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

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

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

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

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

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

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

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

3.MATLAB核心程序

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

4.完整MATLAB

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择

目录 1.最小梯度下降&#xff08;Mini-batch SGD&#xff09; 2.激活函数 2.1 sigmoid 2.2 tanh 2.3 ReLU 2.4 Leaky ReLU 2.5 ELU 2.6 最大输出神经元 2.7 建议 3.数据预处理 4. 如何初始化网络的权值 5. 批量归一化 6.超参数的选择 1.最小梯度下降&#xf…

Flowable定时器与实时流程图

1. 定时器 1.1. 流程定义定时激活 在之前松哥给小伙伴们介绍流程定义的时候&#xff0c;流程都是定义好之后立马就激活了&#xff0c;其实在流程定义的这个过程中&#xff0c;我们还可以设置一个激活时间&#xff0c;也就是流程定义好之后&#xff0c;并不会立马激活&#xf…

Java一些面试题(简单向)

以下全部简单化回答(本人新手,很多都是直接百度粘贴收集得来的,如有不对请留下正确答案,谢谢) (问题来源https://www.bilibili.com/video/BV1XL4y1t7LL/?spm_id_from333.337.search-card.all.click&vd_source3cf72bb393b8cc11b96c6d4bfbcbd890) 1.重写 重载的区别 重写(ov…

dubbo3.0使用

dubbo3.0使用 介绍 官方网址&#xff1a;https://dubbo.apache.org/ 本文基于springCloud依赖的方式演示相关示例&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/Dubbo-Spring-Cloud dubbo示例项目&#xff1a;https://github.com/apache/dubbo-sample…

9 内中断

内中断 任何一个通用的CPU&#xff0c;比如8086 &#xff0c;都具备一种能力&#xff0c;可以在执行完当前正在执行的指令之后&#xff0c;检测到从CPU 外部发送过来的或内部产生的一种特殊信息&#xff0c;并且可以立即对所接收到的信息进行处理。这种特殊的信息&#xff0c;…

S7-200SMART高速脉冲输出的使用方法和示例

S7-200SMART高速脉冲输出的使用方法和示例 S7-200SMART PLC内部集成了高速脉冲发生器,不同的CPU型号,高速脉冲发生器的数量不同。 具体型号可参考下图: 注意:要输出高速脉冲的话,必须选择ST晶体管型号的PLC,SR继电器型的不支持。 S7-200SMART PLC能产生2种类型的高速脉冲…

【瑞吉外卖】公共字段填充

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;瑞吉外卖 ✨欢迎加入社区&#xff1a; &#x1f449;不会压弯的小飞侠 ✨人生格言&#xff1a;知足上…

激光雷达标定(坐标系转换)

文章目录1. 旋转矩阵2. 平移矩阵3. 坐标系的转换4. 坐标转换代码1. 旋转矩阵 由于激光雷达获取的点云数据的坐标是相对于激光雷达坐标系的&#xff0c;为了使车最终得到的点云数据坐标是在车坐标系下的&#xff0c;我们需要对点云中每一个点的坐标进行坐标转换。首先是需要对坐…

Docker笔记--创建容器、退出容器、查看容器、进入容器、停止容器、启动容器、删除容器、查看容器详细信息

目录 1--docker run创建容器 2--exit退出容器 3--docker ps查看容器 4--docker exec进入容器 5--docker stop停止容器 6--docker start启动容器 7--docker rm删除容器 8--docker inspect查看容器详细信息 1--docker run创建容器 sudo docker run -it --nametest redis…

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

1、迭代 通过重复执行的代码处理相似的数据集的过程&#xff0c;并且本次迭代的处理数据要依赖上一次的结果继续往下做&#xff0c;上一次产生的结果为下一次产生结果的初始状态&#xff0c;如果中途有任何停顿&#xff0c;都不能算是迭代。 # 非迭代例子 n 0 while n < …

SSM如何

目录 1、整合Mybatis 1.1.新建项目 1.2.添加pom依赖 1.3.application.yml 1.4.generatorConfig.xml 1.5.设置逆向生成 1.6.编写controller层 1.7.测试 2、整合 Mybatis-plus 2.1Mybatis-plus简介 2.2.创建项目 2.3.添加pom依赖 2.4.application.yml 2.5.MPGenerator 2.6.生成…

Stm32旧版库函数1——adxl335 模拟输出量 usart2

主函数&#xff1a; /******************************************************************************* // // 使用单片机STM32F103C8T6 // 晶振&#xff1a;8.00M // 编译环境 Keil uVision4 // 在3.3V的供电环境下&#xff0c;就能运行 // 波特率 19200 串口2 PA2(Tx) P…

equals方法:黑马版

目录 Object类的equals方法 Student类 测试类 第一步&#xff1a;使用比较 第二步&#xff1a;使用equals比较 第三步&#xff1a;在子类-Student类中重写equals方法 代码逐句分析 运行 Object类的equals方法 首先写一个类Student&#xff0c;属性有name和age&#xf…

UE5笔记【十二】蓝图函数BluePrint Function

上一篇讲了蓝图变量&#xff0c;这一篇说蓝图函数。BluePrint Function 函数&#xff0c;一般是为了将一段功能的代码提取出来&#xff0c;然后方便我们反复使用。重复的代码可以提取一个函数。类似的&#xff0c;相同的蓝图&#xff0c;我们也可以提取出一个蓝图函数来。 如…

青龙面板 香蕉

香蕉角本教程 介绍 香蕉视频 app —【多用户版】 一个账户每天稳定1元&#xff0c;可以自己提现&#xff0c;也可以兑换会员&#xff0c;脚本不停会员也不停&#xff01;可注册多个账户&#xff01;&#xff08;多账户福利自行看文章底部&#xff01;&#xff09; 拉取文件 …

【微服务】springboot 整合javassist详解

一、前言 Javassist 是一个开源&#xff0c;用于分析、编辑和创建Java字节码的类库&#xff0c;由东京工业大学数学和计算机科学系的 Shigeru Chiba &#xff08;千叶滋&#xff09;所创建。目前已加入了开放源代码JBoss 应用服务器项目&#xff0c;通过使用Javassist对字节码操…

linux redhat 8 创建逻辑卷

LVM与直接使用物理存储相比,有以下优点: 1. 灵活的容量. 当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷. 2. 方便的设备命名 逻辑卷可以按你觉得方便的方式来起任何名称. 3.磁盘条块化. 你可以生成一个逻辑盘,它的数据可以被…

记录一次Mac本地启动nacos遇到的问题

nacos 官网&#xff1a;https://nacos.io/zh-cn/docs/quick-start.html 我这里下载的是2.0.3稳定的版本 本地启动&#xff1a;sh startup.sh -m standalone 问题1&#xff1a;Caused by: java.lang.IllegalStateException: No DataSource set 这里是数据源连接有问题&#xff…

Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理

目录 1、确认应答机制 2、超时重传机制 3、滑动窗口 4、流量控制 5、拥塞控制 6、延迟应答 &#xff08;各位好&#xff0c;博主新建了个公众号《自学编程村》&#xff0c;拉到底部即可看到&#xff0c;有情趣可以关注看看哈哈&#xff0c;关注后还可以加博主wx呦~~~&am…

Apache Flink 水印的工作机制详解与源码阅读

一、时间长河谁能解 在人类生存的地球上&#xff0c;存在着一种很神秘的东西&#xff1a;时间&#xff0c;它看不见摸不着&#xff0c;但速度恒定&#xff0c;单调递增且永无止境的往前推进&#xff0c;人类的历史被淹没在茫茫的时间长河中。同时在地球附近&#xff0c;一个星…