Hello Mat

 找回密码
 立即注册
查看: 10854|回复: 8

31禁忌搜索算法函数寻优--视频分享

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-2-22 19:18:16 | 显示全部楼层 |阅读模式
禁忌搜索算法函数寻优
百度网盘链接:链接:http://pan.baidu.com/s/1o8K2c4M 密码:9bss
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
代码如下:
  1. function bestsofar=ts(x0)
  2. %%禁忌算法部分,是用来求最大值
  3. %%产生五个领域点
  4. %%bestsofar,保存到目前为止最优值
  5. %%candidate,保存候选解
  6. %%xnow,当前解
  7. xu=6;%上界
  8. xl=-6;%下界
  9. L=randi([6 13]);%%禁忌长度6,13之间的随机数
  10. Gmax=200;%%禁忌算法的最大迭代次数;
  11. Gm=80;
  12. scale=1;
  13. %%把禁忌表设成队列形式
  14. tabu=[];%%禁忌表
  15. %%把初始解赋给目前最优解,把初始解赋给当前解
  16. bestsofar.label=x0;
  17. xnow(1).label=x0;
  18. bestsofar.value=fitvalue(bestsofar.label);%%有遗传算法算出的子种群最优个体适应值
  19. xnow(1).value=fitvalue(xnow(1).label);%%当前解的适应度值
  20. g=1;
  21. while g<Gmax
  22.     x_near=[];
  23.     scale=scale*0.998;
  24. %%用当前解,产生五个领域点
  25. for i=1:5
  26.     x_temp=xnow(g).label;
  27.     x1=x_temp(1);
  28.     x2=x_temp(2);
  29.     if g<Gm
  30.     x_near(i,1)=x1+(2*rand-1)*scale*(xu-xl);
  31.     x_near(i,1)=adjust(x_near(i,1));%%做调整
  32.     x_near(i,2)=x2+(2*rand-1)*scale*(xu-xl);
  33.     x_near(i,2)=adjust(x_near(i,2));%%做调整
  34.     else
  35.     k1=randi([1,2]);
  36.     x_near(i,k1)=x_temp(k1)+(2*rand-1)*scale*(xu-xl);
  37.     x_near(i,k1)=adjust(x_near(i,k1));%%做调整
  38.     k2=setxor([1,2],k1);%%返回不在[1,2]和k1交集的元素
  39.     x_near(i,k2)=x_temp(k2);
  40.     x_near(i,k2)=adjust(x_near(i,k2));
  41.     end
  42.     fitvalue_near(i)=fitvalue(x_near(i,:)); %%计算领域点的适应值
  43. end
  44. temp=find(fitvalue_near==max(fitvalue_near));
  45. candidate(g).label=x_near(temp,:);%%候选解,候选解是领域集合里面的最优解
  46. candidate(g).value=fitvalue(candidate(g).label);%%候选解的适应度值


  47. delta1=candidate(g).value-xnow(g).value; %%候选解和目前最优解的评价函数差
  48. delta2=candidate(g).value-bestsofar.value;     %%候选解和当前解的评价函数差

  49. if delta1<=0   %%说明候选解并没有改进解,把候选解赋给下一次迭代的当前解,当候选解比当前解优时,称候选解为改进解
  50.     xnow(g+1).label=candidate(g).label;
  51.     xnow(g+1).value=fitvalue(xnow(g).label);
  52.     tabu=[tabu;xnow(g+1).label];%%更新禁忌表
  53.     if size(tabu,1)>L  %%禁忌表里的元素比L多时,把最先进去的元素移出禁忌表
  54.         tabu(1,:)=[];
  55.     end
  56.     g=g+1;%%更新禁忌表后,迭代次数自增1
  57. else %%如果相对于当前解有改进,则应与目前最优解比较
  58.     if delta2>0  %%说明候选解比目前最优解优
  59.      %%把改进解(候选解)赋给下一次迭代的当前解
  60.      xnow(g+1).label=candidate(g).label;
  61.      xnow(g+1).value=fitvalue(xnow(g+1).label);
  62.      tabu=[tabu;xnow(g+1).label];%%更新禁忌表
  63.     if size(tabu,1)>L  %%禁忌表里的元素比L多时,把最先进去的元素移出禁忌表
  64.         tabu(1,:)=[];
  65.     end
  66.    
  67.      %%把改进解(候选解)赋给下一次迭代的目前最优解,此处包含了藐视法则
  68.      bestsofar.label=candidate(g).label;
  69.      bestsofar.value=fitvalue(bestsofar.label);
  70.      g=g+1;%%更新禁忌表后,迭代次数自增1
  71.     %%把改进解(候选解)赋给下一次迭代的目前最优解,此处包含了藐视法则
  72.     else
  73.        if  judge(candidate(g).label,tabu)==0 %%判断改进解(候选解)时候在禁忌表里,0表示不在,1表示在
  74.        %%改进解不在禁忌表里,把改进解(候选解)赋给下一次迭代的当前解
  75.        xnow(g+1).label=candidate(g).label;
  76.        xnow(g+1).value=fitvalue(xnow(g+1).label);  
  77.        tabu=[tabu;xnow(g).label];%%更新禁忌表
  78.     if size(tabu,1)>L  %%禁忌表里的元素比L多时,把最先进去的元素移出禁忌表
  79.         tabu(1,:)=[];
  80.     end
  81.        g=g+1;%%更新禁忌表后,迭代次数自增1
  82.         else
  83.        %%如果改进解在禁忌表里,用当前解重新产生领域点,寻找候选解
  84.         xnow(g).label=xnow(g).label;
  85.         xnow(g).value=fitvalue(xnow(g).label);
  86.        end
  87.     end
  88. end            
  89. end
复制代码





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

使用道具 举报

0

主题

7

帖子

1

金钱

新手上路

Rank: 1

积分
8
发表于 2017-2-23 19:13:08 | 显示全部楼层
haohoahoahaohaoahoa
回复 支持 反对

使用道具 举报

0

主题

12

帖子

1

金钱

新手上路

Rank: 1

积分
13
发表于 2017-2-25 20:36:47 | 显示全部楼层
好好,非常好。
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

金钱

注册会员

Rank: 2

积分
50
发表于 2017-3-24 23:33:11 | 显示全部楼层
禁忌搜索算法,多谢分享。
回复 支持 反对

使用道具 举报

0

主题

27

帖子

1

金钱

新手上路

Rank: 1

积分
28
发表于 2017-4-30 22:32:37 | 显示全部楼层
函数优化的禁忌搜索
回复 支持 反对

使用道具 举报

0

主题

27

帖子

1

金钱

新手上路

Rank: 1

积分
28
发表于 2017-5-1 19:47:22 | 显示全部楼层
我要程序送达
回复 支持 反对

使用道具 举报

0

主题

8

帖子

12

金钱

新手上路

Rank: 1

积分
20
发表于 2017-9-19 21:34:38 | 显示全部楼层
学习一下,谢谢分享~
回复 支持 反对

使用道具 举报

0

主题

5

帖子

1

金钱

新手上路

Rank: 1

积分
6
QQ
发表于 2020-7-14 20:58:53 | 显示全部楼层
好详细的介绍,学习到了,不过根据的相关公式能否提供呢
回复 支持 反对

使用道具 举报

0

主题

5

帖子

1

金钱

新手上路

Rank: 1

积分
6
QQ
发表于 2020-7-14 21:18:58 | 显示全部楼层
禁忌搜索在路径选择时也是一个很好的方法
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 08:50 , Processed in 0.245231 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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