Hello Mat

 找回密码
 立即注册
查看: 19668|回复: 14

40人工蜂群算法ABC的Pareto多目标函数优化--视频讲解

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-3-5 13:31:31 | 显示全部楼层 |阅读模式
40人工蜂群算法ABC的Pareto多目标函数优化--视频讲解
百度网盘链接:http://pan.baidu.com/s/1nuXLb77
参考链接:http://halcom.cn/forum.php?mod=v ... age=1&extra=#pid429
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

具体的代码如下:
  1. % 人工蜂群算法Pareto多目标函数寻优
  2. % ABC算法
  3. clc,clear,close all
  4. warning off
  5. format longG
  6. % web('halcom.cn')
  7. global nObj
  8. nObj = 2;   % 2个目标
  9. nVar = 2;   % 2个未知量
  10. addpath( genpath( './code' ) )
  11. % ABC 参数初始化
  12. maxiter = 100;   % 迭代次数
  13. sizepop = 100;  % 种群数量
  14. popmin1 = -1;  popmax1 = 1; % x1
  15. popmin2 = -1;  popmax2 = 1; % x2
  16. trail(1:sizepop,1) = 0;     % 未找到更优解的迭代次数
  17. limit = sizepop;            % 拖尾最大次数
  18. % Pareto
  19. repository = 50;    % 非支配解种群数量
  20. nGrid=7;            % 每个目标函数解集域的扩展网格大小,单周期数
  21. alpha=0.1;          % 非支配解的解集的扩展因子
  22. beta=2;             % 非支配解的选择因子

  23. % 初始化种群
  24. x.Pos=[];             % 未知量的解
  25. x.fitness=[];         % 粒子适应度值
  26. x.IsDominated=[];        % 是否非支配解,支配解=1, 非支配解=0
  27. x.GridIndex=[];          % 非支配解的网格化参数值-索引总循环数(并排目标函数的序列化内)
  28. x.GridSubIndex=[];       % 每一个非支配解的网格化索引值(扩展取值范围内)
  29. pop=repmat(x,sizepop,1); % 初始化的种群
  30. clear x
  31. for i=1:sizepop
  32.     pop(i).Pos(1) = unifrnd(popmin1,popmax1,1);
  33.     pop(i).Pos(2) = unifrnd(popmin2,popmax2,1);
  34.     % 适应度函数
  35.     pop(i).fitness = fun(pop(i).Pos);
  36. end
  37. % 确定种群之间是否存在支配解
  38. pop=JudgePopDomination(pop);
  39. % 然后获取非支配解
  40. rep=pop(~[pop.IsDominated]);
  41. % 扩展非支配解的适应度函数取值范围
  42. Grid=CreateGrids(rep,nGrid,alpha);
  43. % 计算扩展非支配解的GridIndex
  44. for i=1:numel(rep)
  45.     rep(i)=FindGridIndex(rep(i),Grid);
  46. end

  47. % 迭代寻优
  48. for i=1:maxiter
  49.     % 采蜜峰开始工作
  50.     for j=1:sizepop
  51.         % 选择采蜜的个体
  52.         x2y = randi(2);   % 两个未知数
  53.         % 选择相连的种群
  54.         neighbour = randi(sizepop);  
  55.         % neighbour != j
  56.         while( neighbour==j  )
  57.             neighbour = randi(sizepop);
  58.         end
  59.         
  60.         % 种群更新(解)
  61.         tempx = pop(j).Pos;  % 当前的解
  62.         tempx(x2y) = pop(j).Pos(x2y) + ( pop(j).Pos(x2y)-pop(neighbour).Pos(x2y) )*(rand-0.5)*2;
  63.         
  64.         % 蜜蜂取值范围约束
  65.         tempx(1) = max(tempx(1), popmin1);
  66.         tempx(1) = min(tempx(1), popmax1);
  67.         tempx(2) = max(tempx(2), popmin2);
  68.         tempx(2) = min(tempx(2), popmax2);
  69.         
  70.         % 适应度更新
  71.         temp_fitness = fun( tempx );  % 当前的适应度函数值--目标函数值--最小目标函数值
  72.         
  73.         NewSol.Pos = tempx;
  74.         NewSol.fitness = temp_fitness;
  75.         
  76.         % 是否受支配
  77.         if Domination(NewSol,pop(j))
  78.             pop(j).Pos=NewSol.Pos;
  79.             pop(j).fitness=NewSol.fitness;
  80.         else
  81.             if rand<0.5
  82.                 pop(j).Pos=NewSol.Pos;
  83.                 pop(j).fitness=NewSol.fitness;
  84.             end
  85.         end
  86.     end
  87.    
  88.     fitnessABC=[];
  89.     fitnessABC= [pop.fitness];
  90.     fitnessABC = [reshape(fitnessABC, nObj,sizepop )]';
  91.     % 观察峰
  92.     % 计算概率
  93.     prob = 0.9*sum(fitnessABC,2)./max(sum(fitnessABC,2)) + 0.1;
  94.     for j=1:sizepop
  95.         if(rand<prob(j))
  96.             
  97.             % 选择采蜜的个体
  98.             x2y = randi(2);   % 两个未知数
  99.             % 选择相连的种群
  100.             neighbour = randi(sizepop);  
  101.             % neighbour != j
  102.             while( neighbour==j  )
  103.                 neighbour = randi(sizepop);
  104.             end

  105.             % 种群更新(解)
  106.             tempx = pop(j).Pos;  % 当前的解
  107.             tempx(x2y) = pop(j).Pos(x2y) + ( pop(j).Pos(x2y)-pop(neighbour).Pos(x2y) )*(rand-0.5)*2;

  108.             % 蜜蜂取值范围约束
  109.             tempx(1) = max(tempx(1), popmin1);
  110.             tempx(1) = min(tempx(1), popmax1);
  111.             tempx(2) = max(tempx(2), popmin2);
  112.             tempx(2) = min(tempx(2), popmax2);

  113.             % 适应度更新
  114.             temp_fitness = fun( tempx );  % 当前的适应度函数值--目标函数值--最小目标函数值

  115.             NewSol.Pos = tempx;
  116.             NewSol.fitness = temp_fitness;

  117.             % 是否受支配
  118.             if Domination(NewSol,pop(j))
  119.                 pop(j).Pos=NewSol.Pos;
  120.                 pop(j).fitness=NewSol.fitness;
  121.             else
  122.                 if rand<0.5
  123.                     pop(j).Pos=NewSol.Pos;
  124.                     pop(j).fitness=NewSol.fitness;
  125.                 end
  126.                 trail(j) = trail(j)+1;
  127.             end
  128.         end
  129.     end
  130.    
  131.     % 侦察峰开始工作
  132.     [maxTrial, index] = max(trail);
  133.     index = index(1);
  134.     if(maxTrial(1)>limit)
  135.         pop(index).Pos(1) = unifrnd(popmin1,popmax1,1);
  136.         pop(index).Pos(2) = unifrnd(popmin2,popmax2,1);
  137.         % 适应度函数
  138.         pop(index).fitness = fun(pop(i).Pos);
  139.     end
  140.    
  141.     figure(1);
  142.     Plotfitness2(pop,rep);
  143.     pause(0.001)
  144. end
  145. % 确定种群之间是否存在支配解
  146. pop=JudgePopDomination(pop);
  147. % 增加非支配解
  148. rep =[rep; pop(~[pop.IsDominated])];
  149. rep = uniqueRep(rep);
  150. figure(1);
  151. Plotfitness2(pop,rep);

  152. % 最优结果
  153. for i=1:size( rep,1 )
  154.     zbest_sol(i,:) = rep(i).Pos;
  155.     if i==1
  156.         fprintf('\n')
  157.         disp('ABC多目标计算的第一组结果如下:')
  158.         disp(['x1 = ',num2str(zbest_sol(i,1))])
  159.         disp(['x2 = ',num2str(zbest_sol(i,2))])
  160.         disp(['最优适应度值为  ',num2str([rep(i).fitness]')])
  161.         fprintf('\n')
  162.     else
  163.         disp('ABC多目标计算结果有多个Pareto解集')
  164.     end
  165. end

  166. rmpath(genpath('./code'))
复制代码









算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

50

帖子

0

金钱

注册会员

Rank: 2

积分
50
发表于 2017-3-25 00:05:24 | 显示全部楼层
人工蜂群算法ABC的Pareto多目标函数优化,谢分享!
回复 支持 反对

使用道具 举报

0

主题

27

帖子

1

金钱

新手上路

Rank: 1

积分
28
发表于 2017-5-2 14:49:35 | 显示全部楼层
看看看看看看看
回复 支持 反对

使用道具 举报

0

主题

33

帖子

1

金钱

新手上路

Rank: 1

积分
37
发表于 2017-5-8 11:35:06 | 显示全部楼层
谢谢分享,多谢
回复 支持 反对

使用道具 举报

0

主题

14

帖子

1

金钱

新手上路

Rank: 1

积分
15
发表于 2017-8-2 09:41:29 | 显示全部楼层
很有用,多谢!好人一生平安!
回复 支持 反对

使用道具 举报

3

主题

28

帖子

1

金钱

新手上路

Rank: 1

积分
29
发表于 2017-8-11 11:04:02 | 显示全部楼层
人工蜂群算法ABC的Pareto多目标函数优化,谢分享
回复 支持 反对

使用道具 举报

0

主题

44

帖子

1

金钱

新手上路

Rank: 1

积分
45
发表于 2017-8-12 15:03:02 | 显示全部楼层
蜂群算法ABC的Pareto多目标
回复 支持 反对

使用道具 举报

0

主题

4

帖子

16

金钱

新手上路

Rank: 1

积分
20
发表于 2017-8-18 08:30:30 | 显示全部楼层
谢谢分享!!!!!!!!!!!!!!!!!
回复

使用道具 举报

0

主题

2

帖子

8

金钱

新手上路

Rank: 1

积分
10
发表于 2017-9-22 23:46:07 来自手机 | 显示全部楼层
谢谢楼主,特别有用喜欢
回复 支持 反对

使用道具 举报

0

主题

4

帖子

35

金钱

新手上路

Rank: 1

积分
39
QQ
发表于 2017-10-12 13:14:50 | 显示全部楼层
该算法中 迭代次数maxiter 和 种群数量sizepop  什么关系,为什么当迭代次数>种群数量时,会出现索引越界现象
回复 支持 反对

使用道具 举报

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

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-4-24 07:56 , Processed in 0.233848 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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