nlm算法matlab代码_粒子群算法及MATLAB代码仿真实例

4af98f89b0c8e93e85882064281a3cec.png

1 PSO算法的提出

1.1 标准PSO算法

PSO算法最早提出于1995年,是一种基于随机初始解的搜索算法。算法以“群体”和“进化”为基本概念,将每个解看作搜索空间中的一个粒子。每个粒子都有一定的速度,其大小根据自身历史经验和种群经验进行动态调整。粒子通过不断地迭代飞行来寻找空间中最优解的位置,每次迭代,粒子的速度和位置按照下式进行更新。

1d0c1c9eb4033f598cb809d9d70c052f.png
粒子速度位置更新公式

式中c1和c2表示粒子的学习因子;r1和r2为两个随机数;v和x表示粒子的速度和位置;w为惯性权重。标准PSO的性能很大程度上处决于其各项参数,参数选择不当会导致在算法初期,容易陷入局部最优或在算法后期收敛速度慢、精度低等问题。

1.2 PSO算法的改进思路

标准PSO算法容易陷入局部最优问题主要是由于其惯性权重被固定,不能根据算法实际收敛情况进行调整而导致的。因此,让惯性权重能够根据种群收敛情况进行动态调节是对算法进行改进的主要思路,目前提出的改进粒子群算法也大多是采用这种思路。

2 用PSO算法求函数极值示例

2.1 求一元函数最大(小)值问题

例:求函数下面一元函数在指定区间的最小值

6781d9b4e084f882f77879c0bd464587.png

在Matlab中绘制该函数的图像如下:

d73ae398338ca5c08ac4448f8381aa45.png

下面开始在Matlab中求该函数的最小值,具体代码如下:

首先绘制函数图像并显示出粒子的初始分布

%% 绘制函数图像
x = 1:0.01:2;
y = sin(10*pi*x)./ x;
f1=figure('color',[1 1 1]);
plot(x,y)
hold on
%% 设置种群参数
N=10; %种群规模
M=30; %最大迭代次数
D=1; %粒子搜索空间维数
w=0.729; %惯性权重
c1=2; %认知学习因子
c2=2; %社会学习因子
popmax=2; %粒子最大位置
popmin=1; %粒子最小位置
vmax=0.5; %粒子最大运动速度
vmin=-0.5; %粒子最小运动速度
%% 种群初始化
for i=1:N
    for j=1:D
        pop(i,j)=rand+1; 
        v(i,j)=0.5*rands(1); 
    end
end
for i=1:N
    fpi(i)=fitness(pop(i,:)); 
    pi(i,:)=pop(i,:); 
end
pg=pop(1,:);
for i=2:N
    if fitness(pop(i,:))<fitness(pg)
        fpg=fitness(pop(i,:)); 
        pg=pop(i,:);
    end
end
%% 绘制初始状态图
plot(pi,fpi,'ro','MarkerFaceColor','r','MarkerEdgeColor','k','MarkerSize',5)
title('粒子初始分布图')
xlabel('X')
ylabel('Y')

结果如下:

e716e0237a088966e5c259414da18fdc.png

开始迭代寻优过程,得出结果

%% 进入迭代寻优过程
for t=1:M
    for i=1:N
        v(i,:)=w*v(i,:)+c1*rand*(pi(i,:)-pop(i,:))+c2*rand*(pg-pop(i,:)); %更新粒子速度
        if v(i,:)>vmax
            v(i,:)=vmax;
        elseif v(i,:)<vmin
            v(i,:)=vmin;
        end
        pop(i,:)=pop(i,:)+v(i,:); %更新粒子位置
        if pop(i,:)>popmax
            pop(i,:)=popmax;
        elseif pop(i,:)<popmin
            pop(i,:)=popmin;
        end
        if fitness(pop(i,:))<fpi(i)
            fpi(i)=fitness(pop(i,:));
            pi(i,:)=pop(i,:);
        end
        if fpi(i)<fpg
            fpg=fpi(i);
            pg=pi(i,:);
        end
    end
    yy(t)=fpg;
end

结果如下:

bd1acb1b8911a375bb5cf80c37a438f6.png

2.2 求二元函数最大(小)值问题

例:求函数下面二元函数在指定区间的最大值

296f8cb078979e02ac4eebab303a3fd4.png

同样,首先在Matalb中绘制改函数的图像,如下:

4dff8a21e1a51d94cb73a190c2fc5102.png

绘制函数图像并显示出粒子的初始分布

%% 绘制函数图像
f1=figure('color',[1 1 1]);
[x,y]=meshgrid(-5:0.1:5,-5:0.1:5);
z = x.^2+y.^2-10*cos(2*pi*x)-10*cos(2*pi*y)+20;
mesh(x,y,z);
%% 设置种群参数
N=60; %种群规模
M=100; %最大迭代次数
D=2; %粒子搜索空间维数
w=0.729; %惯性权重
c1=2; %认知学习因子
c2=2; %社会学习因子
popmax=5; %粒子最大位置
popmin=-5; %粒子最小位置
vmax=1; %粒子最大运动速度
vmin=-1; %粒子最小运动速度
%% 初始化种群
for i=1:N
    for j=1:D
        pop(i,j)=5*rands(1); %初始化粒子位置
        v(i,j)=rands(1); %初始化粒子速度
    end
