24小时热门版块排行榜    

查看: 1971  |  回复: 6

离子木木

金虫 (正式写手)

[求助] 以信噪比为适应度函数的自适应粒子群优化算法Matlab Code 修改 已有1人参与

本人最近写了一篇以信噪比为适应度函数的自适应粒子群优化算法Matlab Code,但是运行总是出错误,恳求哪位Matlab大神帮忙看看 修改修改,谢谢。
信噪比SNR适应度函数:
function SNR=fitness(x)
N=20000;
fs=20;
h=1/fs;
T=(0:N-1)*h;
AL=0.1;
fL=0.01;
u=AL*sin(2*pi*fL.*T);
D=0.5;   %噪声强度
ff=fs*(0:N/100-1)/N;
    sz=sqrt(2*D).*randn(1,N);   %产生的白噪声序列
    s=u+sz;         %信号
    xx(1,:)=sr(x(1),x(2),h,s);
Yf=fft(xx(1,:));
P=Yf.*conj(Yf)/N;   %功率谱
    G=sum(P);
    H=P(11);   
    GG=(G-H)/10;
SNR=10*log(H/GG)/log(10);  %以SNR作为适应度函数

非线性微分方程离散并求解的数值算法:
function x=sr(a,b,h,x1)
x=zeros(1,length(x1));
for i=1:length(x1)-1
    k1=h*(x(1)*x(i)-x(2)*x(i).^3+x1(i));
    k2=h*(x(1)*(x(i)+k1/2)-x(2)*(x(i)+k1/2).^3+x1(i));
    k3=h*(x(1)*(x(i)+k2/2)-x(2)*(x(i)+(sqrt(2)-1)*k1/2+(2-sqrt(2))*k2/2).^3+x1(i+1));
    k4=h*(x(1)*(x(i)+k3)-x(2)*(x(i)-sqrt(2)*k2/2+(2+sqrt(2))*k3/2).^3+x1(i+1));
    x(i+1)=x(i)+(1/6)*(k1+(2-sqrt(2))*k2+(2+sqrt(2))*k3+k4);
end

主函数:
clear all;
clc;
format long;
%------给定初始化条件-------------------
c1=2;             %学习因子1
c2=2;             %学习因子2
wmax=0.9;              %惯性权重
wmin=0.6;              %惯性权重
MaxDT=100;            %最大迭代次数
D=2;                  %搜索空间维数(未知数个数)
N=40;                  %初始化群体个体数目
eps=10^(-6);           %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
for i=1:N
    for j=1:D
        x(i,j)=rand(1);  %随机初始化位置
        v(i,j)=rand(1);  %随机初始化速度
    end
end
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg=x(1,:);             %Pg为全局最优
for i=2:N
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end
end
for t=1:MaxDT
    for j=1:N
        fv(j)=fitness(x(j,:));
    end
       fvag=sum(fv)/N;
       fmin=min(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)>1||x(i,1)<0
           x(i,1)=rand(1);
        end
        if x(i,2)>1||x(i,2)<0
           x(i,2)=rand(1);
        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
    Pbest(t)=fitness(pg);
end
%------最后从所得到的结果中取出最优的解
disp('*************************************************************')
disp('函数的全局最优位置为:')
Solution=pg'
disp('最后得到的优化极值为:')
Result=fitness(pg)
disp('*************************************************************')
figure(1)
r=[1:1:100];
plot(r,Pbest,'r--','linewidth',1);
xlabel('迭代次数')
ylabel('适应度值')
title('自适应权重PSO算法')
hold on
Solution=pg'
Result=fitness(pg)
figure(2)
plot(x,'DisplayName','x')
axis([0,40,-5,5])
%------算法结束---DreamSun GL & HF,适应度函数源程序(fitness.m)------------
回复此楼
风吹不倒根深的树
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

浅浅笑兮w

铁虫 (小有名气)

同求,解决了楼主告诉我一声哈。我也在做粒子群算法的仿真,但是始终没做出来。祝你尽快找到解决办法
2楼2016-07-28 19:36:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

离子木木

金虫 (正式写手)

引用回帖:
2楼: Originally posted by 浅浅笑兮w at 2016-07-28 19:36:22
同求,解决了楼主告诉我一声哈。我也在做粒子群算法的仿真,但是始终没做出来。祝你尽快找到解决办法

你做的是什么粒子群?我是自适应权值粒子群优化算法

发自小木虫Android客户端
风吹不倒根深的树
3楼2016-07-29 14:05:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

一方水土

木虫 (小有名气)

【答案】应助回帖

我将你的程序写进去,能够运行啊,你是不是将函数文件名称写错了?
人贵有自知之明
4楼2016-11-01 10:04:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

一方水土

木虫 (小有名气)

【答案】应助回帖

引用回帖:
4楼: Originally posted by 一方水土 at 2016-11-01 10:04:15
我将你的程序写进去,能够运行啊,你是不是将函数文件名称写错了?

这是运行结果
以信噪比为适应度函数的自适应粒子群优化算法Matlab Code 修改
QQ截图20161101100558.jpg

人贵有自知之明
5楼2016-11-01 10:07:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Yimaifanghua

新虫 (初入文坛)

6楼2017-11-03 00:56:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

455227055

新虫 (正式写手)

请问,您最后做出来了没有,我也在做这个,但是结果不是很理想。所以,想请教一下您,我的邮箱455227022@qq.com,希望能交流一下
7楼2017-11-28 20:46:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 离子木木 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金中了 +12 laoda193707 2026-08-06 12/600 2026-08-07 19:16 by zhendaodan
[基金申请] 关于代码变化问题,想知道的进来 +6 且听虎啸 2026-08-07 9/450 2026-08-07 18:40 by naalan7001
[基金申请] 关于filecode +3 布布和一二 2026-08-07 6/300 2026-08-07 17:51 by 医学老男孩
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] filecode与中标关系的预测 +3 布布和一二 2026-08-07 3/150 2026-08-07 15:09 by gltch
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[论文投稿] 十年后又回来了,论文投稿求助 +4 哈哈114477 2026-08-01 4/200 2026-08-07 14:39 by jgy194592
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 7/350 2026-08-07 13:11 by 医学老男孩
[基金申请] 面上再次挂了,太难了,躺也躺不了,倦也卷不过,小学校之殇! +23 低垂的野花 2026-07-31 31/1550 2026-08-07 12:22 by speculiar
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 4/200 2026-08-05 09:59 by lfy8008
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 娱乐 +4 Tide man 2026-08-03 4/200 2026-08-04 11:51 by wgch518
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见