fitnessfun matlab,懂PSO算法的大神来~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

程序如下:%% 参数初始化

%粒子群算法中的两个参数

c1 = 1.49445;

c2 = 1.49445; maxgen=100; % 进化次数

sizepop=20; %种群规模 Vmax=1;%速度限制

Vmin=-1;

popmax=5;%种群限制

popmin=-5; %% 产生初始粒子和速度

for i=1:sizepop

%随机产生一个种群

pop(i,:)=5*rands(1,2); %初始种群

V(i,:)=rands(1,2); %初始化速度

%计算适应度

fitness(i)=fun1(pop(i,:)); %染色体的适应度

end %找最好的染色体

=min(fitness);

zbest=pop(bestindex,:); %全局最佳

gbest=pop; %个体最佳

fitnessgbest=fitness; %个体最佳适应度值

fitnesszbest=bestfitness; %全局最佳适应度值 %% 迭代寻优

for i=1:maxgen

for j=1:sizepop

%速度更新

V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));

V(j,find(V(j,:)>Vmax))=Vmax;

V(j,find(V(j,:)

%种群更新

pop(j,:)=pop(j,:)+0.5*V(j,:);

pop(j,find(pop(j,:)>popmax))=popmax;

pop(j,find(pop(j,:)

%自适应变异(避免粒子群算法陷入局部最优)

if rand>0.8

k=ceil(2*rand);%ceil朝正无穷大方向取整

pop(j,k)=rand;

end

%适应度值

fitness(j)=fun1(pop(j,:)); %个体最优更新

if fitness(j) < fitnessgbest(j)

gbest(j,:) = pop(j,:);

fitnessgbest(j) = fitness(j);

end

%群体最优更新

if fitness(j) < fitnesszbest

zbest = pop(j,:);

fitnesszbest = fitness(j);

end

end

yy(i)=fitnesszbest;

end %% 结果分析

plot(yy)

title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);

xlabel('进化代数');ylabel('适应度');

Solution=fitnesszbest

%目标函数

function y=fun1(x,D)

u=2;

y1=0.04*100*(1+0.0001*100)^(-0.5);

z1=0.016*100*(1+0.0003*100)^(-1);

y11=(112.3840-x(1)/(pi*y1*z1*u)*exp(-0.5*(0^2/y1^2+4/z1^2))).^2;

y2=0.04*100*(1+0.0001*100)^(-0.5);

z2=0.016*100*(1+0.0003*100)^(-1);

y22=(99.0546-x(2)/(pi*y2*z2*u)*exp(-0.5*(2^2/y2^2+4/z2^2))).^2;

y=(y11+y22)/2;

得出的结果为 1.120977099889036e+04,而实际应该接近10000,不知哪出了问题,求大神指点~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值