蝙蝠算法
蝙蝠算法
蝙蝠算法是根據蝙蝠的回聲定位特性開發的優化算法。下面為蝙蝠算法的幾個基本規則。
文章考慮了各種參數,在Matlab中對BAT函數進行編碼。
在勘探開發和遺傳算子的一般背景下,我們可以分析標準BA主要組成部分的作用。從本質上說,頻率調整本質上就像是突變,因為它主要起局部開發作用。然而,如果突變足夠大,它也可以導致全局搜索。某些選擇是通過施加相對恒定的選擇壓力來執行的,該選擇壓力由于使用到目前為止發現的當前最佳解決方案而相對恒定。與遺傳算法相比,該算法沒有明顯的交叉,但變異因響度和脈沖發射的不同而不同。另一方面,響度和脈沖發射率的變化也可以提供自動變焦能力,因為隨著搜索接近全局最優值,利用變得密集。這實質上是自動將探索階段切換到開發階段。
下面是利用BAT算法對基準函數進行優化得到的圖形和曲線。
上圖是基準函數的參數空間和目標空間曲線,左邊的圖形表示基準函數的參數空間,右邊的圖形表示同一基準函數的目標空間,該曲線顯示了優化過程中目標函數的最小值,最佳適應值接近3。
下面為BA算法的MATLAB源代碼。
// An highlighted block % function [best,fmin,N_iter]=bat(para) clc clear close% 算法迭代參數設置 % tol=10^(-5); % 算法結束誤差 N_iter=100; % 算法運行次數 d=10; % 問題維度 n=20; % 種群數量 A=1; % 初始音量[1,2] r=0.5; % 初始脈沖率[0,1] alpha=0.9; gamma=0.9;% 確定頻率變化范圍 Qmin=0; Qmax=2;% 數據初始化 Q=zeros(n,1); % 頻率值 v=zeros(n,d); % 速度值% 初始化種群 for i=1:nSol(i,:)=randn(1,d);Fitness(i)=Fun(Sol(i,:)); end% 找到當前最優解 [fmin,I]=min(Fitness); best=Sol(I,:);% 開始迭代 % while (fmin>tol) for t=1:N_iterfor i=1:nQ(i)=Qmin+(Qmax-Qmin)*rand;v(i,:)=v(i,:)+(Sol(i,:)-best)*Q(i);S(i,:)=Sol(i,:)+v(i,:);if rand>rS(i,:)=best+0.01*randn(1,d);end% 評估新解的適應度值Fnew=Fun(S(i,:));if Fnew<=Fitness(i) & rand<ASol(i,:)=S(i,:);Fitness(i)=Fnew;end% 更新當前最優解if Fnew<=fminbest=S(i,:);fmin=Fnew;end% 更新音量和脈沖發生率A=alpha*A;r=r*(1-exp(-gamma*t));end% N_iter=N_iter+n;yy(t)=fmin; end% 輸出、顯示結果 % disp(['迭代次數:',num2str(N_iter)]); disp(['最優解:',num2str(best),' 最優值:',num2str(fmin)]); plot(yy) // An highlighted block% 目標函數 function val=Fun(x) % z=(1-u(1))^2+100*(u(2)-u(1)^2)^2+(1-u(3))^2; n = size(x,2); val = 0; for i = 1:nval = val + x(i).^2; end總結
- 上一篇: 转:char*, char[] ,CSt
- 下一篇: 修改Cocos2d-X-3.2中的set