matlab 粒子群应用,粒子群算法程序应用

问题在x=randi(N,D),你到底是要x=rand(N,D)还是其他的变量条件

clear all;

close all;

clc;

N = 100;

D = 20;

T = 200;

c1 = 1.5;

c2 = 1.5;

Wmax = 0.8;

Wmin = 0.4;

Xs = 9;

Xx = 0;

Vmax = 10;

Vmin = -10;

x = rand(N,D)

v = rand(N,D)*(Vmax-Vmin)+Vmin;

p = x;

pbest = ones(N,1);

for i = 1:N

pbest(i) = func3(x(i,:),Xs,Xx);

end

g = ones(1,D);

gbest = inf;

for i = 1:N

if (pbest(i)

g = p(i,:);

gbest = pbest(i);

end

end

gb = ones(1,T);

for i = 1:T

for j = 1:N

if (func3(x(j,:),Xs,Xx)

p(j,:) = x(j,:);

pbest(j) = func3(x(j,:),Xs,Xx);

end

if (pbest(j)

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,:));

for ii = 1:D

if (v(j,ii)>Vmax) || (v(j,ii)

v(j,ii) = rand*(Vmax-Vmin)+Vmin;

end

end

vx(j,:) = 1./(1+exp(-v(j,:)));

for jj = 1:D

if vx(j,jj)>rand

x(j,jj)=1;

else

x(j,jj)=0;

end

end

end

gb(i)=gbest;

end

g;

m=0;

for j=1:D

m=g(j)*2^(j-1)+m;

end

f1=Xx+m*(Xs-Xx)/(2^D-1);

figure

plot(gb)

xlabel('迭代次数');

ylabel('适应度值');

title('适应度进化曲线')

function result = func3(x,Xs,Xx)

m=0;

D=length(x);

for j=1:D

m=x(j)*2^(j-1)+m;

end

f=Xx+m*(Xs-Xx)/(2^D-1);

fit=f+6*sin(4*f)+9*cos(5*f);

result=fit;

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值