请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5052|回复: 7

58-带罚函数的自适应粒子群算法

[复制链接]

796

主题

941

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30147
发表于 2017-11-30 00:01:32 | 显示全部楼层 |阅读模式
百度网盘链接:
视频讲解链接:https://pan.baidu.com/s/1Xs--i-MwTU-_YUchq-iPPQ
https://pan.baidu.com/s/1xVCDEpAM2QXjC2Mvy5LdgA

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


带罚函数的自适应粒子群算法:简单示例,
  1. % 改进的快速粒子群优化算法 (APSO):
  2. function apso

  3. Lb=[0.1 0.1  0.1  0.1]; %下边界
  4. Ub=[2.0 10.0 10.0 2.0]; %上边界
  5. % 默认参数
  6. para=[25 150 0.95]; %[粒子数,迭代次数,gama参数]

  7. % APSO 优化求解函数
  8. [gbest,fmin]=pso_mincon(@cost,@constraint,Lb,Ub,para);

  9. % 输出结果
  10. Bestsolution=gbest % 全局最优个体
  11. fmin

  12. %% 目标函数
  13. function f=cost(x)
  14. f=1.10471*x(1)^2*x(2)+0.04811*x(3)*x(4)*(14.0+x(2));

  15. % 非线性约束
  16. function [g,geq]=constraint(x)
  17. % 不等式限制条件
  18. Q=6000*(14+x(2)/2);
  19. D=sqrt(x(2)^2/4+(x(1)+x(3))^2/4);
  20. J=2*(x(1)*x(2)*sqrt(2)*(x(2)^2/12+(x(1)+x(3))^2/4));
  21. alpha=6000/(sqrt(2)*x(1)*x(2));
  22. beta=Q*D/J;
  23. tau=sqrt(alpha^2+2*alpha*beta*x(2)/(2*D)+beta^2);
  24. sigma=504000/(x(4)*x(3)^2);
  25. delta=65856000/(30*10^6*x(4)*x(3)^3);
  26. F=4.013*(30*10^6)/196*sqrt(x(3)^2*x(4)^6/36)*(1-x(3)*sqrt(30/48)/28);

  27. g(1)=tau-13600;
  28. g(2)=sigma-30000;
  29. g(3)=x(1)-x(4);
  30. g(4)=0.10471*x(1)^2+0.04811*x(3)*x(4)*(14+x(2))-5.0;
  31. g(5)=0.125-x(1);
  32. g(6)=delta-0.25;
  33. g(7)=6000-F;
  34. % 如果没有等式约束,则置geq=[];
  35. geq=[];

  36. %%  APSO Solver
  37. function [gbest,fbest]=pso_mincon(fhandle,fnonlin,Lb,Ub,para)
  38. if nargin<=4,
  39.     para=[20 150 0.95];
  40. end
  41. n=para(1);% 粒子种群大小
  42. time=para(2); %时间步长,迭代次数
  43. gamma=para(3); %gama参数
  44. scale=abs(Ub-Lb); %取值区间
  45. % 验证约束条件是否合乎条件
  46. if abs(length(Lb)-length(Ub))>0,
  47.     disp('Constraints must have equal size');
  48.     return
  49. end

  50.   alpha=0.2; % alpha=[0,1]粒子随机衰减因子
  51.   beta=0.5;  % 收敛速度(0->1)=(slow->fast);

  52. % 初始化粒子群
  53. best=init_pso(n,Lb,Ub);

  54. fbest=1.0e+100;
  55. % 迭代开始
  56. for t=1:time,     
  57.    
  58. %寻找全局最优个体
  59.   for i=1:n,   
  60.     fval=Fun(fhandle,fnonlin,best(i,:));
  61.     % 更新最有个体
  62.     if fval<=fbest,
  63.         gbest=best(i,:);
  64.         fbest=fval;
  65.     end
  66.         
  67.   end

  68. % 随机性衰减因子
  69. alpha=newPara(alpha,gamma);

  70. % 更新粒子位置
  71.   best=pso_move(best,gbest,alpha,beta,Lb,Ub);  

  72. % 结果显示
  73.         str=strcat('Best estimates: gbest=',num2str(gbest));
  74.         str=strcat(str,'  iteration='); str=strcat(str,num2str(t));
  75.         disp(str);

  76.     fitness1(t)=fbest;
  77.     plot(fitness1,'r','Linewidth',2)
  78.     grid on
  79.     hold on
  80.     title('适应度')
  81. end

  82. % 初始化粒子函数
  83. function [guess]=init_pso(n,Lb,Ub)
  84. ndim=length(Lb);
  85. for i=1:n,
  86.     guess(i,1:ndim)=Lb+rand(1,ndim).*(Ub-Lb);
  87. end

  88. %更新所有的粒子 toward (xo,yo)
  89. function ns=pso_move(best,gbest,alpha,beta,Lb,Ub)
  90. % 增加粒子在上下边界区间内的随机性
  91. n=size(best,1); ndim=size(best,2);
  92. scale=(Ub-Lb);
  93. for i=1:n,
  94.     ns(i,:)=best(i,:)+beta*(gbest-best(i,:))+alpha.*randn(1,ndim).*scale;
  95. end
  96. ns=findrange(ns,Lb,Ub);

  97. % 边界函数
  98. function ns=findrange(ns,Lb,Ub)
  99. n=length(ns);
  100. for i=1:n,
  101.   % 下边界约束
  102.   ns_tmp=ns(i,:);
  103.   I=ns_tmp<Lb;
  104.   ns_tmp(I)=Lb(I);
  105.   
  106.   % 上边界约束
  107.   J=ns_tmp>Ub;
  108.   ns_tmp(J)=Ub(J);
  109.   
  110.   %更新粒子
  111.   ns(i,:)=ns_tmp;
  112. end

  113. % 随机性衰减因子
  114. function alpha=newPara(alpha,gamma);
  115. alpha=alpha*gamma;

  116. % 带约束的d维目标函数的求解
  117. function z=Fun(fhandle,fnonlin,u)
  118. % 目标
  119. z=fhandle(u);

  120. z=z+getconstraints(fnonlin,u); % 非线性约束

  121. function Z=getconstraints(fnonlin,u)
  122. % 罚常数 >> 1
  123. PEN=10^15;
  124. lam=PEN; lameq=PEN;

  125. Z=0;
  126. % 非线性约束
  127. [g,geq]=fnonlin(u);

  128. %通过不等式约束建立罚函数
  129. for k=1:length(g),
  130.     Z=Z+ lam*g(k)^2*getH(g(k));
  131. end
  132. % 等式条件约束
  133. for k=1:length(geq),
  134.    Z=Z+lameq*geq(k)^2*geteqH(geq(k));
  135. end

  136. % Test if inequalities
  137. function H=getH(g)
  138. if g<=0,
  139.     H=0;
  140. else
  141.     H=1;
  142. end

  143. % Test if equalities hold
  144. function H=geteqH(g)
  145. if g==0,
  146.     H=0;
  147. else
  148.     H=1;
  149. end