end
pg=pop(1,:); 
for i=2:N
    if fitness(pop(i,:))>fitness(pg)
        pg=pop(i,:); %pg为全局最优粒子的位置
        fpg=fitness(pg); %fpg为全局最优粒子对应的适应值
    end
end    

结果如下:

a24e2d0e5b0fe6dda4ebd9959618b8af.png

开始迭代寻优过程,得出结果

73e373c52349bd5b686447dc1aa33acb.png

下图为粒子的适应度变化曲线

aae5731a6c6724477bd203b54aa34f50.png

3 结束语

PSO算法是一类不确定算法,不确定性体现了自然界生物的生物机制,并且在求解某些特定问题方面优于确定性算法;同时它也是是一类概率型的全局优化算法其优点在于算法能有更多机会求解全局最优解。它不依赖于优化问题本身的严格数学性质,是一种基于多个智能体的仿生优化算法。该算法物理概念明确,收敛性好。但也存在易陷入局部最优、参数依赖性大等不足。

MATLAB通信仿真及应用实例详解pdf-MATLAB通信仿真及应用实例详解.part2.rar 未命名.JPG 作者:邓华 编著 出版社:人民邮电出版社 出版日期:2003-09-01 内容简介 本书着重介绍了MATLAB在通信仿真,尤其是移动通信仿真中的应用,通过丰富具体的实例来加深读者对通信系统仿真的理解和掌握。 全书共分10章,前3章介绍MATLAB通信仿真的基础,包括Simulink和S-函数;第4~8章分别介绍了信源和信宿、信道传输、信源编码、信道编码、信号交织以及信号调制的仿真模块及其仿真实现过程;第9章介绍了在通信系统的仿真和调试过程中经常遇到的问题及其解决办法;最后,第10章以cdma 2000为例介绍了移动通信系统的设计和仿真。 本书适用于通信行业的大专院校学生和研究人员,既可以作为初学者的入门教材,也可以用作中高级读者和研究人员的速查手册。 第1章  MATLAB与通信仿真 1 1.1  MATLAB简介 1 1.1.1  MATLAB集成开发环境 2 1.1.2  MATLAB编程语言 6 1.2  通信仿真 8 1.2.1  通信仿真的概念 8 1.2.2  通信仿真的一般步骤 9 第2章  Simulink入门 12 2.1  Simulink简介 12 2.2  Simulink工作环境 13 2.2.1  Simulink模型库 13 2.2.2  设计仿真模型 14 2.2.3  运行仿真 14 2.2.4  建立子系统 15 2.2.5  封装子系统 17 2.3  Simulink模型库 20 第3章  S-函数 23 3.1  S-函数简介 23 3.1.1  S-函数的工作原理 23 3.1.2  S-函数基本概念 24 3.2  M文件S-函数 26 3.2.1  M文件S-函数简介 26 3.2.2  M文件S-函数的编写示例 30 3.3  C语言S-函数 46 3.3.1  C语言S-函数简介 46 3.3.2  C语言S-函数的编写示例 51 3.4  C 语言S-函数 60 第4章  信源和信宿 66 4.1  信源 66 4.1.1  压控振荡器 66 4.1.2  从文件中读取数据 68 4.1.3  数据源 72 4.1.4  噪声源 78 4.1.5  序列生成器 85 4.1.6  实例4.1--通过压控振荡器实现BFSK调制 99 4.2  信宿 101 4.2.1  示波器 101 4.2.2  错误率统计 103 4.2.3  将结果输出到文件 105 4.2.4  眼图、发散图和轨迹图 108 第5章  信道 116 5.1  加性高斯白噪声信道 116 5.1.1  函数awgn() 116 5.1.2  函数wgn() 118 5.1.3  加性高斯白噪声信道模块 120 5.1.4  实例5.1--BFSK在高斯白噪声信道中的传输性能 122 5.2  二进制对称信道 127 5.2.1  二进制对称信道模块 127 5.2.2  实例5.2--卷积编码器在二进制对称信道中的性能 128 5.3  多径瑞利衰落信道 132 5.3.1  多径瑞利衰落信道模块 132 5.3.2  实例5.3--BFSK在多径瑞利衰落信道中的传输性能 134 5.4  伦琴衰落信道 138 5.4.1  伦琴衰落信道模块 138 5.4.2  实例5.4——BFSK在多径瑞利衰落信道中的传输性能 139 5.5  射频损耗 142 5.5.1  自由空间路径损耗模块 142 5.5.2  接收机热噪声模块 144 5.5.3  相位噪声模块 145 5.5.4  相位/频率偏移模块 146 5.5.5  I/Q支路失衡模块 148 5.5.6  无记忆非线性模块 149 第6章  信源编码 153 6.1  压缩和扩展 153 6.1.1  A律压缩模块 153 6.1.2  A律扩展模块 154 6.1.3  μ律压缩模块 155 6.1.4  μ律扩展模块 156 6.2  量化和编码 157 6.2.1  抽样量化编码器 157 6.2.2  触发式量化编码器 158 6.2.3  量化解码器 159 6.2.4  实例6.1--A律十三折与μ律十五折的量化误差 159 6.3  差分编码 162 6.3.1  差分编码器 162 6.3.2  差分解码器 163 6.4  DPCM编码和解码 164 6.4.1  DP
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页