Halcom 发表于 2017-1-20 19:55:44

12万有引力定律算法函数优化--视频分享

12万有引力定律算法函数优化--视频分享
链接:http://pan.baidu.com/s/1o8HIehW 密码:0bnz

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
具体的代码如下:
clc,clear,close all
warning off
format longG
% 万有引力定律算法
% GSA 参数
G0 = 100;
a = 20;
Vmin = -1;
Vmax = 1;
maxiter = 200;% 迭代次数
sizepop = 20;% 种群数量
popmin1 = -1;popmax1 = 1; % x1
popmin2 = -1;popmax2 = 1; % x2
% 初始化种群
for i=1:sizepop
    x1 = popmin1 + (popmax1-popmin1)*rand;
    x2 = popmin2 + (popmax2-popmin2)*rand;
    pop(i,1) = x1;
    pop(i,2) = x2;
    fitness(i) = fun();
end
% 记录一组最优值
=min(fitness);
zbest=pop(bestindex,:);   % 全局最佳
gbest=pop;                % 个体最佳
fitnessgbest=fitness;   % 个体最佳适应度值
fitnesszbest=bestfitness; % 全局最佳适应度值
V = ;
% 迭代寻优
for i=1:maxiter
   
    Gt = G0*exp(-a*i/maxiter);      % 万有引力定律常数
   
    = sort(fitness); % 从小到大排序
    for j=1:sizepop
      mt(j) = (fitness(j)-mfitness(end))./(mfitness(1)-mfitness(end)+eps);
    end
   
    for j=1:sizepop
      Mt = abs(mt(j))./sum(abs(mt))+eps;
      Rij = norm( pop(j,:)-gbest(j,:) ) +eps;
      Fij = rand(1,2).*( Gt*Mt*Mt/(Rij+eps) .*(pop(j,:)-gbest(j,:)+eps ) );
      Va = Fij./Mt;
      
      % 速度更新
      V = rand(1,2).*V - Va;
      % V--x1
      if V(1,1)>Vmax
            V(1,1)=Vmax;
      end
      if V(1,1)<Vmin
            V(1,1)=Vmin;
      end
      % V--x2
      if V(1,2)>Vmax
            V(1,2)=Vmax;
      end
      if V(1,2)<Vmin
            V(1,2)=Vmin;
      end
      
      % 位置更新
      pop(j,:) = pop(j,:) + V;
      % x1越界限制
      if pop(j,1)>popmax1
            pop(j,1)=popmax1;
      end
      if pop(j,1)<popmin1
            pop(j,1)=popmin1;
      end
      % x2越界限制
      if pop(j,2)>popmax2
            pop(j,2)=popmax2;
      end
      if pop(j,2)<popmin2
            pop(j,2)=popmin2;
      end
      
      % 适应度更新
      fitness(j) = fun(pop(j,:));
      
      % 比较个体间比较
      if fitness(j)<fitnessgbest(j)
            fitnessgbest(j) = fitness(j);
            gbest(j,:) = pop(j,:);
      end
      if fitness(j)<bestfitness
            bestfitness = fitness(j);
            zbest =pop(j,:);
      end
    end
    fitness_iter(i) = bestfitness;
end
disp('最优解')
disp(zbest)
fprintf('\n')

figure('color',)
plot(fitness_iter,'ro-','linewidth',2)

figure('color',)
loglog(fitness_iter,'ro-','linewidth',2)
axis tight
grid on






lelouch 发表于 2017-2-10 22:00:33

多谢楼主多谢多谢

huwenping 发表于 2017-3-23 00:47:37

没注意到还有这个算法,学习。

wal1985 发表于 2017-5-2 14:56:39

感谢群主,谢谢

mzch 发表于 2017-5-8 11:28:53


多谢楼主多谢多谢

jiaonong1 发表于 2017-5-26 16:32:58

谢谢楼主,非常好的讲解

zheng 发表于 2017-5-29 14:28:50

我想知道密码

HXCS 发表于 2017-6-6 21:59:14

学习一下代码实现,谢谢分享。

小回收 发表于 2017-7-8 10:09:23

万有引力算法,想学习一下

lancelotli 发表于 2017-7-14 16:37:23

谢谢余少,辛苦了。强力顶
页: [1] 2
查看完整版本: 12万有引力定律算法函数优化--视频分享