复制代码
参考:
《MATLAB优化算法案例分析与应用》第13章(有约束函数极值APSO寻优)
《MATLAB优化算法案例分析与应用(进阶篇)》第18章(汽车动力传动参数优化设计)





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

使用道具 举报

1

主题

7

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2017-12-1 19:34:10 | 显示全部楼层
想问下,这段代码有些地方看不懂,有讲解资料或者视频吗,谢谢
回复 支持 反对

使用道具 举报

796

主题

941

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30147
 楼主| 发表于 2017-12-1 22:24:37 | 显示全部楼层
德帝 发表于 2017-12-1 19:34
想问下,这段代码有些地方看不懂,有讲解资料或者视频吗,谢谢

代码先单步调试看看
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

0

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2018-6-22 21:49:17 | 显示全部楼层
机器码:FF61C512CD36ED7C-0-EB3A9010F521F17C
回复 支持 反对

使用道具 举报

0

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2018-6-22 21:49:38 | 显示全部楼层
机器码:FF61C512CD36ED7C-0-EB3A9010F521F17C
回复 支持 反对

使用道具 举报

0

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2018-6-23 10:56:23 | 显示全部楼层
机器码:FF61C512CD36ED7C-0-EB3A9010F521F17C
回复 支持 反对

使用道具 举报

0

主题

20

帖子

78

积分

注册会员

Rank: 2

积分
78
发表于 2020-2-11 10:16:17 | 显示全部楼层
非常好的学习资源,感谢分享
回复 支持 反对

使用道具 举报

0

主题

20

帖子

78

积分

注册会员

Rank: 2

积分
78
发表于 6 天前 | 显示全部楼层
机器码:FF48E712CD53F57C-0-FF48C202D90BF17C
回复 支持 反对

使用道具 举报

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

本版积分规则

Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2020-2-19 20:51 , Processed in 0.116270 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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