本期内容共包含2816种改进方案,配合5个群体智能优化算法,实现1万多个改进算法的生成。
:::
我们将算法的通用改进策略进行了总结,分别是【头部混沌变异】、【身体融合变异】以及【尾部拼接变异】,在代码中的编号对应情况见下表。这些改进方案进行组合数量为:11✖16✖16=2816,即存在2816种改进策略。
下面依次进行介绍:
群体智能算法在各种优化问题中找到了广泛的应用。然而,固定的初始化策略可能限制了这些算法的性能。为了增强搜索能力和寻优性能, 许多混沌映射作为初始化方法被引入到群体智能算法中。使用混沌映射初始化群体智能算法具有多个优点:
总的来说,混沌映射为群体智能算法提供了一种有效的初始化策略,有助于改进算法的寻优性能。然而,它并非一个万能的解决方案,其效果也会依赖于具体问题的特性。
下面是本套代码包含的10种混沌映射
% N: 种群的个数; dim: 维度; tent: 混沌系数. tent=1.1; %tent混沌系数 Tent=rand(N,dim); for i=1:N for j=2:dim if Tent(i,j-1)=tent Tent(i,j)=(1-Tent(i,j-1))/(1-tent); end end end
miu=2; %混沌系数 Logistic=rand(N,dim); for i=1:N for j=2:dim Logistic(i,j)=miu.* Logistic(i,j-1).*(1-Logistic(i,j-1)); end end
cubic=2.59; Cubic=rand(N,dim); for i=1:N for j=2:dim Cubic(i,j)=cubic.*Cubic(i,j-1).*(1-Cubic(i,j-1).^2); end end
chebyshev=8; Chebyshev=rand(N,dim); for i=1:N for j=2:dim Chebyshev(i,j)=cos(chebyshev.*acos(Chebyshev(i,j-1))); end end
p=1; Piecewise=rand(N,dim); for i=1:N for j=2:dim if Piecewise(i,j-1)>0&&Piecewise(i,j-1)=p&&Piecewise(i,j-1)<0.5 Piecewise(i,j)=(Piecewise(i,j-1)-p)/(0.5-p); elseif Piecewise(i,j-1)>=0.5&&Piecewise(i,j-1)<1-p Piecewise(i,j)=(1-p-Piecewise(i,j-1))/(0.5-p); elseif Piecewise(i,j-1)>=1-p&&Piecewise(i,j-1)<1 Piecewise(i,j)=(1-Piecewise(i,j-1))/p; end end end
sinusoidal=2; Sinusoidal=rand(N,dim); for i=1:N for j=2:dim Sinusoidal(i,j)=sinusoidal*Sinusoidal(i,j-1).^2*(sin(pi*Sinusoidal(i,j-1))); end end
sine=3.8; Sine=rand(N,dim); for i=1:N for j=2:dim Sine(i,j)=(4/sine)*sin(pi*Sine(i,j-1)); end end
icmic=100; ICMIC=rand(N,dim); for i=1:N for j=2:dim ICMIC(i,j)=sin(icmic/ICMIC(i,j-1)); end end
a = 0.5; b=0.2; Circle=rand(N,dim); for i=1:N for j=2:dim Circle(i,j)=mod(Circle(i,j-1)+a-b/(2*pi)*sin(2*pi*Circle(i,j-1)),1); end end
lammda = 0.4; Bernoulli=rand(N,dim); for i=1:N for j=2:dim if Bernoulli(i,j-1) < 1-lammda Bernoulli(i,j)= Bernoulli(i,j-1)/(1-lammda); else Bernoulli(i,j)= (Bernoulli(i,j-1)-1+lammda)/lammda; end end end
身体融合变异,其实就是将一些变异方式融合进原始算法中,迭代过程中,采用一定的随机策略,或者去执行原算法的位置更新,或者去执行融合的变异策略,伪代码:
for i=1:Particles_no % 种群中每个个体逐一更新位置 if rand < 1-sqrt(Iter/Max_iter) && num ~= 0 % 这里执行是否进行变异的判断 X =integration(X); % 变异 else X=original(X) ; % 不执行变异,采用原始算法更新位置 end end
下面介绍变异方式,代码实现部分在integration.m文件中
以上11种可以用固定公式表达,但下面4种一般并无固定公式,每个人的写法都有可能不一样,具体参考我的代码文件:integration.m
12. 透镜成像反向学习(Lens Imaging Backward Learning):这通常涉及利用某种投影或映射技术,将高维问题空间减少到怦然可管理的维度,并在这个“简化”空间中进行优化。具体的方法会因问题而异,并且没有固定的公式。
13. 纵横交叉(Vertical and Horizontal Crossover):这通常在遗传算法中使用,其中新的解是通过结合两个或更多父解的部分来生成的。如果我们将解视为二维数组,则纵向和横向交叉就意味着我们可以在任何方向上交换部分以创建新的解。同样,它并没有一个精确的公式表示。
14. 动态反向学习(Dynamic Backward Learning): 这是一种策略,其目标是根据求解过程中收集到的信息调整搜索策略。具体实现方式取决于算法的设计者,并没有固定的公式来描述。
15. 随机游走(Random Walk):这是一种简单的随机搜索策略。
这个比【身体融合变异】更容易,就是在每次迭代位置更新结束,再拼接一个变异方式,之后结束迭代即可。变异的15种方法,与【身体融合变异】完全一致。
改进前后对比,采用23个标准测试函数,全部实际跑出来的结果!真实改进效果!选择最难的两个测试函数演示
【测试函数原文:Evolutionary programming made faster IEEE Transactions on Evolutionary Computation ( IF 11.554 ) Pub Date : 1999-07-01 , DOI: 10.1109/4235.771163 】