Hello Mat

 找回密码
 立即注册
查看: 40577|回复: 49

3-基于GA的寻优计算--视频分享

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-1-20 13:24:19 | 显示全部楼层 |阅读模式
3-基于GA的寻优计算:
百度网盘链接:
链接:http://pan.baidu.com/s/1c1VuyUO 密码:2gof

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

GA代码如下:
  1. clc,clear,close all
  2. warning off
  3. tic
  4. popmin = [-1, -1];  % Lb
  5. popmax =[ 1, 1];    % Ub
  6. pc = 0.75;  % 0-1之间
  7. pm = 0.05;   % 0-1之间
  8. nvar = 2;   % 2个未知数
  9. itermax = 30; % 迭代次数
  10. sizepop = 30; % 种群
  11. % 初始化种群
  12. for i=1:sizepop
  13.     pop(i,:) = code(popmin,popmax);    % 实数编码
  14.     fitness(i) = fun(pop(i,:));        % 目标函数值
  15. end
  16. [bestfitness,index] = min(fitness); % 极小值
  17. zbest = pop(index,:);        % 最佳个体
  18. fitnessgbest = fitness;      % 个体最优
  19. gbest = pop;                 % 最优种群
  20. fitnesszbest = bestfitness;  % 全局最优
  21. %% 迭代寻优
  22. for i=1:itermax
  23.     % 选择算子
  24.     pop = select(sizepop,pop,fitness,popmin,popmax);
  25.     % 交叉算子
  26.     pop = cross(sizepop,pc,pop,popmin,popmax);
  27.     % 变异
  28.     pop = mut(sizepop,pm,pop,popmin,popmax);
  29.    
  30.     for j=1:sizepop
  31.         fitness(j) = fun( pop(j,:) );   % 计算适应度值
  32.         if fitness(j)< fitnessgbest(j)
  33.             fitnessgbest(j) = fitness(j);
  34.             gbest(j,:) = pop(j,:);
  35.         end
  36.         if fitness(j)<fitnesszbest
  37.             fitnesszbest = fitness(j);
  38.             zbest = pop(j,:);
  39.         end
  40.     end
  41.     fitness_iter(i) = fitnesszbest;
  42. end
  43. figure,
  44. plot(fitness_iter,'ro-','linewidth',2)
  45. toc
  46. disp(['最优解   ', num2str(zbest)] )
复制代码
选择算子:
  1. function pop = select(sizepop,pop,fitness,popmin,popmax)
  2. [a, b] = sort(fitness,'descend');
  3. c = floor(sizepop/4);
  4. % 替换了最差的个体,保留了精英种群
  5. for i=1:c
  6.     pop(b(i),:) = popmin + rand(1,2).*(popmax-popmin);
  7. end
复制代码
变异算子
  1. function pop = mut(sizepop,pm,pop,popmin,popmax)
  2. for j = 1:sizepop*2
  3.     if rand>pm
  4.         a=0;
  5.         while a==0
  6.             a = floor(rand*sizepop);
  7.         end
  8.         b = pop(a,:);
  9.         if rand>0.5
  10.             pop(a,:) = pop(a,:) + rand(1,2).* (popmax-pop(a,:));
  11.         else
  12.             pop(a,:) = pop(a,:) + rand(1,2).* (popmin-pop(a,:));
  13.         end
  14.         
  15.         flag2 = test( pop(a,:),popmin,popmax );
  16.         if flag2==1   % 不可行
  17.             pop(a,:) = b;
  18.         end
  19.         
  20.     end
  21. end
复制代码
交叉算子:
  1. function pop = cross(sizepop,pc,pop,popmin,popmax)
  2. for j=1:sizepop*2
  3.     if rand>pc
  4.         a = [0,0];
  5.         while min(a)==0
  6.             a = floor( rand(1,2)*sizepop );
  7.         end
  8.         k = rand;
  9.         pop1 =  pop(a(1),:) ;
  10.         pop2 =  pop(a(2),:) ;
  11.         pop(a(1),:) = (1-k)*pop1+k*pop2;
  12.         pop(a(2),:) = (1-k)*pop2+k*pop1;
  13.         
  14.         flag1 = test( pop(a(1),:) ,popmin,popmax);
  15.         if flag1==1   % 不可行
  16.             pop(a(1),:) = pop1;
  17.         end
  18.         flag2 = test( pop(a(2),:) ,popmin,popmax);
  19.         if flag2==1   % 不可行
  20.             pop(a(2),:) = pop2;
  21.         end
  22.         
  23.     end
  24. end
复制代码
编码:
  1. function pop = code(popmin,popmax)
  2. flag =1;
  3. while flag==1
  4.     pop = popmin + rand(1,2).*(popmax-popmin);  % 实数编码
  5.     % 检验染色体的可行性
  6.     flag = test(pop,popmin,popmax);
  7. end
复制代码
校验:
  1. function flag = test(pop,popmin,popmax)

  2. % 检验染色体的可行性
  3. if pop(1)<popmin(1) || pop(1)>popmax(1) || pop(2)<popmin(2) || pop(2)>popmax(2)
  4.     flag = 1;  % 不可行
  5. else
  6.     flag = 0;  % 可行
  7. end
复制代码

案例分享:
【1】遗传算法GA  在MacroFemtocell异构网络基于能效优化的子载波分配


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

使用道具 举报

0

主题

13

帖子

15

金钱

新手上路

Rank: 1

积分
28
发表于 2017-2-13 05:18:09 | 显示全部楼层
太棒了!{:2_25:}
回复

使用道具 举报

0

主题

1

帖子

8

金钱

新手上路

Rank: 1

积分
9
发表于 2017-2-22 23:11:47 | 显示全部楼层
谢谢分享{:2_25:}
回复

使用道具 举报

0

主题

12

帖子

1

金钱

新手上路

Rank: 1

积分
13
发表于 2017-2-26 18:11:54 | 显示全部楼层
呃呃呃呃呃呃呃呃呃鹅鹅鹅鹅鹅鹅饿
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

金钱

新手上路

Rank: 1

积分
2
发表于 2017-3-3 19:30:29 | 显示全部楼层
谢谢楼主,谢谢分享!!!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

9

金钱

新手上路

Rank: 1

积分
11
发表于 2017-3-15 18:37:22 | 显示全部楼层
顶一下,支持一下楼主
回复 支持 反对

使用道具 举报

0

主题

2

帖子

4

金钱

新手上路

Rank: 1

积分
6
发表于 2017-3-16 10:36:58 | 显示全部楼层
支持以下楼主
回复 支持 反对

使用道具 举报

0

主题

2

帖子

7

金钱

新手上路

Rank: 1

积分
9
发表于 2017-3-17 11:35:05 | 显示全部楼层
视频可以下载吗?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

3

金钱

新手上路

Rank: 1

积分
4
发表于 2017-3-17 19:03:10 | 显示全部楼层
支持您!谢谢
回复 支持 反对

使用道具 举报

0

主题

5

帖子

1

金钱

新手上路

Rank: 1

积分
6
发表于 2017-3-19 22:20:40 | 显示全部楼层
感谢分享,给力
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 08:45 , Processed in 0.232549 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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