查看: 222|回复: 2|关注: 0

[已解决] 粒子群优化算法调用一个求和函数

[复制链接]

新手

28 麦片

财富积分


050


34

主题

98

帖子

0

最佳答案
clc;
clear all;

h=3;
T1=[1,1,h];
T2=[4,1,h];
T3=[4,4,h];
T4=[1,4,h];
a=[T1(1),T2(1),T3(1),T4(1)];
b=[T1(2),T2(2),T3(2),T4(2)];
d=[1.7967,1.7967,1.7967,1.7967];
%%%%%%%%%%%%%%%%%%%%%%粒子群算法参数初始化%%%%%%%%%%%%%%%%%%%%%%%%%
N=100; %群体粒子个数
D=2;
T=200; %迭代次数
c1=1.5; %学习因子1
c2=1.5; %学习因子2
Wmax=0.8; %惯性权重
Wmin=0.4;
Xmax=5; %位置
Xmin=0;
Vmax=1;
Vmin=-1;
%%%%%%%%%%%%%%%%%%%%%%个体位置和速度初始化%%%%%%%%%%%%%%%%%%%%%%%%%
x=rand(N,D)*(Xmax-Xmin)+Xmin;
v=rand(N,D)*(Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%%%%%%%%%%个体最优值%%%%%%%%%%%%%%%%%%%%%%%%%
p=xp;
pbest=ones(N,1);
for i=1:N
    pbest(i)=func2(x(i,:));
end
%%%%%%%%%%%%%%%%%%%%%%全局最优值%%%%%%%%%%%%%%%%%%%%%%%%%
g=ones(1,D);
gbest=inf;
for i=1:N
    if(pbest(i)<gbest)
        g=p(i,:);
        gbest=pbest(i);
    end
end
gb=ones(1,T);

for i=1:T
    for j=1:N
        if(func2(x(j,:))<pbest(j))
            p(j,:)=x(j,:);
            pbest(j)=func2(x(j,:));
        end
        if(pbest(j)<gbest)
            g=p(j,:);
            gbest=pbest(j);
        end
        w=Wmax-(Wmax-Wmin)*i/T;
        v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
        x(j,:)=x(j,:)+v(j,:);

        for ii=1:D
            if(v(j,ii)>Vmax)|(v(j,ii)<Vmin)
                v(j,ii)=rand*(Vmax-Vmin)+Vmin;
            end
            if(x(j,ii)>Xmax|x(j,ii)<Xmin)
                x(j,ii)=rand*(Xmax-Xmin)+Xmin;
            end
        end
    end
    gb(i)=gbest;
end
g;
gb(end);
figure(1)
plot(gb)
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线')


function value=func2(x)
for n=1:4
    value=sum((sqrt(a(n)-x(1)).^2+(b(n)-x(2)).^2+h.^2)-d(n)).^2)
    if n==4
        break;
    end
end

调用这个函数的时候下标怎么循环,帮忙看一下,运行出错了


微信图片_20200907143346.jpg
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

入门

203 麦片

财富积分


50500


0

主题

471

帖子

41

最佳答案
  • 关注者: 12
发表于 2020-9-7 22:57:09 | 显示全部楼层 |此回复为最佳答案
解答如下
clc;
clear all;
global a b d h
h=3;
T1=[1,1,h];
T2=[4,1,h];
T3=[4,4,h];
T4=[1,4,h];
a=[T1(1),T2(1),T3(1),T4(1)];
b=[T1(2),T2(2),T3(2),T4(2)];
d=[1.7967,1.7967,1.7967,1.7967];
%%%%%%%%%%%%%%%%%%%%%%粒子群算法参数初始化%%%%%%%%%%%%%%%%%%%%%%%%%
N=100; %群体粒子个数
D=2;
T=200; %迭代次数
c1=1.5; %学习因子1
c2=1.5; %学习因子2
Wmax=0.8; %惯性权重
Wmin=0.4;
Xmax=5; %位置
Xmin=0;
Vmax=1;
Vmin=-1;
%%%%%%%%%%%%%%%%%%%%%%个体位置和速度初始化%%%%%%%%%%%%%%%%%%%%%%%%%
x=rand(N,D)*(Xmax-Xmin)+Xmin;
v=rand(N,D)*(Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%%%%%%%%%%个体最优值%%%%%%%%%%%%%%%%%%%%%%%%%
p=x;
pbest=ones(N,1);
for i=1:N
    pbest(i)=func2(x(i,:));
end
%%%%%%%%%%%%%%%%%%%%%%全局最优值%%%%%%%%%%%%%%%%%%%%%%%%%
g=ones(1,D);
gbest=inf;
for i=1:N
    if(pbest(i)<gbest)
        g=p(i,:);
        gbest=pbest(i);
    end
end
gb=ones(1,T);

for i=1:T
    for j=1:N
        if(func2(x(j,:))<pbest(j))
            p(j,:)=x(j,:);
            pbest(j)=func2(x(j,:));
        end
        if(pbest(j)<gbest)
            g=p(j,:);
            gbest=pbest(j);
        end
        w=Wmax-(Wmax-Wmin)*i/T;
        v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
        x(j,:)=x(j,:)+v(j,:);

        for ii=1:D
            if(v(j,ii)>Vmax)|(v(j,ii)<Vmin)
                v(j,ii)=rand*(Vmax-Vmin)+Vmin;
            end
            if(x(j,ii)>Xmax|x(j,ii)<Xmin)
                x(j,ii)=rand*(Xmax-Xmin)+Xmin;
            end
        end
    end
    gb(i)=gbest;
end
g;
gb(end);
figure(1)
plot(gb)
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线')


function value=func2(x)
global a b d h
value=0;
for n=1:4
    value=value+(sqrt( (a(n)-x(1)).^2+(b(n)-x(2)).^2+h.^2)-d(n).^2)
end
end
回复此楼 已获打赏: 0 积分

举报

新手

28 麦片

财富积分


050


34

主题

98

帖子

0

最佳答案
 楼主| 发表于 2020-9-8 11:00:38 | 显示全部楼层
wjb986555360 发表于 2020-9-7 22:57
解答如下
clc;
clear all;

已解决 非常感谢
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表